Saya akan mencoba merumuskan jawaban yang menyentuh titik-titik utama di mana kedua bahasa berperan untuk ilmu data / statistik / analisis data dan sejenisnya, sebagai seseorang yang menggunakan keduanya.
Alur kerja dalam analisis data umumnya terdiri dari langkah-langkah berikut:
- Mengambil data dari semacam sumber (kemungkinan besar database SQL / noSQL atau file .csv).
- Parsing data dalam format yang layak dan masuk akal (frame data) sehingga orang dapat melakukan operasi dan berpikir tentang hal itu.
- Menerapkan beberapa fungsi ke data (pengelompokan, menghapus, menggabungkan, mengganti nama).
- Menerapkan semacam model pada data (regresi, pengelompokan, jaringan saraf atau teori lain yang lebih atau kurang rumit).
- Menyebarkan / mempresentasikan hasil Anda ke audiens teknis yang kurang lebih.
Mengambil data
99% dari waktu, proses pengambilan data bermuara pada permintaan semacam database SQL atau Impala: baik Python dan R memiliki klien atau perpustakaan tertentu yang melakukan pekerjaan dalam waktu singkat dan sama baiknya ( RImpala
, RmySQL
untuk R dan MySQLdb
untuk Python berfungsi dengan lancar, tidak terlalu banyak untuk ditambahkan). Ketika datang untuk membaca file .csv eksternal, data.table
paket untuk R menyediakan fungsi fread
yang membaca dalam file .csv besar dan rumit dengan opsi penguraian kustom dalam waktu singkat, dan mengubah hasilnya secara langsung ke dalam frame data dengan nama kolom dan nomor baris.
Mengatur frame data
Kami ingin data disimpan dalam semacam tabel sehingga kami dapat mengakses setiap entri, baris, atau kolom dengan mudah.
The R paket data.table
menyediakan cara yang tidak ada duanya untuk label, mengubah nama, menghapus dan akses data. Sintaks standarnya sangat mirip dengan SQL dt[i, j, fun_by]
, di mana itu dimaksudkan dt[where_condition, select_column, grouped_by (or the like)]
; fungsi kustom yang ditentukan pengguna dapat diletakkan di sana juga dalam j
klausa, sehingga Anda benar-benar bebas untuk memanipulasi data dan menerapkan fungsi rumit atau mewah pada kelompok atau subset (seperti mengambil baris ke-i, ke-ke-k elemen dan jumlah ke elemen (k-2) -th dari baris (i-1) -th jika dan hanya jika deviasi standar dari seluruh kolom adalah apa-itu-adalah, dikelompokkan berdasarkan kolom terakhir sama sekali). Lihatlah tolok ukur dan pada pertanyaan luar biasa lainnya di SO. Menyortir, menghapus dan menamai ulang kolom dan baris melakukan apa yang harus mereka lakukan, dan metode R vectorised standar apply, sapply, lapply, ifelse
melakukan operasi vectorised pada kolom dan bingkai data sekaligus, tanpa perulangan melalui setiap elemen (ingat bahwa setiap kali Anda menggunakan loop di R Anda melakukannya dengan sangat salah).
Counterweapon Python adalah pandas
perpustakaan. Akhirnya menyediakan struktur pd.DataFrame
(yang tidak dimiliki oleh standar Python, untuk beberapa alasan masih belum diketahui oleh saya) yang memperlakukan data apa adanya, yaitu kerangka data (bukan beberapa numpy array, numpy list, numpy matrix
atau apa pun). Operasi seperti pengelompokan, penamaan ulang, pengurutan dan sejenisnya dapat dengan mudah dicapai dan di sini, pengguna juga dapat menerapkan fungsi kustom apa pun ke kumpulan data yang dikelompokkan atau bagian dari bingkai menggunakan Python apply
atau lambda
. Saya pribadi tidak suka tata bahasa df[df.iloc(...)]
untuk mengakses entri, tapi itu hanya selera pribadi dan tidak ada masalah sama sekali. Tolak ukur untuk operasi pengelompokan masih sedikit lebih buruk daripada R data.table
tetapi kecuali Anda ingin menyimpan 0,02 detik untuk kompilasi tidak ada perbedaan besar dalam kinerja.
String
Cara R untuk memperlakukan string adalah dengan menggunakan stringr
paket yang memungkinkan manipulasi teks, anagram, ekspresi reguler, spasi spasi putih atau sejenisnya dengan mudah. Hal ini juga dapat digunakan dalam kombinasi dengan perpustakaan JSON yang membongkar kamus JSON dan membatalkan pendaftaran elemen-elemennya, sehingga orang memiliki kerangka data akhir di mana nama kolom dan elemen adalah apa yang mereka harus, tanpa karakter non-UTF8 atau spasi. di sana.
Panda Python .str.
melakukan pekerjaan yang sama bermain dengan ekspresi reguler, tertinggal atau sebagus kompetitornya, sehingga bahkan di sini tidak ada perbedaan besar dalam rasa.
Menerapkan model
Di sinilah, menurut pendapat saya, perbedaan antara kedua bahasa muncul.
Rtelah, pada hari ini, satu set perpustakaan yang tidak ada duanya yang memungkinkan pengguna untuk melakukan apa pun yang mereka inginkan dalam satu atau dua baris kode. Regresi fungsional atau polinomial standar dilakukan dalam satu-liner dan menghasilkan output yang koefisiennya mudah dibaca, disertai dengan interval kepercayaan yang sesuai dan distribusi nilai-p. Demikian juga untuk pengelompokan, juga untuk model hutan acak, juga untuk dendogram, analisis komponen utama, dekomposisi nilai singular, kecocokan logistik dan banyak lagi. Output untuk masing-masing di atas kemungkinan besar datang dengan kelas plot khusus yang menghasilkan visualisasi dari apa yang baru saja Anda lakukan, dengan warna dan gelembung untuk koefisien dan parameter. Tes hipotesis, uji statistik, Shapiro,
Python berusaha mengimbangi SciPy
dan scikit-learn
. Sebagian besar analisis dan model standar juga tersedia, tetapi mereka sedikit lebih panjang untuk dikodekan dan kurang intuitif untuk dibaca (menurut saya). Mesin yang lebih rumit tidak ada, meskipun beberapa dapat dilacak kembali ke beberapa kombinasi dari perpustakaan yang sudah ada. Satu hal yang saya lebih suka lakukan dalam Python daripada di R adalah analisis teks bag-of-word dengan bi-gram, tri-gram dan pesanan yang lebih tinggi.
Mempresentasikan hasilnya
Kedua bahasa memiliki alat merencanakan yang indah, R di ggplot2
atas semua dan setara Python yang sesuai. Tidak terlalu banyak untuk bersaing, mereka melakukan pekerjaan dengan aman dan sehat, meskipun saya percaya bahwa jika Anda mempresentasikan hasilnya Anda mungkin harus menggunakan alat-alat lain — ada alat desain berwarna-warni yang mewah di luar sana dan baik Python maupun R tidak dimaksudkan untuk mencengangkan audiens dengan drag and drop mewah merah dan hijau R baru-baru ini menerbitkan banyak perbaikan pada shiny app
fitur - fiturnya, yang pada dasarnya memungkinkannya untuk menghasilkan output interaktif . Saya tidak pernah ingin mempelajarinya, tetapi saya tahu itu ada dan orang menggunakannya dengan baik.
Catatan samping
Sebagai catatan saya ingin menekankan bahwa perbedaan utama antara dua bahasa adalah bahwa Python adalah bahasa pemrograman tujuan umum, yang dibuat oleh dan untuk ilmu komputer, portabilitas, penyebaran dan sebagainya dan seterusnya. Mengagumkan apa yang dilakukan dan mudah dipelajari; tidak ada orang yang tidak suka python. Tetapi ini adalah bahasa pemrograman untuk melakukan pemrograman.
R, di sisi lain, ditemukan oleh dan untuk matematikawan, fisikawan, ahli statistik dan ilmuwan data. Jika Anda berasal dari latar belakang itu semuanya masuk akal karena sempurna mencerminkan dan mereproduksi konsep yang digunakan dalam statistik dan matematika. Tetapi jika, sebaliknya, Anda berasal dari latar belakang ilmu komputer dan ingin mensimulasikan Java atau C dalam R Anda akan kecewa; ia tidak memiliki "objek" dalam pengertian standar (yah, memang, tapi bukan apa yang biasanya dipikirkan orang sebagai ...), ia tidak memiliki kelas dalam pengertian standar (well, memang, tetapi bukan apa yang biasanya berpikir mereka ...), tidak memiliki "pointer" atau semua struktur ilmu komputer lainnya - tetapi hanya karena tidak membutuhkannya. Terakhir tetapi tidak sedikit: dokumentasi dan paket sangat mudah untuk dibuat dan dibaca (jika Anda menggunakan Rstudio); ada komunitas besar dan bersemangat di luar sana, dan dibutuhkan lima detik untuk Google "bagaimana melakukan insert-random-problem di R" yang entri pertamanya mengarahkan Anda ke solusi untuk masalah tersebut (dilakukan oleh orang lain) dengan kode yang sesuai , dalam waktu singkat.
Sebagian besar perusahaan industri memiliki infrastruktur yang dibangun dengan Python (atau lingkungan yang ramah Python) yang memungkinkan integrasi kode Python dengan mudah (di import myAnalysis
mana saja dan pada dasarnya Anda sudah selesai). Namun, setiap teknologi modern atau server atau platform dengan mudah menjalankan kode R latar belakang tanpa masalah juga.