[Música tocando] DUSTIN TRAN: Hi. Dustin do meu nome. Então, eu vou estar apresentando Análise de dados em R. Apenas um pouco sobre mim mesmo. Eu sou atualmente um estudante de pós-graduação em as Ciências da Engenharia e aplicada. Eu estudo um cruzamento de aprendizado de máquina e estatísticas Análise de dados de modo em que R é realmente fundamental para o Eu faço em uma base diária. E R é especialmente bom para a análise de dados porque é muito bom para prototipagem. E, normalmente, quando você está fazendo algum tipo de análise de dados, um monte de problemas vão cognitiva. E assim, você só quer ter alguns realmente boa linguagem que é apenas bom para fazer built-in funções, em oposição a ter de lidar com as coisas de baixo nível. Então, no início, eu só vou para introduzir o que é de R, por que você quiser usá-lo, e em seguida, passar por cima em algum demo, e apenas ir a partir daí. Então, o que é de R? R é apenas uma linguagem desenvolvida para computação estatística e visualização. Então, o que isto significa é que é uma muito excelente língua para todo o tipo de coisa que lida com incerteza ou visualização de dados. Então você tem tudo isso distribuições de probabilidade. Não vão ser built-in funções. Você também terá excelente plotagem pacotes. Python é outro concorrente idioma para dados. E uma coisa que eu acho que R é muito melhor a é a visualização. Então, o que você vai ver na demo como bem é apenas uma linguagem muito intuitiva que simplesmente funciona muito bem. Também é livre e de código aberto, como é outra boa linguagem, eu acho. E aqui, um monte de apenas palavras-chave jogado em você. É dinâmico, ou seja, se você tem um tipo específico atribuído a um objeto que ele só vai mudá-lo on the fly. É preguiçoso, por isso é inteligente sobre como o faz cálculos. Funcional que significa que pode realmente funcionar baseado fora de funções tão anything-- qualquer tipo de manipulação que você é fazendo, ele será baseado funções. Assim, os operadores binários, por exemplo, são funções apenas inerentemente. E tudo o que você vai fazer é vai ser correr em si funções. E então orientada a objetos também. Então aqui está uma trama XKCD. Não só porque eu sinto que XKCD é fundamental para qualquer tipo de apresentação, mas porque Eu sinto que isso realmente martela o ponto em que uma grande parte do momento em que você está fazendo algum tipo de dados análise, o problema não está tanto o quão rápido ele é executado, mas quanto tempo isso vai levá-lo para programar a tarefa. Então, aqui é apenas analisar se estratégia a ou b é mais eficiente. Este vai ser algo que você é vai lidar muito com em tipo de linguagens de baixo nível onde você está lidando com falhas seg, alocação de memória, initializations, mesmo fazendo as funções embutidas. E este material está tudo tratado muito, muito elegantemente em R. Então, só para martelar este ponto, o maior gargalo vai ser cognitivo. Assim, a análise de dados é um problema muito difícil. Se você está fazendo aprendizado de máquina ou se você estiver fazendo apenas algum tipo de exploração de dados de base, você não quer ter para levar um documento e depois compilar algo cada vez que você quero ver o que a coluna parece, o que em particular entradas em uma matriz parece. Então você só quer ter alguma interface muito legal você pode executar uma função simples que os índices para o que quer que você gostaria e basta executá-lo de lá. E você precisa de domínio linguagens específicas para isso. E R realmente vai ajudá-lo a definir o problema e resolvê-lo deste modo. Então aqui vai uma que mostra a programação enredo popularidade de R como ele foi embora com o tempo. Então, como você pode ver, como 2013 ou por isso só explodido tremendamente. E isso tem sido só por causa disso grande tendência na indústria de tecnologia sobre big data. Além disso, não apenas a tecnologia indústria, mas realmente qualquer isso-- indústria, porque muitas das indústrias são uma espécie de fundamental para tentar resolver estes problemas. E, normalmente, você pode ter algum bom forma de medir esses problemas ou até mesmo defini-los ou resolvê-los usando dados. Então, eu acho que agora é o 11º R língua mais popular na TIOBE e tem sido crescente desde então. Então, aqui está um pouco mais características de R. Tem um enorme número de pacotes e por todas estas coisas diferentes. Então, quando você tem um determinado problema, a maioria o tempo de R terá essa função para você. Então, se você quiser construir algum tipo de máquina algoritmo de aprendizado chamado Aleatória Floresta ou Árvores de Decisão, ou mesmo tentando tirar a média de uma função ou algum deste material, R vai ter isso. E se você fizer você se preocupa com otimização, uma coisa que é comum é que depois que você fez prototipagem algum tipo de linguagem de alto nível, você vai jogar esse em-- Você só vai porto que mais de a alguma linguagem de baixo nível. O que é bom sobre R é que uma vez que você é prototipagem feito isso, você pode executar C ++, ou Fortran, ou qualquer um desses os de nível mais baixo diretamente na R. Então essa é uma verdade recurso interessante sobre R, se você realmente se preocupam com o ponto de otimização. E isso também é muito bom para visualizações na web. Assim D3.js, por exemplo, é Eu acho que um outro seminário que apresentamos hoje. E isso é realmente impressionante para fazendo visualizações interativas. E D3.js pressupõe que você tenha algum tipo de dados a ser plotados e R é uma ótima maneira de ser capaz de fazer a análise dos dados antes de exportá-lo sobre a D3.js ou mesmo apenas correr Comandos D3.js em si mesmo R, bem como todos estes outras bibliotecas bem. Então essa foi apenas a introdução de o que é R e por que você pode usá-lo. Portanto, esperamos que, eu tenho Você está convencido algo sobre apenas tentando ver o que é. Então, eu estou indo para ir em frente e passar por alguns fundamentos sobre os objetos R eo que você pode realmente fazer. Então, aqui é apenas um bando de comandos de matemática. Então diga you're-- você quer construir mesmo idioma e você só quer para ter um monte de ferramentas diferentes. Qualquer tipo de operação você acha que quero é praticamente vai estar em R. Então aqui é 2 mais 2. Aqui é 2 vezes pi. R tem um monte de constantes internas que você vai usar com freqüência como pi, e. E então, aqui está 7 mais runif, assim runif de 1. Esta é uma função que é gera um uniforme aleatória de 0 a 1. E depois há a 3 para o poder do 4. Há raízes quadradas. Há log. Então log vai fazer de base exponencial por si só. E então, se você especificar uma base, em seguida, você pode fazer o que você quer de base. E então aqui estão alguns outros comandos. Então você tem 23 mod 2. Então você tem o restante. Então você tem científica notação se você também quero fazer apenas mais e coisas mais complicadas. Então aqui está a atribuição. Então atribuições típicas em R é feito com uma seta por isso é menos do que e, em seguida, o hífen. Então aqui eu só estou atribuindo 3 para o val variável. E então eu estou imprimindo val e então ela mostra três. Por padrão em R intérprete, ele irá imprimir as coisas para você assim você não tem que especificar imprimir um val qualquer momento que você quiser imprimir algo. Você pode apenas fazer val e em seguida, ele vai fazer isso por você. Além disso, você pode usar tecnicamente iguais como um operador de atribuição. Há pequenas sutilezas entre usar a seta operador e os iguais operador de atribuições. Principalmente por convenção, todos só vai usar o operador seta. E aqui, eu estou atribuindo este notação oblíqua chamado 1 cólon 6. Isto gera um vector de 1 a 6. E isso muito bom porque, em seguida, você acabou de atribuir o vector para val e que funciona por si só. Então, isso já está acontecendo a partir de um single-- um dado muito intuitivo estrutura de apenas um casal de algum tipo de tipo em um vetor e que irá recolher todos os valores escalares para você. Então, depois de passar de escalar, você ter objectos R e este é um vector. Um vetor é qualquer tipo de recolha do mesmo tipo. Então, aqui estão um monte de vetores. Portanto, este é numérico. Numérico é o caminho de R de dizer dupla. E assim, por padrão, qualquer número será um duplo. Então se você tem c de 1,1, 3, negativa de 5,7, o c é uma função. Este encadeia os três números num vector. E isso vai ser-- então se você notar 3, por si só, normalmente você assumiria que isso é como um número inteiro, mas porque todos os vectores são do mesmo tipo, Este é um vetor de duplas ou numérica neste caso. rnorm é uma função que gera variables-- normal padrão ou valores normal padrão. E eu estou especificando dois deles. Então, eu estou fazendo rnorm 2, atribuindo isso a devs, e então eu estou imprimindo devs. Então, esses são apenas dois valores normais aleatórios. E então se você fizer INTS você se preocupa com números inteiros. Portanto, esta é apenas sobre a memória alocação e salvar o tamanho da memória. Então você teria que acrescentar seus números pelo capital L. Em geral, este é Notação histórico de R para algo chamado inteiro longo. Assim, a maior parte do tempo, você vai estar lidando com duplos. E se você nunca será mais tarde em otimizar seu código, você pode simplesmente adicionar estes L's depois ou durante a mesma se você é como premonitório sobre o que você vai fazer essas variáveis. Então, aqui é um vetor de caracteres. Então, novamente, eu estou concatenando três cordas desta vez. Observe que cordas duplas e cordas simples são as mesmas em R. Então, eu tenho arthur e Marvin e assim quando estou imprimi-los, todos eles vão mostrar cordas duplas. E se você também quer incluir a seqüência de casal ou solteiro em seus personagens, então você pode ou alternar suas cordas. Então Marvin para o segundo elemento, este é vai show-- você só tem cordas duplas e, em seguida, uma única seqüência de modo que este é alternada. Caso contrário, se você quiser usar um duplo operador de cadeia em um cordão duplo quando você está declarando-o, em seguida, basta usar o operador de escape. Então você faz a dupla cadeia barra invertida. E, finalmente, nós também ter vectores lógicos. Então logical-- tão verdadeiro e FALSE, e eles são vai ser todas as letras maiúsculas. E então, mais uma vez, eu estou concatenando -los e, em seguida, atribuindo-lhes a bools. Então bools vai mostrar você TRUE, FALSE e TRUE. Então aqui está a indexação vectorized. Assim, no início, eu estou tomando um function-- isso é chamado de sequence-- sequência de 2 a 12. E eu estou tendo uma sequência por 2. Por isso, vai fazer 2, 4, 6, 8, 10 e 12. E então, eu sou a indexação para obter o terceiro elemento. Então, uma coisa a ter em mente é de que R índices a partir de 1. Então vals 3 vai dar você o terceiro elemento. Este é tipo de diferente de outros línguas em que começa do zero. Assim, em C ou C ++, por exemplo, você está indo para obter o quarto elemento. E aqui está vals 3-5. Então, uma coisa que é muito legal é que você pode gerar variáveis ​​temporárias dentro e depois é só usá-los em tempo real. Então aqui está 3-5. Então, eu estou gerando um vector 3, 4, e 5 e, em seguida Estou indexação para obter o terceiro, quarto e quinto elementos. Então, da mesma forma, você pode Resumo Este apenas fazer qualquer tipo de um vector que lhe dá a indexação. Então aqui está vals e depois o primeiro, terceiro e sexto elementos. E então, se você quiser para fazer um complemento, então você apenas fazer o menos depois e que vai dar-lhe tudo o que não é o primeiro, terceiro, sexto ou elemento. Portanto, este será de 4, 8 e 10. E se você quiser começar ainda mais avançado, você pode concatenar vectores booleanas. Portanto, este índice está indo dar-lhe este vetor booleano de comprimento 6. Então rep VERDADEIRO vírgula 3. Isto irá repetir VERDADEIROS três vezes. Então, isso vai dar-lhe uma vector TRUE, TRUE, TRUE. rep FALSE 4-- isso vai dar-lhe um vetor de FALSE, FALSE, FALSE, FALSE. E, em seguida, c vai concatenar esses dois Booleans juntos. Então, você está indo para obter três TRUEs e, em seguida, quatro FALSEs. De modo que quando você vals índice, você é indo para obter a verdade, verdade, TRUE. Então, isso vai dizer que sim, Quero esses três elementos. E então FALSE, FALSE, FALSE, FALSE vai dizer não, eu não quero que esses elementos por isso não vai devolvê-los. E eu acho que não há, na verdade, um erro de digitação aqui porque este está dizendo repeat VERDADEIRO 3 e repetir FALSE 4, e tecnicamente, você só tem seis elementos para repetir FALSE, ele deve ser repeat FALSE 3. Eu acho que R também é inteligente o suficiente, tais que, se você especificar apenas 4 aqui, então ele não vai mesmo erro fora. Ele vai apenas dar-lhe esse valor. Então, ele vai simplesmente ignorar essa quarta FALSE. Então aqui está a atribuição vectorized. Então set.seed-- isso só define o semente para números pseudo-aleatórios. Então, eu estou definindo a semente 42, o que significa que se eu gerar três aleatória normal valores e, em seguida, se você executar set.seed em seu próprio país computador usando o mesmo valor 42, em seguida, você também terá a mesmos três normais aleatórias. Então, isso é muito bom para a reprodutibilidade. Normalmente, quando você está fazendo alguma tipo de análise científica, você gostaria de definir a semente. Dessa forma, outros cientistas pode apenas reproduzir exatamente o mesmo código que você tem feito porque eles terão a exata mesmas variáveis ​​aleatórias isso-- ou aleatório valores que você tirou para fora também. E assim a atribuição vectorized aqui está mostrando os vals 1-2. Por isso, leva os dois primeiros elementos de vals e atribui-los a 0. E então, você também pode simplesmente fazer o coisa semelhante com os Booleans. Então vals não é igual a 0-- esta vontade dar-lhe uma falsa vector, FALSE, TRUE neste caso. E, em seguida, ele vai dizer qualquer desses índices isso fosse verdade, em seguida, ele vai atribuir essa a 5. Por isso, leva o terceiro elemento aqui e, em seguida, atribui a ele a 5. E isso é muito bom em comparação com linguagens de baixo nível onde você tem que usar para loops para fazer todas essas coisas vectorized porque é apenas muito intuitivo e é uma única one-liner. E o que é grande sobre notação vectorized é que no R, estes são uma espécie de built-in de modo que eles são quase tão rápido como fazer em uma linguagem de baixo nível como oposição a fazer um loop em R e depois ter que fazer o próprio indexação dinâmica. E isso vai ser mais lento que fazer esse tipo de coisa vectorized onde ele pode fazê-lo em paralelo, onde é fazê-lo em enfiar basicamente. Então, aqui está vetorizado operações. Então, eu estou gerando um valor de 1 a 3, atribuindo que a vec1, 3 a 5, vec2, adicionando-os juntos. Acrescenta-los em componentes tão sábio é 1 + 3, 2 + 4, e assim por diante. vec1 vezes vec2. Este multiplica os dois valoriza a componente sábio. Portanto, é um vezes 3, 2 vezes 4, e depois 3 vezes 5. E, em seguida, da mesma forma que você pode também fazer comparisons-- comparações lógicas. Então é FALSE FALSE verdade neste caso porque 1 não é maior do que 3, 2 não é superior a 4. Isto é, eu acho, um outro erro de digitação, 3 definitivamente não é superior a 5. Sim. E assim você pode simplesmente fazer tudo estas operações simples porque a sua herdado a partir das próprias classes. Então, isso foi apenas o vetor. E isso é uma espécie de mais fundamental R objecto porque dado um vector, você pode construir objetos mais avançados. Então aqui está uma matriz. Esta é essencialmente a abstração de que é uma matriz em si. Portanto, neste caso, é de três diferentes vetores, onde cada um é uma coluna, ou você pode considerá-lo como cada um é uma linha. Então, eu estou armazenando uma matriz de 1 a 9 e, em seguida, eu estou especificando três linhas. Então 1-9 lhe dará um vector 1, 2, 3, 4, 5, 6, e todo o caminho até 9. Um aspecto a ter também em mente é que R armazena valores em formato de coluna-major. Portanto, em outras palavras, quando você vê um a 9, que vai armazenar eles-- que vai ser 1, 2, 3, na primeira coluna, e, em seguida, ele vai fazer 4, 5, 6 na segunda coluna, e, em seguida, 7, 8, 9, na terceira coluna. E aqui estão algumas outras funções comuns que você pode usar. Então dim esteira, isso vai lhe dar as dimensões da matriz. Vai fazê-lo retornar um vector de dimensão. Portanto, neste caso, porque nossa matriz é de 3 por 3, ele vai dar-lhe uma vetor numérico que é 3 3. E aqui é apenas mostrar multiplicação de matrizes. Por isso, normalmente, se você acabou de fazer asterisk-- tão mat asterisco mat-- este vai ser operação-componente sábio ou o que é chamado o produto Hadamard. Por isso, vai fazer a cada elemento componente-wise. No entanto, se você quiser multiplication-- matriz assim multiplicando os primeiros tempos de linha primeira coluna da segunda matriz e assim on-- você usaria esta operação por cento. E t de esteira é apenas um operação para a transposição. Então, eu estou dizendo que tomar a transposta em a matriz, multiplicá-lo pela matriz si. E então ele vai voltar para você mais 3 por 3 matriz de exibição o produto que você gostaria. E assim que foi matriz. Aqui está o que é chamado um quadro de dados. A estrutura de dados que você pode pensar como uma matriz, mas cada própria coluna vai ser de um tipo diferente. Então, o que é realmente legal sobre dados quadros é que, em si, a análise dos dados, você vai ter tudo isso dados heterogêneos e tudo isso realmente desarrumado coisas onde cada uma das colunas eles próprios podem ser de diferentes tipos. Então aqui eu estou dizendo criar um quadro de dados, fazer ints 1-3, e, em seguida, também têm um vector personagem. Então eu posso índice através cada uma destas colunas e então eu vou começar os próprios valores. E você também pode fazer algum tipo de operações em quadros de dados. E na maioria das vezes quando você está fazendo análise de dados ou algum tipo de pré-processamento, você poderá trabalhar com estas estruturas de dados onde cada coluna vai ser de um tipo diferente. Finalmente, assim que estas são essencialmente apenas os quatro objetos essenciais na Lista R. só vai recolher todas as outros objetos que você deseja. Por isso, este irá armazenar em uma variável que você pode acessar facilmente. Então, aqui, eu estou tendo uma lista. Eu estou dizendo coisas é igual a 3. Então, eu vou ter um elemento no da lista, e isso é chamado de material, e ele vai ter o valor 3. Eu também pode criar uma matriz. Portanto, este é de 1 a 4 e linha final é igual a 2, de modo que uma matriz de 2 por 2. Também na lista e é chamado de mat. moreStuff, uma cadeia de caracteres, e até mesmo uma outra lista em si mesmo. Portanto, esta é uma lista que é 5 e urso. Por isso, tem o valor de 5 e tem o urso cadeia de caracteres e é uma lista dentro de uma lista. Assim, você pode ter estes coisas recursiva onde você tem um another-- digite dentro do modelo. Então, da mesma forma, você pode ter uma matriz dentro de outra matriz e assim por diante. E a lista é apenas uma boa maneira de coletar e agregar todos estes diferentes objectos. E, finalmente, aqui é apenas ajudar no caso Este foi apenas ido mais rapidamente. Então, quando você está confuso sobre algum tipo de função, você pode fazer a ajuda dessa função. Assim você pode fazer ajuda matriz ou uma matriz de ponto de interrogação. E a ajuda eo ponto de interrogação são apenas uma abreviação para a mesma coisa por isso eles são aliases. lm é uma função que só faz um modelo linear. Mas se você simplesmente não tem idéia de como isso obras, você pode apenas fazer ajuda de lm e que vamos dar-lhe algumas tipo de documentação que olha como uma espécie de página homem em Unix, onde você tem uma breve descrição do que que faz, também o que seus argumentos são, o que ele retorna, e apenas dicas sobre como para usá-lo, e alguns exemplos bem. Então deixe-me ir em frente e mostrar alguns de demonstração do uso de R. OK. Então eu fui muito rapidamente apenas os dados estruturas e algum tipo de op-- algumas das operações. Eis algumas funções. Então aqui eu só vou para definir uma função. Então, eu também estou usando operador de atribuição aqui, e então eu estou dizendo declará-la como uma função. E leva o valor de x. Portanto, este é qualquer valor que você quer e eu estou indo para retornar x si. Portanto, esta é a função identidade. E o que é legal sobre isso em comparação com outros idiomas e outra de baixo nível línguas é que x pode ser de qualquer tipo em si e ele vai voltar desse tipo. Assim, você pode imagine-- então vamos me basta executar este rapidamente. Desculpe. Então, uma coisa que eu também deveria mencionar é que este editor que estou usando é chamado rstudio. Isto é o que é chamado de IDE. E uma coisa que é realmente agradável sobre este é que incorpora uma grande parte do as coisas que você quer fazer em R por si só apenas muito intuitiva. Então aqui está um console intérprete. Então, da mesma forma, você também pode obter este consola-prima apenas fazendo uma R. capitais E este é exatamente o mesma coisa que o console. Então eu só posso fazer a função id x, x, x. E entăo-- e, em seguida, que vai ficar bem em si. Então rstudio é grande porque tem o console. Ela também tem os documentos você gostaria de correr. E então ele tem algumas variáveis que você pode ver em ambientes. E então, se você tem fazer parcelas, então você pode apenas vê-lo aqui, ao contrário de gerenciar todos esses diferentes janelas por si. Na verdade, eu pessoalmente uso Vim, mas eu sentir como rstudio é excelente apenas para obter uma boa idéia de como usar R. Normalmente, quando você está tentando aprender alguma nova tarefa, você não quer lidar com muitas coisas ao mesmo tempo. Então R é apenas um rstudio very-- é uma boa forma de aprendizagem R sem ter que lidar com todas essas outras coisas. Então, aqui estou id correndo Olá. Isso retorna Olá. ID 123. Aqui é um vetor de números inteiros. Então, da mesma forma, porque você pode tomar qualquer algum tipo de valor, você pode fazer voltar id x para que ela retorne 1234 e 5. E deixe-me mostrar-lhe que este é realmente um número inteiro. E da mesma forma, se você fizer classe id x, que vai ser inteiro. E então, você também pode comparar os dois e é verdade. Então, eu estou verificando se id x é igual a igual ax e aviso que lhe dá duas TRUEs. Portanto, este não está dizendo são os dois objetos idênticos, mas são cada uma das entradas dentro dos vectores idênticos. Aqui está bounded.compare. Portanto, este é um pouco mais complicado na medida em que se tem uma condição e outra e, em seguida, é preciso dois argumentos de cada vez. Assim, x é de qualquer tipo. E eu estou dizendo isso O segundo argumento é a. Isto pode ser qualquer coisa como bem. Mas por padrão, ele vai levar 5, se você não especificar nada. Então aqui eu vou dizer Se x for maior do que um. Então, se eu não especificar um, ele diz que se x é maior do que 5, então eu estou indo para retornar TRUE. outra coisa, eu estou indo para retornar FALSE. Então deixe-me ir em frente e definir isso. E agora eu vou executar bounded.compare 3. Então, ele diz que é menos 3 than-- 3 é maior do que 5. Não, não é tão falso. E bounded.compare 3 e vou para compará-lo utilizando um é igual a 2. Então agora eu estou dizendo sim, agora eu quero um para ser outra coisa. Então, eu vou dizer uma, você deve ser 2. I pode fazer esse tipo de notação ou digo um é igual a dois. Esta é uma forma mais legível em que quando você está olhando para estes realmente funções complicadas que tomar arguments-- múltipla e este pode haver dezenas oftentimes-- apenas dizendo um é igual a 2 é mais legível para você, para que, mais tarde, no futuro você vai saber o que você está fazendo. Portanto, neste caso, eu sou provérbio é 3 superior a 2. Sim, é. E da mesma forma, eu posso simplesmente remover isso e dizer, é de 3 superior a 2 onde a é igual a 2. E isso também é verdade. Sim? AUDIÊNCIA: É você executar linha por linha? DUSTIN TRAN: Sim, eu sou. Então o que eu estou fazendo aqui é tomar este texto document-- e que é grande sobre rstudio é que Eu só posso executar um short-- uma tecla de atalho. Então, eu estou fazendo Control-Enter. E então, eu estou tomando o linha no documento de texto e, em seguida, colocar no console. Então aqui eu estou dizendo, bounded.compare e eu estou fazendo Control-X. Então, eu posso simplesmente não funcionar aqui também. E, então, que vou pegar o linha e, em seguida, colocá-lo aqui. E, em seguida, da mesma forma, eu posso fazer correr aqui. E então ele vai apenas manter a definição as linhas para o console assim. E se você também notar a cacheados chaves estão lá apenas como na sintaxe C. x-- se o se a condição é também vai usar parênteses e depois você pode usar outra coisa. Outra é else if. Portanto, esta vai ser x é igual é igual a um, por exemplo. E então eu vou retornar algo aqui. Observe que existem dois diferentes coisas aqui que está acontecendo. Uma delas é que aqui eu estou especificando devolver o valor TRUE. Aqui eu só estou dizendo x. Então R normalmente irá por padrão tomar o último arguments-- ou tomar a última linha do código, e que vai ser o que ele é retornado. Então aqui é o mesmo coisa como fazendo retorno x. E só para mostrar a você. E, em seguida, ele vai trabalhar apenas como aquele. Então deixe-me continuar com isso. Então else if. E realmente, eu posso voltar qualquer coisa que eu gostaria. Então eu não tem sequer a retorno Booleans o tempo todo, Eu só posso voltar outra coisa. Então eu posso fazer urso retorno. Portanto, se x é igual é igual a um, ele vai voltar urso. Caso contrário, ele vai retornar TRUE. Eu também posso fazer um vector ou realmente qualquer coisa. E normalmente em estaticamente línguas digitado, você teria que especificar um tipo aqui. E note que ele pode ser qualquer coisa. E R é inteligente o suficiente para que ele só vai fazer isso e ele vai funcionar bem. Então deixe-me definir isso. Unexpected-- oh desculpe. Deve ser uma chaveta aqui. OK. Com estilo. Tudo certo. Então agora vamos comparar 3 e um é igual a 3. Por isso, deve return-- yeah-- o valor urso. Então, agora uma coisa mais geral é como o que acontece com outras estruturas de dados. Então você tem esta função. Isso vai funcionar em qualquer tipo de valor como 3 ou qualquer numérico, em outras palavras, duas vezes. Mas o que dizer algo como um vector. Então, o que acontece se você fazer-- por isso estou vai atribuir val para, digamos, 4 a 6. Então, se eu voltar isso, este é um vector a partir do 4, 5, 6. Agora vamos ver o que acontece se eu fizer bounded.compare val. Então, isso vai lhe dar 15 1251. Portanto, em outras palavras, ele está dizendo se você olhar para esta condição por isso diz x é menor do que um ou algo assim. Portanto, este é ligeiramente confusa porque agora você simplesmente não sabe o que está acontecendo. Então eu acho que uma coisa que é realmente bom sobre apenas tentando depurar é que você pode apenas fazer val é maior do que um e ver o que acontece lá. Então val-- um é, por padrão, 5 de modo Vamos fazer Val superior a 5. Portanto, este é um vetor FALSE FALSE TRUE. Agora, quando você está olhando isso, ele vai dizer se, e, em seguida, ele vai dar-lhe este é um vetor de FALSE FALSE TRUE. Então, quando você passar isso em R, R não tem idéia do que está fazendo. Porque ele espera que um único valor, o que é um valor booleano, e agora você está dando-lhe um vetor de booleanos. Então, por padrão, R é apenas vai dizer que o diabo, Eu vou assumir que você é vai levar o primeiro elemento aqui. Então, eu estou indo para dizer-- eu vou assumir que isso é falso. Por isso, vai dizer Não, isso não está certo. Da mesma forma, ele vai val ser igual é igual a um. Não, desculpe 5. E também vai ser falso também. Então, ele vai dizer que não, Não é verdade, bem por isso é vai voltar este último. Portanto, este é tanto uma coisa boa ou ruim coisa, dependendo de como você vê-lo. Porque quando você está criar essas funções, você realmente não sabe o que está acontecendo. Então, às vezes você iria querer um erro, ou talvez você quer apenas um aviso. Neste caso, R não faz isso. Então, é realmente até você baseado fora do que Você acha que a língua deve fazer neste caso se você passar em um vetor de booleanos quando você está fazendo um se condição. Então, vamos dizer que você tinha o original um com os outros, se retornar TRUE e você está vai retornar FALSE. Portanto, uma forma de abstrair isso é para dizer que eu não precisa mesmo essa coisa condicional. Outra coisa que posso fazer é apenas retornando os próprios valores. Então, se você observar, se você Do Val é maior do que 5, isso vai voltar a vector FALSE FALSE TRUE. Talvez isso é o que você quer para bounded.compare. Você deseja retornar um vetor de booleanos em que compara cada um dos valores para si mesmos. Assim, você pode simplesmente não bounded.compare função de x, um é igual a 5. E então, em vez de fazê- esta outra condição se, Eu só vou voltar x é maior do que 5. Então, se é verdade, então ele vai retornar TRUE. E então, se não é, é vai retornar FALSE. E isso vai funcionar para qualquer dessas estruturas. Então eu posso bounded.compare c 1 6 ou 9 e então eu vou dizer um é igual a 6, por exemplo. E então ele vai dar-lhe o direito booleana vetor que você está projetando. Então, esses são apenas funções e, agora, deixe-me apenas mostrar-lhe alguns recursos visuais interativos. Eu não acho que eu realmente tenho Wi-Fi aqui, então deixe-me ir em frente e ignorar esta eu acho. Mas uma coisa que é legal porém, é que se você apenas quer testar um monte de diferentes comandos, dados há um monte de diferentes conjuntos de dados que já estão pré-carregados no R. Então, um deles é chamado o conjunto de dados da íris. Este é um dos mais conhecidos os de aprendizado de máquina. Você geralmente apenas fazer algum tipo de casos de teste para ver se o código é executado. Então vamos verificar o que é iris. Então, essa coisa está acontecendo para ser um quadro de dados. E é uma espécie de tempo porque Eu só impresso íris. Ele está imprimindo a coisa toda. Por isso, tem todas estas diferentes nomes. Assim íris é uma colecção de flores diferentes. Neste caso, está dizendo -lhe as espécies do mesmo, todos estes diferentes larguras e a comprimentos de sépalas e a pétala. E assim, normalmente, se deseja imprimir íris, por exemplo, você não quer tê-lo fazer tudo isso, porque isso pode levar mais todo o seu console. Então, uma coisa que é realmente interessante é a função de cabeça. Então, se você acabou de fazer a cabeça iris, isso vai lhe dar os primeiros cinco linhas ou seis anos, eu acho. E, em seguida bem de você, pode apenas especificar aqui. Então 20-- isso vai dar -lhe as primeiras 20 linhas. E eu, na verdade, era uma espécie de surpreender que este me deu seis então deixe-me ir em frente e verificar iris-- ou na cabeça, me desculpe. E aqui ele vai dar você a documentação do que a cabeça de valor faz. Então, ela retorna a primeira ou a última de um objeto. E então eu vou olhar para os padrões. E, em seguida, ele diz que o default método de cabeça x e n é igual a 6L. Portanto, este devolve os primeiros seis elementos. E da mesma forma, se você observar aqui, eu não tem que especificar n é igual a 6. Por padrão, ele usa seis, eu acho. E então, se eu quiser especificar um determinado valor, então eu posso ver isso também. Então esse é alguns comandos simples e aqui está um outro que é apenas-- bem, I can-- esta é realmente um pouco mais complexa, mas isso só vai levar a classe de cada coluna do conjunto de dados da íris. Então, isso vai mostrar o que cada um deles colunas são em termos de seus tipos. Então comprimento sepal é numérico, width sepal é numérico. Todos estes valores são apenas numérico porque você pode dizer a partir desses dados estruturar estes são tudo vai numérico. E a coluna Espécies vai ser um fator. Então, normalmente, você poderia pensar que isto é como uma cadeia de caracteres. Mas, se você acabou de fazer irisSpecies, e então eu vou fazer de cabeça 5, e isso vai imprimir os primeiros cinco valores. E em seguida, observe esta níveis. Portanto, este é dizendo-- esta é a maneira do R de ter variáveis ​​categóricas. Então, ao invés de apenas Tendo em cadeias de caracteres, ele tem níveis especificando que estas coisas são. Então, digamos que irisSpecies 1. Então, o que você quer fazer aqui é que eu sou subsetting a esta coluna Espécies. Então, isso leva a Espécies coluna e, em seguida, ele indexa para obter o primeiro elemento. Portanto, este deve dar-lhe setosa. E dá-lhe também os níveis aqui. Então, você também pode comparar isso para o personagem setosa e isso não vai a ser verdade, porque uma é de um tipo diferente do que o outro. Ou eu acho que isso é verdade, porque R é mais inteligente do que isso. E ele olha para isso e, em seguida, diz, talvez este seja o que você quer. Então, ele vai dizer que o personagem cadeia setosa é o mesmo como esta. E, em seguida, da mesma forma, você pode também basta pegar estes como assim por diante. Então, isso é apenas uma espécie de comandos rápidos do conjunto de dados. Então aqui vai uma exploração de dados. Portanto, este é um pouco mais envolvidas com a análise de dados. E este é retirado de alguns bootcamp em R para em Berkeley. Assim biblioteca externa. Então, eu estou indo para carregar em um biblioteca que é chamado estrangeira. Então, isso vai me dar read.dta assim supor que eu tenho esse conjunto de dados. Este é armazenado na actual diretório do meu console funcionando. Então vamos ver o que o diretório de trabalho é. Então, aqui está o meu diretório de trabalho. E a leitura de dados de pontos, esta coisa, está dizendo este arquivo está localizado na pasta de dados de este diretório de trabalho atual. E este não é read.dta um comando padrão. Eu acho que eu carregá-la no já. IEI assumido eu carreguei isso no já. Mas até read.dta não vai para ser um comando padrão. E é por isso que você vai ter para carregar nesta biblioteca package-- este pacote chamado estrangeira. E se você não tem o pacote, eu acho estrangeira é um dos mais integrados. Caso contrário, você também pode fazer install.packages e isso vai instalar o pacote. E isso vai lhe dar R. Uh, não. E então eu só vou parar isso porque eu já tenho. Mas o que é realmente agradável sobre R é que o gerenciamento de pacotes sistema é muito elegante. Porque ele vai armazenar tudo realmente muito bem para você. Portanto, neste caso, está indo para armazenar -lo, creio eu, esta biblioteca aqui. Então, quando você quer instalar novos pacotes, é tão simples como fazendo install.packages e R gerenciará todos os pacotes para você. Então você não tem que fazer alguma coisa em Python, onde você tem pacote externo gestores como papel Anaconda onde você está doing-- de instalar o pacotes fora do Python e em seguida, tentar executá-los você mesmo. Portanto, esta é realmente boa maneira. E install.packages requer internet. Leva-o a partir de um servidor e do repositório que recolhe todo o pacotes é chamado CRAN. E você pode especificar que tipo de espelho você quer fazer o download dos pacotes. Então aqui estou tendo este conjunto de dados. Eu estou lendo-o em utilizar esta função. Então deixe-me ir em frente e fazer isso. Então vamos supor que você tem esse conjunto de dados e você não tem absolutamente nenhuma idéia o que é. E isso, na verdade, trata-se com bastante frequência na indústria onde você só tem esses toneladas e toneladas de coisas sujas e eles são incrivelmente não marcado. Então aqui eu tenho essa dataset e eu não sei o que é assim que eu sou apenas mostrando para verificá-la. Então, eu vou fazer de cabeça. Então eu verificar os seis primeiros colunas de que esse conjunto de dados é. Portanto, este é o estado, pres04, e em seguida todos esses diferentes tipo de colunas. E o que é interessante aqui, eu acho, é que você diria que isso parece como uma espécie de eleição. E eu acho que só a partir de olhando para o arquivo Nome Este é algum tipo de coleção de dados sobre candidatos ou eleitores que votaram em presidentes específicas ou candidatos presidente para a eleição de 2004. Então aqui está valores 1, 2 Portanto, uma forma de armazenar os candidatos presidente são os seus nomes. Neste caso, parece que eles são apenas valores inteiros. Então, 2004, era de Bush contra Kerry eu acredito. E agora, vamos dizer que você só não sei se 1 corresponde ao Bush ou 2 corresponde a Kerry ou e assim por diante e assim por diante, certo? E esta é, só para mim, um problema bastante comum. Então, o que você pode fazer neste caso? Então, vamos verificar todas essas outras coisas. estado, estou assumindo este vem de diferentes estados. partyid, renda. Vejamos partyid. Então, talvez uma coisa que você pode fazer é olhar para cada uma das observações que têm um partyid do republicano ou democrata ou algo assim. Então vamos apenas olhar para o que é partyid. Então, eu vou tomar dat e então eu vou para fazer isso cifrão operador que eu fiz anteriormente e isso vai subconjunto para essa coluna. E então eu estou indo para a cabeça esta em 20, só para ver o que isto se parece. Portanto, este é apenas um monte de agências nacionais. Portanto, em outras palavras, você tem falta de dados sobre esses caras. Mas você também perceber isso dat partyid é um factor de modo que este dá-lhe diferentes categorias. Assim, em outras palavras, pode tomar partyid Democrata, republicano, independente, ou qualquer outra coisa. Então, vamos em frente e vamos ver qual delas é-- oh, OK. Então, eu estou indo para o subconjunto para partyid e depois veja quais são Democrata, por exemplo. Isto vai dar-lhe um valor booleano, uma enorme booleano de TRUEs e FALSEs. E agora, vamos dizer que eu quero para o subconjunto para esses caras. Então, isso vai levar a minha dat e a qualquer subconjunto observações têm iguais partyid iguala democrata. E isso é bastante longo, porque há tantos deles. Então, agora, eu estou indo para a cabeça esta em 20. E, como você observou, é igual a equals é interessante na medida em que você está já-- você também está incluindo as agências nacionais. Portanto, neste caso, você ainda pode não chegar qualquer informação, porque agora você tem AN e você só quer ver qual dos observação correspondem ao Democrata e não estes valores em falta si. Então, como você se livrar desses NAS? Então, aqui estou apenas usando a chave no meu cursor e, em seguida, dizendo se movimentar. E então aqui eu só vou dizer is.na datpartyid. Portanto, este e e tomará dois vectores diferentes booleanas e dizer que vai ser TRUE e FALSE por exemplo. Por isso, vai fazer este componente-wise. Então aqui eu estou dizendo take o quadro de dados, subconjunto para aqueles que correspondem a democrata, e remover qualquer um deles que não são NA. Portanto, este deve will-- dar-lhe alguma coisa. Vamos ver is.na. Vamos tentar datpartyid is.na. E isso deve dar você-- sorry-- apenas um vetor booleano. E então, porque é muito longo, Eu estou indo para o subconjunto a 20. OK. Portanto, este deve funcionar. E este também será TRUEs. Ah, o meu erro aqui é que I'm-- I usar C ++ e R alternadamente assim que eu faço esse erro o tempo todo. O operador e é na verdade, o que você quer. Você não quer usar dois ampersands, apenas um único. OK. Então vamos ver. Então, nós subsetted ao partyid onde eles estão Democrata e eles não estão faltando valores. E agora vamos olhar para quais os que votaram a favor. Assim, parece que a maioria deles votou 1. Então, eu estou indo para a frente e dizer que é Kerry. E da mesma forma, você pode também vão para Republicano e, esperamos, isso deve dar-lhe 2. É apenas um monte de colunas diferentes. E, de fato, é 2. Então partyid tudo republicanos, a maioria deles está votando para 2. Assim, parece que, apenas olhando para isso, Republicano vai ser um very-- ou o partyid vai ser muito grande fator na determinação qual candidato eles são vai votar. E isso é obviamente verdadeiro em geral. E este corresponde ao seu intuição, é claro. Então, parece que eu sou correndo contra o tempo para que deixe-me apenas deve ir em frente e mostrar algumas imagens rápidas. Então aqui está algo que é ligeiramente mais complicada com a visualização. Portanto, neste caso, este é um muito simples análise de apenas verificar o que o presidente da '04 é. Portanto, neste caso, digamos que você queria responder a essa pergunta. Então vamos supor que queria saber a votação comportamento na eleição presidente 2004 e como isso varia de acordo com a raça. Assim, não só que você quer ver o comportamento de voto, mas você quer subconjunto de cada raça e tipo de resumir isso. E você só pode dizer- por este complexo notação que esta é uma espécie de obter nebuloso. Então, um dos mais avançados R pacotes que é também uma espécie de recente é chamado dplyr. Por isso, é este aqui. E ggplot2 ggg-- é apenas um bom maneira de fazer as melhores visualizações do que a um embutido. Então, eu estou indo para carregar estas duas bibliotecas. E então, eu estou indo para ir em frente e executar este comando. Você pode apenas tratar isso como uma caixa preta. O que está acontecendo é que esta tubulação operador está passando neste argumento em aqui. Então, eu estou dizendo por grupo dat raça e então presidente 04. E então, todos esses outros comandos está filtrando e, em seguida, resumindo onde eu estou fazendo contagem e então eu estou traçando-lo aqui. OK legal. Então, vamos em frente e ver o que isto se parece. Então, o que está acontecendo aqui é que eu apenas plotados cada uma das raças e, em seguida, quais os que votaram a favor. E estes dois diferentes Os valores correspondem a 2 e 1. Se você quiser ser mais elegante, você também pode apenas especificar que 2 é Kerry-- ou 2 é de Bush, e, em seguida, um é Kerry. E você também pode ter que em sua lenda. E você também pode dividir esses gráficos de barras. Porque uma coisa é que, se você observar, este não é muito fácil de identificar qual destes dois valores são maiores. Então, uma coisa que você gostaria de fazer é aproveitar esta área azul e apenas mova-o aqui para que você pode comparar os dois lado a lado. E eu acho que é algo que eu não tem tempo para fazer agora, mas isso é também muito fácil de fazer. Você pode apenas olhar para as páginas do manual de ggplot. Assim, você pode simplesmente não ggplot como que e ler nesta página homem. Então deixem-me apenas rapidamente mostrar-lhe algumas coisas legais. Vamos em frente e ir a-- apenas uma aplicação de aprendizado de máquina. Então, digamos que temos estes três pacotes assim que eu estou indo para carregá-los em. Então, isso só imprime alguns informações quando carreguei na coisa. Então, eu estou dizendo isso read.csv, este conjunto de dados, e agora Eu estou indo para ir em frente e olhar e ver o que tem dentro deste conjunto de dados. Assim, as primeiras 20 observações. Então, eu só tenho X1, X2, e Y. Por isso, Parece que um monte desses valores estão variando de talvez 20 a 80 ou mais. E, em seguida, da mesma forma para X2 e depois Y esta parece ser rótulos de 0 e 1. Para verificar isso, eu posso apenas fazer X1 dados de resumo. E, em seguida, da mesma forma para todas estas outras colunas. Então resumo é uma maneira rápida de apenas mostrando valores rápidos. Oh, desculpe. Este deve ser Y. Portanto, neste caso, dá a quantiles, medianas, maxes também. Neste caso, dataY, você pode ver que ele só vai ser 0 e 1. Além disso, a média está dizendo 0,6, apenas significa que ele Parece que eu tenho mais do que 1s 0s. Então deixe-me ir em frente e mostrar o que isso parece. Então, eu estou indo só para traçar este. Vamos ver como limpar isso. Oh OK. OK. Portanto, este é o que parece. Assim, parece que os amarelos I especificados como 0, e depois vermelho I especificado como 1s. Então, aqui parece que pontos de etiqueta e que Parece que você só queria um pouco tipo de agrupamento sobre este assunto. E deixe-me ir em frente e mostrar você algumas dessas funções embutidas. Então aqui é lm. Portanto, esta é apenas a tentar para ajustar uma linha a esta. Então, qual é a melhor maneira que eu possa ajustar uma linha tal que será melhor separar este tipo de clustering. E de preferência, você pode apenas ver que eu simplesmente executar todos estes comandos e, em seguida, eu vou em frente e adicionar a linha. Portanto, este parece ser o melhor palpite. É tomar o melhor que minimiza o erro na tentativa de encaixar esta linha. Obviamente, isso parece meio bom, mas não é o melhor. E os modelos lineares, em geral, vão ser realmente grande para a teoria e apenas uma espécie dos fundamentos de construção da máquina aprendendo. Mas, na prática, você vai quero fazer algo mais geral. Assim, você pode apenas tentar correr algo chamado de uma rede neural. Essas coisas são cada vez mais comum. E eles simplesmente trabalhar fantasticamente para grandes conjuntos de dados. Portanto, neste caso, só have-- vamos see-- temos nrow. Então nrow está apenas dizendo número de linhas. Portanto, neste caso, eu tem 100 observações. Então deixe-me ir em frente e fazer uma rede neural. Então, isso é muito bom porque eu posso apenas dizer nnet e então eu estou regredindo Y. Então o Y é aquela coluna. E então que a regressão no as outras duas variáveis. Portanto, este é mais curto notação para X1 e X2. Então, vamos em frente e executar este. Oh, desculpe. Eu preciso executar essa coisa toda. E esta é apenas a impressão de notação para a rapidez ou não rapidamente ele convergiram. Portanto, parece que ele fez convergir. Então deixe-me ir em frente e de impressão o que isso parece. Veja aqui a foto e aqui é um contorno mostrando o quão bem ele se encaixa. E este é apenas-- você pode ver este que isso é muito, muito bom. Pode até ser overfitting, mas você pode também são responsáveis ​​por isso com outro técnicas como a validação cruzada. E estes também são construídas em R. E deixe-me mostrar-lhe apoiar máquina vector. Esta é outra realmente comum técnica em aprendizado de máquina. É muito semelhante aos modelos lineares, mas ele usa o que é chamado um método de kernel. E vamos ver o quão bem que faz. Assim, esta é muito semelhante à forma como bem uma rede neural desempenha, mas é muito mais suave. E esta é baseado fora de what-- como SVMs trabalho. Portanto, esta é apenas uma muito resumo rápido de algumas das funções internas que você pode fazer e também um pouco da exploração de dados. Então deixe-me ir em frente e voltar para os slides. Então, obviamente, este é não muito abrangente. E isso é realmente apenas um teaser mostrando-lhe o que você pode realmente fazer em R. Então, se você gostaria apenas de para saber mais, aqui são um bando de diferentes recursos. Então, se você gosta de livros didáticos ou você está só gostava de ler coisas on-line, então este é um fantástico um por Hadley Wickham, que também criou todos esses pacotes muito legal. Se você gosta de vídeos, em seguida, Berkeley tem um bootcamp incrível isso é several-- esse é o tipo de comprimento. E ele vai te ensinar quase tudo o que você gostaria de saber sobre R. E da mesma forma, não há Codeacademy e todas estas outro tipo sites de interativos. Eles também estão recebendo common-- cada vez mais comum. Então isso é muito semelhante ao Codeacademy. E, finalmente, se você acabou de quer comunitário e ajudar, estes são um bando de coisas que você pode ir. Obviamente, nós ainda usar listas de discussão, apenas como quase todos os outros comunidade linguagem de programação. E #rstats, este é nossa comunidade Twitter. Isso é bastante comum. E então o usuário! É apenas a nossa conferência. E depois, claro, você pode usar todas essas outras coisas Q & A, como Stack Overflow, Google, e, em seguida, GitHub. Porque a maioria destes pacotes e um lote da comunidade será centrada em torno de desenvolver código porque é open source. E isso é apenas muito bom no GitHub. E, finalmente, você pode contactar-me se você só tem quaisquer perguntas rápidas. Assim, você pode me encontrar no Twitter aqui, meu site, e apenas o meu e-mail. Portanto, esperamos, que era something-- apenas um teaser curto do que R é realmente capaz de fazer. E espero que, você só confira essas três ligações e veja o que você pode fazer mais. E eu acho que é exatamente sobre isso. Obrigado. [Aplausos]