Melhores idiomas para computação científica [fechado]


10

Parece que a maioria das línguas tem algum número de bibliotecas de computação científica disponíveis.

  • Python tem Scipy
  • Rust tem SciRust
  • C++tem vários incluindo ViennaCLeArmadillo
  • Javatem Java Numericse Colt, assim como várias outras

Sem mencionar idiomas como Re Juliaprojetados explicitamente para computação científica.

Com tantas opções, como você escolhe o melhor idioma para uma tarefa? Além disso, quais idiomas terão o melhor desempenho? Pythone Rparece ter a maior tração no espaço, mas logicamente uma linguagem compilada parece ser uma escolha melhor. E alguma coisa irá superar Fortran? Idiomas compilados adicionais tendem a ter aceleração de GPU, enquanto idiomas interpretados gostam Re Pythonnão. O que devo levar em consideração ao escolher um idioma e quais idiomas oferecem o melhor equilíbrio entre utilidade e desempenho? Também existem idiomas com recursos significativos de computação científica que eu perdi?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
Não há dúvida aqui. Se você precisa fazer uma pesquisa básica sobre linguagem de programação, é melhor ler a Wikipedia do que esperar que alguém apareça aqui para empurrar seu hobby.
Dirk Eddelbuettel

@DirkEddelbuettel Very good point. Pensei que era melhor tentar produzir conteúdo do que refiná-lo neste momento na versão beta, mas não sei muito sobre os betas SE. Foi uma boa jogada da minha parte ou não?
indico

1
Olhe para esses números.
Emre

@DirkEddelbuettel você não está errado, mas minha esperança era promover uma discussão sobre as características e ferramentas úteis associadas a vários idiomas. A linguagem que você usa é uma ferramenta importante na ciência de dados, então meu pensamento era que as pessoas pudessem discutir as ferramentas que preferiam e os benefícios objetivos aqui, como um recurso para quem procura tentar um trabalho semelhante.
ragingSloth

1
@indico Tente cran.r-project.org/web/packages/overlap/index.html, que é apenas o primeiro que escolhi aleatoriamente. Mas, na verdade, eu conheci pessoalmente muitos estatísticos que escreveram pacotes R. Nenhum deles ainda escreveu um python. Para ampliar um pouco a conversa, kdnuggets.com/2013/08/… é interessante.
Lembik

Respostas:


12

Essa é uma pergunta bastante massiva, portanto, não pretende ser uma resposta completa, mas espero que isso possa ajudar a informar a prática geral sobre como determinar a melhor ferramenta para o trabalho quando se trata de ciência de dados. Geralmente, tenho uma lista relativamente curta de qualificações que procuro quando se trata de qualquer ferramenta neste espaço. Em nenhuma ordem específica, eles são:

  • Desempenho : basicamente se resume à rapidez com que a linguagem faz a multiplicação de matrizes, pois essa é mais ou menos a tarefa mais importante na ciência de dados.
  • Escalabilidade : pelo menos para mim, pessoalmente, isso se resume à facilidade de criar um sistema distribuído. É um lugar onde línguas como Juliarealmente brilham.
  • Comunidade : em qualquer idioma, você está realmente procurando por uma comunidade ativa que possa ajudá-lo quando você ficar parado usando a ferramenta que estiver usando. É aqui que se situa pythonmuito à frente da maioria dos outros idiomas.
  • Flexibilidade : Nada é pior do que ser limitado pelo idioma que você usa. Isso não acontece com muita frequência, mas tentar representar estruturas de gráfico haskellé uma dor notória e Juliaé preenchida com muitas dores de arquitetura de código como resultado de ser uma linguagem tão jovem.
  • Facilidade de uso : se você quiser usar algo em um ambiente maior, verifique se a instalação é simples e pode ser automatizada. Nada é pior do que ter que configurar uma construção refinada em meia dúzia de máquinas.

Há muitos artigos por aí sobre desempenho e escalabilidade, mas, em geral, você verá um diferencial de desempenho de talvez 5 a 10 vezes entre os idiomas, o que pode ou não ser importante, dependendo da sua aplicação específica. No que diz respeito à aceleração da GPU, cudamaté uma maneira realmente perfeita de fazê-lo funcionar python, e a cudabiblioteca em geral tornou a aceleração da GPU muito mais acessível do que costumava ser.

As duas principais métricas que utilizo para a comunidade e a flexibilidade são examinar o gerenciador de pacotes do idioma e as questões de idioma em um site como o SO. Se houver um grande número de perguntas e respostas de alta qualidade, é um bom sinal de que a comunidade está ativa. O número de pacotes e a atividade geral nesses pacotes também podem ser um bom proxy para essa métrica.

Quanto à facilidade de uso, acredito firmemente que a única maneira de realmente saber é configurá-lo por conta própria. Há muita superstição em torno de muitas ferramentas de ciência de dados, especificamente coisas como bancos de dados e arquitetura de computação distribuída, mas não há como realmente saber se algo é fácil ou difícil de configurar e implantar sem apenas criar você mesmo.


Para adicionar a esta resposta: em termos de escalabilidade, Scalae Govale a pena mencionar.
Marc Claesen

Eu acrescentaria clareza e brevidade (relacionadas à arquitetura de sintaxe e linguagem, mas não apenas). Ser capaz de escrever rapidamente e ler sem problemas faz uma enorme diferença (já que o tempo dos programadores é mais caro que o tempo da máquina).
Piotr Migdal

5

A melhor linguagem depende do que você deseja fazer. Primeira observação: não se limite a um idioma. Aprender um novo idioma é sempre uma coisa boa, mas em algum momento você precisará escolher. As facilidades oferecidas pelo próprio idioma são uma coisa óbvia a ser levada em consideração, mas, na minha opinião, as seguintes são mais importantes:

  • bibliotecas disponíveis : você precisa implementar tudo do zero ou pode reutilizar coisas existentes? Observe que essas bibliotecas não precisam estar no idioma que você está considerando, desde que você possa interagir facilmente. Trabalhar em um idioma sem acesso à biblioteca não ajudará você a fazer as coisas.
  • número de especialistas : se você deseja desenvolvedores externos ou começa a trabalhar em equipe, deve considerar quantas pessoas realmente conhecem o idioma. Como um exemplo extremo: se você decidir trabalhar no Brainfuck porque gosta, saiba que provavelmente trabalhará sozinho. Existem muitas pesquisas que podem ajudar a avaliar a popularidade dos idiomas, incluindo o número de perguntas por idioma no SO.
  • toolchain : você tem acesso a bons depuradores, criadores de perfil, ferramentas de documentação e (se você gosta disso) IDEs?

Estou ciente de que a maioria dos meus argumentos favorece idiomas estabelecidos. Isso é da perspectiva de "faça as coisas".

Dito isto, eu pessoalmente acredito que é muito melhor se tornar proficiente em um idioma de baixo nível e um idioma de alto nível:

  • nível baixo: C ++, C, Fortran, ... usando o qual você pode implementar determinados pontos de acesso de perfil somente se necessário, porque o desenvolvimento nessas linguagens é geralmente mais lento (embora isso esteja sujeito a debate). Esses idiomas continuam sendo o rei da colina em termos de desempenho crítico e provavelmente permanecerão no topo por um longo tempo.
  • alto nível: Python, R, Clojure, ... para 'colar' coisas juntas e fazer coisas críticas sem desempenho (pré-processamento, manipulação de dados, ...). Acho que isso é importante simplesmente porque é muito mais fácil fazer desenvolvimento e prototipagem rápidos nessas linguagens.

4

Primeiro, você precisa decidir o que deseja fazer e, em seguida, procurar a ferramenta certa para essa tarefa.

Uma abordagem muito geral é usar R nas primeiras versões e verificar se sua abordagem está correta. Falta um pouco de velocidade, mas possui comandos e bibliotecas de complementos muito poderosos, que você pode experimentar quase tudo: http://www.r-project.org/

A segunda ideia é que, se você quiser entender os algoritmos por trás das bibliotecas, poderá dar uma olhada nas Receitas Numéricas. Eles estão disponíveis para diferentes idiomas e são gratuitos para o aprendizado. Se você quiser usá-los em produtos comerciais, precisará adquirir uma licença: http://en.wikipedia.org/wiki/Numerical_Recipes

Na maioria das vezes, o desempenho não é o problema, mas a localização dos algoritmos e parâmetros corretos para eles; portanto, é importante ter uma linguagem de script rápida em vez de um programa monstro que primeiro precise compilar 10 minutos antes de calcular dois números e colocar o resultado.

E uma grande vantagem do uso do R é que ele possui funções ou bibliotecas integradas para quase qualquer tipo de diagrama que você possa precisar para visualizar seus dados.

Se você possui uma versão funcional, é quase fácil portá-la para qualquer outro idioma que julgue ser de melhor desempenho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.