Faço programação há cerca de um ano e estou realmente interessado em análise de dados e aprendizado de máquina. Estou participando de alguns cursos on-line e lendo alguns livros.
Tudo o que estou fazendo usa R ou Python e estou procurando sugestões sobre se devo ou não me concentrar em um idioma (e se sim, qual) ou continuar com ambos; eles se complementam?
- Devo mencionar que uso C # na escola, mas estou familiarizado com o Python através do auto-estudo.
python
machine-learning
r
The_Cthulhu_Kid
fonte
fonte
Respostas:
Eu uso o Python (para análise de dados de curso, incluindo numpy e scipy) e R próximos um do outro. No entanto, eu uso R exclusivamente para executar análise de dados e Python para tarefas de programação mais genéricas (por exemplo, controle de fluxo de trabalho de um modelo de computador).
Em termos de operações básicas, digamos operações em matrizes e o tipo, R e Python + numpy são muito comparáveis. É na grande biblioteca de funções estatísticas que R tem uma vantagem. Além disso, o matplotlib não parece ser tão bom quanto o ggplot2, mas eu não usei tanto o matplotlib. Além disso, eu focaria primeiro em um idioma e me tornaria bom nos detalhes específicos. Você parece estar primariamente interessado em análise de dados, não em engenharia de software. Eu escolheria R e manteria isso. Dito isso, acho que a escolha de Python + numpy + scipy + scikit é definitivamente uma escolha excelente, mas acho que R é um pouco mais excelente.
Também daria uma olhada ao seu redor o que seus colegas e outras pessoas em seu campo estão usando. Se todos eles usam, digamos, Python, faria sentido manter isso para aprender mais facilmente com eles e trocar código.
Isenção de responsabilidade: observe que eu sou um usuário pesado de R, portanto minha opinião pode ser tendenciosa, embora eu tenha tentado manter minha resposta o mais objetiva possível. Além disso, não usei extensivamente o Python + numpy, apesar de conhecer colegas que fazem toda a análise de dados nele.
ps: Este link pode ser interessante: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal
pps: ou esta citação deste post :
fonte
Antecedentes: Sou cientista de dados em uma startup em Austin e sou formado em Física. Eu uso o Python diariamente para análise de dados, mas uso R um pouco. Eu também uso C # /. NET e Java (quase todos os dias), usei C ++ fortemente na pós-graduação.
Eu acho que o principal problema com o uso de Python para números (acima de R) é o tamanho da comunidade de usuários. Como o idioma existe para sempre, muitas pessoas fizeram coisas que você provavelmente deseja fazer. Isso significa que, quando se deparar com um problema difícil, você pode simplesmente fazer o download do pacote e começar a trabalhar. E R "simplesmente funciona": você fornece um conjunto de dados e sabe quais estatísticas de resumo são úteis. Você fornece alguns resultados e sabe o que deseja. Todas as tramas comuns que você gostaria de fazer estão lá, mesmo algumas bem esotéricas que você terá que procurar na Wikipedia. Tão bom quanto scipy / numpy / pandas / statsmodels / etc. são para Python, eles não estão no nível da biblioteca padrão R.
A principal vantagem do Python sobre o R é que é uma linguagem de programação real na família C. Ele é dimensionado facilmente, portanto é possível que qualquer coisa que você tenha na sua caixa de areia possa ser usada na produção. O Python possui Orientação a Objetos, ao contrário de R, onde parece uma espécie de reflexão tardia (porque é). Há outras coisas que o Python também faz bem: processamento de threads e paralelo é bastante fácil, e não tenho certeza se esse é o caso em R. E aprender Python também oferece uma poderosa ferramenta de script. Também existem IDEs (gratuitos) realmente bons para Python, muito melhores se você estiver disposto a pagar (menos de US $ 100), e não tenho certeza se esse é o caso do R - o único R IDE que conheço é O R Studio, que é muito bom, mas não é tão bom quanto o PyDev + Eclipse, na minha experiência.
Vou acrescentar isso como um incentivo: como você ainda está na escola, deve pensar em empregos. Você encontrará mais ofertas de emprego para desenvolvedores Python altamente qualificados do que para desenvolvedores R altamente qualificados. Em Austin, empregos para desenvolvedores do Django estão meio que caindo do céu. Se você conhece R muito bem, existem alguns lugares onde você pode capitalizar essa habilidade (Revolution Analytics, por exemplo), mas muitas lojas parecem usar o Python. Mesmo no campo da análise / ciência de dados, mais pessoas parecem estar se voltando para o Python.
E não subestime que você possa trabalhar com / para pessoas que apenas conhecem (digamos) Java. Essas pessoas poderão ler o seu código Python facilmente. Isso não será necessariamente o caso se você fizer todo o seu trabalho em R. (isso vem da experiência).
Finalmente, isso pode parecer superficial, mas acho que a documentação e as convenções de nomenclatura do Python (que são religiosamente respeitadas, ao que parece) são muito mais agradáveis do que o R utilitário. Isso será muito debatido, tenho certeza, mas a ênfase no Python é a legibilidade. Isso significa que argumentos para funções Python têm nomes que você pode ler, e isso significa alguma coisa. Em R, os nomes dos argumentos geralmente são truncados - eu achei isso menos verdadeiro no Python. Isso pode parecer pedante, mas me deixa louco escrever coisas como 'xlab' quando você poderia facilmente nomear um argumento 'x_label' (apenas um exemplo) --- isso tem um efeito enorme quando você está tentando aprender um nova API de módulo / pacote. Ler o documento R é como ler as páginas de manual do Linux - se é isso que faz o seu barco flutuar, mais poder para você.
Dito tudo isso, sugiro o seguinte (que também é meu fluxo de trabalho típico): como você conhece Python, use isso como sua primeira ferramenta. Quando você achar que o Python está faltando, aprenda R o suficiente para fazer o que você deseja e, em seguida:
Use Python para saber o que é bom em Python e preencha as lacunas com uma das opções acima. Esse é o meu fluxo de trabalho normal - geralmente uso R para plotar coisas e Python para trabalhos pesados.
Para resumir: devido à ênfase do Python na legibilidade (pesquise no Google por "Pythonic"), a disponibilidade de bons IDEs gratuitos, o fato de ele estar na família C de idiomas, maior a possibilidade de você capitalizar o conjunto de habilidades e o melhor estilo de documentação geral da linguagem, sugiro que você faça do Python o seu objetivo e conte com o R somente quando necessário.
Ok, esta é (de longe) a minha resposta mais popular de todos os tempos em um site de pilha, e nem é a número 1 :) Espero que isso tenha ajudado algumas pessoas ao longo do caminho.
De qualquer forma, cheguei à seguinte conclusão depois de vários anos no campo:
Perguntar "eu deveria aprender essa tecnologia em particular" é uma pergunta ruim. Por quê?
Como cientista de dados, seu trabalho é resolver problemas . Esse pouco de sabedoria quase sempre se perde em todas as conferências ou reuniões em que você participa - todas as palestras sobre "big data" que eu já vi focaram-se na tecnologia, não na solução de problemas. A solução real de problemas geralmente é relegada a alguns slides no final:
Isso dá uma má impressão de que o campo é sobre tecnologia e simplesmente não é verdade. Se você é realmente bom em Scala, ou Python, ou R, mas é muito ruim em resolver problemas, você será um péssimo cientista de dados .
Paco Nathan esteve em Austin há alguns meses, durante uma conferência de "big data" de um dia, e disse algo como "Química não é sobre tubos de ensaio". Isso resume tudo - a ciência de dados não é sobre Scala, ou Hadoop, ou Spark, ou qualquer outra tecnologia que surja. No final do dia, quero contratar pessoas que pensam, não pessoas que usam o Stack Overflow para aprender kits de ferramentas.
Da mesma forma, se você for a uma entrevista de emprego e eles não o contratarem apenas porque você não conhece alguma linguagem de programação, essa empresa é péssima . Eles não entendem o que significa "cientista de dados" e provavelmente é melhor para você se não der certo.
Finalmente, se suas habilidades de resolução de problemas são marginais (seja honesto consigo mesmo), ou você realmente gosta do lado técnico, ou aprender tecnologia é o que você realmente ama (mais uma vez, seja honesto), aprenda bastante tecnologia. Você sempre poderá encontrar funções do tipo "engenheiro de dados" que se encaixam no seu conjunto de habilidades. Isso não é uma coisa ruim, os engenheiros de dados lubrificam as rodas e possibilitam que você faça seu trabalho como cientista de dados. (A diferença é semelhante ao arquiteto de software e à equipe de desenvolvimento.)
fonte
Então, eu fiz principalmente a análise de dados no Matlab, mas fiz alguns no Python (e mais usei o Python para fins gerais) e também comecei um pouco de R. Eu irei contra a corrente aqui e sugiro que você use Pitão. O motivo é que você está fazendo uma análise de dados de uma perspectiva de Machine Learning, não de estatísticas (onde R é dominante) ou processamento de sinal digital (onde Matlab é dominante).
Obviamente, existe uma forte sobreposição entre Machine Learning e Stats. Mas sobreposição não é identidade. O Machine Learning usa idéias do CS que eu não gostaria de implementar no R. Claro, você pode calcular uma árvore de abrangência mínima no R. No entanto, pode parecer uma bagunça feia. O pessoal do aprendizado de máquina presumirá que você tenha acesso fácil a tabelas de hash, árvores de pesquisa binária e assim por diante. É mais fácil para mim implementar um algoritmo de estatísticas novamente quando necessário, do que tentar calçar o que é basicamente uma linguagem específica de domínio em uma linguagem de programação geral.
Os benefícios colaterais do Python para análise de dados também são muito maiores. Você aprenderá uma linguagem de programação real ao mesmo tempo, que pode lidar com scripts, criar aplicativos maiores, etc. R é realmente uma linguagem de nicho da comunidade de estatísticas, até o Matlab é muito mais usado.
Acho que examinaria alguns dos documentos primeiro e veria em que idioma eles publicam o código. Se não estiver no R, não o use.
fonte
Como cientista da velha escola (mais de 50 anos) que tem e continua a usar várias dessas ferramentas, adicionarei meus dois centavos. Trabalhei com colegas que ainda escrevem todo código no Fortran, desde trabalhos triviais de análise de dados pontuais até códigos que dominam alguns dos supercomputadores do mundo. Os dialetos recentes do Fortran (F90, F95, F2003, F2008) são IMHO, alguns dos idiomas mais bem projetados existentes. Décadas de experiência com computação de alto desempenho levaram a um desenvolvimento de linguagem bastante impressionante.
Eu só usei Python às vezes e o revisitarei (principalmente por causa do Sage), mas eu uso um conjunto de linguagens testadas pelo tempo que funcionam bem para mim. Fortran, C, Perl, R e Scheme (com tcl para scripts do VMD). Acho a combinação de R e Fortran e C muito confortável. Em contraste com outros comentários feitos sobre o modelo de objeto em R, é um bom modelo de objeto para trabalho interativo, baseado no conceito CLOS de funções genéricas e envio de métodos. Ao trabalhar de maneira interativa com um novo pacote, muitas vezes você pode confiar em funções genéricas como "imprimir" e "plot" para fazer algo produtivo.
A API para Fortran e C é muito fácil de usar. Se você está acostumado a trabalhar no Fortran e C para modelagem e análise de dados, essa é uma grande vantagem. A capacidade de gerar código R dinamicamente e avaliá-lo, embora não seja tão limpa quanto os sistemas macro em Lisp e C, é muito útil ao trabalhar com conjuntos de dados dinâmicos.
Algumas limitações de R para dados reais incluem a abordagem de chamada por valor. Embora existam motivos de CS para chamada por valor, a programação do mundo real com grandes dados numéricos requer alguma forma de chamada por referência (observe a importância dos blocos comuns do Fortran no código mais antigo ou dos dados do módulo no código mais recente). A abordagem adotada pelo PDL (Perl Data Language) é especialmente elegante nesse sentido. (Os PDLs são essencialmente chamados por referência, a menos que você solicite uma cópia. A sub-PDLs faz referência a uma subseção de um PDL pai, em uma sintaxe muito mais limpa do que o Fortran ou C fornece).
É bom aprender muitas línguas. O Python é sem dúvida uma linguagem importante, mas o R também está no seu domínio. Mas quando a borracha realmente precisar seguir o caminho da ciência, Fortran e C (e C ++ para alguns) serão difíceis de substituir.
fonte
Um recurso importante do R é que é uma biblioteca de pacotes, tanto quanto uma linguagem de programação. Todo gravador de pacotes tem acesso, em princípio, ao que está em todos os outros pacotes. Isso reduz drasticamente a necessidade de reinventar, re-documentar e re-aprender. Isso se aplica aos autores de pacotes e aos usuários. Obviamente, essa infraestrutura tem um custo. Os autores de pacotes devem acomodar padrões que se tornam cada vez mais exigentes com o passar do tempo. Parte disso pode se espalhar para o que os usuários encontram.
Python, como eu entendo, não possui um sistema de gerenciamento de pacotes. Não há equivalente à Rede Abrangente de Arquivamento R da R ( http://cran.r-project.org ) e nenhum equivalente direto às visualizações da tarefa R ( http://cran.csiro.au/web/views/ ). Portanto, é, em uma extensão que não é o caso de R, uma ferramenta para programadores que trabalham praticamente por conta própria e não como parte de um esforço comunitário para desenvolver o que já está disponível.
Para análise de dados e aprendizado de máquina, a demanda certamente é, em grande parte, aproveitar e aproveitar as habilidades que já existem. Para tarefas de programação mais genéricas, o Python pode ter vantagens. Você fará esse tipo de trabalho o suficiente para justificar o esforço envolvido no aprendizado de Python?
fonte