Dalam banyak tutorial atau manual, narasi tampaknya menyiratkan bahwa R dan python hidup berdampingan sebagai komponen pelengkap dari proses analisis. Tetapi bagi saya yang tidak terlatih, tampaknya kedua bahasa itu melakukan hal yang sama.
Jadi pertanyaan saya adalah apakah ada ceruk khusus untuk dua bahasa atau apakah itu hanya preferensi pribadi apakah akan menggunakan satu atau yang lain?
Jawaban:
Mereka saling melengkapi. Memang benar bahwa keduanya dapat melakukan hal yang sama, namun ini dapat dikatakan untuk sebagian besar bahasa. Masing-masing memiliki kekuatan dan kelemahannya. Pandangan umum tampaknya adalah bahwa Python terbaik untuk pengumpulan dan persiapan data, serta untuk analisis tekstual. R dianggap terbaik untuk analisis data, karena merupakan bahasa statistik yang pertama dan terpenting.
R memiliki banyak paket untuk segala hal yang dapat Anda pikirkan, tetapi pokoknya adalah analisis statistik - dari chi-square dasar hingga analisis faktor dan model bahaya, mudah dan kuat. Beberapa nama terbesar dalam statistik membuat paket R, dan memiliki komunitas yang hidup untuk membantu setiap kebutuhan Anda.
ggplot2
adalah standar dalam visualisasi data (grafik dll.). R adalah bahasa yang di-vektor-kan dan dibangun untuk mengulang data secara efisien. Ini juga menyimpan semua data dalam RAM, yang merupakan pedang bermata dua - itu tajam pada set data yang lebih kecil (meskipun beberapa mungkin berdebat dengan saya), tetapi tidak dapat menangani data besar dengan baik (meskipun memiliki paket untuk memotong ini , sepertiff
).Python jauh lebih mudah dipelajari daripada R - terutama bagi mereka yang memiliki pengalaman pemrograman sebelumnya. R hanya ... aneh. Python hebat dalam pengambilan data, dan merupakan bahasa yang digunakan untuk pengikisan web (dengan menakjubkan
beautifulsoup
). Python dikenal karena kekuatannya dalam penguraian string dan manipulasi teks.pandas
adalah pustaka yang bagus untuk manipulasi data, penggabungan, transformasi, dll., dan cepat (dan mungkin terinspirasi oleh R).Python sangat bagus ketika Anda perlu melakukan pemrograman. Ini tidak mengherankan karena merupakan bahasa tujuan umum. Namun, dengan semua ekstensi, R dibangun oleh ahli statistik untuk ahli statistik. Jadi, sementara Python mungkin lebih mudah dan lebih baik dan lebih cepat di banyak aplikasi, R akan menjadi platform untuk analisis statistik.
sumber
data.table
paket dalam R secara khusus dimaksudkan untuk pekerjaan yang efisien di sekitar set data besar, dan dihubungkan dengan baik ke pemrosesan terdistribusi.data.table
; Saya juga senang mengatakan bahwarvest
ini adalah alat yang SANGAT BAIK untuk menangani sebagian besar tugas mengikis, dan jauh lebih mudah untuk bangun dan berlari daripadabeautifulsoup
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
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 danMySQLdb
untuk Python berfungsi dengan lancar, tidak terlalu banyak untuk ditambahkan). Ketika datang untuk membaca file .csv eksternal,data.table
paket untuk R menyediakan fungsifread
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 SQLdt[i, j, fun_by]
, di mana itu dimaksudkandt[where_condition, select_column, grouped_by (or the like)]
; fungsi kustom yang ditentukan pengguna dapat diletakkan di sana juga dalamj
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 standarapply, 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 strukturpd.DataFrame
(yang tidak dimiliki oleh standar Python, untuk beberapa alasan masih belum diketahui oleh saya) yang memperlakukan data apa adanya, yaitu kerangka data (bukan beberapanumpy 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 Pythonapply
ataulambda
. Saya pribadi tidak suka tata bahasadf[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 Rdata.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
danscikit-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 padashiny 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.sumber
Python adalah bahasa pemrograman umum: oleh karena itu, baik untuk melakukan banyak tugas lain selain analisis data. Sebagai contoh, jika kita ingin mengotomatiskan eksekusi model kita di server produksi, maka python adalah pilihan yang sangat bagus. Contoh lain termasuk menghubungkan ke perangkat keras / sensor untuk membaca data, berinteraksi dengan basis data (data relasional atau non-terstruktur seperti JSON), parsing data, pemrograman jaringan (TCP / IP), antarmuka pengguna grafis, berinteraksi dengan shell, dll. (Ya, mengapa seorang ilmuwan data ingin melakukan begitu banyak tugas seperti ini, yang tidak ada hubungannya dengan model prediksi? Saya pikir orang memiliki definisi yang berbeda. Apa itu ilmuwan data?Di beberapa organisasi, parsing data dan melakukan analisis deskriptif dengan dashboard cukup baik untuk bisnis dan data tidak cukup matang untuk melakukan model prediksi. Di sisi lain, di banyak perusahaan kecil, orang mungkin mengharapkan ilmuwan data melakukan banyak rekayasa perangkat lunak. Mengetahui python akan membuat Anda independen dari insinyur perangkat lunak lain.)
R memiliki banyak paket statistik yang jauh lebih baik daripada python atau MATLAB. Dengan menggunakan R, orang dapat benar-benar berpikir di tingkat model alih-alih tingkat detail implementasi. Ini adalah keuntungan besar dalam mengembangkan model statistik. Sebagai contoh, banyak orang secara manual mengimplementasikan jaringan saraf dalam python; melakukan pekerjaan seperti itu mungkin tidak membantu untuk memahami mengapa jaringan saraf bekerja, tetapi hanya mengikuti resep untuk menduplikasi pekerjaan orang lain untuk memeriksa apakah itu berfungsi. Jika kami bekerja di R, kami dapat dengan mudah fokus pada matematika di balik model, alih-alih detail implementasi.
Dalam banyak kasus, orang menggunakannya bersama-sama. Membangun perangkat lunak mudah dilakukan dengan python, dan membangun model lebih baik dalam R. Jika kita ingin menghasilkan model dalam produksi tetapi bukan kertas, kita mungkin membutuhkan keduanya. Jika perusahaan Anda memiliki banyak insinyur perangkat lunak, Anda mungkin membutuhkan lebih banyak R. Dan jika perusahaan Anda memiliki banyak ilmuwan riset, Anda mungkin membutuhkan lebih banyak python.
sumber
scikit-learn
? scikit-learn.org/stableProgramer dari semua garis meremehkan seberapa banyak pilihan bahasa adalah budaya . Pengembang web seperti Node.js. Ilmuwan menyukai Python. Sebagai seorang insinyur perangkat lunak polyglot yang dapat menangani fluiditas Javascript dan kekakuan Java semua sama, saya telah menyadari bahwa tidak ada alasan intrinsik bahasa ini buruk pada pekerjaan masing-masing - hanya sejumlah besar paket, dokumentasi, komunitas, buku, dll di sekitar mereka.
(Untuk alasan intrinsik satu bahasa acak lebih baik daripada bahasa lain, lihat komentar yang akan datang untuk jawaban ini.)
Prediksi pribadi saya adalah bahwa Python adalah jalan masa depan karena ia dapat melakukan apa saja yang dapat dilakukan R - atau lebih tepatnya, cukup dari apa yang dapat dilakukan oleh programmer yang bekerja untuk mengisi kesenjangan - dan merupakan bahasa rekayasa perangkat lunak yang jauh lebih baik. Rekayasa perangkat lunak adalah disiplin yang berkaitan dengan:
Ditambah terus terang Python lebih mudah dipelajari.
Para ilmuwan dan ahli statistik akan menyadari bahwa mereka adalah pemangku kepentingan dalam praktik rekayasa perangkat lunak yang baik, bukan profesi yang independen dan tidak terikat. Hanya pendapat saya, tetapi makalah yang membuktikan kerapuhan kode akademik akan mendukung ini.
Jawaban ini adalah semua pendapat saya - tetapi Anda mengajukan pertanyaan yang sangat beralasan, dan karena diterima dengan baik sejauh ini saya merasa Anda layak menerima pendapat yang bersahaja, cukup informasi (saya harap!) Sebagai tanggapan. Ada argumen serius untuk Python atas R di seluruh papan dan saya akan lalai untuk mencoba memposting jawaban non-partisan ketika kenyataan itu sendiri mungkin partisan.
sumber
Saya adalah pengguna R tetapi saya pikir Python adalah masa depan (saya tidak berpikir itu sintaks)
Python adalah masa depan
. Manfaat Python adalah karena orang lain telah menyebutkan dukungan yang jauh lebih luas, dan, bagi programmer, sintaksisnya lebih logis.
Juga kemampuan Anda untuk menerjemahkan temuan dari analisis Anda menjadi sistem produksi jauh lebih mudah.
Mungkin itu karena Python menjadi tujuan umum dan R tidak tetapi bahkan saya mengangkat alis ketika saya melihat pipa R yang diproduksi.
Tapi tidak hanya itu, bahkan untuk aplikasi Advanced Python dengan cepat mengejar (Scikit-belajar, PyBrain, Tensorflow dll) dan sementara R masih menjadi bahasa pergaulan di bidang akademik tentang bagaimana menerapkan metode statistik Python telah menjadi besar di sektor profesional karena munculnya perpustakaan khusus canggih.
Tapi R tidak buruk
Banyak orang tampaknya suka melompat pada kereta musik "R has syntax buruk".
Saya ingin mengusulkan sintaks R menjadi hal yang baik!
Fungsi penugasan, evaluasi malas, evaluasi non-standar dan formula adalah manfaat besar ketika menggunakan R.
Hanya menghemat banyak waktu untuk tidak perlu khawatir melarikan diri dari nama variabel yang dirujuk dalam ringkasan Anda atau bagaimana membangun logika dari apa yang dimodelkan terhadap apa atau melihat nama-nama dengan
names()
dan kemudian menetapkan nama-nama baru dengan menambahkan<- c("A", "B", "C")
.Ketika orang mengeluh tentang sintaks aneh R, mereka melihatnya sebagai bahasa pemrograman, bukan sebagai alat ilmu data.
Sebagai seseorang yang datang dari R dan mencintai dplyr, saya menemukan sintaksis panda agak kikuk dibandingkan.
Ya itu sedikit lebih fleksibel, tetapi untuk sebagian besar tugas Anda mengambil penekanan tombol lebih banyak untuk melakukan perintah sederhana daripada di R yang hanya ada untuk memuaskan parser Python, bukan untuk mengekspresikan ide Anda.
Singkatnya
Tentu saja adalah bijaksana untuk mengetahui keduanya dan sementara Python mendapatkan pilihan desain khusus domain R hanya membuatnya lebih mudah untuk pekerjaan ad hoc. Kelemahan besar dari R adalah sulitnya meninggalkan domainnya, yang pada dasarnya harus Anda lakukan begitu Anda mencoba menerapkan temuan Anda secara berkelanjutan.
sumber
Jika Anda melihat R sebagai lebih dari alat statistik dan bukan sebagai bahasa pemrograman, itu sangat bagus. Ini memiliki fleksibilitas jauh lebih dari Stata atau SPSS, tetapi dapat melakukan semua yang mereka bisa juga. Saya belajar Stata selama kuliah, dan R cukup mudah untuk dilihat karena saya sudah memiliki perspektif alat statistik dan bukan pengalaman bahasa pemrograman murni yang mungkin dimiliki orang lain.
Saya pikir frustrasi dengan R datang untuk bermain ketika mereka yang programmer mencoba untuk belajar dan memahami R; tetapi ini adalah alat yang hebat bagi mereka yang datang ke R melalui latar belakang statistik.
Python sangat bagus jika Anda sudah menjadi programmer yang hebat; tetapi bagi saya sebagai pemula untuk pemrograman dan statistik baru lulus dari perguruan tinggi, R adalah pilihan yang jauh lebih baik. Ini benar-benar hanya preferensi mana yang lebih cocok dengan keahlian dan minat Anda.
sumber
Menambahkan ke beberapa jawaban sebelumnya:
Dalam pengalaman saya, tidak ada yang lebih mudah daripada menggunakan dplyr + tidyr, ggplot dan Rmarkdown dalam mendapatkan dari data mentah ke hasil yang dapat disajikan. Python menawarkan banyak hal, dan saya menggunakannya semakin banyak, tapi saya sangat suka cara paket Hadley mengikat bersama.
sumber
Python memiliki adopsi luas di luar sains, jadi Anda mendapat manfaat dari semua itu. Seperti yang ditunjukkan oleh "An Angry Guide to R", R dikembangkan oleh sebuah komunitas, yang sebelumnya hanya memiliki nol pengembang perangkat lunak.
Saya akan mengatakan bahwa hari ini R memiliki dua kekuatan utama: beberapa paket yang sangat matang dan sangat khusus di beberapa bidang, dan rajutan paket penelitian yang dapat direproduksi.
Python tampaknya lebih cocok untuk yang lainnya.
Ini pendapat tentu saja, karena hampir semua yang ada di utas ini. Saya agak kagum bahwa utas ini masih hidup.
sumber
Seperti dijelaskan dalam jawaban lain, Python adalah bahasa pemrograman tujuan umum yang baik, sedangkan R memiliki kelemahan serius sebagai bahasa pemrograman tetapi memiliki satu set pustaka analisis data yang lebih kaya. Dalam beberapa tahun terakhir, Python telah mengejar R dengan pengembangan perpustakaan analisis data dewasa seperti scikit-belajar, sedangkan R tidak akan pernah diperbaiki. Dalam prakteknya, saya menggunakan Python (sebenarnya, Hy ) untuk hampir semua hal dan hanya beralih ke R untuk metode yang relatif esoteris seperti regresi kuantil (implementasi yang dalam statsmodels Python tampaknya rusak). Ada beberapa cara untuk memanggil R dari Python; PypeR adalah salah satu yang cukup sederhana sehingga saya membuatnya bekerja di lingkungan yang tidak bersahabat seperti server Windows.
Sunting : Saya mendorong siapa saja yang ingin memperdebatkan hal ini lebih lanjut untuk berbicara dengan penulis esai yang tertaut alih-alih mengomentari jawaban ini.
sumber