Entre o Matlab e o Python, qual linguagem é boa para a análise estatística?
17
Entre o Matlab e o Python, qual linguagem é boa para a análise estatística geral dos dados? Quais são os prós e os contras, além da acessibilidade, para cada um?
Gostaria de explicar por que você também não pode olhar para R?
Dirk Eddelbuettel
@DirK: Eu mal ouvi falar de R. Além disso, eu queria aprender alguma linguagem de programação como Python, e também não acho que R esteja perto de python, IMO. Espero que responda sua pergunta.
2
Dê uma olhada aqui e no StackOverflow em termos do que as pessoas recomendam para análise e programação estatística . Muitos de nós sentimos que não há alternativa real para R. Mas, assim como a beleza, isso está nos olhos de quem vê, boa sorte.
Dirk Eddelbuettel
Em termos de geoestatística (na qual fiz meu doutorado), acho que R está muito bem equipado (veja gstat, geoR, etc.). Pelo menos eu não conheço essa cobertura completa de técnicas geoestatísticas em python. E por que R "está nem perto de python"? Eu usei os dois e, para os geoestáticos, sinto que R é claramente superior.
Paul Hiemstra
Respostas:
29
Como usuário obstinado do Matlab há mais de 10 anos, recomendo que você aprenda Python. Quando você tiver conhecimentos suficientes em um idioma, quando trabalhar em um idioma que estiver aprendendo, parecerá que você não está sendo produtivo o suficiente e voltará a usar o melhor idioma padrão. No mínimo, eu sugiro que você tente se tornar igualmente proficiente em vários idiomas (eu sugeriria também R).
O que eu gosto no Matlab:
Eu sou proficiente nisso.
É a língua franca entre analistas numéricos.
a ferramenta de criação de perfil é muito boa. Esta é a única razão pela qual eu uso o Matlab em vez de oitava.
Existe um clone de freeware, oitava, que tem boa conformidade com a implementação de referência.
O que eu não gosto no Matlab:
Não existe um bom sistema para gerenciar pacotes e scripts de terceiros (gratuitos ou não). O Mathworks controla a 'troca central de arquivos', e a instalação de pacotes adicionais parece muito desajeitada, nada como o excelente sistema que o R possui. Além disso, o Mathworks não tem incentivo para melhorar essa situação, porque ganha dinheiro com a venda de caixas de ferramentas, que competem com pacotes de freeware;
As licenças para computação paralela no Matlab são incrivelmente caras;
Grande parte do código m, incluindo muitas das funções da caixa de ferramentas e alguns componentes internos, foram projetados para serem obviamente corretos, à custa da eficiência e / ou usabilidade. O exemplo mais flagrante disso é a medianfunção do Matlab , que executa uma espécie de dados e, em seguida, assume o valor médio . Este tem sido o algoritmo errado desde os anos 70.
salvar gráficos em arquivo é desonesto, na melhor das hipóteses, no Matlab.
Não achei que minha experiência de usuário tenha melhorado nos últimos 5 anos (quando comecei a usar o Matlab em vez da oitava), mesmo que o Mathworks continue adicionando sinos e assobios. Isso indica que eu não sou seu cliente-alvo, mas eles procuram expandir a participação de mercado, piorando as coisas para usuários avançados.
Agora existem 2 maneiras de fazer programação orientada a objetos no Matlab, o que é confuso na melhor das hipóteses. O código herdado usando o estilo antigo persistirá por algum tempo.
A interface do Matlab é escrita em Java, com idéias desagradáveis sobre gerenciamento de memória.
+1, bons pontos. Sobre isso: "idéias desagradáveis sobre gerenciamento de memória" .. interessante, você pode elaborar?
ars
1
minha memória está indo para algum lugar ; minha experiência com o exterior Java do uso Matlab indicar que é o provável culpado, e funcionando em -nojvmaparece para ajudar ...
shabbychef
Meu exemplo favorito de códigos internos estranhos do MATLAB é o shuffle, que reordena os dados com a ordem retornada, classificando um vetor aleatório criado recentemente.
1
@mbq: shufflepode estar em uma caixa de ferramentas, não é estoque matlab. dificilmente poderia ser pior do que o builtin, randpermque retorna o índice de classificação de um vetor aleatório. Mais uma vez, este é provavelmente o algoritmo errado (eu só aprendi sobre o Knuth-Fisher-Yates embaralhar aqui na stats.SE) ..
shabbychef
1
@mbq: a outra parte boa randpermé que ela é afetada pela semeadura randn, enquanto uma versão mexicana de Knuth-Fisher-Yates talvez não consiga acessar a semente randn 'internamente', e uma versão .m pura do shuffle provavelmente seja muito lento.
21810 shabbychef
11
Vamos dividir em três áreas (em cima da minha cabeça) onde a programação atende às estatísticas: processamento de dados, rotinas numéricas (otimização e outras) e bibliotecas estatísticas (modelagem etc.).
No primeiro, a maior diferença é que o Python é uma linguagem de programação de uso geral. O Matlab é ótimo desde que seu mundo seja aproximadamente isomórfico para uma matriz numérica fortran. Depois que você começa a lidar com a troca de dados e questões relacionadas, o Python supera o Matlab. Por exemplo, consulte o livro de Greg Wilson: Processamento de dados: resolva problemas diários usando Java, Python e muito mais .
No segundo, o Matlab realmente brilha com o trabalho numérico. Muita comunidade de pesquisa o usa e, se você estiver procurando, digamos, algum algoritmo relacionado a um artigo sobre detecção compactada, é muito mais provável que você encontre uma implementação no Matlab. Por outro lado, o Matlab é uma espécie de PHP da computação científica - ele se esforça para ter uma função para tudo sob o sol. A estética e a arquitetura resultantes são enlouquecedoras se você é um nerd de linguagem de programação, mas em termos utilitários, ele faz o trabalho. Muito disso se tornou menos vantajoso com o surgimento do Numpy / Scipy, é provável que você encontre as bibliotecas de otimização e aprendizado de máquina disponíveis para o Python. A interface com C é quase tão fácil em qualquer idioma.
Sobre a disponibilidade de bibliotecas estatísticas para modelagem e coisas do tipo, ambas faltam um pouco quando comparadas a algo como R. (Embora eu suspeite que ambas atendam às necessidades de 80% das pessoas que fazem trabalho estatístico). Para o lado do Python, veja esta pergunta : Python como um ambiente de trabalho de estatística . Para o lado do Matlab, sei que há uma caixa de ferramentas de estatísticas, mas deixarei que alguém com mais conhecimento preencha os espaços em branco (minha experiência com o Matlab é limitada a trabalhos numéricos não relacionados a estatísticas).
As caixas de ferramentas estatísticas no Matlab são bastante divertidas. Existe algo semelhante para R, onde, por exemplo, você pode experimentar rapidamente vários ajustes de função diferentes (regressões)?
Alex R.
6
Eu também sou um usuário ávido do Matlab há mais de 10 anos. Por muitos desses anos, não tive motivos para trabalhar além da caixa de ferramentas que criei para o meu trabalho. Embora muitas funções tenham sido criadas para uma caixa de ferramentas, muitas vezes eu precisava criar algoritmos para análise rápida de resposta. Como esses algoritmos costumam utilizar matemática matricial, o Matlab era um candidato ideal para o meu trabalho. Além da minha caixa de ferramentas Matlab, outras pessoas do meu grupo trabalharam extensivamente em Java, pois havia uma clara interoperabilidade entre as linguagens. Durante anos fiquei completamente feliz com o Matlab, mas há cerca de três anos decidi iniciar a transição lenta do Matlab e feliz em dizer que não a abro há cerca de um ano. Aqui está o motivo da minha mudança:
Eu trabalho com sistemas de computação online e offline, o sistema de licenciamento sempre foi uma dor de cabeça. Sempre parecia acontecer que, quando mais precisávamos do Matlab, a licença expirava ou de repente apresentava problemas. Isso sempre foi uma dor de cabeça. Além disso, se precisarmos compartilhar código e a outra parte não tiver licenças para as mesmas caixas de ferramentas, isso criará uma dor de cabeça. Não é grátis
Muitas vezes preciso criar apresentações. Embora o Matlab forneça ferramentas abrangentes para a criação de figuras, o que o torna muito poderoso para o design de algoritmos, mas salvar a figura de forma que ela possa ser inserida em uma apresentação e ter uma boa aparência não é uma tarefa simples. Muitas vezes tive que inserir um arquivo EPS no Adobe illustrator para remover todo o lixo, consertar as fontes e limpar as linhas. Existem algumas ferramentas para ajudar com isso na troca de arquivos (export_fig.m).
Geralmente recebo código do Matlab de outras pessoas. Quando isso acontece, quase sempre o reescrevo porque: a API deles não é compatível com meus dados, o código não faz sentido, é lento, não gera o que eu preciso, ... Basicamente, as pessoas que desenvolvem no Matlab são não engenheiros de software e o Matlab não incentiva nenhum tipo de princípio de design.
Eu sou um usuário avançado. Eu gosto de terminais. Eu odeio a GUI - odeio. E quando eles adicionaram a faixa de opções "windows", eu odiei um pouco mais. Basicamente, seus ajustes na GUI e o gerenciamento terrível de memória pressionaram meu último botão e eu decidi sair. O uso da -nodesktopopção é bom na maioria das vezes, mas tem problemas.
Muitas possibilidades para o design de funções (usando OO, ou design funcional), mas nenhuma parece correta, a maioria parece adhoc. Não tenho satisfação em projetar boas funções no Matlab
A comunidade é grande, mas não é fácil compartilhar e encontrar um bom código. A troca de arquivos não é tão boa assim.
Esta é apenas algumas das minhas muitas queixas com o Matlab. É um atributo brilhante: é fácil, muito fácil escrever código rapidamente (se não for feio). Eu deixei embora, e minha busca me levou através do Clojure-> JavaScript-> Python <-> Julia; Sim, eu estive em todo lugar.
Clojure: bela linguagem funcional. Minha razão para usar o Clojure foi sua capacidade de criar scripts para Java. Muitos de nossos "grandes" códigos baseiam-se em Java, então isso fez muito sentido. Naquela época, muito processamento científico não estava disponível, e também não havia muita visualização. Mas acho que isso está mudando.
Javascript: depois de ver os benchmarks em http://julialang.org/ , e como eu estava definitivamente interessado na capacidade de visualização do D3 , decidi experimentar o JavaScript. O JavaScript é surpreendentemente muito rápido. Mas se você realmente quer se odiar, aprenda JavaScript.
Python: O Python tem uma comunidade incrível e muitos projetos em andamento. O IPython Notebook é incrível por vários motivos (um deles é simples cópia / passado de figuras no powerpoint). Projetos como NumPy / SciPy / Scikit-Learn / Pandas tornaram o Python divertido e fácil de usar. É tão fácil de usar em vários núcleos ou clusters. Fiquei muito feliz pela mudança.
Julia: Julia é incrível. Especialmente para usuários do Matlab. Está na infância, porém, muitas mudanças estão acontecendo. Uma das principais desvantagens do Python é que ele não possui toda a funcionalidade interna do Matlab. É claro que o NumPy / SciPy traz essa funcionalidade, mas ela não é integrada e você precisa tomar decisões sobre objetos python puros ou objetos numpy. Julia basicamente tem tudo o que você deseja que o Python tenha vindo do Matlab. Eu esperaria, mas esta é a melhor opção para os usuários do Matlab no futuro.
Respostas:
Como usuário obstinado do Matlab há mais de 10 anos, recomendo que você aprenda Python. Quando você tiver conhecimentos suficientes em um idioma, quando trabalhar em um idioma que estiver aprendendo, parecerá que você não está sendo produtivo o suficiente e voltará a usar o melhor idioma padrão. No mínimo, eu sugiro que você tente se tornar igualmente proficiente em vários idiomas (eu sugeriria também R).
O que eu gosto no Matlab:
O que eu não gosto no Matlab:
median
função do Matlab , que executa uma espécie de dados e, em seguida, assume o valor médio . Este tem sido o algoritmo errado desde os anos 70.fonte
-nojvm
aparece para ajudar ...shuffle
pode estar em uma caixa de ferramentas, não é estoque matlab. dificilmente poderia ser pior do que o builtin,randperm
que retorna o índice de classificação de um vetor aleatório. Mais uma vez, este é provavelmente o algoritmo errado (eu só aprendi sobre o Knuth-Fisher-Yates embaralhar aqui na stats.SE) ..randperm
é que ela é afetada pela semeadurarandn
, enquanto uma versão mexicana de Knuth-Fisher-Yates talvez não consiga acessar a semente randn 'internamente', e uma versão .m pura do shuffle provavelmente seja muito lento.Vamos dividir em três áreas (em cima da minha cabeça) onde a programação atende às estatísticas: processamento de dados, rotinas numéricas (otimização e outras) e bibliotecas estatísticas (modelagem etc.).
No primeiro, a maior diferença é que o Python é uma linguagem de programação de uso geral. O Matlab é ótimo desde que seu mundo seja aproximadamente isomórfico para uma matriz numérica fortran. Depois que você começa a lidar com a troca de dados e questões relacionadas, o Python supera o Matlab. Por exemplo, consulte o livro de Greg Wilson: Processamento de dados: resolva problemas diários usando Java, Python e muito mais .
No segundo, o Matlab realmente brilha com o trabalho numérico. Muita comunidade de pesquisa o usa e, se você estiver procurando, digamos, algum algoritmo relacionado a um artigo sobre detecção compactada, é muito mais provável que você encontre uma implementação no Matlab. Por outro lado, o Matlab é uma espécie de PHP da computação científica - ele se esforça para ter uma função para tudo sob o sol. A estética e a arquitetura resultantes são enlouquecedoras se você é um nerd de linguagem de programação, mas em termos utilitários, ele faz o trabalho. Muito disso se tornou menos vantajoso com o surgimento do Numpy / Scipy, é provável que você encontre as bibliotecas de otimização e aprendizado de máquina disponíveis para o Python. A interface com C é quase tão fácil em qualquer idioma.
Sobre a disponibilidade de bibliotecas estatísticas para modelagem e coisas do tipo, ambas faltam um pouco quando comparadas a algo como R. (Embora eu suspeite que ambas atendam às necessidades de 80% das pessoas que fazem trabalho estatístico). Para o lado do Python, veja esta pergunta : Python como um ambiente de trabalho de estatística . Para o lado do Matlab, sei que há uma caixa de ferramentas de estatísticas, mas deixarei que alguém com mais conhecimento preencha os espaços em branco (minha experiência com o Matlab é limitada a trabalhos numéricos não relacionados a estatísticas).
fonte
Eu também sou um usuário ávido do Matlab há mais de 10 anos. Por muitos desses anos, não tive motivos para trabalhar além da caixa de ferramentas que criei para o meu trabalho. Embora muitas funções tenham sido criadas para uma caixa de ferramentas, muitas vezes eu precisava criar algoritmos para análise rápida de resposta. Como esses algoritmos costumam utilizar matemática matricial, o Matlab era um candidato ideal para o meu trabalho. Além da minha caixa de ferramentas Matlab, outras pessoas do meu grupo trabalharam extensivamente em Java, pois havia uma clara interoperabilidade entre as linguagens. Durante anos fiquei completamente feliz com o Matlab, mas há cerca de três anos decidi iniciar a transição lenta do Matlab e feliz em dizer que não a abro há cerca de um ano. Aqui está o motivo da minha mudança:
-nodesktop
opção é bom na maioria das vezes, mas tem problemas.Esta é apenas algumas das minhas muitas queixas com o Matlab. É um atributo brilhante: é fácil, muito fácil escrever código rapidamente (se não for feio). Eu deixei embora, e minha busca me levou através do Clojure-> JavaScript-> Python <-> Julia; Sim, eu estive em todo lugar.
fonte