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:
- Escreva scripts em R e execute-os no Python usando o módulo de subprocesso, ou
- Instale o módulo RPy.
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:
Esta é provavelmente a pergunta errada a ser feita.
Perguntar "eu deveria aprender essa tecnologia em particular" é uma pergunta ruim. Por quê?
- Mudanças tecnológicas. Você sempre terá que aprender outra tecnologia. Se você trabalha no Twitter, eles administram o Scala. Alguns lugares são lojas Python. Alguns lugares não se importam. Você não será contratado porque conhece ou não conhece alguma tecnologia em particular - se você não pode aprender uma nova tecnologia, pode (e deve ser) demitido. É como, se uma nova chave inglesa, e você é um encanador, e não consegue descobrir como a nova chave inglesa funciona, você provavelmente é um encanador péssimo.
- Dada a escolha de "Eu aprendo esta tecnologia" ou "Eu gasto mais tempo resolvendo problemas reais", você deve sempre escolher a última, sem exceção.
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:
[Discussão = "Aprendizado profundo na Cool New Startup"] ... [45 minutos de diagramas e techno-babel durante os quais saio e verifico meu telefone] ... E, depois de implementar nosso cluster Hadoop e [Ben zone out novamente] podemos executar nossa rotina de aprendizado profundo, [acorde: é por isso que vim!], cujos detalhes são proprietários. Questões?
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.)