Julia kontra Python: co jest najlepsze w nauce o danych?

Spośród wielu przypadków użycia, które obsługuje Python, analiza danych stała się prawdopodobnie największym i najważniejszym. Ekosystem Pythona jest wypełniony bibliotekami, narzędziami i aplikacjami, dzięki którym praca związana z obliczeniami naukowymi i analizą danych jest szybka i wygodna.

Ale dla programistów za język Julia - ukierunkowanych na „obliczeń naukowych, uczenie maszynowe, eksploracji danych na dużą skalę algebry liniowej, dystrybucji i przetwarzania równoległego” -Python nie jest szybki lub wygodne na tyle . Julia chce zapewnić naukowcom i analitykom danych nie tylko szybki i wygodny program, ale także niesamowitą szybkość wykonywania. 

Jaki jest język Julia?

Stworzona w 2009 roku przez czteroosobowy zespół i zaprezentowana publicznie w 2012 roku, Julia ma na celu usunięcie niedociągnięć w Pythonie i innych językach oraz aplikacjach wykorzystywanych do obliczeń naukowych i przetwarzania danych. „Jesteśmy chciwi” - napisali. Chcieli więcej: 

Chcemy języka otwartego, z liberalną licencją. Chcemy szybkości C z dynamiką Rubiego. Chcemy języka homoikonicznego, z prawdziwymi makrami, takimi jak Lisp, ale z oczywistą, znajomą notacją matematyczną, jak Matlab. Chcemy czegoś równie użytecznego do programowania ogólnego, jak Python, tak łatwego w statystykach jak R, tak naturalnego do przetwarzania łańcuchów jak Perl, równie potężnego do algebry liniowej jak Matlab, równie dobrego w sklejaniu programów jak powłoka. Coś, czego łatwo się nauczyć, a jednocześnie uszczęśliwia najpoważniejszych hakerów. Chcemy, aby był interaktywny i skompilowany.

(Czy wspominaliśmy, że powinien być tak szybki jak C?)

Oto kilka sposobów, w jakie Julia realizuje te aspiracje:

  • Julia jest kompilowana, a nie interpretowana.  Aby uzyskać szybszą wydajność w czasie wykonywania, Julia jest kompilowana w trybie just-in-time (JIT) przy użyciu struktury kompilatora LLVM. W najlepszym przypadku Julia może zbliżyć się do prędkości C.
  • Julia jest interaktywna. Julia zawiera REPL (pętla odczytu-ewalu-wydruku) lub interaktywny wiersz poleceń, podobny do tego, co oferuje Python. Szybkie jednorazowe skrypty i polecenia można wprowadzać bezpośrednio.
  • Julia ma prostą składnię. Składnia Julii jest podobna do składni Pythona - zwięzła, ale także wyrazista i potężna.
  • Julia łączy zalety pisania dynamicznego i statycznego. Możesz określić typy zmiennych, np. „32-bitowa liczba całkowita bez znaku”. Ale możesz także tworzyć hierarchie typów, aby umożliwić ogólne przypadki obsługi zmiennych określonych typów - na przykład, aby napisać funkcję, która akceptuje liczby całkowite bez określania długości lub podpisywania liczby całkowitej. Możesz nawet obejść się bez pisania, jeśli nie jest to potrzebne w określonym kontekście.
  • Julia może wywoływać biblioteki Python, C i Fortran. Julia może współpracować bezpośrednio z zewnętrznymi bibliotekami napisanymi w językach C i Fortran. Możliwe jest również połączenie z kodem Pythona za pośrednictwem biblioteki PyCall, a nawet udostępnianie danych między Pythonem i Julią.
  • Julia wspiera metaprogramowanie. Programy Julii mogą generować inne programy Julii, a nawet modyfikować swój własny kod w sposób przypominający języki takie jak Lisp.
  • Julia ma w pełni funkcjonalny debugger.  Julia 1.1 wprowadziła zestaw do debugowania, który wykonuje kod w lokalnej REPL i pozwala przechodzić przez wyniki, sprawdzać zmienne i dodawać punkty przerwania w kodzie. Możesz nawet wykonywać szczegółowe zadania, takie jak przechodzenie przez funkcję generowaną przez kod.

Powiązany film: Jak Python ułatwia programowanie

Idealny dla IT, Python upraszcza wiele rodzajów pracy, od automatyzacji systemu po pracę w najnowocześniejszych dziedzinach, takich jak uczenie maszynowe.

Julia a Python: zalety języka Julii

Julia od początku była projektowana do obliczeń naukowych i numerycznych. Nic więc dziwnego, że Julia ma wiele funkcji przydatnych w takich przypadkach:

  • Julia jest szybka. Kompilacja JIT Julii i deklaracje typów oznaczają, że może ona rutynowo pokonać „czysty”, niezoptymalizowany Python o rzędy wielkości. Python może być wykonane szybciej za pomocą zewnętrznych bibliotek, kompilatorów JIT przez stronę trzecią (pypy) oraz optymalizacje z narzędzi takich jak Cython, ale Julia ma być szybsza prawo z bramy.
  • Julia ma przyjazną dla matematyki składnię. Główną grupą docelową Julii są użytkownicy naukowych języków i środowisk obliczeniowych, takich jak Matlab, R, Mathematica i Octave. Składnia Julii dla operacji matematycznych bardziej przypomina sposób, w jaki formuły matematyczne są pisane poza światem komputerów, co ułatwia zrozumienie dla osób niebędących programistami.
  • Julia ma automatyczne zarządzanie pamięcią. Podobnie jak Python, Julia nie obciąża użytkownika szczegółami przydzielania i zwalniania pamięci i zapewnia pewną miarę ręcznej kontroli nad usuwaniem pamięci. Chodzi o to, że jeśli przełączysz się na Julię, nie stracisz jednego z typowych udogodnień Pythona.
  • Julia oferuje doskonały paralelizm. Matematyka i obliczenia naukowe rozwijają się, gdy można wykorzystać pełne zasoby dostępne na danej maszynie, zwłaszcza wiele rdzeni. Zarówno Python, jak i Julia mogą wykonywać operacje równolegle. Jednak metody Pythona do równoległych operacji często wymagają serializacji i deserializacji danych między wątkami lub węzłami, podczas gdy równoległość Julii jest bardziej dopracowana. Co więcej, składnia zrównoleglania Julii jest mniej skomplikowana niż składnia Pythona, obniżając próg jej użycia.
  • Julia opracowuje własne natywne biblioteki uczenia maszynowego. Flux to biblioteka systemów uczących się Julii, która ma wiele istniejących wzorców modeli dla typowych przypadków użycia. Ponieważ jest napisany w całości w Julii, może być modyfikowany w razie potrzeby przez użytkownika i wykorzystuje natywną kompilację Julii w trybie just-in-time do optymalizacji projektów od wewnątrz. 

Julia vs. Python: zalety Pythona

Chociaż Julia została stworzona z myślą o nauce o danych, podczas gdy Python w mniejszym lub większym stopniu wyewoluował do roli, Python oferuje analitykowi danych pewne istotne zalety. Niektóre z powodów, dla których Python „ogólnego przeznaczenia” może być lepszym wyborem do nauki o danych:

  • Python używa indeksowania tablic od zera. W większości języków, łącznie z Pythonem i C, pierwszy element tablicy jest dostępny za pomocą zera - np. string[0]W Pythonie dla pierwszego znaku w ciągu. Julia używa 1 jako pierwszego elementu tablicy. To nie jest arbitralna decyzja; wiele innych aplikacji matematycznych i naukowych, takich jak Mathematica, korzysta z indeksowania 1, a Julia ma na celu przyciągnąć uwagę tych odbiorców. Istnieje możliwość obsługi indeksowania zerowego w Julii za pomocą funkcji eksperymentalnej, ale domyślne indeksowanie 1 może przeszkodzić w przyjęciu go przez bardziej powszechną grupę odbiorców z zakorzenionymi nawykami programistycznymi.
  • Python ma mniejsze obciążenie związane z uruchamianiem.  Programy w języku Python mogą być wolniejsze niż programy Julia, ale samo środowisko wykonawcze języka Python jest lżejsze i generalnie uruchamianie i dostarczanie pierwszych wyników programów w języku Python zajmuje mniej czasu. Ponadto, chociaż kompilacja JIT przyspiesza czas wykonywania programów Julia, odbywa się to kosztem wolniejszego uruchamiania. Wykonano wiele pracy, aby Julia zaczęła szybciej, ale Python wciąż ma przewagę.
  • Python jest dojrzały. Język Julii jest młody. Prace nad Julią rozwijają się dopiero od 2009 roku i po drodze przeszły przez sporą liczbę funkcji. Natomiast Python istnieje od prawie 30 lat.
  • Python ma znacznie więcej pakietów innych firm. Zakres i użyteczność kultury pakietów innych firm w Pythonie pozostaje jedną z największych atrakcji tego języka. Ponownie, względna nowość Julii oznacza, że ​​kultura oprogramowania wokół niej jest wciąż niewielka. Część z nich jest równoważona przez możliwość korzystania z istniejących bibliotek C i Python, ale Julia potrzebuje własnych bibliotek, aby się rozwijać. Biblioteki takie jak Flux i Knet sprawiają, że Julia jest użyteczna w uczeniu maszynowym i głębokim uczeniu się, ale zdecydowana większość tej pracy jest nadal wykonywana za pomocą TensorFlow lub PyTorch.
  • Python ma miliony użytkowników. Język jest niczym bez dużej, oddanej i aktywnej społeczności wokół niego. Społeczność wokół Julii jest entuzjastyczna i rośnie, ale wciąż stanowi tylko ułamek wielkości społeczności Pythona. Ogromna społeczność Pythona to ogromna zaleta. 
  • Python jest coraz szybszy. Oprócz ulepszenia interpretera Pythona (w tym ulepszeń przetwarzania wielordzeniowego i równoległego), Python stał się łatwiejszy do przyspieszenia. Projekt mypyc tłumaczy Pythona z adnotacjami typu na natywne C, znacznie mniej niezgrabnie niż Cython. Zwykle daje czterokrotną poprawę wydajności, a często znacznie więcej w przypadku czysto matematycznych operacji.