Który język spośród Matlaba i Pythona nadaje się do analizy statystycznej?

17

Który język spośród Matlab i Python nadaje się do ogólnej analizy danych statystycznych? Jakie są zalety i wady, inne niż dostępność, dla każdego?

1102
źródło
2
Powinna to być wiki społeczności, IMO.
Shane
Czy zechciałbyś wyjaśnić, dlaczego nie mogłeś również spojrzeć na R?
Dirk Eddelbuettel
@DirK: Prawie nie słyszałem o R. Ponadto chciałem nauczyć się jakiegoś języka programowania, takiego jak Python, i znowu nie sądzę, aby R był blisko Pythona, IMO. Mam nadzieję, że odpowie na twoje pytanie.
2
Grzebać trochę tutaj i na StackOverflow pod względem tego, co ludzie polecają do analizy statystycznej i programowania . Wielu z nas uważa, że ​​nie ma prawdziwej alternatywy dla R. Ale podobnie jak piękno, to zależy od obserwatora, więc powodzenia.
Dirk Eddelbuettel
Jeśli chodzi o geostatystykę (w której zrobiłem doktorat), uważam, że R jest bardzo dobrze wyposażony (patrz gstat, geoR itp.). Przynajmniej nie znam takiego pełnego zakresu technik geostatystycznych w pythonie. I dlaczego R „nigdzie blisko pytona”? Użyłem obu i dla geostatów czuję, że R jest wyraźnie lepszy.
Paul Hiemstra

Odpowiedzi:

29

Jako zagorzały użytkownik Matlaba od ponad 10 lat zalecam naukę języka Python. Gdy osiągniesz wystarczającą umiejętność posługiwania się językiem, kiedy będziesz pracować w języku, którego się uczysz, będzie wyglądać na to, że nie jesteś wystarczająco produktywny i wrócisz do używania domyślnego najlepszego języka. Przynajmniej sugerowałbym, abyś spróbował stać się równie biegły w wielu językach (sugerowałbym również R).

Co lubię w Matlabie:

  • Jestem w tym biegły.
  • Jest to lingua franca wśród analityków numerycznych.
  • narzędzie do profilowania jest bardzo dobre. To jedyny powód, dla którego używam Matlaba zamiast oktawy.
  • Istnieje darmowy klon oktawa, który ma dobrą zgodność z implementacją referencyjną.

Czego nie lubię w Matlabie:

  • Nie ma dobrego systemu do zarządzania pakietami i skryptami stron trzecich (darmowymi lub w inny sposób). Mathworks kontroluje „centralną wymianę plików”, a instalacja dodatków wydaje się bardzo niezręczna, niczym doskonały system, który ma R. Ponadto Mathworks nie ma zachęty do poprawy tej sytuacji, ponieważ zarabia na sprzedaży zestawów narzędzi, które konkurują z pakietami freeware;
  • Licencje na równoległe obliczenia w Matlabie są niesamowicie drogie;
  • Wiele kodu m, w tym wiele funkcji przybornika i niektóre wbudowane, zostały zaprojektowane tak, aby były oczywiście poprawne, kosztem wydajności i / lub użyteczności. Najbardziej rażącym przykładem tego jest medianfunkcja Matlaba , która wykonuje rodzaj danych, a następnie przyjmuje średnią wartość . Jest to zły algorytm od lat 70-tych.
  • zapisywanie wykresów do pliku jest w Matlab co najwyżej niejasne.
  • Nie zauważyłem, że moje wrażenia użytkownika poprawiły się w ciągu ostatnich 5 lat (kiedy zacząłem używać Matlaba zamiast oktawy), mimo że Mathworks wciąż dodaje dzwonki i gwizdy. To wskazuje, że nie jestem ich docelowym klientem, a raczej chcą zwiększyć udział w rynku, pogarszając sytuację zaawansowanych użytkowników.
  • Istnieją teraz 2 sposoby programowania obiektowego w Matlab, co w najlepszym razie jest mylące. Starszy kod używający starego stylu będzie trwał przez pewien czas.
  • Interfejs użytkownika Matlab napisany jest w Javie, która ma nieprzyjemne pomysły na zarządzanie pamięcią.
shabbychef
źródło
+1, dobre punkty. Na ten temat: „nieprzyjemne pomysły dotyczące zarządzania pamięcią”… ciekawe, czy możesz to rozwinąć?
ars
1
moja pamięć gdzieś idzie ; moje doświadczenie z Javą poza użytkowaniem Matlaba wskazuje, że jest to prawdopodobny winowajca, a uruchamianie -nojvmwydaje się pomóc ...
shabbychef
Moim ulubionym przykładem dziwnych wbudowanych kodów MATLAB jest tasowanie, które porządkuje dane zgodnie z kolejnością zwracaną przez sortowanie świeżo utworzonego losowego wektora.
1
@mbq: shufflemoże znajdować się w przyborniku, nie jest w magazynie Matlab. nie może być gorszy niż wbudowany, randpermktóry zwraca indeks sortowania losowego wektora. Znów jest to prawdopodobnie zły algorytm (właśnie dowiedziałem się o tasowaniu Knutha-Fishera-Yatesa tutaj na stats.SE) ..
shabbychef
1
@mbq: inną dobrą stroną randpermjest to, że ma na to wpływ randnrozsiewanie, podczas gdy mieszana wersja Knuth-Fisher-Yates może nie może uzyskać dostępu do nasiona randn „wewnętrznie”, a czysta wersja .m tasowania prawdopodobnie być zbyt wolnym.
shabbychef
11

Podzielmy go na trzy obszary (z góry mojej głowy), w których programowanie spotyka się ze statystykami: crunch danych, procedury numeryczne (optymalizacja i tym podobne) oraz biblioteki statystyczne (modelowanie itp.).

Po pierwsze, największą różnicą jest to, że Python jest językiem programowania ogólnego przeznaczenia. Matlab jest świetny, o ile twój świat jest z grubsza izomorficzny w porównaniu z tablicą liczbową fortran. Kiedy zaczniesz zajmować się mungingiem danych i pokrewnymi problemami, Python przyćmiewa Matlaba. Na przykład zobacz książkę Grega Wilsona: Przetwarzanie danych: rozwiązywanie codziennych problemów za pomocą Java, Python i innych .

Po drugie, Matlab naprawdę błyszczy pracą numeryczną. Wiele społeczności badawczej korzysta z niego i jeśli szukasz, powiedzmy, jakiegoś algorytmu związanego z tekstem w wykrywaniu skompresowanym, znacznie bardziej prawdopodobne jest znalezienie implementacji w Matlabie. Z drugiej strony Matlab jest rodzajem PHP naukowego obliczeń - stara się mieć funkcję dla wszystkiego pod słońcem. Wynikająca z tego estetyka i architektura są denerwujące, jeśli jesteś maniakiem języka programowania, ale w utylitarnym sensie robi to. Wiele z tego stało się mniej istotne wraz z rozwojem Numpy / Scipy, równie dobrze możesz znaleźć biblioteki optymalizacji i uczenia maszynowego dostępne dla Pythona. Interfejs z C jest równie łatwy w obu językach.

Jeśli chodzi o dostępność bibliotek statystycznych do modelowania i tym podobne, obu brakuje nieco w porównaniu z czymś takim jak R. (Podejrzewam, że oba zaspokoją potrzeby 80% osób wykonujących prace statystyczne). Po stronie Pythona zobacz to pytanie : Python jako stół roboczy statystyk . Po stronie Matlaba wiem, że istnieje zestaw narzędzi statystycznych, ale pozwolę komuś bardziej kompetentnemu wypełnić puste pola (moje doświadczenie z Matlabem ogranicza się do pracy numerycznej niezwiązanej ze statystykami).

ARS
źródło
Przyborniki statystyk w Matlabie są całkiem fajne. Czy istnieje coś podobnego dla R, gdzie na przykład możesz szybko wypróbować kilka różnych dopasowań funkcji (regresje)?
Alex R.
6

Jestem także zapalonym użytkownikiem Matlaba od ponad 10 lat. Przez wiele lat nie miałem powodu, aby pracować poza zestawem narzędzi, który stworzyłem dla mojej pracy. Chociaż dla zestawu narzędzi utworzono wiele funkcji, często potrzebowałem algorytmów do szybkiej analizy zmian. Ponieważ algorytmy te często wykorzystują matematykę matematyczną, Matlab był idealnym kandydatem do mojej pracy. Oprócz mojego zestawu narzędzi Matlab, inni w mojej grupie pracowali intensywnie w Javie, ponieważ między językami istniała wyraźna interoperacyjność. Przez lata byłem całkowicie zadowolony z Matlaba, ale około 3 lata temu postanowiłem rozpocząć powolne przejście z Matlaba i cieszę się, że nie otworzyłem go od około roku. Oto powód mojego ruchu:

  • Pracuję z systemami obliczeniowymi online i offline, system licencyjny zawsze sprawiał kłopoty. Zawsze wydawało się, że kiedy najbardziej potrzebowaliśmy Matlaba, licencja wygasła lub nagle pojawiły się problemy. To zawsze był ból głowy. Ponadto, jeśli kiedykolwiek potrzebowaliśmy udostępnić kod, a druga strona nie miała licencji na te same skrzynki narzędziowe, spowodowało to ból głowy. To nie jest za darmo
  • Często muszę tworzyć prezentacje. Mimo że Matlab zapewnia rozbudowane narzędzia do tworzenia figur, co czyni go bardzo wydajnym w projektowaniu algorytmów, ale zapisanie postaci w taki sposób, aby można ją było wstawić do prezentacji i wyglądać ładnie, nie jest prostym zadaniem. Często musiałem wstawiać plik EPS do programu Adobe Illustrator, aby usunąć wszystkie śmieci, naprawić czcionki i wyczyścić linie. Istnieje jednak kilka narzędzi, które mogą pomóc w tej wymianie plików (export_fig.m).
  • Często otrzymuję kod Matlab od innych. Kiedy tak się dzieje, prawie zawsze przepisuję go, ponieważ: ich interfejs API nie jest zgodny z moimi danymi, ich kod nie ma sensu, jest powolny, nie wyświetla tego, czego potrzebuję ... Zasadniczo ludzie, którzy rozwijają się w Matlab, są nie inżynierowie oprogramowania, a Matlab nie zachęca do jakiejkolwiek zasady projektowania.
  • Jestem zaawansowanym użytkownikiem. Lubię terminale. Nienawidzę GUI - nienawidzę tego. A kiedy dodali wstążkę w stylu „okien”, bardziej mi się nie podobało. Zasadniczo ich poprawki do GUI i straszne zarządzanie pamięcią pchnęły mój ostatni przycisk i postanowiłem odejść. Korzystanie z -nodesktopopcji jest dobre przez większość czasu, ale ma swoje problemy.
  • Wiele możliwości projektowania funkcji (przy użyciu OO lub projektowania funkcjonalnego), ale żadna z nich nie wydaje się słuszna, większość wydaje się doraźna. Nie czerpię satysfakcji z projektowania dobrych funkcji w Matlabie
  • Społeczność jest duża, ale udostępnianie i znajdowanie dobrego kodu nie jest łatwe. Wymiana plików nie jest taka świetna.

To tylko niektóre z moich wielu problemów z Matlabem. To jeden olśniewający atrybut: łatwo, naprawdę łatwo napisać kod szybko (jeśli nie brzydki). Zostawiłem to, a moja misja poprowadziła mnie przez Clojure-> JavaScript-> Python <-> Julia; tak, byłem wszędzie.

  • Clojure: piękny funkcjonalny język. Moim powodem korzystania z Clojure była jego zdolność do pisania skryptów w Javie. Wiele z naszej „dużej” bazy kodu znajduje się w Javie, więc miało to sens. W tym czasie wiele procesów naukowych nie było łatwo dostępnych, podobnie jak wizualizacja. Ale myślę, że to się zmienia.
  • JavaScript: po obejrzeniu testów porównawczych na stronie http://julialang.org/ , a ponieważ byłem zdecydowanie zainteresowany możliwościami wizualizacji D3 , postanowiłem wypróbować JavaScript. JavaScript jest zaskakująco bardzo szybki. Ale jeśli naprawdę chcesz się nienawidzić, naucz się JavaScript.
  • Python: Python ma niesamowitą społeczność i realizuje wiele świetnych projektów. IPython Notebook jest niesamowity z wielu powodów (jednym z nich jest prosta kopia / przeszłość liczb do powerpoint). Projekty takie jak NumPy / SciPy / Scikit-Learn / Pandas sprawiły, że Python jest naprawdę zabawny i łatwy w użyciu. Jest tak łatwy w użyciu na wielu rdzeniach lub klastrach. Byłem bardzo szczęśliwy z powodu zmiany.
  • Julia: Julia jest niesamowita. Specjalnie dla użytkowników Matlaba. Jest jednak w powijakach, więc dzieje się wiele zmian. Jedną z głównych wad Pythona jest to, że nie ma on wszystkich wbudowanych funkcji Matlaba. Jasne, że NumPy / SciPy przynoszą tę funkcjonalność, ale nie jest ona wbudowana i musisz podjąć decyzję, czy mają być obiektami czysto pytonowymi, czy obiektami numpy. Julia ma w zasadzie wszystko, czego chciałbyś, żeby Python miał od Matlaba. Poczekam, ale jest to najlepsza opcja dla użytkowników Matlaba w przyszłości.
Justin
źródło