R czy Python porównanie

R czy Python? Jakiego języka uczyć się w 2019 roku.

Poniższy artykuł został pierwotnie opublikowany 7 marca 2018. Poniżej znajduje się zaktualizowana i rozszerzona wersja uwzględniająca stan na 2019 rok.

Który język wybrać do pracy z danymi. Czy powinien być to R, czy Python? Na to pytanie nie ma niestety prostej odpowiedzi. W tym artykule chciałabym przybliżyć główne różnice i podobieństwa między tymi dwoma językami i przyjrzeć się ich zaletom w przypadku poszczególnych zastosowań. Skoro czytasz ten artykuł zakładam, że właśnie stoisz przed takim wyborem. A może znasz już jeden z tych języków i rozważasz naukę drugiego? Porównanie to będzie obiektywne, nie staram się nikogo przekonać do jednego lub drugiego języka – w końcu oferujemy szkolenia zarówno z R jak i z Pythona. R i Python to języki open-source. R jest językiem stworzonym z myślą o analizach statystycznych i ich wizualizacji. Python natomiast jest językiem ogólnego przeznaczenia. W tym porównaniu skupimy się jednak jedynie na aspektach związanych z Data Science i szeroko pojętą analizą danych. Ważnym aspektem przy wyborze języka jest oczywiście dostępność ofert na rynku pracy. Nie zawsze mamy luksus wyboru tego, który nam najbardziej odpowiada i musimy po prostu dostosować się do rynku. Tu na szczęście nie powinniśmy mieć dylematów – dostępność ofert dla obu języków stale rośnie i bardzo często w ofertach pracy pojawiają się oba języki jednocześnie. Dokładne porównanie pensji i dostępności stanowisk na Polskim rynku pracy niestety nie jest takie proste, ponieważ niektóre z ofert pracy z Pythonem to stanowiska stricte deweloperskie, niezwiązane z analizą danych. To chyba tyle na początek, przyjrzyjmy się w takim razie jak wypada każdy z języków.

Składnia i szybkość

Choć może się wydawać, że jest to kluczowy element porównania, to jednak moim zdaniem różnice w szybkości obydwu języków nie są aż takie istotne. W gruncie rzeczy oba języki są wolne w porówaniu z C++ czy Javą. Co do zasady, Python jest szybszy i lepiej radzi sobie z zarządzaniem pamięcią, ale zależy to od tego co robimy i na jakich danych. W wielu przypadkach nie odczujemy różnicy w szybkości. Zarówno R jak i Python przechowują dane w pamięci RAM i domyślnie działają jednowątkowo, więc ograniczają nas zasoby naszej maszyny. Obecnie w obu językach mamy jednak możliwość obliczeń w chmurze (np. AWS), korzystania ze Sparka lub przeprowadzania operacji bezpośrednio na bazie danych, więc tak naprawdę żaden z tych języków nas w tym zakresie nie limituje. Jeżeli chodzi o składnię, wiele osób uważa kod pisany w Pythonie za bardziej elegancki i naturalny w odczycie. Python przypadnie do gustu zwłaszcza osobom, które miały już wcześniej styczność z programowaniem. Osoby z zapleczem ekonomiczno-statystycznym chętnie wybierają R. Dla osób, które nigdy nie miały styczności z programowaniem R-owe indeksowanie od jedynki będzie o wiele bardziej naturalne.

Instalacja, IDE

Instalacja R nie mogłaby być prostsza. Pobieramy i instalujemy R, a następnie RStudio i już możemy programować. Instalacja bibliotek też rzadko kiedy rodzi problemy.

RStudio IDE
RStudio to najpopularniejsze IDE do R
W przypadku Pythona nie jest to takie oczywiste. Python 2 czy Python 3? Które IDE? Konieczność wyboru może na początku onieśmielać, a instalacja Pythona nie jest tak łatwa jak w przypadku R. Nie należy jednak panikować. Tak naprawdę wystarczy, że zainstalujemy Anacondę (z Pythonem 3), czyli dystrybucję Pythona przeznaczoną do analizy danych i machine learningu. Ma ona zainstalowaną już większość potrzebnych blibliotek, a to właśnie instalacja bibliotek powoduje początkującym najwięcej problemów. Następnie musimy wybrać IDE. Dla początkujących dobrym wyborem będzie Spyder lub interaktywny Jupyter (oba IDE instalowane są automatycznie razem z Anacondą). Wśród deweloperów popularnym IDE, dostarczającym wielu dodakowych funkcjonalności jest PyCharm. Innym IDE wartym wypróbowania jest Atom, edytor tekstowy stworzony przez github. Z tej czwórki Jupyter jest wyraźnie inny, pisany w nim kod ma charakter interaktywnego zeszytu, gdzie kolejne kroki analizy uzupełniamy notatkami. Świetny wybór do nauki, raportów oraz analiz ad hoc, nie nadaje się natomiast do produkcji.

Przetwarzanie danych

Niezależnie od projektu nad którym pracujemy dane trzeba obejrzeć, oczyścić i przygotować na potrzeby dalszych analiz. Część tej pracy możemy wykonać jeszcze w bazie danych, ale wiele operacji wykonujemy dopiero w R czy w Pythonie. Pod tym względem lepiej wypada R, który wiele funkcji do przetwarzania danych ma wbudowanych, posiada doskonałą bibliotekę tidyverse (w szczególności pakiet dplyr) oraz szeroką gamę metod do imputacji brakujących danych. Python nadrabia biblioteką pandas podobną do R-owego dplyra. Na stronie dokumentacji pandas znajdziemy ciekawe porównanie popularnych operacji w R i w Python. Większość z nich jest do siebie bardzo podobna jeśli chodzi o długość i składnię. To, co w Pythonie uzyskujemy za pomocą dodawania kolejnych metod po kropce w R osiągamy stosując tzw. „pipe operator”, który wygląda tak: %>%. Tu jest plus dla Pythona – kod z kropkami jest szybszy do napisania i krótszy, jednak kod napisany za pomocą tidyverse jest bardziej czytelny. Jeżeli miałabym wybierać międzym R a Pythonem to na etapie przetwarzania danych zdecydowanie wybrałabym R.

Machine Learning i Deep Learning

W ciągu ostatnich kilku lat zagadnienia związane z uczeniem maszynowym oraz sieciami typu deep wyraźnie zyskały na popularności. Mimo, że żaden z porównywanych języków nie zostaje w tyle i stale rozwijane są dostępne biblioteki i algorytmy to jednak muszę przyznać, że Python robi to lepiej. Dzieje się to głownie za sprawą świetnej biblioteki Scikit-learn, która za pomocą spójnej i logicznej składni daje nam dostęp do wachlarza algorytmów. Dostępna dokumentacja jest bardzo dobra, zawiera liczne przykłady, a sama biblioteka jest stale rozwijana. R-owym odpowiednikiem Scikit-learn-a jest pakiet caret, który choć daje nam dostęp do znacznie większej liczby modeli (w tej chwili jest to 237), to jednak mnogość wyborów początkującego użytkownika może przyprawić o zawrót głowy, a sama dokumentacja nie podpowiada, które implemetacje algorytmów są najbardziej popularne.  Dodatkowo sama składnia, choć z założenia prosta i intuicyjna, jest moim zdaniem trudniejsza do nauki niż ma to miejsce w przypadku Scikit-learna. Na szczęście obszerna dokumentacja pomoże nam odnaleźć dostępne algorytmy i rozpocząć naszą przygodę z uczeniem maszynowym. Warto również poznać bilbiotekę H2O, która jest dostępna zarówno w R jak i w Pythonie, a jej składnia i funkcjonalności są w przypadku obu języków bardzo podobne. H2O to biblioteka do Machine Learningu oparta na Javie i korzystająca z obliczeń rozproszonych. Dzięki temu modele budowane w H2O są szybkie, dobrze radzą sobie z dużymi danymi i łatwo wdrożyć je na produkcję. Dodatkowo cały proces modelowania jest bardzo dobrze przemyślany, co sprawia że używanie H2O jest niezwykle wygodne, a początkującym trudniej jest popełnić poważny błąd związany z nieprawidłowym przygotowaniem danych do modelowania. Deep learning w Pythonie rozwija się bardzo dynamicznie, dostępnych jest kilka na prawdę świetnych pakietów i dość łatwo jest samodzielnie wystartować ponieważ nie brakuje w internecie skryptów i tutoriali. Python będzie dobrym wyborem zwłaszcza, gdy interesuje nas rozpoznawanie obrazów. Użytkownicy R nie muszą jednak rozpaczać – dla obu języków są dostępne interfejsy do wiodących bibliotek deep learningowych – Tersorflow, Keras i H2O19 (choć w H2O mamy do wyboru tylko kilka podstawowych architektur sieci).

Statystyka i ekonometria

Do zastosowań statystycznych i budowy modeli ekonometrycznych zdecydowanie powinniśmy wybrać R – w końcu do tego ten język został stworzony. Dostępnych jest mnóstwo mniejszych i większych pakietów niezależnie czy chodzi nam o modelowanie szeregów czasowych, filogenezę czy analizę przeżycia. Niestety mnogość pakietów R-owych ma też swoje wady. W tej chwili na CRANie dostępne jest 12 233 bibliotek. Oznacza to, że wiele treści się duplikuje, część pakietów nie jest już rozwijana i, niestety, ich obsłucha nie zawsze jest intuicyjna. Ale jeżeli zależy nam na tej jednej, bardzo specyficznej funkcji czy statystyce to istnieje duża szansa, że właśnie w R znajdziemy to czego szukamy. Jak szukać raczej niszowych pakietów? Przydatny może okazać się CRAN Task View, który proponuje nam pakiety wg. poszczególnych zastosowań. W Pythonie dostępne są jedynie podstawowe funkcje i jeżeli chcemy policzyć statystykę bardziej zaawansowaną niż test t-studenta niestety często nie obejdzie się bez samodzielnego tworzenia funkcji. Główna biblioteka, która oferuje modele statystyczne i ekonometryczne to StatsModels. Za jej pomocą oszacujemy modele liniowe, logitowe, modele ARIMA czy też VAR. Możemy przeprowadzić diagnostykę modelu oraz analizę głównych składowych (PCA). Do generowania liczb losowych z rozkładu przydatny będzie moduł stats z pakietu SciPy (scipy.stats).

Wizualizacje

Królem estetycznych i funkcjonalnych wizualizacji jest zdecydowanie ggplot2 – pakiet programu R autorstwa Hadleya Wickhama. Świetna jest w nim przede wszystkim gramatyka tworzenia wizualizacji, która, choć wymaga chwili nauki, pozwala nam z łatwością tworzyć i dostosowywać do naszych potrzeb wykresy. Ggplot2 ma wielu fanów, a ja zdecydowanie jestem jednym z nich i nie ma się co dziwić – ten pakiet jest po prostu rewelacyjny. W Pythonie głowną biblioteką do tworzenia wizualizacji jest matplotlib, który pozawala na stworzenie zaawansowanego wykresu i dowolne jego dostosowanie, jednak raczej nie obędzie się bez długiego studiowania dokumentacji i chwil zwątpienia. Na ratunek przychodzi Seaborn – pakiet zbudowany na matplotlibie zawierający szereg wykresów przydatnych w analizie danych jak na przykład wykresy pudełkowe, punktowe czy heatmapy. Seaborn jest dużo prostszy i wygodniejszy w użyciu niż matplotlib. Inną bilbioteką do tworzenia ładnych wizualizacji w Pythonie jest Altair. Fani ggplota z pewnością docenią stosunkowo nowy pakiet plotnine. Jest to niemal wierne odwzorowanie R-owego pakietu, więc jeżeli brak ggplot2 to jedyne co powstrzymuje Cię przed nauką Pythona to nie masz się już czym martwić.

 

Interaktywne wykresy i mapy

W przypadku wykresów interaktywnych (czyli takich które można przybliżać i oddalać, a po najechaniu na obserwację lub fragment wykresu wyświetla się tooltip z informacjami) nie mam jednoznacznego faworyta. Zarówno R jak i Python spisują się nieźle. Zobaczmy więc jakie możliwości tworzenia interaktywnych wizualizacji mamy w każdym z języków.

Przede wszystkim należy wspomnieć o Plotly, bibliotece służącej do tworzenia eleganckich, interaktywnych wizualizacji opartych na JavaScripcie (d3.js i webgl). Plotly ma swoje biblioteki zarówno dla Pythona jak i R oraz kilku innych języków (JS, MATLAB, Julia, Scala). Nie będę się rozpisywać na temat możliwości Plotly, myślę że najlepiej jest wejść na stronę i samemu pooglądać możliwości jakie daje nam ta bilbioteka. W tym punkcie warto również wspomnieć, że każdy wykres utworzony w R za pomocą ggplot2 możemy jedą linijką kodu zamienić w wykres Plotly, co jest pewnym ułatwieniem – nie musimy uczyć się składni kolejnej biblioteki.

Do tworzenia map w przypadku każdego z języków polecam tę samą biliotekę – leaflet. Dzięki tej bibliotece możemy tworzyć efektowne, w pełni interaktywne mapy na różnych podkładach. Leaflet pozwoli nam na zwizualizowanie kartogramów, pojedyńczych punktów na mapie oraz tras. Istnieje wiele opcji customizacji tworzonej przez nas mapy. Oba języki pozwalają również na tworzenie map statycznych i w tym aspekcie wygodniej pracowało mi się z R.

Raporty i prezentacje

Tutaj faworyt jest moim zdaniem tylko jeden – R. Za pomocą R-owego pakietu RMarkdown możemy tworzyć raporty i prezentacje w formatach HTML, PDF lub Word. Taki skrypt łączy w sobie fragmenty kodu oraz fragmenty tekstu napisanego za pomocą Markdown. Raport możemy wzbogacić o spis treści, linki, obrazki, a format HTML nawet o gify, wideo i elementy interatywne. Przykładem tego jak taki raport może wyglądać jest mój post o przetwarzaniu danych w dplyr. Ten post został w całości napisany w RMarkdown. Jako ciekawostkę dodam, że jest w R biblioteka bookdown, która pozwala na pisanie i składanie całych książek. Przykładem takiej książki może być R for Data Science Hadleya Wickhama, jednocześnie polecam tę pozycję osobom zaczynającym swoją przygodę z R i pakietem tidyverse.

No a co z raportami w Pythonie? Tutaj drogi są dwie. Możemy zapisać nasz Jupyter notebook w formie HTML lub PDF, jednak nie ukrywam, że w porównaniu do RMarkdown te raporty mają bardziej roboczy charakter, są mniej dopracowane. Jeżeli zależy nam na personalizacji i paramteryzacji raportów zawsze mamy możliwość skorzystać z RMarkdown. Tak jest, RMarkdown pozwala nam również na tworzenie raportów pisanych w Pythonie, a nawet na mieszanie tych dwóch języków w ramach jednego raportu.

Interaktywne aplikacje, BI

Tu musimy wyraźnie rozgraniczyć o czym mówimy. Python jest językiem o wszechstronnym zastosowaniu i korzystając z frameworków takich jak Flask czy Django możemy za jego pomocą budować całe aplikacje webowe dla tysięcy użytkowników (chodzi o takie aplikacje jak np. Uber czy Instagram). Tylko oczywiście żeby pisać takie aplikacje potrzebujemy deweloperów. W R nie mamy możliwości budowy tego typu aplikacji wcale, bo ten język się do tego po prostu nie nadaje. Musimy więc nasze kody napisane w R albo przepisać na inny język, albo integrować fragmenty kodu R z innym językiem (np. z Javą). Oczywiście, gdy kod napisany w Pythonie chcemy wykorzystać w apce napisanej w innym języku czeka nas dokładnie to samo. Chciałabym natomiast omówić inne zagadnienie, proste aplikacje webowe, które jest w stanie stworzyć każdy Data Scientist.

Często wyniki naszej analizy chcemy opakować w narzędzie, które będzie regularnie odświeżane, interaktywne i łatwo dostępne dla pozostałych członków naszej organizacji. Nawet tych, dla których R to po prostu kolejna literka w alfabecie a Python to taki duży wąż. Mowa o dwóch narzędziach – Shiny (R) oraz Dash (Python). Zarówno Shiny jak i Dash pozwalają nam na budowę aplikacji webowych bez znajmości skomplikowanych frameworków. Tu trzeba wyraźnie zaznaczyć, że są to aplikacje nastawione przede wszystkim na wizualizację i eksplorację danych lub tworzenie dashboardów (jak w Tableau lub w Qlik’u). Bardzo trudno jest mi w tej kategorii wyłonić faworyta ponieważ aktywnie korzystam wyłącznie z Shiny. Shiny posida na tą chwilę więcej funkcjonalności, natomiast Dash szybko się rozwija i prawdopodobnie w długim okresie funkcjonalności obu narzędzi będą podobne. Jeżeli chodzi o wygląd aplikacji najlepiej obejrzeć galerie prezentowane na stronach obu pakietów lub demo aplikacje (Dash 1, Dash 2, Shiny 1, Shiny 2).

Podsumowanie

Nie tak łatwo jest wybrać faworyta. W końcu oba z prezentowanych języków maja swoje plusy i minusy i szybko nadrabiają braki względem konkurenta. Myślę, że o wyborze języka powinno zadecydować to do czego głownie będziemy go używać oraz nasze osobiste preferencje. Nie warto poświęcać wielu godzin na decyzję i szukanie za i przeciw; lepiej ten czas wykorzystać do zdobycia praktycznych umiejętności. Najważniejsze jest jedno – gdy okaże się, że nie do końca odpowiada nam język, który wybraliśmy nauka drugiego z nich będzie bezbolesna. Każdy z języków posiada dobrą dokumentację i rozwiniętą społeczność, więc nie powinniśmy mieć problemów ze znalezieniem i zastosowaniem odpowiedników naszych ulubionych funkcji. A jeżeli nie wiesz od czego zacząć naukę zapraszamy na nasze szkolenia R dla początkujących i Wprowadzenie do Python. Pomogą ci one postawić pierwsze kroki w danym języków bez błądzenia, poszukiwania odpowiednich pakietów i budowania złych nawyków, co wyraźnie przyspieszy twój start z R lub Pythonem.

Nikt jeszcze nie dodał komentarza, możesz być pierwszy!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


Zapytaj o szkolenie

Jestem zainteresowany/a


 

Zapytaj o szkolenie zamknięte

Jestem zainteresowany/a


 

Zapytaj o szkolenie otwarte
 

Jestem zainteresowany/a


 

Zapytaj o ścieżkę szkoleniową
 

Rodzaj ścieżki:

Preferowany tryb szkolenia:

DziennyPopołudniowyWeekendowy

Podaj wynik działania:


 
Szybki kontakt