Natknąłem się na pytanie z 2012 roku, które miało bardzo dobrą dyskusję na temat Julii jako alternatywy dla R / Python dla różnych rodzajów prac statystycznych.
Oto oryginalne Pytanie z 2012 roku dotyczące obietnicy Julii
Niestety Julia była wtedy bardzo nowa, a zestawy narzędzi potrzebne do prac statystycznych były nieco prymitywne. Błędy były usuwane. Dystrybucje były trudne do zainstalowania. I tak dalej.
Ktoś bardzo trafnie skomentował to pytanie:
To powiedziawszy, minie 5 lat, zanim będzie można odpowiedzieć na to pytanie z perspektywy czasu. Na chwilę obecną Julii brakuje następujących krytycznych aspektów systemu programowania statystycznego, który mógłby konkurować z R dla codziennych użytkowników:
To było w 2012 roku. Teraz, gdy minął rok 2015 i minęły trzy lata, zastanawiałem się, jak ludzie myślą, że Julia sobie poradziła?
Czy jest bogatsze doświadczenie z samym językiem i całym ekosystemem Julii? Chciałbym wiedzieć.
Konkretnie:
- Czy doradziłbyś nowym użytkownikom narzędzi statystycznych nauczenie się Julii nad R.?
- W jakich przypadkach użycia statystyk doradziłbyś komuś użycie Julii?
- Jeśli R przy danym zadaniu jest powolny, czy sensowne jest przejście na Julię lub Python?
Uwaga: po raz pierwszy opublikowano 14 czerwca 2015 r.
Odpowiedzi:
Zmieniłem się na Julię i oto moje pragmatyczne powody:
To powiedziawszy, nadal bardzo kocham Rstudio, ale nowy Juno na Atom jest naprawdę fajny. Kiedy nie jest już intensywnie rozwijany i jest stabilny, widzę go lepiej niż Rstudio ze względu na łatwość wtyczek (przykład: ma dobrą wtyczkę do przystosowywania się do ekranów hidpi). Myślę więc, że Julia jest teraz dobrym językiem do nauki. Jak dotąd dobrze mi to wyszło. YMMV.
źródło
Myślę, że „naucz się X przez Y” nie jest właściwym sposobem na sformułowanie pytania. W rzeczywistości możesz nauczyć się (przynajmniej podstawy) obu i wybrać właściwe narzędzie w zależności od konkretnego zadania. A ponieważ Julia odziedziczyła większość składni i pojęć z innych języków, zrozumienie tego powinno być naprawdę łatwe (podobnie jak w przypadku Pythona, chociaż nie jestem pewien, czy to samo można powiedzieć o R).
Który język lepiej nadaje się do jakiego zadania? Na podstawie mojego doświadczenia z tymi narzędziami oceniłbym je w następujący sposób:
Dla czysto statystycznych badań, które można przeprowadzić za pomocą REPL i kilku skryptów, R wydaje się idealnym wyborem. Jest specjalnie zaprojektowany dla statystyk, ma najdłuższą historię narzędzi i prawdopodobnie największy zestaw bibliotek statystycznych.
Jeśli chcesz zintegrować statystyki (lub na przykład uczenie maszynowe) z systemem produkcyjnym , Python wydaje się znacznie lepszą alternatywą: jako język programowania ogólnego przeznaczenia ma niesamowity stos internetowy, powiązania z większością interfejsów API i bibliotek dosłownie do wszystkiego, od złomowania Internetu po tworzenie gier 3D .
Wysoko wydajne algorytmy są znacznie łatwiejsze do napisania w Julii . Jeśli potrzebujesz tylko użyć lub połączyć istniejące biblioteki, takie jak SciKit Learn lub e1071 wspierane przez C / C ++, dobrze Ci będzie w Pythonie i R. Ale jeśli chodzi o sam szybki backend, Julia oszczędza czas: jest znacznie szybsza niż Python lub R i nie wymaga dodatkowej znajomości C / C ++. Jako przykład, Mocha.jl reimplementuje w czystym środowisku Julia do nauki głębokiego uczenia Caffe , pierwotnie napisanym w C ++ z opakowaniem w Pythonie.
Nie zapominaj również, że niektóre biblioteki są dostępne tylko w niektórych językach. Np. Tylko Python ma dojrzały ekosystem do wizji komputerowej, niektóre algorytmy dopasowywania kształtów i przekształcania są zaimplementowane tylko w Julii i słyszałem o kilku unikatowych pakietach do statystyki w medycynie w R.
źródło
Problemy wysokowymiarowe i intensywne obliczeniowe.
Przetwarzanie wieloprocesowe Równoległe możliwości Julii (
@spawnat
) są znacznie wygodniejsze niż w Pythonie. Np. W pythonie nie można używać puli redukcji wieloprocesorowej mapy na REPL, a każda funkcja, którą chcesz zrównoleglać, wymaga dużej ilości płyt kotłowych.Informatyka klastrowa.
ClusterManagers
Pakiet Julii umożliwia korzystanie z klastra obliczeniowego prawie tak, jak pojedynczej maszyny z kilkoma rdzeniami. [ Bawiłem się, dzięki czemu czułem się bardziej jak pisanie skryptów w ClusterUtils ]Pamięć współdzielona.
SharedArray
Obiekty Julii przewyższają równoważne obiekty pamięci współdzielonej w pythonie.PyCall
Moduł Julii daje dostęp do ekosystemu python bez owijania - np. Używam tego dopylab
. Jest coś podobnego do R, ale nie próbowałem tego. Dostępne są równieżccall
biblioteki C / Fortran.GPU. Opakowania CUDA Julii są znacznie bardziej rozwinięte niż w Pythonie (Rs prawie nie istniały, kiedy sprawdzałem). Podejrzewam, że tak będzie nadal, ponieważ o wiele łatwiej jest wywoływać biblioteki zewnętrzne w Julii niż w Pythonie.
Ekosystem Do
Pkg
zastosowania modułu GitHub jako silnika. Wierzę, że będzie to miało duży wpływ na łatwość konserwacji modułów Julii w dłuższej perspektywie, ponieważ znacznie łatwiej jest oferować łatki lub przenosić odpowiedzialność na właścicieli.Pisanie szybkiego kodu dla dużych problemów będzie w coraz większym stopniu zależało od przetwarzania równoległego. Python jest z natury równoległy nieprzyjazny (GIL), a natywne wieloprocesowe przetwarzanie w R nie istnieje AFAIK. Julia nie wymaga od ciebie zejścia do C, aby napisać kod wykonawczy, zachowując przy tym dużą czucie Python / R / Matlab.
Głównym minusem Julii pochodzącym z Pythona / R jest brak dokumentacji poza podstawową funkcjonalnością. Python jest bardzo dojrzały, a tego, czego nie można znaleźć w dokumentach, jest zwykle w trybie stackoverflow. System dokumentacji R. jest dość dobry w porównaniu.
Tak, jeśli pasujesz do przypadków użycia w części (b). Jeśli twój przypadek użycia wymaga dużej różnorodności pracy
źródło