Python vs. R: Sihir Gula Sintaktis
Diterbitkan: 2022-07-22Selera perkembangan saya telah berkembang sejak saya belajar menghargai rasa manis yang ditemukan dalam Python dan R. Ilmu data adalah seni yang dapat didekati dari berbagai sudut tetapi membutuhkan keseimbangan bahasa, perpustakaan, dan keahlian yang cermat. Kemampuan luas Python dan R menyediakan gula sintaksis: sintaksis yang memudahkan pekerjaan kita dan memungkinkan kita untuk mengatasi masalah kompleks dengan solusi singkat dan elegan.
Bahasa-bahasa ini memberi kami cara unik untuk menjelajahi ruang solusi kami. Setiap bahasa memiliki kekuatan dan kelemahannya masing-masing. Trik untuk menggunakan masing-masing secara efektif adalah mengenali jenis masalah mana yang diuntungkan dari setiap alat dan memutuskan bagaimana kami ingin mengomunikasikan temuan kami. Gula sintaksis dalam setiap bahasa memungkinkan kita bekerja lebih efisien.
R dan Python berfungsi sebagai antarmuka interaktif di atas kode tingkat yang lebih rendah, memungkinkan ilmuwan data menggunakan bahasa pilihan mereka untuk eksplorasi data, visualisasi, dan pemodelan. Interaktivitas ini memungkinkan kita untuk menghindari pengulangan tanpa henti dalam mengedit dan menyusun kode, yang secara tidak perlu memperumit pekerjaan kita.
Bahasa tingkat tinggi ini memungkinkan kami untuk bekerja dengan sedikit gesekan dan melakukan lebih banyak hal dengan lebih sedikit kode. Gula sintaksis setiap bahasa memungkinkan kita untuk dengan cepat menguji ide-ide kita dalam REPL (read-evaluate-print loop), sebuah antarmuka interaktif di mana kode dapat dieksekusi secara real-time. Pendekatan berulang ini adalah komponen kunci dalam siklus proses data modern.
R vs. Python: Ekspresif dan Khusus
Kekuatan R dan Python terletak pada ekspresi dan fleksibilitasnya. Setiap bahasa memiliki kasus penggunaan khusus di mana ia lebih kuat dari yang lain. Selain itu, setiap bahasa memecahkan masalah di sepanjang vektor yang berbeda dan dengan jenis keluaran yang sangat berbeda. Gaya ini cenderung memiliki komunitas pengembang yang berbeda di mana satu bahasa lebih disukai. Karena setiap komunitas tumbuh secara organik, bahasa dan fitur pilihan mereka menetapkan tren menuju gaya sintaksis gula unik yang mengurangi volume kode yang diperlukan untuk memecahkan masalah. Dan seiring dengan matangnya komunitas dan bahasa, gula sintaksis bahasa sering kali menjadi lebih manis.
Meskipun setiap bahasa menawarkan perangkat yang kuat untuk memecahkan masalah data, kita harus mendekati masalah tersebut dengan cara yang memanfaatkan kekuatan tertentu dari alat tersebut. R lahir sebagai bahasa komputasi statistik dan memiliki seperangkat alat yang tersedia untuk melakukan analisis statistik dan menjelaskan data. Python dan pendekatan pembelajaran mesinnya memecahkan masalah serupa tetapi hanya yang sesuai dengan model pembelajaran mesin. Pikirkan komputasi statistik dan pembelajaran mesin sebagai dua sekolah untuk pemodelan data: Meskipun sekolah-sekolah ini sangat saling berhubungan, asal-usul dan paradigma mereka untuk pemodelan data berbeda.
R Suka Statistik
R telah berkembang menjadi penawaran paket yang kaya untuk analisis statistik, pemodelan linier, dan visualisasi. Karena paket-paket ini telah menjadi bagian dari ekosistem R selama beberapa dekade, paket-paket ini matang, efisien, dan terdokumentasi dengan baik. Ketika suatu masalah membutuhkan pendekatan komputasi statistik, R adalah alat yang tepat untuk pekerjaan itu.
Alasan utama R disukai oleh komunitasnya bermuara pada:
- Manipulasi data diskrit, komputasi, dan metode penyaringan.
- Operator chaining fleksibel untuk menghubungkan metode tersebut.
- Gula sintaksis ringkas yang memungkinkan pengembang memecahkan masalah kompleks menggunakan metode statistik dan visualisasi yang nyaman.
Model Linier Sederhana Dengan R
Untuk melihat seberapa ringkas R, mari buat contoh yang memprediksi harga berlian. Pertama, kita membutuhkan data. Kami akan menggunakan dataset default diamonds
, yang diinstal dengan R dan berisi atribut seperti warna dan potongan.
Kami juga akan mendemonstrasikan operator pipa R ( %>%
), yang setara dengan operator pipa baris perintah Unix ( |
). Fitur gula sintaksis R yang populer ini disediakan oleh paket paket rapi. Operator ini dan gaya kode yang dihasilkan adalah pengubah permainan di R karena memungkinkan rantai kata kerja R (yaitu, fungsi R) untuk membagi dan menaklukkan luasnya masalah.
Kode berikut memuat pustaka yang diperlukan, memproses data kami, dan menghasilkan model linier:
library(tidyverse) library(ggplot2) mode <- function(data) { freq <- unique(data) freq[which.max(tabulate(match(data, freq)))] } data <- diamonds %>% mutate(across(where(is.numeric), ~ replace_na(., median(., na.rm = TRUE)))) %>% mutate(across(where(is.numeric), scale)) %>% mutate(across(where(negate(is.numeric)), ~ replace_na(.x, mode(.x)))) model <- lm(price~., data=data) model <- step(model) summary(model)
Call: lm(formula = price ~ carat + cut + color + clarity + depth + table + x + z, data = data) Residuals: Min 1Q Median 3Q Max -5.3588 -0.1485 -0.0460 0.0943 2.6806 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.140019 0.002461 -56.892 < 2e-16 *** carat 1.337607 0.005775 231.630 < 2e-16 *** cut.L 0.146537 0.005634 26.010 < 2e-16 *** cut.Q -0.075753 0.004508 -16.805 < 2e-16 *** cut.C 0.037210 0.003876 9.601 < 2e-16 *** cut^4 -0.005168 0.003101 -1.667 0.09559 . color.L -0.489337 0.004347 -112.572 < 2e-16 *** color.Q -0.168463 0.003955 -42.599 < 2e-16 *** color.C -0.041429 0.003691 -11.224 < 2e-16 *** color^4 0.009574 0.003391 2.824 0.00475 ** color^5 -0.024008 0.003202 -7.497 6.64e-14 *** color^6 -0.012145 0.002911 -4.172 3.02e-05 *** clarity.L 1.027115 0.007584 135.431 < 2e-16 *** clarity.Q -0.482557 0.007075 -68.205 < 2e-16 *** clarity.C 0.246230 0.006054 40.676 < 2e-16 *** clarity^4 -0.091485 0.004834 -18.926 < 2e-16 *** clarity^5 0.058563 0.003948 14.833 < 2e-16 *** clarity^6 0.001722 0.003438 0.501 0.61640 clarity^7 0.022716 0.003034 7.487 7.13e-14 *** depth -0.022984 0.001622 -14.168 < 2e-16 *** table -0.014843 0.001631 -9.103 < 2e-16 *** x -0.281282 0.008097 -34.740 < 2e-16 *** z -0.008478 0.005872 -1.444 0.14880 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.2833 on 53917 degrees of freedom Multiple R-squared: 0.9198, Adjusted R-squared: 0.9198 F-statistic: 2.81e+04 on 22 and 53917 DF, p-value: < 2.2e-16
R membuat persamaan linier ini mudah diprogram dan dipahami dengan gula sintaksisnya. Sekarang, mari kita alihkan perhatian kita ke tempat Python adalah rajanya.
Python Terbaik untuk Pembelajaran Mesin
Python adalah bahasa tujuan umum yang kuat, dengan salah satu komunitas pengguna utamanya berfokus pada pembelajaran mesin, memanfaatkan perpustakaan populer seperti scikit-learn, balanced-learn, dan Optuna. Banyak toolkit pembelajaran mesin yang paling berpengaruh, seperti TensorFlow, PyTorch, dan Jax, ditulis terutama untuk Python.
Gula sintaksis Python adalah keajaiban yang disukai para ahli pembelajaran mesin, termasuk sintaks pipa data yang ringkas, serta pola prediksi fit-transform-predict scikit-learn:
- Transformasikan data untuk mempersiapkannya untuk model.
- Membangun model (implisit atau eksplisit).
- Sesuaikan modelnya.
- Memprediksi data baru (model terawasi) atau mengubah data (tidak terawasi).
- Untuk model yang diawasi, hitung metrik kesalahan untuk titik data baru.
Pustaka scikit-learn merangkum fungsionalitas yang cocok dengan pola ini sambil menyederhanakan pemrograman untuk eksplorasi dan visualisasi. Ada juga banyak fitur yang sesuai dengan setiap langkah siklus pembelajaran mesin, menyediakan validasi silang, penyetelan hyperparameter, dan pipeline.
Model Pembelajaran Mesin Berlian
Kami sekarang akan fokus pada contoh pembelajaran mesin sederhana menggunakan Python, yang tidak memiliki perbandingan langsung di R. Kami akan menggunakan dataset yang sama dan menyoroti pola fit-transform-predict dalam bagian kode yang sangat ketat.
Mengikuti pendekatan pembelajaran mesin, kami akan membagi data menjadi partisi pelatihan dan pengujian. Kami akan menerapkan transformasi yang sama pada setiap partisi dan merantai operasi yang ada dengan pipeline. Metode (fit and score) adalah contoh kunci dari metode pembelajaran mesin yang kuat yang terkandung dalam scikit-learn:
import numpy as np import pandas as pd from sklearn.linear_model LinearRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import OneHotEncoder from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer from pandas.api.types import is_numeric_dtype diamonds = sns.load_dataset('diamonds') diamonds = diamonds.dropna() x_train,x_test,y_train,y_test = train_test_split(diamonds.drop("price", axis=1), diamonds["price"], test_size=0.2, random_state=0) num_idx = x_train.apply(lambda x: is_numeric_dtype(x)).values num_cols = x_train.columns[num_idx].values cat_cols = x_train.columns[~num_idx].values num_pipeline = Pipeline(steps=[("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler())]) cat_steps = Pipeline(steps=[("imputer", SimpleImputer(strategy="constant", fill_value="missing")), ("onehot", OneHotEncoder(drop="first", sparse=False))]) # data transformation and model constructor preprocessor = ColumnTransformer(transformers=[("num", num_pipeline, num_cols), ("cat", cat_steps, cat_cols)]) mod = Pipeline(steps=[("preprocessor", preprocessor), ("linear", LinearRegression())]) # .fit() calls .fit_transform() in turn mod.fit(x_train, y_train) # .predict() calls .transform() in turn mod.predict(x_test) print(f"R squared score: {mod.score(x_test, y_test):.3f}")
Kita dapat melihat betapa efisiennya proses pembelajaran mesin di Python. Selain itu, kelas sklearn
Python membantu pengembang menghindari kebocoran dan masalah yang terkait dengan meneruskan data melalui model kami sambil juga menghasilkan kode terstruktur dan tingkat produksi.
Apa Lagi Yang Dapat Dilakukan R dan Python?
Selain memecahkan aplikasi statistik dan membuat model pembelajaran mesin, R dan Python unggul dalam pelaporan, API, dasbor interaktif, dan penyertaan sederhana pustaka kode tingkat rendah eksternal.
Pengembang dapat membuat laporan interaktif dalam R dan Python, tetapi jauh lebih mudah untuk mengembangkannya di R. R juga mendukung ekspor laporan tersebut ke PDF dan HTML.
Kedua bahasa memungkinkan ilmuwan data untuk membuat aplikasi data interaktif. R dan Python menggunakan library Shiny dan Streamlit, masing-masing, untuk membuat aplikasi ini.
Terakhir, R dan Python keduanya mendukung binding eksternal ke kode tingkat rendah. Ini biasanya digunakan untuk menyuntikkan operasi berkinerja tinggi ke perpustakaan dan kemudian memanggil fungsi-fungsi itu dari dalam bahasa pilihan. R menggunakan paket Rcpp, sementara Python menggunakan paket pybind11 untuk mencapai ini.
Python dan R: Semakin Manis Setiap Hari
Dalam pekerjaan saya sebagai ilmuwan data, saya menggunakan R dan Python secara teratur. Kuncinya adalah memahami di mana setiap bahasa paling kuat dan kemudian menyesuaikan masalah agar sesuai dengan solusi yang dikodekan secara elegan.
Saat berkomunikasi dengan klien, ilmuwan data ingin melakukannya dalam bahasa yang paling mudah dipahami. Oleh karena itu, kita harus menimbang apakah presentasi statistik atau pembelajaran mesin lebih efektif dan kemudian menggunakan bahasa pemrograman yang paling sesuai.
Python dan R masing-masing menyediakan koleksi gula sintaksis yang terus bertambah, yang keduanya menyederhanakan pekerjaan kami sebagai ilmuwan data dan memudahkan pemahamannya kepada orang lain. Semakin halus sintaks kami, semakin mudah untuk mengotomatisasi dan berinteraksi dengan bahasa pilihan kami. Saya suka bahasa ilmu data saya manis, dan solusi elegan yang dihasilkan bahkan lebih manis.
Bacaan Lebih Lanjut di Blog Teknik Toptal:
- Pengantar Teori Pembelajaran Mesin dan Aplikasinya: Tutorial Visual dengan Contoh
- Pola Desain Python: Untuk Kode yang Ramping dan Modis
- Analisis Jaringan Sosial di R dan Gephi: Menggali Ke Twitter
- Menjelajahi Algoritma Pembelajaran Mesin yang Diawasi
- Memastikan Kode Bersih: Melihat Python, Berparameter