R vs Python untuk analisis data [ditutup]

60

Saya telah pemrograman selama sekitar satu tahun dan saya benar-benar tertarik pada analisis data dan pembelajaran mesin. Saya mengambil bagian dalam beberapa kursus online dan saya membaca beberapa buku.

Semua yang saya lakukan menggunakan R atau Python dan saya mencari saran apakah saya harus berkonsentrasi pada satu bahasa (dan jika demikian yang mana) atau melanjutkan keduanya; apakah mereka saling melengkapi?

- Saya harus menyebutkan bahwa saya menggunakan C # di sekolah tetapi saya akrab dengan Python melalui belajar mandiri.

The_Cthulhu_Kid
sumber
Ini mungkin tautan yang menarik: coursera.org/course/compdata
Giorgio

Jawaban:

39

Saya menggunakan kedua Python (untuk analisis data ofcourse termasuk numpy dan scipy) dan R di samping satu sama lain. Namun, saya menggunakan R secara eksklusif untuk melakukan analisis data, dan Python untuk tugas pemrograman yang lebih umum (misalnya kontrol alur kerja model komputer).

Dalam hal operasi dasar, katakan operasi pada array dan semacamnya, R dan Python + numpy sangat sebanding. Di perpustakaan yang sangat besar fungsi statistik bahwa R memiliki keunggulan. Selain itu, matplotlib tampaknya tidak sebagus ggplot2, tapi saya belum pernah menggunakan matplotlib sebanyak itu. Selain itu, saya akan fokus dulu pada satu bahasa dan menjadi baik pada hal-hal spesifik itu. Anda tampaknya sangat tertarik pada analisis data, bukan rekayasa perangkat lunak. Saya akan memilih R dan menaatinya. Yang mengatakan, saya pikir memilih untuk Python + numpy + scipy + scikit adalah pilihan yang sangat bagus, hanya saja saya merasa bahwa R hanya sedikit lebih baik.

Saya juga akan melihat di sekeliling Anda apa yang digunakan kolega Anda dan orang lain di bidang Anda. Jika mereka semua menggunakan, katakanlah, Python, akan masuk akal untuk tetap menggunakannya agar lebih mudah belajar dari mereka dan bertukar kode.

Penafian: Perhatikan bahwa saya adalah pengguna R yang berat, jadi pendapat saya mungkin bias, meskipun saya telah mencoba untuk menjaga jawaban saya seobjektif mungkin. Selain itu, saya belum menggunakan Python + numpy secara ekstensif, meskipun saya tahu kolega yang melakukan semua analisis data mereka di dalamnya.

ps: Tautan ini mungkin menarik: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: atau kutipan ini dari posting ini :

Saya menggunakan R dan Python untuk semua penelitian saya (dengan Rcpp atau Cython sesuai kebutuhan), tetapi saya lebih suka menghindari menulis dalam C atau C ++ jika saya bisa menghindarinya. R adalah bahasa yang indah, sebagian besar karena komunitas pengguna yang luar biasa. Itu dibuat oleh ahli statistik, yang berarti bahwa analisis data terletak di jantung bahasa; Saya menganggap ini sebagai fitur utama dari bahasa dan alasan utama mengapa itu tidak akan diganti dalam waktu dekat. Python umumnya merupakan bahasa keseluruhan yang lebih baik, terutama ketika Anda mempertimbangkan perpaduan pemrograman fungsional dengan orientasi objek. Dikombinasikan dengan Scipy / Numpy, Pandaas, dan statsmodels, ini memberikan kombinasi yang kuat. Tapi Python masih kekurangan komunitas serius ahli statistik / matematikawan.

Paul Hiemstra
sumber
3
Mengatakan bahwa R lebih kuat dari Python, maksud Anda Python + numpy / blaze + scipy , atau Python biasa?
9000
5
Maksud saya Python + numpy ya, kalau tidak, pilihannya akan lebih mudah. Saya pikir dalam hal operasi dasar, katakanlah operasi pada array dan semacamnya, R dan Python + numpy sangat sebanding. Di perpustakaan yang sangat besar fungsi statistik bahwa R memiliki keunggulan. Selain itu, matplotlib tampaknya tidak sebagus ggplot2, tapi saya belum pernah menggunakan matplotlib sebanyak itu.
Paul Hiemstra
Yang mengatakan, saya pikir memilih untuk Python + numpy + scipy + scikit adalah pilihan yang sangat bagus, hanya saja saya merasa bahwa R hanya sedikit lebih baik.
Paul Hiemstra
@ PaulHiemstra - Anda membuat beberapa poin bagus di komentar Anda yang mungkin akan meningkatkan jawaban Anda - jika pertanyaan dibuka kembali dan Anda memiliki kesempatan itu.
psr
@psr Saya mengedit dalam komentar saya, tampaknya tidak perlu pertanyaan terbuka jika saya ingin mengeditnya (mungkin hanya saya yang bisa mengeditnya ...).
Paul Hiemstra
36

Latar Belakang: Saya seorang ilmuwan data di sebuah startup di Austin, dan saya berasal dari sekolah pascasarjana (Fisika). Saya menggunakan Python sehari-hari untuk analisis data, tetapi gunakan R sedikit. Saya juga menggunakan C # /. NET dan Java (hampir setiap hari), saya menggunakan C ++ banyak di sekolah pascasarjana.

Saya pikir masalah utama dengan menggunakan Python untuk numerik (lebih dari R) adalah ukuran komunitas pengguna. Karena bahasanya sudah ada sejak dulu, banyak orang telah melakukan hal-hal yang mungkin ingin Anda lakukan. Ini berarti bahwa, ketika dihadapkan dengan masalah yang sulit, Anda dapat mengunduh paket dan mulai bekerja. Dan R "hanya berfungsi": Anda memberinya dataset, dan ia tahu statistik ringkasan apa yang berguna. Anda memberikan beberapa hasil, dan tahu plot apa yang Anda inginkan. Semua plot umum yang ingin Anda buat ada di sana, bahkan beberapa plot yang cukup esoteris yang harus Anda cari di Wikipedia. Sebagus scipy / numpy / panda / statsmodels / dll. adalah untuk Python, mereka tidak pada tingkat perpustakaan standar R.

Keuntungan utama Python daripada R adalah bahwa itu adalah bahasa pemrograman nyata dalam keluarga C. Ini bersisik dengan mudah, jadi bisa dibayangkan bahwa apa pun yang Anda miliki di kotak pasir Anda dapat digunakan dalam produksi. Python memiliki Orientasi Objek dipanggang, sebagai lawan R di mana rasanya seperti semacam renungan (karena itu). Ada hal-hal lain yang juga dilakukan Python dengan baik: pemrosesan threading dan paralel cukup mudah, dan saya tidak yakin apakah itu yang terjadi di R. Dan belajar Python memberi Anda alat skrip yang kuat juga. Ada juga IDE (gratis) yang sangat bagus untuk Python, yang jauh lebih baik jika Anda bersedia membayar (kurang dari $ 100), dan saya tidak yakin ini adalah kasus untuk R - satu-satunya R IDE yang saya tahu adalah R Studio, yang cukup bagus, tetapi tidak sebagus PyDev + Eclipse, dalam pengalaman saya.

Saya akan menambahkan ini sebagai sedikit kicker: karena Anda masih di sekolah, Anda harus memikirkan pekerjaan. Anda akan menemukan lebih banyak lowongan pekerjaan untuk pengembang Python yang sangat terampil daripada yang akan Anda miliki untuk pengembang yang sangat terampil. Di Austin, pekerjaan untuk para pengembang Django agak jatuh dari langit. Jika Anda mengenal R dengan sangat baik, ada beberapa tempat di mana Anda dapat memanfaatkan keterampilan itu (Revolution Analytics, misalnya), tetapi banyak toko tampaknya menggunakan Python. Bahkan di bidang analisis data / ilmu data, lebih banyak orang tampaknya beralih ke Python.

Dan jangan meremehkan bahwa Anda dapat bekerja dengan / untuk orang-orang yang hanya tahu (katakanlah) Java. Orang-orang itu akan dapat membaca kode Python Anda dengan cukup mudah. Ini tidak akan menjadi masalah jika Anda melakukan semua pekerjaan Anda di R. (Ini berasal dari pengalaman.)

Akhirnya, ini mungkin kedengarannya dangkal, tetapi saya pikir dokumentasi Python dan konvensi penamaan (yang dipatuhi secara agama, ternyata) jauh lebih baik daripada dokumen utilitarian R doc. Saya yakin ini akan menjadi perdebatan hangat, tetapi penekanan pada Python adalah keterbacaan. Itu berarti bahwa argumen ke fungsi Python memiliki nama yang dapat Anda baca, dan itu berarti sesuatu. Dalam R, nama argumen sering terpotong --- Saya menemukan ini kurang benar dengan Python. Ini mungkin terdengar luar biasa, tetapi membuat saya gila untuk menulis hal-hal seperti 'xlab' ketika Anda bisa dengan mudah menyebutkan argumen 'x_label' (hanya satu contoh) --- ini memiliki efek besar ketika Anda mencoba untuk belajar modul / paket API baru. Membaca R doc sama seperti membaca halaman manual Linux --- jika itu yang membuat perahu Anda, maka lebih banyak kekuatan untuk Anda.

Semua itu dikatakan, saya sarankan yang berikut (yang juga alur kerja khas saya): karena Anda tahu Python, gunakan itu sebagai alat pertama Anda. Ketika Anda menemukan Python kurang, pelajari cukup R untuk melakukan apa yang Anda inginkan, dan kemudian:

  1. Tulis skrip dalam R dan jalankan dari Python menggunakan modul subprocess, atau
  2. Instal modul RPy.

Gunakan Python untuk keahlian Python dan isi celah dengan salah satu di atas. Ini adalah alur kerja normal saya --- Saya biasanya menggunakan R untuk merencanakan sesuatu, dan Python untuk pengangkatan berat.

Jadi kesimpulannya: karena penekanan Python pada keterbacaan (cari Google untuk "Pythonic"), ketersediaan IDE yang baik dan gratis, fakta bahwa itu ada dalam kelompok bahasa C, semakin besar kemungkinan Anda dapat memanfaatkan huruf besar skillet, dan gaya dokumentasi yang lebih baik untuk semua bahasa, saya sarankan menjadikan Python sebagai tujuan Anda, dan mengandalkan R hanya jika diperlukan.


Ok, ini (sejauh ini) jawaban saya yang paling populer di situs tumpukan, dan bahkan bukan # 1 :) Saya harap ini telah membantu beberapa orang di sepanjang jalan.

Bagaimanapun, saya sampai pada kesimpulan berikut setelah beberapa tahun di lapangan:

Ini mungkin pertanyaan yang salah untuk ditanyakan.

Bertanya "haruskah saya mempelajari teknologi khusus ini" adalah pertanyaan yang buruk. Mengapa?

  1. Perubahan teknologi. Anda harus selalu belajar teknologi lain. Jika Anda bekerja di Twitter, mereka menjalankan Scala. Beberapa tempat adalah toko Python. Beberapa tempat tidak peduli. Anda tidak akan dipekerjakan karena Anda tahu atau tidak tahu teknologi tertentu - jika Anda tidak dapat mempelajari teknologi baru, Anda dapat (dan harus) dipecat. Ini seperti, jika kunci pas pipa baru keluar, dan Anda adalah tukang ledeng, dan Anda tidak dapat mengetahui bagaimana kunci pas pipa baru bekerja, Anda mungkin tukang ledeng yang sangat buruk.
  2. Diberi pilihan "Apakah saya belajar teknologi ini" atau "Apakah saya menghabiskan lebih banyak waktu untuk menyelesaikan masalah nyata", Anda harus selalu memilih yang terakhir, tanpa terkecuali.

Sebagai seorang ilmuwan data, tugas Anda adalah menyelesaikan masalah . Satu hikmah itu hampir selalu hilang di setiap konferensi atau pertemuan yang Anda datangi - setiap pembicaraan "data besar" yang pernah saya lihat berfokus pada teknologi, bukan pada penyelesaian masalah. Pemecahan masalah yang sebenarnya biasanya diturunkan ke beberapa slide di akhir:

[Judul pembicaraan = "Belajar mendalam di Startup Baru yang Keren"] ... [45 menit diagram dan techno-babel saat saya melakukan zona keluar dan memeriksa telepon saya] ... Dan, setelah menerapkan kluster Hadoop kami dan [Zona Ben keluar lagi] kita dapat menjalankan rutinitas belajar yang mendalam, [bangun: inilah sebabnya saya datang!] yang detailnya adalah hak milik. Pertanyaan?

Ini memberi kesan buruk bahwa bidangnya tentang teknologi, dan itu tidak benar. Jika Anda benar-benar bagus di Scala, atau Python, atau R, tetapi Anda benar-benar buruk dalam memecahkan masalah, Anda akan menjadi ilmuwan data yang buruk .

Paco Nathan berada di Austin beberapa bulan lalu di konferensi "big data" sehari yang panjang, dan mengatakan sesuatu seperti "Kimia bukan tentang tabung reaksi". Itu cukup banyak meringkaskannya - ilmu data bukan tentang Scala, atau Hadoop, atau Spark, atau apa pun-teknologi-du-jour lainnya muncul. Pada akhirnya, saya ingin merekrut orang yang berpikir, bukan orang yang mahir menggunakan Stack Overflow untuk mempelajari toolkit.

Demikian juga, jika Anda pergi ke wawancara kerja, dan mereka tidak mempekerjakan Anda hanya karena Anda tidak tahu bahasa pemrograman, maka perusahaan itu payah . Mereka tidak mengerti apa artinya "ilmuwan data", dan mungkin lebih baik bagi Anda jika tidak berhasil.

Akhirnya, jika kemampuan Anda dalam memecahkan masalah bersifat marjinal (jujur ​​dengan diri sendiri), atau Anda benar-benar menikmati sisi teknologi, atau belajar teknologi adalah hal yang benar-benar Anda sukai (sekali lagi, jujurlah) maka pelajari banyak teknologi. Anda akan selalu dapat menemukan peran tipe "insinyur data" yang sesuai dengan keahlian Anda. Ini bukan hal yang buruk, para insinyur data melumasi roda dan memungkinkan Anda melakukan pekerjaan Anda sebagai ilmuwan data. (Perbedaannya mirip dengan arsitek perangkat lunak vs tim pengembangan.)

BenDundee
sumber
3
Saya akan mengatakan, bahwa jika saya bekerja di lantai perdagangan, dan kepala pedagang datang kepada saya dengan csv harga opsi dan ingin saya mencocokkannya dengan distribusi log-linear dan mundur dari mean dan standar deviasi, Saya bahkan tidak akan mempertimbangkan Python. Saya pikir ini seperti tiga baris kode untuk melakukan ini di R.
BenDundee
12

Jadi, saya terutama telah melakukan analisis data di Matlab, tetapi telah melakukan beberapa di Python (dan lebih banyak menggunakan Python untuk tujuan umum) dan juga saya sudah mulai sedikit R. Saya akan menentang butir di sini dan menyarankan Anda menggunakan Python. Alasannya adalah karena Anda melakukan analisis data dari perspektif Machine Learning, bukan statistik (di mana R dominan) atau pemrosesan sinyal digital (di mana Matlab dominan).

Jelas ada tumpang tindih yang berat antara Machine Learning dan Stats. Tapi tumpang tindih bukan identitas. Machine Learning menggunakan ide-ide dari CS yang saya tidak ingin diimplementasikan di R. Tentu, Anda dapat menghitung spanning tree minimal dalam R. Mungkin ini terlihat seperti kekacauan yang jelek. Orang yang mempelajari mesin akan menganggap Anda memiliki akses mudah ke tabel hash, pohon pencarian biner, dan sebagainya. Lebih mudah dalam pikiran saya untuk menerapkan algoritma statistik baru bila diperlukan, daripada mencoba untuk menyortir apa yang pada dasarnya adalah bahasa domain spesifik ke dalam bahasa pemrograman umum.

Manfaat sampingan Python untuk analisis data juga jauh lebih tinggi. Anda akan belajar bahasa pemrograman nyata pada saat yang sama, yang dapat menangani skrip, membuat aplikasi yang lebih besar, dll. R benar-benar bahasa khusus komunitas statistik, bahkan Matlab jauh lebih banyak digunakan.

Saya kira, saya akan melihat beberapa makalah terlebih dahulu, dan melihat dalam bahasa apa mereka memposting kode. Jika tidak di R, maka jangan gunakan.

Nir Friedman
sumber
1
Terima kasih banyak. Saya pasti lebih tertarik pada sisi ML hal.
The_Cthulhu_Kid
1
Hanya tambahan kecil: Saya yakin R dapat melakukan ini dalam beberapa cara juga, tetapi Python terkenal karena kemampuannya untuk memanggil C atau mengkompilasi fungsi ke C menggunakan Cython dengan overhead yang minimal. Jadi Anda biasanya bisa lebih cepat dengan sedikit usaha, pertimbangan utama untuk melihat data nyata. Catatan eksotis (final) lainnya: Java memiliki beberapa perpustakaan pembelajaran mesin yang sangat bagus (seperti WEKA). Namun, yang keren adalah Anda dapat memanggil ini juga dari Python, menggunakan Jython :-)
Nir Friedman
7

Sebagai ilmuwan sekolah tua (lebih dari 50) yang telah dan terus menggunakan sejumlah alat ini, saya akan menambahkan dua sen saya. Saya telah bekerja dengan kolega yang masih menulis setiap bagian kode di Fortran, dari pekerjaan analisis data sepele hingga kode yang mendominasi beberapa superkomputer dunia. Dialek Fortran terbaru (F90, F95, F2003, F2008) adalah IMHO, beberapa bahasa yang dirancang terbaik. Pengalaman puluhan tahun dengan komputasi kinerja tinggi telah menyebabkan perkembangan bahasa yang cukup mengesankan.

Saya hanya menggunakan Python kadang-kadang, dan akan mengunjunginya kembali (sebagian besar karena Sage) tetapi saya menggunakan paket bahasa yang teruji waktu yang bekerja dengan baik untuk saya. Fortran, C, Perl, R, dan Skema (dengan tcl untuk skrip VMD). Saya menemukan kombinasi R dan Fortran dan C sangat nyaman. Berbeda dengan komentar lain yang dibuat tentang model objek dalam R, itu adalah model objek yang baik untuk pekerjaan interaktif, berdasarkan konsep CLOS tentang fungsi umum dan metode pengiriman. Ketika bekerja secara interaktif dengan paket baru, Anda sering dapat mengandalkan fungsi generik seperti "cetak" dan "plot" untuk melakukan sesuatu yang produktif.

API ke Fortran dan C sangat mudah digunakan. Jika Anda terbiasa bekerja di Fortran dan C untuk pemodelan dan analisis data, ini merupakan nilai tambah yang besar. Kemampuan untuk menghasilkan kode R secara dinamis dan mengevaluasinya, meskipun tidak sebersih sistem makro di Lisp dan C, sangat berguna ketika mengerjakan set data dinamis.

Beberapa batasan R untuk data nyata termasuk panggilan dengan pendekatan nilai. Meskipun ada alasan CS untuk panggilan berdasarkan nilai, pemrograman dunia nyata dengan data numerik besar memerlukan beberapa bentuk panggilan dengan referensi (perhatikan pentingnya blok umum Fortran dalam kode yang lebih lama, atau data modul dalam kode yang lebih baru). Pendekatan yang diadopsi oleh PDL (Perl Data Language) sangat elegan dalam hal ini. (Pdls pada dasarnya adalah panggilan dengan referensi kecuali jika Anda meminta salinannya. Referensi Sub-pdl adalah sub bagian dari pdl induk, dalam sintaks yang jauh lebih bersih daripada yang disediakan oleh Fortran atau C).

Adalah baik untuk belajar banyak bahasa. Python tidak diragukan lagi merupakan bahasa yang penting, tetapi R juga ada dalam domainnya. Tetapi ketika karet benar-benar perlu memenuhi jalan dalam sains Fortran dan C (dan C ++ untuk beberapa) akan sulit untuk dipindahkan.

John Daschbach
sumber
1

Fitur utama R adalah bahwa itu adalah pustaka paket, sebanyak itu adalah bahasa pemrograman. Setiap penulis paket pada dasarnya memiliki akses ke apa yang ada dalam setiap paket lainnya. Ini secara dramatis mengurangi kebutuhan, untuk menciptakan kembali, untuk mendokumentasikan ulang, untuk belajar kembali. Ini berlaku untuk penulis paket dan pengguna. Tentu saja, infrastruktur ini membutuhkan biaya. Paket penulis harus mengakomodasi standar yang menjadi semakin rewel dengan berlalunya waktu. Beberapa di antaranya mungkin menyebar ke apa yang ditemui pengguna.

Python tidak, seperti yang saya mengerti, memiliki sistem manajemen paket. Tidak ada yang setara dengan Jaringan Arsip R Komprehensif R ( http://cran.r-project.org ), dan tidak ada yang setara langsung dengan tampilan tugas R ( http://cran.csiro.au/web/views/ ). Demikianlah, sampai batas tertentu tidak demikian halnya dengan R, sebuah alat untuk para programer yang bekerja cukup banyak sendiri daripada sebagai bagian dari upaya komunitarian untuk membangun apa yang sudah tersedia.

Untuk analisis data dan pembelajaran mesin, permintaan pasti, sebagian besar, untuk membangun dan memanfaatkan kemampuan yang sudah ada. Untuk tugas pemrograman yang lebih umum, Python mungkin memiliki kelebihan. Apakah Anda melakukan jenis pekerjaan ini cukup untuk membenarkan upaya yang terlibat dalam belajar Python?

John Maindonald
sumber
3
Python memiliki sistem manajemen paket yang disebut pip. Ini bukan bagian dari pustaka standar, tetapi akan dikirim dengan Python standar dimulai dengan Python 3.4, yang akan dirilis bulan depan (Maret 2014).
Cody Piersall
2
Setara dengan Python dari Comprehensive R Archive Network adalah PyPI: pypi.python.org/pypi
Wilfred Hughes