Apakah ada cara yang mudah untuk menghitung persentil untuk urutan atau array numpy satu dimensi?
Saya mencari sesuatu yang mirip dengan fungsi persentil Excel.
Saya mencari referensi statistik NumPy, dan tidak dapat menemukan ini. Yang bisa saya temukan adalah median (persentil ke-50), tetapi bukan sesuatu yang lebih spesifik.
Jawaban:
Anda mungkin tertarik dengan paket SciPy Stats . Ini memiliki fungsi persentil yang Anda cari dan banyak barang statistik lainnya.
percentile()
tersedia dinumpy
juga.Tiket ini membuat saya percaya bahwa mereka tidak akan berintegrasipercentile()
dengan numpy dalam waktu dekat.sumber
df.groupby('key')[['value']].agg(lambda g: np.percentile(g, 10))
Ngomong-ngomong, ada implementasi Python murni dari fungsi persentil , kalau-kalau seseorang tidak mau bergantung pada Scipy. Fungsi ini disalin di bawah:
sumber
percentile
mengetahui untuk apaN
? Itu tidak ditentukan dalam panggilan fungsi.N
sebelum menghitung persentil. Katakanlah Anda benar-benar memiliki daftar tupelN = [(1, 2), (3, 1), ..., (5, 1)]
dan Anda ingin mendapatkan persentil dari elemen pertama tupel, lalu Anda pilihkey=lambda x: x[0]
. Anda juga bisa menerapkan beberapa transformasi (perubahan urutan) ke elemen daftar sebelum menghitung persentil.sumber
Berikut cara melakukannya tanpa numpy, hanya menggunakan python untuk menghitung persentil.
sumber
Definisi persentil yang biasanya saya lihat mengharapkan sebagai akibatnya nilai dari daftar yang disediakan di bawah P nilai-nilai yang ditemukan ... yang berarti hasilnya harus dari himpunan, bukan interpolasi antara elemen himpunan. Untuk mendapatkannya, Anda bisa menggunakan fungsi yang lebih sederhana.
Jika Anda lebih suka mendapatkan nilai dari daftar yang disediakan di atau di bawah P persen nilai yang ditemukan, maka gunakan modifikasi sederhana ini:
Atau dengan penyederhanaan yang disarankan oleh @ijustlovemath:
sumber
PERCENTILE
mengembalikan fungsi persentil berikut untuk contoh bagian atas:3.7 = percentile(A, P=0.3)
,0.82 = percentile(A, P=0.8)
,20 = percentile(B, P=0.3)
,42 = percentile(B, P=0.8)
.n = int(...)
dalammax(int(...), 1)
fungsiMulai
Python 3.8
, perpustakaan standar dilengkapi denganquantiles
fungsi sebagai bagian daristatistics
modul:quantiles
mengembalikan untuk distribusi yang diberikandist
daftarn - 1
titik potong yang memisahkann
interval kuantil (pembagiandist
menjadin
interval kontinu dengan probabilitas yang sama):di mana
n
, dalam kasus kami (percentiles
) adalah100
.sumber
periksa modul scipy.stats:
sumber
Untuk menghitung persentil suatu seri, jalankan:
Sebagai contoh:
sumber
Jika Anda membutuhkan jawaban untuk menjadi anggota array numpy input:
Hanya untuk menambahkan bahwa fungsi persentil dalam numpy secara default menghitung output sebagai rata-rata tertimbang linear dari dua entri yang berdekatan dalam vektor input. Dalam beberapa kasus orang mungkin ingin persentil yang dikembalikan menjadi elemen aktual dari vektor, dalam hal ini, dari v1.9.0 dan seterusnya Anda dapat menggunakan opsi "interpolasi", dengan pilihan "lebih rendah", "lebih tinggi" atau "terdekat".
Yang terakhir adalah entri aktual dalam vektor, sedangkan yang pertama adalah interpolasi linier dari dua entri vektor yang membatasi persentil
sumber
untuk seri: digunakan menggambarkan fungsi
misalkan Anda memiliki df dengan kolom penjualan dan id berikut. Anda ingin menghitung persentil untuk penjualan maka berfungsi seperti ini,
sumber
Cara yang nyaman untuk menghitung persentil untuk urutan atau matriks numpy satu dimensi adalah dengan menggunakan numpy.percentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html >. Contoh:
Namun, jika ada nilai NaN dalam data Anda, fungsi di atas tidak akan berguna. Fungsi yang disarankan untuk digunakan dalam kasus itu adalah fungsi numpy.nanpercentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanpercentile.html >:
Dalam dua opsi yang disajikan di atas, Anda masih dapat memilih mode interpolasi. Ikuti contoh di bawah ini untuk memudahkan pemahaman.
Jika array input Anda hanya terdiri dari nilai integer, Anda mungkin tertarik pada jawaban persentil sebagai integer. Jika demikian, pilih mode interpolasi seperti 'lebih rendah', 'lebih tinggi', atau 'terdekat'.
sumber