Di antara Matlab dan Python, bahasa apa yang baik untuk analisis statistik?

17

Di antara Matlab dan Python, bahasa apa yang baik untuk analisis data statistik umum? Apa pro dan kontra, selain aksesibilitas, untuk masing-masing?

pengguna1102
sumber
2
Ini harusnya komunitas wiki, IMO.
Shane
Maukah Anda menjelaskan mengapa Anda tidak bisa melihat R?
Dirk Eddelbuettel
@ Sir: Saya hampir tidak pernah mendengar R. Selain itu saya ingin belajar beberapa bahasa pemrograman seperti Python, dan sekali lagi saya juga tidak berpikir R berada di dekat python, IMO. Saya harap ini menjawab pertanyaan Anda.
2
Telusuri sedikit di sini dan di StackOverflow dalam hal apa yang orang rekomendasikan untuk analisis statistik dan pemrograman . Banyak dari kita merasa bahwa tidak ada alternatif nyata untuk R. Tapi sama seperti kecantikan, ini ada di mata yang melihatnya, jadi semoga beruntung.
Dirk Eddelbuettel
Dalam hal geostatistik (di mana saya melakukan PhD saya), saya pikir R dilengkapi dengan sangat baik (lihat gstat, geoR dll). Setidaknya saya tidak tahu cakupan lengkap teknik geostatistik seperti itu di python. Dan mengapa R "tidak ada yang dekat dengan python"? Saya telah menggunakan keduanya dan untuk geostat saya merasa R cukup unggul.
Paul Hiemstra

Jawaban:

29

Sebagai pengguna Matlab diehard selama 10+ tahun terakhir, saya sarankan Anda belajar Python. Setelah Anda cukup terampil dalam suatu bahasa, ketika Anda bekerja dalam bahasa yang Anda pelajari, sepertinya Anda tidak cukup produktif, dan Anda akan kembali menggunakan bahasa terbaik default Anda. Paling tidak, saya sarankan Anda mencoba untuk menjadi sama mahirnya dalam sejumlah bahasa (saya juga menyarankan R).

Apa yang saya sukai dari Matlab:

  • Saya mahir di dalamnya.
  • Ini adalah bahasa pergaulan di antara para analis numerik.
  • alat profiling sangat bagus. Ini adalah satu-satunya alasan saya menggunakan Matlab bukan oktaf.
  • Ada klon freeware, oktaf, yang memiliki kepatuhan yang baik dengan implementasi referensi.

Yang tidak saya sukai tentang Matlab:

  • Tidak ada sistem yang baik untuk mengelola paket dan skrip pihak ketiga (gratis atau sebaliknya). Mathworks mengontrol 'pertukaran file pusat', dan pemasangan paket tambahan tampak sangat kikuk, tidak seperti sistem unggulan yang dimiliki R. Selain itu, Mathworks tidak memiliki insentif untuk memperbaiki situasi ini, karena mereka menghasilkan uang dari penjualan kotak peralatan, yang bersaing dengan paket freeware;
  • Lisensi untuk komputasi paralel di Matlab sangat mahal;
  • Sebagian besar kode-m, termasuk banyak fungsi toolbox, dan beberapa bawaan, dirancang agar benar-benar benar, dengan mengorbankan efisiensi dan / atau kegunaan. Contoh paling mencolok dari ini adalah medianfungsi Matlab , yang melakukan semacam data, kemudian mengambil nilai tengah . Ini telah menjadi algoritma yang salah sejak 70-an.
  • menyimpan grafik ke file sangat bagus di Matlab.
  • Saya belum menemukan pengalaman pengguna saya yang meningkat selama 5 tahun terakhir (ketika saya mulai menggunakan Matlab alih-alih oktaf), meskipun Mathworks terus menambahkan bel dan peluit. Ini menunjukkan bahwa saya bukan target pelanggan mereka, tetapi mereka ingin memperluas pangsa pasar dengan memperburuk keadaan bagi pengguna listrik.
  • Sekarang ada 2 cara untuk melakukan pemrograman berorientasi objek di Matlab, yang paling membingungkan. Kode lama menggunakan gaya lama akan bertahan selama beberapa waktu.
  • Matlab UI ditulis dalam Java, yang memiliki ide tidak menyenangkan tentang manajemen memori.
shabbychef
sumber
+1, poin bagus. Tentang ini: "ide-ide tidak menyenangkan tentang manajemen memori" .. menarik, dapatkah Anda menguraikan?
ars
1
ingatanku pergi ke suatu tempat ; pengalaman saya dengan Java di luar penggunaan Matlab mengindikasikan kemungkinan penyebabnya, dan menjalankannya -nojvmtampaknya membantu ...
shabbychef
Contoh favorit saya dari MATLAB kode bawaan yang aneh adalah shuffle, yang menata ulang data dengan urutan yang dikembalikan dengan mengurutkan vektor acak yang baru dibuat.
1
@ mbq: shufflemungkin di kotak alat, bukan matlab stok. hampir tidak bisa lebih buruk daripada builtin randpermyang mengembalikan semacam indeks dari vektor acak. Sekali lagi, ini mungkin algoritma yang salah (saya baru belajar tentang pengocokan Knuth-Fisher-Yates di sini di stats.SE) ..
shabbychef
1
@mbq: bagian bagus lainnya randpermadalah dipengaruhi oleh penyemaian randn, sedangkan Knex-Fisher-Yates versi mex'ed mungkin tidak dapat mengakses randn seed 'secara internal', dan versi acak .m dari shuffle mungkin akan terlalu lambat.
shabbychef
11

Mari kita memecahnya menjadi tiga bidang (dari atas kepala saya) di mana pemrograman memenuhi statistik: data crunching, rutinitas numerik (optimasi dan semacamnya) dan perpustakaan statistik (pemodelan, dll).

Pada yang pertama, perbedaan terbesar adalah bahwa Python adalah bahasa pemrograman tujuan umum. Matlab sangat bagus selama dunia Anda kira-kira isomorfis menjadi array numerik fortran. Setelah Anda mulai berurusan dengan data munging dan masalah terkait, Python mengalahkan Matlab. Misalnya, lihat buku Greg Wilson: Data Crunching: Memecahkan Masalah Sehari-Hari Menggunakan Java, Python, dan banyak lagi .

Yang kedua, Matlab benar-benar bersinar dengan pekerjaan numerik. Banyak komunitas riset menggunakannya dan jika Anda mencari katakanlah, beberapa algoritma yang terkait dengan kertas dalam penginderaan terkompresi, Anda jauh lebih mungkin untuk menemukan implementasi di Matlab. Di sisi lain, Matlab adalah jenis PHP komputasi ilmiah - ia berusaha untuk memiliki fungsi untuk semua yang ada di bawah matahari. Estetika dan arsitektur yang dihasilkan menjengkelkan jika Anda seorang geek bahasa pemrograman, tetapi dalam istilah utilitarian, itu menyelesaikan pekerjaan. Banyak dari ini telah menjadi kurang relaf dengan munculnya Numpy / Scipy, Anda hanya akan menemukan optimasi dan perpustakaan pembelajaran mesin yang tersedia untuk Python. Berinteraksi dengan C sama mudahnya dalam kedua bahasa.

Tentang ketersediaan perpustakaan statistik untuk pemodelan dan semacamnya, keduanya agak kurang jika dibandingkan dengan sesuatu seperti R. (Meskipun saya menduga keduanya akan memenuhi kebutuhan 80% orang yang melakukan pekerjaan statistik.) Untuk sisi Python, lihat pertanyaan-pertanyaan ini. : Python sebagai meja kerja statistik . Untuk sisi Matlab, saya tahu ada kotak statistik, tetapi saya akan membiarkan seseorang yang lebih berpengetahuan mengisi bagian yang kosong (pengalaman saya dengan Matlab terbatas pada pekerjaan numerik yang tidak terkait dengan statistik).

ars
sumber
Kotak alat statistik di Matlab cukup menyenangkan. Apakah ada sesuatu yang mirip untuk R, di mana misalnya Anda dapat dengan cepat mencoba berbagai fungsi yang cocok (regresi)?
Alex R.
6

Saya juga telah menjadi pengguna Matlab yang rajin selama 10+ tahun. Selama bertahun-tahun itu saya tidak punya alasan untuk bekerja di luar kotak peralatan yang saya buat untuk pekerjaan saya. Meskipun banyak fungsi dibuat untuk kotak alat, saya sering kali perlu membuat algoritma untuk analisis turnaround cepat. Karena algoritma ini sering menggunakan matematika matriks, Matlab adalah kandidat yang ideal untuk pekerjaan saya. Selain toolbox kode Matlab saya, yang lain dalam grup saya bekerja secara luas di Jawa karena ada interoperabilitas yang jelas antara bahasa. Selama bertahun-tahun saya benar-benar bahagia dengan Matlab, tetapi sekitar 3 tahun yang lalu saya memutuskan untuk memulai transisi lambat dari Matlab dan senang mengatakan bahwa saya belum membukanya dalam waktu sekitar satu tahun sekarang. Inilah alasan saya pindah:

  • Saya bekerja dengan sistem komputasi online dan offline, sistem lisensi selalu sakit kepala. Tampaknya selalu terjadi bahwa ketika kami sangat membutuhkan Matlab, lisensi akan kedaluwarsa atau tiba-tiba mengalami masalah. Ini selalu sakit kepala. Juga, jika kita perlu membagikan kode, dan pihak lain tidak memiliki lisensi untuk kotak alat yang sama, ini membuat sakit kepala. Ini tidak gratis
  • Saya sering perlu membuat presentasi. Meskipun Matlab menyediakan alat yang luas untuk membuat angka, yang membuatnya sangat kuat untuk desain algoritma, tetapi menyimpan gambar sedemikian rupa sehingga bisa dimasukkan ke dalam presentasi dan terlihat bagus bukanlah tugas yang mudah. Saya sering harus memasukkan file EPS ke Adobe ilustrator untuk menghapus semua sampah, memperbaiki font, dan membersihkan garis. Ada beberapa alat untuk membantu dengan ini pada pertukaran file (export_fig.m).
  • Saya sering mendapatkan kode Matlab dari orang lain. Ketika ini terjadi, saya hampir selalu menulis ulang karena: API mereka tidak kompatibel dengan data saya, kode mereka tidak masuk akal, lambat, tidak menampilkan apa yang saya butuhkan, ... Pada dasarnya orang yang berkembang di Matlab adalah bukan insinyur perangkat lunak dan Matlab tidak mendorong semua jenis prinsip desain.
  • Saya adalah pengguna yang kuat. Saya suka terminal. Saya benci GUI - benci itu. Dan ketika mereka menambahkan pita gaya "windows", saya membencinya lagi. Pada dasarnya tweak mereka ke GUI dan manajemen memori yang mengerikan menekan tombol terakhir saya dan saya memutuskan untuk pergi. Menggunakan -nodesktopopsi itu bagus sebagian besar waktu, tetapi memiliki masalah itu.
  • Banyak kemungkinan untuk merancang fungsi (menggunakan OO, atau desain fungsional), tetapi tidak ada yang merasa benar, sebagian besar merasa adhoc. Saya tidak mendapatkan kepuasan dari mendesain fungsi yang baik di Matlab
  • Komunitas itu besar, tetapi tidak mudah untuk berbagi dan menemukan kode yang baik. Pertukaran file tidak terlalu bagus.

Ini hanya sedikit dari banyak keluhan saya dengan Matlab. Ini adalah salah satu atribut yang bersinar: mudah, sangat mudah untuk menulis kode dengan cepat (jika tidak jelek). Namun saya meninggalkannya, dan pencarian saya menuntun saya melalui Clojure-> JavaScript-> Python <-> Julia; ya, saya sudah ke semua tempat.

  • Clojure: bahasa fungsional yang indah. Alasan saya menggunakan Clojure adalah kemampuannya untuk skrip Java. Banyak basis kode "besar" kami di Jawa, jadi ini masuk akal. Pada saat itu banyak pemrosesan ilmiah tidak tersedia, dan tidak banyak dengan visualisasi juga. Tapi saya pikir ini sedang berubah.
  • Javascript: setelah melihat tolok ukur di http://julialang.org/ , dan karena saya pasti tertarik dengan kemampuan visualisasi D3 , saya memutuskan untuk mencoba JavaScript. JavaScript ternyata sangat cepat. Tetapi jika Anda benar-benar ingin membenci diri sendiri, pelajari JavaScript.
  • Python: Python memiliki komunitas yang luar biasa dan memiliki banyak proyek hebat yang sedang berlangsung. Notebook IPython luar biasa karena berbagai alasan (salah satunya adalah salinan sederhana / angka masa lalu ke dalam powerpoint). Proyek-proyek seperti NumPy / SciPy / Scikit-Learn / Pandas benar-benar membuat Python menyenangkan dan mudah digunakan. Sangat mudah digunakan pada banyak core atau cluster. Saya benar-benar senang dengan saklar itu.
  • Julia: Julia luar biasa. Khusus untuk pengguna Matlab. Ini masih bayi, jadi banyak perubahan terjadi. Salah satu kelemahan utama Python adalah tidak memiliki semua fungsi bawaan yang dimiliki Matlab. Tentu NumPy / SciPy membawa fungsionalitas itu, tetapi itu tidak built-in dan Anda harus membuat keputusan apakah menjadi objek python murni atau objek numpy. Julia pada dasarnya memiliki semua yang Anda inginkan, Python datang dari Matlab. Saya akan menunggu, tetapi ini adalah pilihan terbaik untuk pengguna Matlab di masa depan.
Justin
sumber