[REPRODUCCIÓN DE MÚSICA] DUSTIN TRAN: Hola. Dustin de mi nombre. Así que voy a presentaré Análisis de datos en R. Sólo un poco sobre mí. Actualmente soy un estudiante graduado en las Ciencias de la Ingeniería y Aplicadas. Yo estudio una intersección de aprendizaje automático y estadísticas Así, el análisis de datos en R es realmente fundamental para lo Lo hago a diario. Y R es especialmente bueno para el análisis de datos porque es muy bueno para la creación de prototipos. Y por lo general, cuando estás haciendo algún tipo de análisis de datos, muchos de los problemas van a cognitiva. Y por lo que sólo quieren tener la muy buena lenguaje que es sólo bueno para hacer funciones incorporadas, en oposición a tener que lidiar con las cosas de bajo nivel. Así que en el principio, yo sólo voy para introducir lo que es R, ¿por qué que desea utilizar, y luego ir por encima en alguna demostración, y sólo tiene que ir de allí. Entonces, ¿qué es R? R es sólo un lenguaje desarrollado para el cálculo estadístico y la visualización. Lo que esto significa es que es un lenguaje muy excelente para cualquier tipo de cosa que se ocupa de incertidumbre o la visualización de datos. Así que tienes todos estos distribuciones de probabilidad. No van a ser funciones incorporadas. También tendrás excelente conspirar paquetes. Python es otro que compiten idioma para datos. Y una cosa que me parece que R es mucho mejor es la visualización. Así que lo que usted verá en la demo como así es sólo un lenguaje muy intuitivo que sólo funciona extremadamente bien. También es libre y de código abierto, como es otro buen lenguaje supongo. Y aquí, un montón de poco palabras clave lanzado en usted. Es dinámico, es decir, si tiene una tipo específico asignado a un objeto de lo que sólo va a cambiar sobre la marcha. Es perezoso, así que es inteligente acerca de cómo lo hace cálculos. Funcionales, lo que realmente puede funcionar con sede fuera de funciones, para anything-- cualquier tipo de manipulación que eres haciendo, se basa fuera funciones. Así operadores binarios, por ejemplo, son funciones intrínsecamente justo. Y todo lo que que vas a hacer es va a ejecutar fuera de sí mismo funciones. Y entonces orientado a objetos también. Así que aquí es una parcela XKCD. No sólo porque me siento como XKCD es fundamental para cualquier tipo de presentación, sino porque Siento que esto realmente martillos el punto de que una gran parte del momento en el que usted está haciendo algún tipo de datos análisis, el problema no es tanto la rapidez con que se ejecuta, pero ¿cuánto tiempo se va a le llevará a programar la tarea. Así que aquí es sólo analizar si estrategia a o b es más eficiente. Esto va a ser algo que eres va a tratar mucho con en tipo de lenguajes de bajo nivel donde usted está tratando con faltas seg, asignación de memoria, inicializaciones, incluso haciendo las funciones incorporadas. Y esto es manejado muy, muy elegante en R. Así que para martillar esta punto, el mayor cuello de botella va a ser cognitivo. Así, el análisis de datos es un problema muy difícil. Ya sea que usted está haciendo aprendizaje automático o eres haciendo sólo una especie de exploración de datos básicos, usted no quiere tener a tomar un documento y luego compilar algo cada vez que quiere ver lo que una columna se parece, lo particular, las entradas en una matriz parece. Así que sólo quiero tener alguna de las interfaces realmente agradable puede ejecutar una función simple que los índices a lo desea y sólo ejecuta desde allí. Y necesitas dominio lenguajes específicos para ello. Y R realmente le ayudará a definir el problema y resolverlo de esta manera. Así que aquí es una muestra de programación trama popularidad del R como se ha ido con el tiempo. Así como usted puede ver, como 2013 o por lo que sólo volado enormemente. Y esto ha sido sólo por eso gran tendencia en la industria de la tecnología datos sobre grandes. Además, no sólo la tecnología industria, pero en realidad cualquier que- industria porque muchas de las industrias son una especie de fundamental tratando de resolver estos problemas. Y por lo general, se puede tener un poco de buena forma de medir estos problemas o incluso la definición de ellos o resolverlos utilizando los datos. Así que creo que en este momento R es el 11 más popular lenguaje de TIOBE y ha estado creciendo desde entonces. Así que aquí está un poco más características de R. Tiene un enorme número de paquetes y por todas estas cosas diferentes. Así que cada vez que tenga un cierto problema, la mayoría el tiempo de R tendrá esa función para usted. Así que si usted quiere construir una especie de máquina algoritmo de aprendizaje llamado Random Forest o árboles de decisión, o incluso tratando de tomar la media de una función o cualquiera de estas cosas, R tendrá que. Y si lo haces te importa optimización, una cosa que es común es que después de que estés prototipos terminado algún tipo de lenguaje de alto nivel, usted tendrá que tirar en-- Usted acaba de puerto que más del a un lenguaje de bajo nivel. Lo bueno de R es que una vez que estás hecho de prototipos, puede ejecutar C ++, o Fortran, o cualquiera de estos los de nivel inferior directamente en R. Así que esa es una realidad característica fresca sobre R, si realmente se preocupan por el punto de optimización. Y también es muy bueno para visualizaciones web. Así D3.js, por ejemplo, es Supongo otro seminario que presentamos hoy. Y esto es realmente impresionante para haciendo visualizaciones interactivas. Y D3.js supone que tiene algún tipo de datos que se pintarán y R es una gran manera de ser capaz de hacer el análisis de los datos antes de exportarlo a D3.js o simplemente correr Comandos D3.js en sí mismo R, así como todos estos otras bibliotecas también. Así que eso fue sólo la introducción de lo que es R y por las que podría usarlo. Así que espero, tengo usted convencido de algo acerca tratando de ver lo que se siente. Así que voy a seguir adelante y pasar por algunos fundamentos sobre los objetos R y lo que realmente se puede hacer. Así que aquí es sólo una montón de opciones matemáticas. Así que dices you're-- desea construir mismo idioma y lo que desea tener un montón de diferentes herramientas. Cualquier tipo de operación que usted piensa que le queremos es más o menos va a estar en R. Así que aquí es 2 más 2. Aquí es 2 veces pi. R tiene un montón de constantes integradas que va a utilizar con frecuencia como pi, e. Y entonces, aquí es 7 más runif, por lo runif de 1. Esta es una función que es genera uno aleatoria uniforme de 0 a 1. Y luego está 3 a la potencia de 4. Hay raíces cuadradas. Hay registro. Así que ingrese hará de base exponencial por sí mismo. Y luego, si se especifica una base, a continuación, usted puede hacer lo base que desee. Y entonces aquí hay algunos otros comandos. Así que tienes 23 mod 2. Entonces usted tiene el resto. Entonces usted tiene científica notación si también querer hacer más justo y las cosas más complicadas. Así que aquí está la asignación. Asignaciones tan típicos en R se realiza con una flecha por lo que es menos y luego el guión. Así que aquí estoy asignando 3 al val variable. Y luego estoy imprimiendo val y luego imprime tres. Por defecto en I intérprete, que imprimirá las cosas para usted por lo que no tiene que especificar imprimir un val cualquier momento que desee imprimir algo. Usted sólo puede hacer val y entonces va a hacer eso por usted. Además, se puede usar es igual técnicamente como un operador de asignación. Hay sutilezas ligeras entre el uso de la flecha operador y los iguales operador de las asignaciones. Mayormente por convención, todo el mundo se acaba de utilizar el operador flecha. Y aquí, estoy asignando este notación oblicua llama 1 de colon 6. Esto genera un vector de 1 a 6. Y esto realmente agradable porque entonces que acaba de asignar el vector de val y que funciona por sí mismo. Así que esto ya está pasando de un single-- un dato muy intuitivo estructura de sólo un doble de algún tipo de tipo en un vector y que recogerá todos los valores escalares para usted. Así que después de pasar de escalar, que tener objetos R y este es un vector. Un vector es cualquier tipo de colección del mismo tipo. Así que aquí hay un montón de vectores. Así que esto es numérico. Numérico es manera de decir el doble de R. Y así, de forma predeterminada, cualquier número será un doble. Así que si usted tiene c de 1.1, 3, 5.7 negativo, el c es una función. Este concatena los tres números en un vector. Y esto va ser: lo que si nota 3 por sí mismo, que normalmente se asume que esto es como un entero, sino porque todos los vectores son del mismo tipo, Este es un vector de dobles o numérico en este caso. RNorm es una función que genera variables-- normal estándar o valores normales estándar. Y estoy especificando dos de ellos. Así que estoy haciendo RNorm 2, la asignación que para desarrolladores, y luego estoy imprimiendo desarrolladores. Así que estos son sólo dos valores normales aleatorias. Y luego intercepciones si lo hace usted se preocupa por números enteros. Así que esto es sólo acerca de la memoria asignación y ahorro de tamaño de la memoria. Así que tendría que añadir sus números de la capital L. En general, este es Notación histórico de R para algo llamado entero largo. Así que la mayoría de las veces, se le ser tratar con dobles. Y si alguna vez lo hará más tarde en optimizar el código, usted puede añadir estos L's después o durante ella si eres como premonitoria de lo que vas a hacer estas variables. Así que aquí es un vector de caracteres. Así que, de nuevo, estoy concatenando tres cuerdas esta vez. Observe que las cadenas dobles y cuerdas sueltas son los mismos en R. Así que tengo arturo y de marvin etc. cuando estoy imprimirlo, todos ellos van a mostrar cuerdas dobles. Y si también desea incluir la cadena doble o individual en sus personajes, entonces se puede o bien alternar sus cuerdas. Así marvin de la segundo elemento, esto es va a show-- usted sólo hay cuerdas dobles y luego una sola cadena por lo que este es alterna. De lo contrario, si desea utilizar un doble operador de cadena en una doble cadena cuando usted está declarando que, a continuación, sólo tiene que utilizar el operador de escape. Así lo hace la doble cadena de barra invertida. Y, por último, también tener vectores lógicos. Así logical-- tan TRUE y lo falso, y son va a ser mayúsculas. Y entonces, una vez más, estoy concatenando y luego ellos asignando a Bools. Así Bools va a mostrar usted TRUE, FALSE y TRUE. Así que aquí está la indexación vectorizado. Así que, en principio, yo Estoy tomando un function-- esto se llama un sequence-- secuencia de 2 a 12. Y yo estoy tomando una secuencia por 2. Así que va a hacer 2, 4, 6, 8, 10 y 12. Y luego, estoy de indexación para obtener el tercer elemento. Así que una cosa a tener en cuenta es que los índices de R a partir del 1. Así vals 3 va a dar que el tercer elemento. Esta es una especie de diferente de otros idiomas en los que se inicia desde cero. Así que en C o C ++, por ejemplo, usted es va a conseguir el cuarto elemento. Y aquí está el vals de 3 a 5. Así que una cosa que es realmente genial es que usted puede generar variables temporales dentro y luego sólo tiene que utilizar sobre la marcha. Así que aquí es de 3 a 5. Así que estoy generando un vector 3, 4, y 5 y luego Estoy indexación de conseguir el tercero, cuarto, y el quinto elemento. Así mismo modo, puede abstracta que esto sólo lo hacen cualquier tipo de un vector que te da la indexación. Así que aquí está el vals y luego el primero, tercero y sexto elementos. Y luego, si quieres hacer un complemento, por lo que acaba de hacer el signo menos después y que va a te dará todo lo que no es el primera, tercera, sexta o elemento. Así que este será 4, 8, y 10. Y si usted quiere conseguir aún más avanzada, puede concatenar vectores de Boole. Así que este índice se va a dar este vector booleano de longitud 6. Así representante TRUE coma 3. Esto se repetirá VERDADEROS tres veces. Así que esto te dará TRUE, TRUE, TRUE vector. rep FALSO 4-- esto se va a dar un vector de FALSO, FALSO, FALSO, FALSO. Y entonces c va a concatenar esos dos Booleans juntos. Así que vas a conseguir tres Verdaderos y luego cuatro FALSEs. Así que cuando usted vals índice, eres va a obtener el TRUE TRUE, TRUE,. Así que va a decir que sí, Quiero que esos tres elementos. Y luego FALSO, FALSO, FALSO, FALSO va decir que no, no quiero esos elementos por lo que no va a devolverlos. Y supongo que en realidad hay un error tipográfico aquí porque esto ya es decir repetición TRUE 3 y repetir FALSO 4, y técnicamente, que sólo tienen seis elementos para repiten FALSE, que debería ser repetida FALSO 3. Creo que R es también lo suficientemente inteligente como que si sólo especifica 4 aquí, entonces que ni siquiera el error fuera. Se acaba de darle este valor. Así que sólo voy a ignorar ese cuarto FALSO. Así que aquí está la asignación vectorizado. Así set.seed-- esto sólo establece el semilla para números pseudoaleatorios. Así que estoy estableciendo que la semilla 42, lo que significa que si genero tres aleatoria normal valores y, a continuación, si run set.seed por su cuenta equipo con el mismo valor de 42, entonces usted también consigue el mismos tres normales aleatorias. Así que esto es realmente bueno para la reproducibilidad. Por lo general, cuando estás haciendo algo de tipo de análisis científico, que se quiere establecer la semilla. De esta forma otros científicos pueden simplemente reproducir exactamente el mismo código que has hecho porque van a tener la exacta mismas variables aleatorias que-- o al azar valores que ha tomado hacia fuera también. Y así, la asignación vectorizada aquí está mostrando el vals 1-2. Por lo tanto, toma los dos primeros elementos de vals y luego los asigna a 0. Y luego, también puede simplemente hacer lo algo similar con los Booleanos. Así vals no es igual a 0-- esta voluntad darle un FALSO vector, FALSE, TRUE en este caso. Y luego, que va a decir nada de los índices que fuera cierto, entonces va a asignar esa a 5. Por lo tanto, toma el tercer elemento aquí y luego lo asigna a 5. Y esto es realmente agradable en comparación con los lenguajes de bajo nivel donde tienes que usar los bucles hacer todas estas cosas vectorizada porque solo es muy intuitivo y es un solo de una sola línea. Y lo que es bueno de notación vectorizada es que en R, estos son una especie de incorporado para que estén casi tan rápido como hacer en un lenguaje de bajo nivel que en vez de hacer un bucle en R y luego tener que hacer la propia indexación dinámica. Y que va a ser más lento que hacer este tipo de cosas vectorizada donde puede hacerlo en paralelo, donde lo está haciendo en el roscado básicamente. Así que aquí está vectorizado operaciones. Así que estoy generando un valor de 1 a 3, la asignación de que a vec1, 3 a 5, vec2, sumándolos. Las agrega componentes sabia lo es 1 más 3, 2 plus 4, y así sucesivamente. vec1 veces vec2. Esto multiplica los dos valores de los componentes sabio. Así que es 1 Tiempos 3, 2 veces 4, y luego 3 veces 5. Y luego, de manera similar se puede también hacer comparisons-- comparaciones lógicas. Así que es FALSO VERDADERO FALSO en este caso porque 1 no es mayor que 3, 2 no es mayor que 4. Esto es, supongo, otro error tipográfico, 3 definitivamente no es superior a 5. Sí. Y lo que sólo puede hacer todo estas operaciones simples porque su heredado de los propios clases. Así que eso fue sólo el vector. Y eso es una especie de la más fundamental R objeto porque dado un vector, usted puede construir objetos más avanzados. Así que aquí está una matriz. Esta es esencialmente la abstracción de lo que es en sí misma una matriz. Así que en este caso, es tres diferentes vectores, donde cada uno es una columna, o se puede considerar que ya que cada uno es una fila. Así que estoy almacenar una matriz de 1 a 9 y luego estoy especificando 3 filas. Así 1-9 le dará un vector 1, 2, 3, 4, 5, 6, y todo el camino a 9. Una cosa a tener también en cuenta es que Tiendas R valores en formato de columna principal. Así, en otras palabras, cuando ves 1 a 9, que va a almacenar ellos-- que va a ser 1, 2, 3 en la primera columna, y luego que va a hacer 4, 5, 6 en la segunda columna, y luego 7, 8, 9 en la tercera columna. Y aquí están algunos otros funciones comunes que se pueden utilizar. Así tenue estera, esto le dará las dimensiones de la matriz. Se te va a volver un vector de la dimensión. Así, en este caso, porque nuestra matriz es de 3 por 3, que va a darle una vector numérico que hay 3 3. Y aquí se acaba mostrando la multiplicación de matrices. Así que por lo general, si sólo hacemos asterisk-- tan estera asterisco mat-- esto va a ser operación de componente sabia o lo que se llama el producto de Hadamard. Así que va a hacer cada uno elemento componente se refiere. Sin embargo, si quieres multiplication-- matriz por lo que la multiplicación de los primeros tiempos de fila primera columna de la segunda matriz de y así en-- usarías esta operación por ciento. Y t de estera es sólo una operación de transposición. Así que estoy diciendo tomar la transpuesta en la matriz, se multiplica por la matriz sí mismo. Y luego se va a volverá a vosotros otra 3 por 3, que muestra la matriz el producto que te gustaría. Y por lo que fue la matriz. Esto es lo que se llama una trama de datos. Una trama de datos que se pueda imaginar como una matriz, pero cada propia columna va a ser de un tipo diferente. Entonces, ¿qué es realmente bueno de datos marcos es que en el análisis de datos en sí, vas a tener todo esto datos heterogéneos y todo esto realmente cosas sucias en la que cada una de las columnas por sí mismos pueden ser de diferentes tipos. Así que aquí estoy diciendo a crear un trama de datos, hacer enteros de 1 a 3, y luego también tener un vector de caracteres. Así que puede indexar a través cada una de estas columnas y luego voy a conseguir los propios valores. Y también se puede hacer algún tipo de operaciones en tramas de datos. Y la mayoría de las veces cuando estás hacer análisis de datos o algún tipo de procesamiento previo, podrás trabajar con estas estructuras de datos donde cada columna se va a ser de un tipo diferente. Por último, por lo que estos son esencialmente sólo los cuatro objetos esenciales en Lista R. se acaba de recoger cualquier otros objetos que te quieren. Por lo tanto, almacenará esta en uno variable que se puede acceder fácilmente. Así que aquí, estoy tomando una lista. Estoy diciendo cosas es igual a 3. Así que voy a tener un elemento en la lista, y esto se llama materia, y que va a tener el valor 3. También puedo crear una matriz. Así que este es 1 a 4 y la fila final es igual a 2, por lo que un 2 por 2 matriz. También en la lista y se llama estera. moreStuff, una cadena de caracteres, e incluso otra lista en sí mismo. Así que esta es una lista que es 5 y el oso. Por lo tanto, tiene el valor 5 y tiene el oso cadena de caracteres y es una lista dentro de una lista. Así que usted puede tener estos cosas recursivos donde usted tiene una another-- escriba dentro del tipo. Similarmente, se puede tener una matriz dentro de otra matriz y así sucesivamente. Y la lista es sólo una buena manera de recopilar y agregar todos estos diferentes objetos. Y, por último, aquí se acaba de ayudar en caso esto sólo se había ido muy rápidamente. Así que cada vez que usted está confundido acerca de algún tipo de función, usted puede hacer ayuda de esa función. Así que usted puede hacer matriz ayuda o una matriz de signo de interrogación. Y ayuda y el signo de interrogación son sólo la abreviatura de la misma cosa por lo que son los alias. lm es una función que sólo lo hace un modelo lineal. Pero si sólo tienes idea de lo que obras, simplemente puedes hacer ayuda de lm y que le daré algunos tipo de documentación que se ve como una especie de página de manual en Unix, donde usted tiene una breve descripción de lo que lo hace, también lo son sus argumentos, lo que devuelve, ya sólo consejos sobre cómo para usarlo, y algunos ejemplos también. Así que déjame ir adelante y espectáculo algunos de demostración del uso de R. Aceptar. Así que fui muy rápidamente sólo los datos estructuras y algún tipo de la op-- algunas de las operaciones. He aquí algunas funciones. Así que aquí sólo voy para definir una función. Así que yo también estoy usando operador de asignación aquí, y luego que estoy diciendo La declararemos como una función. Y toma el valor x. Así que esto es cualquier valor que desee y voy a volver x sí mismo. Así que esta es la función identidad. Y lo que es bueno de esto en comparación con otros idiomas y otra de bajo nivel idiomas es que x puede ser de cualquier tipo en sí y que va a regresar ese tipo. Así que usted puede imagine-- así que vamos me acaba de correr así de rápido. Lo siento. Así que una cosa debo mencionar también es que este editor que estoy usando se llama rstudio. Esto es lo que se llama un IDE. Y una cosa que es realmente bueno de esto es que incorpora una gran cantidad de la cosas que quieren hacer en R por sí mismo sólo muy intuitiva. Así que aquí es una consola de intérprete. Así mismo modo, también se puede obtener esta consola prima sólo por hacer un R. de capital Y esto es exactamente el lo mismo que la consola. Así que sólo puedo hacer Identificación función x, x, x. Y entonces-- y luego que va a estar bien en sí. Así rstudio es grande porque tiene la consola. También tiene los documentos desea ejecutar en. Y entonces tiene algunas variables que se puede ver en los ambientes. Y entonces, si usted tiene hacer parcelas, entonces usted sólo puede verlo aquí, en lugar de la gestión de todos estos diferentes ventanas por sí mismos. En realidad, yo personalmente uso Vim, pero yo sentirse como rstudio es excelente justo para conseguir una buena idea de cómo usar R. Por lo general, cuando usted está tratando de aprender una tarea nueva, usted no desea manejar demasiadas cosas a la vez. Así que R es sólo un rstudio very-- es una muy buena forma de aprender R sin tener que lidiar con todas estas otras cosas. Así que aquí estoy de id corriendo hola. Esto devuelve hola. Identificación del 123. Aquí es un vector de enteros. Así que del mismo modo, porque se puede tomar ninguna algún tipo de valor, usted puede hacer volver Identificación de x de modo que devuelve 1,234 y 5. Y permítanme que muestran que esto es de hecho un número entero. Y del mismo modo, si lo hace la clase Identificación del x, que va a ser un número entero. Y luego, también puede comparar los dos y es verdad. Así que estoy comprobando si Identificación de x es igual es igual ax y notificación que te da dos Verdaderos. Así que esto no está diciendo son los dos objetos idénticos, pero son cada una de las entradas dentro de los vectores idénticos. Aquí es bounded.compare. Así que esto es un poco más complicado en que tiene una si la condición y demás y luego se necesitan dos argumentos a la vez. Así que x es de cualquier tipo. Y yo estoy diciendo esto segundo argumento es una. Esto puede ser cualquier cosa así. Pero por defecto, que va a tomar 5 si no se especifica nada. Así que aquí voy a decir si x es mayor que a. Así que si no especifico una, que dice que si x es mayor que 5, entonces voy a devolver TRUE. otra cosa, voy a devolver FALSE. Así que déjame ir adelante y defino esto. Y ahora voy a ejecutar bounded.compare 3. Así que lo que dice es 3 menos no sea: 3 es mayor que 5. No, no es tan FALSO. Y bounded.compare 3 y voy para comparar usando a es igual a 2. Así que ahora estoy diciendo que sí, ahora me quieren un ser otra cosa. Así que voy a decir una, debe ser 2. Puedo o hacer este tipo de notación o me dicen que a es igual a 2. Esta es una más legible en que cuando estás mirando estos realmente funciones complicadas que tomar arguments-- múltiple y este puede haber docenas oftentimes-- diciendo A es igual a 2, es más fácil de leer para usted para que más adelante en el futuro usted sabrá lo que estás haciendo. Así que en este caso, estoy dicho es 3 superior a 2. Sí lo es. Y del mismo modo, yo sólo puedo quitar esto y decir, es mayor que 3 2 donde a es igual a 2. Y eso también es cierto. ¿Sí? AUDIENCIA: ¿Es usted ejecutar línea por línea? DUSTIN TRAN: Sí, lo soy. Así que lo que estoy haciendo aquí es teniendo este texto document-- y lo bueno de rstudio es que Yo sólo puedo correr un short-- una tecla de acceso directo. Así que estoy haciendo Control-Enter. Y entonces, me estoy tomando el línea en el documento de texto y luego poner en la consola. Así que aquí estoy diciendo, bounded.compare y estoy haciendo Control-X. Así que sólo puedo hacer funcionar aquí también. Y luego que va a tomar la línea y luego lo puso aquí. Y a continuación, de manera similar, que pueda hacer funcionar aquí. Y entonces, sólo mantener la definición las líneas en la consola como eso. Y si también nota el rizado llaves están allí como en sintaxis de C. x-- si la si la condición es también va a utilizar paréntesis y después puede utilizar más. Otra es otra cosa si. Así que esto va a ser x es igual a es igual a, por ejemplo. Y luego voy a devolver algo aquí. Observe que hay dos diferentes cosas aquí que está pasando. Una es que aquí estoy especificando devolver el valor TRUE. Aquí sólo estoy diciendo x. Así R hará normalmente por defecto tomar el último arguments-- o tomar la última línea del código, y eso será lo que se devuelve. Así que aquí se trata de la misma cosa como hacer return x. Y sólo para mostrar. Y luego, va a trabajar como si nada. Así que permítanme seguir con esto. Así lo demás si. Y de verdad, puedo volver cualquier cosa que me gustaría. Así que no tienen ni siquiera para retorno Booleans todo el tiempo, Puedo devuelve otra cosa. Así que yo puedo hacer el oso de retorno. Así que si x es igual a es igual a, que va a volver oso. De lo contrario, va a devolver TRUE. También puedo hacer un vector o realmente nada. Y normalmente en forma estática idiomas mecanografiadas, habría que especificar un tipo aquí. Y note que solo puede ser cualquier cosa. Y R es lo suficientemente inteligente que se acaba de hacer esto y no tendrán ningún problema. Así que permítanme definir esto. Unexpected-- oh lo siento. Debe ser una llave aquí. DE ACUERDO. Fresco. Bien. Así que ahora vamos a comparar 3 y a es igual a 3. Así que debería return-- yeah-- el oso valor. Así que ahora una cosa más general es como ¿qué hay de otras estructuras de datos. Por lo que tiene esta función. Esto va a trabajar en cualquier tipo de valor como 3 o cualquier numérico, en otras palabras, doble. Pero ¿qué pasa con algo así como un vector. Entonces, ¿qué pasa si usted hacer-- así que estoy va a asignar val a, por ejemplo, de 4 a 6. Así que si vuelvo esto, esto es un vector de 4, 5, 6. Ahora vamos a ver qué pasa si lo hago bounded.compare val. Así que esto va a dar 15 1251. Así, en otras palabras, que está diciendo si nos fijamos en esta condición por lo que dice x es menor que una o algo así. Así que este es ligeramente confuso porque ahora usted simplemente no sabe lo que está pasando. Así que supongo que una cosa que es verdad bien acerca tratando de depuración es que usted sólo puede hacer val es mayor que una y ver qué pasa allí. Así val-- a es por defecto 5 así vamos a Do Val superior a 5. Así que este es un FALSO FALSO vector TRUE. Así que ahora, cuando usted está buscando en esto, que va a decir si, y entonces va a darle este es un vector de FALSO VERDADERO FALSO. Así que cuando pase esto en R, R no tiene idea de lo que estás haciendo. Debido a que se espera una sola valor, que es un valor booleano, y ahora usted está dando un vector de booleanos. Así que por defecto, R es sólo va a decir qué diablos, Voy a suponer que usted es Va a tomar el primer elemento aquí. Así que voy a decir-- voy asumir que esto es falso. Así que va a decir no, esto no es correcto. Del mismo modo, se va a val es igual a ser igual a a. No, lo siento 5. Y también va a ser falsa también. Así que va a decir que no, No es verdad, así por lo que es va a devolver este último. Así que esto es ya sea bueno o malo cosa, dependiendo de cómo se lo mire. Porque cuando estás la creación de estas funciones, que en realidad no sabe lo que está pasando. Así que a veces te gustaría un error, o tal vez lo que desea es una advertencia. En este caso, R no hace eso. Así que es realmente hasta en base fuera de lo Crees que el idioma debe hacer en este caso si se pasa en un vector de Booleans cuando estás haciendo un if condición. Así que vamos a decir que usted tenía el original uno con if else return TRUE y ya está va a devolver FALSE. Así que una manera de abstraer esto es para decir que ni siquiera necesitan esta cosa condicional. Otra cosa que puedo hacer es sólo la devolución de los mismos valores. Así que si te fijas, si Do Val es mayor que 5, esto va a devolver un vector FALSO VERDADERO FALSO. Tal vez esto es lo que desear para bounded.compare. Tú quieres volver un vector de Booleans donde se compara cada uno de los valores a sí mismos. Así que sólo puedo hacer bounded.compare función de x, a es igual a 5. Y a continuación, en lugar de hacer esta condición más si, Yo sólo voy a volver x es mayor que 5. Así que si es cierto, entonces que va a devolver TRUE. Y luego, si no lo es, es va a devolver FALSE. Y esto funcionará para cualquiera de estas estructuras. Así que puedo bounded.compare c 1 6 o 9 y luego me voy a decir a es igual a 6, por ejemplo. Y luego se va a le dará el derecho de Boole vector que estás diseñando. Así que esos son sólo funciones y ahora permítanme mostrar algunos elementos visuales interactivos. No creo que realmente tengo Wi-Fi aquí así que me acabo de ir por delante y evita este supongo. Pero una cosa que es genial sin embargo, es que si sólo que desee probar un montón de diferentes comandos de datos, hay un montón de diferentes conjuntos de datos que ya están precargados en R. Así que uno de ellos es llamado el conjunto de datos del iris. Este es uno de los más bien conocida los de aprendizaje automático. Por lo general, acaba de hacer algún tipo de casos de prueba para ver si su código se ejecuta. Así que vamos a comprobar lo iris es. Así que esta cosa va ser una trama de datos. Y que es un poco largo porque Acabo Imprimí iris. Está imprimiendo toda la cosa. Así que tiene todos estos nombres diferentes. Así iris es una colección de flores diferentes. En este caso, se está diciendo que las especies de la misma, todos estos diferentes anchuras y longitudes del sépalo y el pétalo. Y por lo que normalmente, si que desea imprimir iris, por ejemplo, usted no quiere tener que hacer todo esto porque eso puede hacerse cargo de toda la consola. Así que una cosa que es realmente agradable es la función de cabeza. Así que si usted acaba de hacer la cabeza iris, esto le dará las primeras cinco filas o seis supongo. Y entonces bien, sólo puede especificar aquí. Así 20-- esto le dará que las primeras 20 filas. Y yo en realidad era una especie sorprendido de que este me dio seis así que me voy a continuación y comprobar iris-- o la cabeza, lo siento. Y aquí se le dará que la documentación de lo que hace la cabeza de valor. Así que devuelve el primer o la última de un objeto. Y luego voy a mirar a los valores predeterminados. Y luego dice el predeterminado método cabeza x y n es igual a 6 l. Así que esto devuelve los primeros seis elementos. Y del mismo modo, si usted nota aquí, no tiene que especificar n es igual a 6. Por defecto se utiliza seis, supongo. Y entonces, si quiero especificar un cierto valor, entonces puedo ver eso también. Así que eso es algunos comandos simples y aquí hay otra que es sólo-- bien, Yo can-- esto es en realidad un poco más complejo, pero esto acaba de tomar la clase de cada columna del conjunto de datos del iris. Así que esto le mostrará lo que cada uno de ellos columnas son en términos de sus tipos. Así longitud sépalo es numérico, ancho sépalo es numérico. Todos estos valores son sólo numérico porque se puede deducir de estos datos estructurar estos son todo va a numérico. Y la columna de la Especie va a ser un factor. Así que normalmente, se podría pensar que esto es como una cadena de caracteres. Pero si sólo hacemos irisSpecies, y luego me voy a hacer la cabeza 5, y esto va a imprimir los cinco primeros valores. Y a continuación, observe estos niveles. Así que esto es diciendo-- esta es la forma de R de tener las variables categóricas. Así que en lugar de sólo con cadenas de caracteres, tiene niveles especificando cuál de estas cosas son. Así que digamos que irisSpecies 1. Así que lo que quiero hacer aquí es que estoy subconjuntos de esta columna Especies. Así que esto toma la La columna Especies y luego índices para obtener el primer elemento. Así que esto debe darle setosa. Y también te da los niveles aquí. Así que usted puede comparar también esto a la setosa carácter y esto no va es cierto porque uno es de un tipo diferente que el otro. O supongo que es verdad porque R es más inteligente que eso. Y mira esto y después dice, tal vez esto es lo que quieres. Así que va a decir el carácter setosa cadena es la misma como este. Y a continuación, de manera similar, se puede También acaba de agarrar estos como así sucesivamente. Así que eso es sólo una especie de comandos rápidos del conjunto de datos. Así que aquí está un poco de exploración de datos. Así que esto es un poco más involucrado con el análisis de datos. Y esto se toma de algunos bootcamp en I en Berkeley. Así biblioteca extranjera. Así que voy a cargar en un biblioteca que se llama extranjera. Así que esto me va a dar read.dta así asumir que tengo este conjunto de datos. Este se almacena en la corriente directorio de mi consola de trabajo. Así que vamos a ver qué el directorio de trabajo es. Así que aquí está mi directorio de trabajo. Y leer datos de puntos, esta cosa, está diciendo este archivo se encuentra en la carpeta de datos de este directorio de trabajo actual. Y esto no es read.dta un comando predeterminado. Supongo que me lo cargué en ya. IEI asumió cargué esto ya. Pero hasta read.dta no va ser un comando predeterminado. Y es por eso que vas a tener cargar en esta biblioteca package-- este paquete de llama exterior. Y si usted no tiene el paquete, creo extranjero es uno de los más integrados. De lo contrario, también puede hacer install.packages y esto va a instalar el paquete. Y esto le dará R. Uh, no. Y entonces yo sólo voy a dejar de esto porque ya lo tengo. Pero lo que es realmente bueno de R es que la gestión de paquetes sistema es muy elegante. Porque va a almacenar todo muy bien para usted. Así que en este caso, se va a almacenar en, creo, esta biblioteca aquí. Así que cada vez que desee instalar nuevos paquetes, es tan simple como haciendo install.packages y R gestionará todo los paquetes para usted. Así que usted no tiene que hacer algo en Python, donde usted tiene el paquete externo gerentes como el papel Anaconda donde estés doing-- instalar el paquetes externos a Python y luego intenta ejecutar por sí mismo. Así que esta es muy buena manera. Y install.packages requiere internet. Se necesita de un servidor y el repositorio que recoge todas las paquetes se llama CRAN. Y usted puede especificar qué tipo de espejo quiere descargar los paquetes. Así que aquí estoy tomando este conjunto de datos. Lo estoy leyendo en el uso de esta función. Así que déjame ir adelante y hacer eso. Así que vamos a suponer que usted tiene este conjunto de datos y usted no tiene absolutamente ni idea de lo que es. Y esta realidad surge con bastante frecuencia en la industria en el que sólo tiene estos toneladas y toneladas de cosas desordenadas y son increíblemente sin etiqueta. Así que aquí tengo este conjunto de datos y no sé lo que es, así que estoy solo mostrando a comprobarlo. Así que me voy a hacer la cabeza primero. Así que puedo comprobar los primeros seis columnas de lo que este conjunto de datos es. Así que este es el estado, pres04, y luego todos estos diferentes tipo de columnas. Y lo que es interesante aquí, supongo, es que usted asumiría que esto se ve como una especie de elección. Y supongo que sólo desde viendo el archivo nombrar esto es una especie de colección de los datos sobre los candidatos o electores que votó por los presidentes específicos o candidatos presidenciales para las elecciones de 2004. Así que aquí está los valores 1, 2 así que una forma de almacenar los candidatos presidenciales son sus nombres. En este caso, parece que son valores sólo enteros. Así 2004, era Bush frente a Kerry que yo creo. Y ahora, vamos a decir que simplemente no sabe si 1 corresponde a Bush o 2 corresponde a Kerry o y etc., etc., ¿no? Y esto es, sólo para mí, un problema bastante común. Entonces, ¿qué se puede hacer en este caso? Así que vamos a ver todas estas otras cosas. estado, estoy asumiendo este proviene de diferentes estados. PartyID, ingresos. Veamos PartyID. Así que tal vez una cosa que puedes hacer es mirar a cada una de las observaciones que tienen un PartyID del republicano o demócrata o algo así. Así que vamos a ver en qué PartyID es. Así que me voy a tomar dat y luego me voy Para ello el signo de dólar operador que hice anteriormente y esto va a subconjunto a esa columna. Y luego me voy a dirigir esto en 20, sólo para ver cómo se ve. Así que esto es sólo un montón de AN. En otras palabras, usted tiene faltan datos acerca de estos chicos. Pero también se observa este dat PartyID es un factor por lo que este le da diferentes categorías. Así, en otras palabras, PartyID puede tomar Demócrata, republicano, independiente, o algo más. Así que vamos a seguir adelante y de que vamos ver cuál de estos es-- oh, OK. Así que voy al subconjunto a PartyId y luego miran cuáles son Demócrata, por ejemplo. Esto va a darle un booleano, una enorme booleano de Trues y FALSEs. Y ahora, vamos a decir que quiero al subconjunto de estos chicos. Así que esto va a llevar a mi dat y subconjunto a cualquier observaciones tienen iguales PartyId iguales demócrata. Y esto es muy largo porque hay tantos de ellos. Así que ahora, me voy a dirigir esto en 20. Y como te das cuenta, es igual a los iguales es interesante en que eres ya-- usted también está incluida la AN. Así que en este caso, todavía no puede conseguir cualquier información porque ahora tienes AN y lo que desea es ver cuál de los observación corresponde al demócrata y no faltan estos mismos valores. Entonces, ¿cómo deshacerse de estos AN? Así que aquí estoy usando la llave en mi cursor y luego diciendo moverse. Y entonces aquí sólo voy decir is.na datpartyid. Así que esto y ya tendrá dos vectores diferentes booleanas y decir que va a ser VERDADERO y FALSO por ejemplo. Así que va a hacer este componente se refiere. Así que aquí estoy diciendo toma la trama de datos, subconjunto a los que corresponden a Democrat, y eliminar cualquiera de ellos que no son NA. Así que esto debe Voluntad-- darle algo. Veamos is.na. Probemos datpartyid is.na. Y esto debe dar usted-- sorry-- sólo un vector booleano. Y luego, porque es muy largo, Voy a un subconjunto de 20. DE ACUERDO. Así que esto debería funcionar. Y éste también será Verdaderos. Ah, así que mi error aquí es que yo-- yo utilizan C ++ y R indistintamente por lo que hacen este error todo el tiempo. El operador y es en realidad el que usted desea. Usted no quiere usar dos los símbolos de unión, sólo uno solo. DE ACUERDO. Así que vamos a ver. Así que subestablecida a la PartyID donde están demócrata y no están los valores perdidos. Y ahora vamos a ver cuáles votaron. Así que parece que la mayoría de ellos votaron por 1. Así que voy a seguir adelante y decir que es Kerry. Y del mismo modo, se puede También ir a Republicano y es de esperar, esto debe darle 2. Es sólo un montón de diferentes columnas. Y, en efecto, es 2. Así PartyId todo republicano, la mayoría de ellos están votando por 2. Así que parece, sólo al ver esto, Republicano va a ser un very-- o la PartyID va a ser una muy factor importante en la determinación de cuál de los candidatos que están ir a votar. Y esto es obviamente cierto en general. Y esto coincide con su intuición, por supuesto. Así que parece que soy acabando el tiempo lo déjame sólo debería seguir adelante y mostrar algunas imágenes rápidas. Así que aquí hay algo que es ligeramente más complicada con la visualización. Así pues, en este caso, este es un muy simple análisis de simplemente comprobar lo el presidente del '04 es. Así que en este caso, digamos que usted querido responder a esta pregunta. Así que supongamos que queríamos saber la votación comportamiento en las elecciones de presidente 2004 y cómo eso varía según la raza. Así que no sólo es lo que quieres ver el comportamiento de los votantes, pero desea subconjunto de cada raza y especie de resumen que. Y sólo se puede decir por esta notación compleja que esto es una especie de conseguir nebuloso. Así que uno de los más avanzados de I paquetes que también clase de reciente se llama dplyr. Por lo que es esta de aquí. Y ggplot2 ggg-- es sólo un bonito forma de hacer las mejores visualizaciones que el incorporado. Así que voy a cargar estas dos bibliotecas. Y entonces, me voy a ir adelante y ejecutar este comando. Usted sólo puede tratar esto como un cuadro negro. Lo que pasa es que esta tubería operador está pasando en este argumento en aquí. Así que estoy diciendo grupo de dat la raza y el entonces presidente 04. Y luego, todos estos otros comandos están filtrando y luego resumir donde yo estoy haciendo recuento y entonces estoy trazando aquí. Aceptar fresco. Así que vamos a seguir adelante y ver el aspecto que tiene. Entonces, ¿qué está pasando aquí es que yo sólo trazan cada una de las carreras y luego cuáles votaron. Y estos dos diferentes valores corresponden a 2 y 1. Si quieres ser más elegante, también puede Sólo especifique que 2 es Kerry-- o 2 es Bush, y luego 1 es Kerry. Y también se puede tener que en su leyenda. Y también se puede dividir estos gráficos de barras. Porque una cosa es que, si te fijas, esto no es muy fácil de identificar ¿cuál de estos dos valores son más grandes. Así que una cosa que te gustaría hacer es tomar este área azul y acaba de pasar por aquí, así que Podemos comparar estos dos de lado a lado. Y creo que eso es algo que no tienen tiempo para hacerlo en este momento, pero eso es también muy fácil de hacer. Usted puede simplemente mirar en las páginas del manual de ggplot. Así que sólo puedo hacer ggplot como eso y leer en esta página de manual. Así que permítanme rápidamente mostrar algunas cosas interesantes. Vamos a seguir adelante e ir a-- sólo una aplicación de aprendizaje automático. Así que vamos a decir que tenemos estos tres paquetes, así que voy a cargar estos en. Así que esto acaba de imprimir algo de información después cargué en la cosa. Así que yo estoy diciendo esto read.csv, este conjunto de datos, y ahora Voy a seguir adelante y mirar y ver lo que hay dentro de este conjunto de datos. Así que las primeras 20 observaciones. Así que sólo tengo X1, X2 y Y. Por lo tanto, parece como un montón de estos valores se van desde tal vez 20 a 80 o así. Y entonces de manera similar para X2 y luego Y este parece ser etiquetas de 0 y 1. Para comprobar esto, puedo sólo lo hacen los datos de resumen X1. Y entonces de manera similar para todas estas otras columnas. Así resumen es una forma rápida de lo que muestra a los valores rápidos. Oh, lo siento. Éste debe ser Y. Así que en este caso, da la cuantiles, medianas, maxes también. En este caso, dataY, se puede ver que sólo va a ser 0 y 1. También la media está diciendo 0.6, sólo significa que se parece que tengo más que 1s 0s. Así que déjame ir adelante y espectáculo lo que esto parece. Así que sólo voy a graficar esta. Vamos a ver cómo borrar esto. Oh Aceptar. DE ACUERDO. Así que esto es lo que parece. Así que parece que los amarillos especifiqué como 0, y luego rojo especifiqué como 1s. Así que aquí se ve como puntos de etiqueta y se parece que sólo quería un poco de tipo de agrupación en esto. Y permítanme seguir adelante y espectáculo que algunas de estas funciones incorporadas. Así que aquí está lm. Así que esto es sólo tratar para ajustar una recta a esto. Entonces, ¿cuál es la mejor manera que puedo encajar tal línea que será mejor separar este tipo de agrupación. Y lo ideal es que sólo puede ver que yo sólo corro todos estos comandos y luego, voy adelante y añadir la línea. Así que esto parece la mejor conjetura. Se trata de tomar la mejor que minimiza el error en tratar de encajar esta línea. Obviamente, esto parece un poco bueno, pero no es la mejor. Y los modelos lineales, en en general, van a ser realmente grande para la teoría y sólo una especie de los fundamentos básicos de la máquina el aprendizaje. Pero en la práctica, usted va a querer hacer algo más general. Por lo que sólo puede intentar ejecutar algo que se llama una red neural. Estas cosas son cada vez más común. Y simplemente funcionan fantásticamente para grandes conjuntos de datos. Así que en este caso, sólo tener-- vamos a ver-- tenemos nrow. Así nrow es sólo decir el número de filas. Así que en este caso, tiene 100 observaciones. Así que déjame ir adelante y hacer una red neural. Así que esto es realmente agradable porque puedo sólo decir nnet y luego me regresión Y. Así que el Y es que la columna. Y a continuación, en la regresión las otras dos variables. Así que este es más corto notación para X1 y X2. Así que vamos a seguir adelante y ejecutar este. Oh, lo siento. Necesito funcionar todo esto. Y esto es sólo la impresión de notación para la rapidez o no rápidamente convergido. Así que parece que no convergen. Así que déjame ir adelante y de impresión lo que esto parece. Consulte aquí está la imagen y aquí es un nivel que muestra lo bien que encaja. Y esto es sólo-- se puede ver esto que esto es muy, muy agradable. Incluso podría ser sobreajuste, pero usted puede también explicar esto con otra técnicas como la validación cruzada. Y estos también se construyen en R. Y permítanme mostrarles apoyo de máquinas de vectores. Esta es otra realidad común técnica de aprendizaje automático. Es muy similar a los modelos lineales, pero utiliza lo que se llama un método kernel. Y vamos a ver lo bien que lo hace. Así que este es muy similar a cómo así una red neuronal realiza, pero es mucho más suave. Y esto se basa apagado de qué-- cómo el trabajo SVM. Así que esto es sólo una muy visión rápida general de las funciones incorporadas que puede hacer y también algunos de la exploración de los datos. Así que permítanme seguir adelante y volver a las diapositivas. Así que, obviamente, esto es no muy amplia. Y esto es realmente sólo un teaser que le muestra lo que puede hacer realmente en R. Así que si usted acaba de querer para aprender más, aquí son un montón de diferentes recursos. Así que si eres aficionado a los libros de texto o eres simplemente aficionado a leer cosas en línea, entonces este es un fantástico uno por Hadley Wickham, quien también creó todos estos paquetes muy interesantes. Si eres aficionado a los vídeos, a continuación, Berkeley tiene una impresionante bootcamp eso es several-- eso es un poco largo. Y que le enseñará casi todo lo que usted desea saber sobre R. Y del mismo modo, no hay Codeacademy y todo esto otra clase sitios web de interactivos. Ellos también están recibiendo common-- más y más común. Así que este es muy similar a Codeacademy. Y, por último, si sólo quiero Comunidad y ayudar, estos son un montón de cosas que usted puede ir. Obviamente, todavía utilizar listas de distribución, sólo como casi todos los demás comunidad lenguaje de programación. Y #rstats, esto es nuestra comunidad de Twitter. Eso es en realidad bastante común. Y entonces el usuario! Es sólo nuestra conferencia. Y luego, por supuesto, usted puede utilizar todas estas otras cosas de preguntas y respuestas, como desbordamiento de la pila, Google, y luego GitHub. Debido a que la mayoría de estos paquetes y gran parte de la comunidad se centrará en el desarrollo de código porque es de código abierto. Y es realmente agradable en GitHub. Y, por último, puede ponerse en contacto conmigo si sólo tienes alguna pregunta rápidos. Así que usted me puede encontrar en Twitter aquí, mi sitio web, y sólo mi correo electrónico. Así que espero, que era algo-- sólo un teaser corto de lo que R es realmente capaz de hacer. Y es de esperar, que acaba de echa un vistazo a estos tres enlaces y ver lo que puede hacer más. Y supongo que eso es sólo sobre él. Gracias. [Aplausos]