14 minut Czytania

R czy Python? Który język programowania wybrać w 2024 roku?

R czy Python – który język programowania wybrać?

Istnieje duże prawdopodobieństwo, że podobne pytanie zadała sobie każda osoba, która zainteresowała się branżą Data Science. Niemożliwym jest wskazanie jednego idealnego rozwiązania – oba języki mają swoje wady i zalety. Ostateczny wybór jednego z omawianych języków najczęściej zależy od zadania, które zamierzamy wykonać oraz od indywidualnych preferencji użytkownika. Mając to na uwadze, można stwierdzić, że najlepszym wyborem będą oba języki.

Rozumiem, że proces nauki obu języków może być znacznie utrudniony ze względu na ograniczony czas oraz budżet, a wchodząc w ten artykuł z pewnością oczekiwałeś konkretnej odpowiedzi. Co więcej, od czegoś trzeba zacząć i najprawdopodobniej wolałbyś skupić się na jednym z języków. W tym artykule przedstawię kilka zastosowań oraz zalet, a ostateczny wybór pozostawię Tobie.

Instalacja oraz wybór środowiska programistycznego

W wielu kwestiach trudno jest wskazać faworyta, jednak w przypadku instalacji zdecydowanie lepiej wypada R. Instalacja R jest bardzo prosta – wystarczy go pobrać i zainstalować. Po instalacji samego języka należy również zainstalować odpowiednie środowisko programistyczne (IDE), które ułatwi nam pracę. W R najbardziej popularnym – i najprawdopodobniej najlepszym – IDE jest RStudio. Po wykonaniu omówionych kroków, włączamy RStudio i możemy rozpoczynać naukę.

Sytuacja jest nieco bardziej skomplikowana w przypadku Pythona, który posiada kilka dostępnych wersji języka. Zasada jest dość prosta: nie powinniśmy korzystać z Pythona 2, więc należy wybrać najbardziej aktualną wersję Pythona 3. Jeżeli mówimy o pracy z danymi, to warto zainstalować Anacondę – dystrybucję Pythona 3 przeznaczoną do analizy danych i machine learningu.

Wraz z Anacondą instalowane są najpopularniejsze biblioteki do przetwarzania danych, co jest znacznym ułatwieniem dla początkujących. Instalacja dodatkowych bibliotek w Pythonie jest mniej intuicyjna niż w R, więc na początku nauki może to być dość kłopotliwe. Automatycznie instalowane są również dwa popularne IDE, które będą bardzo dobrym wyborem dla początkujących – Spyder oraz Jupyter.

Wśród deweloperów popularnym IDE jest PyCharm, który dostarcza wiele dodatkowych funkcjonalności i jest wykorzystywany nie tylko w branży Data Science. Wartym uwagi jest również Data Spell – IDE bardzo podobne do PyCharma, jednak stworzone specjalnie dla branży Data Science (niestety jest to płatna opcja).

Kod tworzony w Jupyterze wygląda inaczej w porównaniu do pozostałych IDE – jest to interaktywny zeszyt, w którym każdą kolejną komórkę z kodem możemy opisywać swoimi notatkami. Charakter Jupytera powoduje, że jest to świetny wybór do nauki, tworzenia raportów oraz analiz ad hoc, jednak do większych projektów warto rozważyć wybór innego środowiska.

Szybkość i składnia

Który język jest szybszy? Na początku drogi w branży Data Science nie powinniśmy się tym przejmować. Szybkość wykonywanych operacji w Pythonie oraz R jest do siebie bardzo zbliżona i nie jest to element, który powinien decydować o wyborze jednego z omawianych języków. Jeżeli w przyszłości szybkość wykonywanych operacji stanie się dla nas priorytetem, to skorzystamy z odpowiednich bibliotek dostępnych w obu językach lub wybierzemy jeszcze inne narzędzia do przetwarzania danych.

Różnice w składni najlepiej jest pokazać na przykładzie:

# Python
animals = ['cat', 'dog', 'fish']
for animal in animals:
	print('I like this ' + animal)
# R
animals -> c('cat', 'dog', 'fish')
for (animal in animals) {
	text -> paste('I like this', animal, sep = ' ')
	print(text)

Wynik w konsoli:

I like this cat
I like this dog
I like this fish

Kod w Pythonie jest zauważalnie krótszy i bardziej czytelny. Składnia Pythona charakteryzuje się znacznie mniejszą liczbą stosowanych nawiasów, zamiast których stosowane są wcięcia (tabulator). Co więcej, w Pythonie tworzenie obiektów oraz wykonywanie na nich podstawowych operacji cechuje się również minimalistycznym podejściem – do utworzenia wektora używa się tylko kwadratowych nawiasów, a do łączenia tekstu można użyć „+”. W R wektory można tworzyć na wiele sposobów, jednak w powyższym przypadku byliśmy zmuszeni do zastosowania odpowiedniej funkcji – c() – która umożliwiła nam złączenie trzech różnych obiektów tekstowych. Podstawy języka są zdecydowanie bardziej przejrzyste i intuicyjne w Pythonie, co z pewnością jest dużą zaletą.

Przetwarzanie danych

Ustaliliśmy, że podstawy języka w Pythonie są zdecydowanie prostsze, jednak najbardziej interesuje nas branża Data Science oraz praca z danymi. W tym przypadku odpowiedź nie będzie tak jednoznaczna, co jest zauważalne w poniższym przykładzie:

# Python
# Tworzenie prostej ramki danych
import pandas as pd
df = pd.DataFrame({
	'animal': ['cat', 'dog', 'fish'],
	'age': [2, 1, 4]
})
# Wybieranie kolumny 'age' z ramki danych
age_column = df['age']
age_column = df.iloc[:, 1]
# Jaka jest maksymalna wartość z kolumny 'age'?
max_age = df['age'].max()
max_age = df.iloc[:, 1].max()
max_age = max(df['age']) # można również w ten sposób
# R
# Tworzenie prostej ramki danych
library(tidyverse)
df <- tibble(
  'animal' = c('cat', 'dog', 'fish'),
  'age' = c(2, 1, 4)
)
# Wybieranie kolumny 'age' z ramki danych
age_column <- df$age
age_column <- df['age']
age_column <- df[2]
# Jaka jest maksymalna wartość z kolumny 'age'?
max_age <- max(df$age)
max_age <- max(df['age'])
max_age <- max(df[2])

Wyciąganie wartości z poszczególnych kolumn w Pythonie może odbywać się na dwa sposoby: poprzez podanie nazwy kolumny lub indeksu (numeru) kolumny. W naszym przypadku nazwą kolumny jest „age” i jest to kolumna nr 1 w ramce danych. Warto zaznaczyć, że w Pythonie liczenie kolumn rozpoczyna się od 0, więc: pierwsza kolumna z ramki danych ma indeks 0, druga kolumna ma indeks 1 itd. Po wybraniu kolumny sprawdziliśmy również ile wyniosła maksymalna wartość w kolumnie „age”.

Podobnie sytuacja wygląda w R – kolumnę można wybierać na podstawie jej nazwy lub indeksu. Różnicą jest tutaj możliwość odwoływania się do nazwy kolumny poprzez stosowanie „$”, co znacząco zwiększa czytelność kodu. Istotną zmianą w porównaniu do Pythona jest indeksowanie kolumn – w R indeksowanie rozpoczyna się od 1, a nie od 0, co na początku może być znacznie bardziej intuicyjne.

Wiemy już czym różnią się składnie obu języków oraz poznaliśmy proste operacje wykonywane na ramkach danych. Jeżeli nie posiadasz doświadczenia w programowaniu i przedstawione różnice nie okazały się pomocne, to przydatna może okazać się Twoja intuicja. Przyjrzyj się zaprezentowanym przykładom i zastanów się który bardziej przypada Ci do gustu. Warto również rozważyć charakterystyczne rzeczy dla obu języków: może spodobała Ci się możliwość wybierania kolumn poprzez „$” i numerowanie kolumn od 1 w R, a może polubiłeś składnię i niewiele nawiasów w Pythonie? Oba języki są bardzo dobrym wyborem, więc po prostu wybierz ten, który wydaje Ci się w tej chwili bardziej przystępny.

Jeżeli praca z ramkami danych ograniczałaby się do przedstawionych prostych przykładów, to najprawdopodobniej nikt nie korzystałby z języków programowania do przetwarzania danych. W rzeczywistości wykonujemy znacznie bardziej skomplikowane operacje (np. agregowanie), do których R oraz Python posiadają odpowiednie biblioteki – Tidyverse oraz Pandas (obie zostały wykorzystane w powyższych przykładach kodu).

Tidyverse to zbiór mniejszych zintegrowanych pakietów dostępnych w R do pracy z danymi, spośród których najistotniejszym jest dplyr umożliwiający zaawansowane przetwarzanie danych. Odpowiednikiem dplyra w Pythonie jest biblioteka Pandas. Jeżeli chciałbyś dowiedzieć się więcej na temat przetwarzania danych w Pythonie oraz R, to warto przyjrzeć się porównaniu Pandas i dplyra.

Projekty w branży Data Science zawsze wymagają sprawdzenia, oczyszczenia oraz przygotowania danych na dalsze potrzeby analizy. Biblioteka Tidyverse w R – dzięki swojej wszechstronności – znacznie usprawnia ten proces, a osoby początkujące z pewnością docenią fakt, że wiele istotnych funkcji znajduje się w jednym miejscu. Pandas w Pythonie umożliwia korzystanie z najważniejszych funkcji do przetwarzania danych, jednak funkcje poboczne – bardzo często ułatwiające pracę z danymi – znajdują się bardzo często w innych bibliotekach.

Wizualizacja danych

Wizualizacja danych jest bardzo ważnym elementem każdej analizy. Komputery doskonale rozumieją liczby i uwielbiają ramki danych, jednak człowiekowi zdecydowanie łatwiej zrozumieć dane przedstawione w formie graficznej. Python oraz R oferują wiele możliwości wizualizacji, a narzędzie, którym ostatecznie się posłużymy będzie naszą indywidualną sprawą – najważniejszy jest efekt końcowy, czyli czytelna oraz przyjemna w odbiorze wizualizacja. Ciężko wskazać, który język jest w tym przypadku lepszy.

W R możemy korzystać z wbudowanych funkcji umożliwiających wizualizację danych, jednak zdecydowanie lepszym rozwiązaniem jest pakiet ggplot2, który jest częścią biblioteki Tidyverse. Pakiet ten jest względnie prosty do nauczenia, posiada wiele możliwości wizualizacji oraz pozwala w prosty sposób dostosowywać wykresy do naszych potrzeb. Wykres wykonany w ggplot2 może wyglądać następująco:

R czy Python?

Źródło danych: IMGW-PIB

W Pythonie główną biblioteką wykorzystywaną do wizualizacji danych jest matplotlib, który umożliwia tworzenie zaawansowanych wykresów oraz dobrowolną modyfikację. Nauka matplotliba – ze względu na jego rozbudowane możliwości – z pewnością będzie wymagała pracy z dokumentacją oraz może okazać się względnie trudniejsza, jednak możliwość tworzenia dowolnej wizualizacji jest bardzo przydatna. Wizualizację w Pythonie można również wykonać w bibliotece Seaborn, która jest znacznie prostszą i wygodniejszą alternatywą matplotliba. Innymi bibliotekami do wizualizacji danych, na które warto zwrócić uwagę są: Altair oraz Plotnine, który jest odwzorowaniem pakietu ggplot2 z R. Poniżej znajduje się przykładowy wykres utworzony przy pomocy matplotliba.

R czy Python?

Źródło danych: IMGW-PIB

Jak wygląda składnia? Utworzenie najprostszego wykresu słupkowego mogłoby wyglądać następująco:

# Python z matplotlibem
# Tworzenie prostej ramki danych
import pandas as pd
df = pd.DataFrame({
	'animal': ['cat', 'dog', 'fish'],
	'age': [2, 1, 4]
})
# Tworzenie wykresu przy pomocy matplotliba
import matplotlib.pyplot as plt
plt.bar(df['animal'], df['age'])
# Wyświetlenie wykresu
plt.show()
# R z ggplot2
# Tworzenie prostej ramki danych
library(tidyverse)
df <- tibble(
  'animal' = c('cat', 'dog', 'fish'),
  'age' = c(2, 1, 4)
)
# Tworzenie wykresu przy pomocy ggplot2
bar_plot <- ggplot(data = df, aes(x = animal, y = age)) + 
  geom_bar(stat = 'identity')
# Wyświetlenie wykresu
bar_plot

Interaktywne wykresy i mapy

Do tworzenia interaktywnych wykresów oraz map stworzono wiele narzędzi w obu językach, jednak warto tutaj zwrócić uwagę na Plotly oraz Leaflet. Obie biblioteki są dostępne w Pythonie i R, więc warto je poznać ze względu na ich uniwersalność.

Plotly służy do tworzenia interaktywnych wykresów. Są to wykresy, z którymi użytkownik może wchodzić w interakcję przy pomocy kursora – podświetlane są konkretne wartości, wykresy można przybliżać i oddalać, poszczególne elementy wykresu mogą być przestawione itp. Warto zwrócić uwagę, że wykresy tworzone w ggplot2 mogą zostać w prosty sposób przekształcone do interaktywnych wykresów Plotly (za pomocą jednej funkcji) – jest to bardzo przydatne, ponieważ do tworzenia interaktywnych wykresów w R nie trzeba poznawać składni Plotly.

Leaflet jest doskonałym narzędziem do wizualizowania danych przestrzennych. Umożliwia tworzenie kartogramów, zaznaczanie konkretnych punktów oraz tras na mapie, korzystanie z różnych podkładów i wiele innych. Mapy tworzone w Leaflet są również interaktywne i w prosty sposób można je zamieszczać na stronach internetowych.

Interaktywne wykresy w Plotly również mogą zostać zaprezentowane na stronie internetowej przy pomocy Dasha, który jest dostępny w obu językach (Dash w R, Dash w Pythonie). W R dostępna jest dodatkowo biblioteka Shiny, która także umożliwia tworzenie prostych aplikacji internetowych do wizualizacji oraz eksploracji danych. Aplikacje internetowe utworzone w Dashu lub Shiny nie wymagają znajomości omawianych języków programowania, więc każdy może z nich skorzystać.

Raporty i prezentacje

R posiada uniwersalny pakiet R Markdown, który umozliwia tworzenie raportów oraz prezentacji w formacie HTML, PDF lub DOCX. Raporty tworzone przez R Markdown mogą łączyć ze sobą fragmenty kodu oraz tekst, a dodatkowo możemy w nich zawierać: spis treści, odnośniki do stron internetowych, obrazki, gify oraz wideo.

Tworzenie raportów w Pythonie jest możliwe na kilka sposobów. Możliwe jest wygenerowanie raportu bezpośrednio z IDE Jupytera, jednak kwestia estetyki dla wielu osób może być problematyczna. Zdecydowanie lepszym wyborem jest biblioteka FPDF, która umożliwia tworzenie plików PDF oraz automatyzację całego procesu. Tworzenie plików w innych formatach jest również możliwe, jednak wymaga to znajomości dodatkowych bibliotek, które nie zawsze posiadają rozbudowaną dokumentację, a ich obsługa w porównaniu do biblioteki FPDF nie jest zbyt intuicyjna.

W kategorii raportów oraz prezentacji R wydaje się być lepszym wyborem od Pythona. Biblioteka R Markdown jest bardzo uniwersalna i umożliwia tworzenie raportów we względnie prosty sposób, wspierając różne formaty plików. W Pythonie aktualnie najlepszym wyborem do tworzenia raportów jest biblioteka FPDF, która niestety wspiera tylko jeden format pliku.

Machine Learning i Deep Learning

Uczenie maszynowe (machine learning) zajmuje się uczeniem komputerów na podstawie danych. Proces nauki nie jest zaprogramowany, a komputer doskonali się wraz z upływem czasu oraz zdobywanym doświadczeniem. Uczenie maszynowe w ciągu ostatnich kilku lat znacząco zyskało na popularności, a Python oraz R są najczęściej wykorzystywanymi językami programowania do tworzenia modeli uczenia maszynowego.

R czy Python?

Źródło danych: Google Trends

W Pythonie najpopularniejszą biblioteką przeznaczoną do tego celu jest Scikit-learn, która oferuje szeroki wybór algorytmów, prostą składnię oraz rozbudowaną dokumentację. Odpowiednikiem Scikit-learna w R jest biblioteka Caret, która również udostępnia wiele algorytmów uczenia maszynowego, jednak jej dokumentacja jest znacznie mniej rozbudowana. Składnia biblioteki Caret nie należy do najbardziej intuicyjnych i może być względnie trudniejsza do nauczenia. 

Warto zwrócić uwagę na bibliotekę Tidymodels, która jest zbiorem mniejszych paczek przeznaczonych do uczenia maszynowego w R, posiada przyjazną dokumentację, a korzystanie z niej jest bardzo podobne do korzystania z biblioteki Tidyverse. Oferuje znacznie węższy wybór algorytmów w porównaniu do Scikit-learna, jednak jest stale rozwijana i w przyszłości może się to zmienić. Uczenie maszynowe wykonywane jest w obu językach, jednak – za sprawą biblioteki Scikit-learn – nauka omawianego zagadnienia będzie zdecydowanie prostsza w Pythonie.

Uczenie głębokie (deep learning) jest częścią uczenia maszynowego. Charakteryzuje się tym, że tworzone oprogramowanie uczy się i przetwarza informacje w podobny sposób do ludzkiego mózgu. Jest to bardzo szybko rozwijająca się branża, która znajduje coraz więcej zastosowań (np. w autonomicznych samochodach).

Python w przypadku uczenia głębokiego jest zdecydowanie lepszym wyborem od R. Najpopularniejszymi bibliotekami przeznaczonymi do tego celu są: Keras, TensorFlow i PyTorch. Szczególnie wartym uwagi jest PyTorch, który w ostatnim czasie bardzo zyskał na popularności ze względu na łatwość nauki, uniwersalność oraz szybkość wykonywania operacji. Głębokie uczenie w R jest również możliwe, jednak jest to zdecydowanie bardziej skomplikowane ze względu na brak bibliotek przeznaczonych do tego celu.

Podsumowanie

R czy Python? Który język wybrać? Odpowiedź na te pytania nigdy nie jest prosta, podobnie jak porównywanie obu języków oraz udowadnianie, że jeden jest lepszy od drugiego. W rzeczywistości oba języki są tak samo dobre, a wybór jednego z nich zależy od konkretnego zadania oraz preferencji użytkownika.

Jeżeli wciąż nie wiesz, który język wybrać, to odpowiedz sobie na poniższe pytania:

Pomocna może być również świadomość, że Python jest językiem programowania ogólnego przeznaczenia, więc jest wykorzystywany nie tylko w branży Data Science. Przy użyciu Pythona tworzone są również aplikacje i strony internetowe, aplikacje komputerowe, gry oraz automatyzowane są codzienne zadania. Jeżeli nie chcesz ograniczać programowania tylko do branży Data Science, to Python będzie bardzo dobrym wyborem.

R został stworzony dla statystyków, przez co jest świetnym narzędziem do wykonywania obliczeń oraz przetwarzania danych. Posiada wiele wbudowanych funkcji statystycznych, których nie musimy szukać w dodatkowych bibliotekach. R będzie bardzo dobrym wyborem dla osób spoza środowiska IT, które chciałyby wykorzystać umiejętności programowania głównie do przetwarzania danych. Warto przyjrzeć się CRANowi, który jest świetnym przewodnikiem do R-owych bibliotek. W szybki sposób możemy sprawdzić do czego wykorzystywany jest R, co może nam pomóc w podjęciu decyzji.

Jedno jest pewne: któregokolwiek języka nie wybierzesz, to będzie to dobra decyzja. Oba języki znajdują szerokie zastosowanie, a ich znajomość jest pożądaną umiejętnością na rynku pracy. Im szybciej rozpoczniesz naukę języka, tym lepiej. Warto mieć również na uwadze to, że gdy poznamy już jeden język, to nauka drugiego będzie znacznie łatwiejsza. Zapraszamy na nasze szkolenia – R | Python – podczas których wskażemy najprostszą drogę oraz prawidłowe nawyki, dzięki czemu Twój proces uczenia będzie znacznie przyspieszony.