Keterbatasan panda dan alternatifnya dengan Python

11

Saya membaca di suatu tempat bahwa Pandas pertama kali dikembangkan untuk dunia keuangan, setidaknya tidak terutama untuk ilmu alam (fisika, biologi, dan sebagainya), jadi apakah ada analisis data serupa paket Python yang lebih “berorientasi ilmu alam”?

Saya baru saja mulai menggunakan Pandas dan saya telah menemukan dua masalah yang tidak dapat saya selesaikan tanpa menggunakan paket lain atau solusi buatan sendiri:

  • Bagaimana cara mengelola ketidakpastian?
  • Bagaimana cara mendefinisikan unit data saya dengan mudah?

Mungkin ada masalah lain tapi saya kurang pengalaman untuk lebih tepatnya. Untuk saat ini, saya berpikir tentang paket ketidakpastian untuk menyelesaikan poin pertama tetapi saya tidak yakin itu akan berfungsi dengan baik dengan Panda dan tidak akan mengurangi kecepatan perhitungan. Sebenarnya, saya tidak mencari cara komputasi dengan ketidakpastian, hanya cara sederhana untuk menyimpan ketidakpastian bersama dengan data yang saya impor. Untuk poin kedua, saya tidak menemukan solusi yang lebih baik daripada membuat kamus selain dari DataFrame saya untuk mengelola unit yang terkait dengan setiap data.

Jika Anda pernah mengalami masalah yang sama, bagaimana Anda menyelesaikannya atau paket lain mana yang Anda gunakan untuk manipulasi / penyimpanan / analisis data dalam Python dalam ilmu alam?

Clark
sumber
2
Alternatif untuk panda unit pendukung dan ketidakpastian adalah Tablekelas dalam astropi.
P3trus
1
Rasanya hebat, saya tidak tahu astropi memiliki hal-hal semacam ini. Meski begitu, saya melirik dokumen tetapi tidak dapat menemukan contoh eksplisit untuk mengatur ketidakpastian Table(tapi saya menemukan bagian unit). NDDatatampaknya mengelola itu tetapi saya tidak yakin tentang perbedaan antara kelas-kelas ini. Jika Anda tidak keberatan mengubah komentar Anda menjadi jawaban dengan contoh 2-baris, saya dengan senang hati akan menerimanya!
Clark

Jawaban:

5

Saya setuju dengan Davidmh bahwa penghitungan ketidakpastian tidak boleh ditangani oleh perpustakaan otomatis. Anda akan dengan cepat mengalami kasus di mana otomatis gagal (coba lakukan transformasi Fourier misalnya).

Namun Anda mengatakan bahwa Anda hanya ingin menjaga ketidakpastian dengan data Anda. Mengapa tidak menambahkannya sebagai kolom tambahan di kerangka data Anda? Beginilah cara saya biasanya mengelola ketidakpastian dengan panda.

Panda tidak memiliki dukungan unit, namun apa pun bisa masuk ke dalam kerangka data sehingga Anda bisa menggunakan paket kuantitas secara langsung. Namun tidak semua fungsi akan bekerja di panda (meskipun jumlah yang mengejutkan masih akan) dan akan ada penalti kinerja.

Ada beberapa diskusi untuk memungkinkan keterikatan metadata dalam panda, tetapi sejauh ini tidak ada yang muncul darinya.

Dengan kemungkinan pengecualian C ++ 11, saya tahu tidak ada bahasa atau pustaka yang akan memberi Anda dukungan unit kelas satu yang sangat bagus. Selalu ada kehilangan kinerja dan kurangnya kompatibilitas

.

LKlevin
sumber
2

Mengelola ketidakpastian sebenarnya adalah masalah statistik yang cukup rumit. Ungkapan yang dikenal untuk propagasi kesalahan menggunakan derivatif kuadrat parsial baik ketika kesalahan didistribusikan secara normal, independen, dan kecil. Ini biasanya terjadi; dan pada kenyataannya, bahkan jika normalitas atau independensi tidak sepenuhnya terpenuhi, untuk sebagian besar kasus praktis hasilnya bisa cukup dekat dengan yang asli, asalkan Anda hanya tertarik pada estimasi interval yang masuk akal.

sin(2±0.1)=sin(2)sin(1.9)sin(2.1)

Untuk kasus-kasus di mana akurasi lebih dibutuhkan, jika Anda memiliki model analitik yang bagus untuk ketidakpastian Anda, ada beberapa metode, seperti kemungkinan maksimum, yang dapat digunakan untuk mendapatkan estimator yang benar.

Tetapi jika Anda ingin hasil yang benar valid untuk setiap input yang mungkin (bayangkan harus memodelkan detektor bising secara analitis dengan derau yang sama dengan presisi), dengan mempertimbangkan semua korelasi, dan dapat menjelajahi semua ruang parameter yang relevan , Anda memerlukan metode Monte Carlo. Tambahkan noise acak ke beberapa instance input Anda dan jalankan analisis lengkap. Tentu saja, ini bisa berarti bahwa Anda harus melipatgandakan waktu komputasi Anda dengan ratusan atau ribuan, tetapi itu selalu bisa diparalelkan.

Jadi, pada akhirnya, semuanya tergantung pada apa yang ingin Anda lakukan, ke tingkat akurasi, dan berapa banyak sumber daya yang Anda miliki.

Davidmh
sumber