Anda dapat melihat scipy.stats
:
from pydoc import help
from scipy.stats.stats import pearsonr
help(pearsonr)
>>>
Help on function pearsonr in module scipy.stats.stats:
pearsonr(x, y)
Calculates a Pearson correlation coefficient and the p-value for testing
non-correlation.
The Pearson correlation coefficient measures the linear relationship
between two datasets. Strictly speaking, Pearson's correlation requires
that each dataset be normally distributed. Like other correlation
coefficients, this one varies between -1 and +1 with 0 implying no
correlation. Correlations of -1 or +1 imply an exact linear
relationship. Positive correlations imply that as x increases, so does
y. Negative correlations imply that as x increases, y decreases.
The p-value roughly indicates the probability of an uncorrelated system
producing datasets that have a Pearson correlation at least as extreme
as the one computed from these datasets. The p-values are not entirely
reliable but are probably reasonable for datasets larger than 500 or so.
Parameters
----------
x : 1D array
y : 1D array the same length as x
Returns
-------
(Pearson's correlation coefficient,
2-tailed p-value)
References
----------
http://www.statsoft.com/textbook/glosp.html#Pearson%20Correlation
Korelasi Pearson dapat dihitung dengan numpy
corrcoef
.sumber
Alternatif dapat berupa fungsi scipy asli dari linregress yang menghitung:
Dan ini sebuah contoh:
akan mengembalikan Anda:
sumber
lineregress(two_row_df)
Jika Anda merasa tidak ingin menginstal scipy, saya telah menggunakan hack cepat ini, sedikit dimodifikasi dari Programming Collective Intelligence :
(Diedit untuk kebenaran.)
sumber
TypeError: unsupported operand type(s) for -: 'itertools.imap' and 'float'
atnum = psum - (sum_x * sum_y/n)
Kode berikut adalah interpretasi langsung dari definisi :
Uji:
kembali
Ini setuju dengan Excel, kalkulator ini , SciPy (juga NumPy ), yang mengembalikan 0,981980506 dan 0,9819805060619657, dan 0,98198050606196574, masing-masing.
R :
EDIT : Memperbaiki bug yang ditunjukkan oleh komentator.
sumber
sum(x) / len(x)
Anda membagi ints, bukan mengapung. Jadisum([1,5,7]) / len([1,5,7]) = 13 / 3 = 4
, menurut pembagian integer (padahal Anda mau13. / 3. = 4.33...
). Untuk memperbaikinya, tulis ulang baris ini sebagaifloat(sum(x)) / float(len(x))
(satu float sudah mencukupi, seperti Python yang mengubahnya secara otomatis).Anda dapat melakukannya dengan
pandas.DataFrame.corr
:Ini memberi
sumber
Daripada mengandalkan numpy / scipy, saya pikir jawaban saya harus yang paling mudah untuk kode dan memahami langkah-langkah dalam menghitung Koefisien Korelasi Pearson (PCC).
The signifikansi dari PCC pada dasarnya adalah untuk menunjukkan kepada Anda bagaimana sangat berkorelasi dua variabel / daftar yang. Penting untuk dicatat bahwa nilai PCC berkisar dari -1 hingga 1 . Nilai antara 0 hingga 1 menunjukkan korelasi positif. Nilai 0 = variasi tertinggi (tidak ada korelasi apa pun). Nilai antara -1 hingga 0 menunjukkan korelasi negatif.
sumber
sum
fungsi bawaan .Perhitungan koefisien Pearson menggunakan panda dalam python: Saya sarankan mencoba pendekatan ini karena data Anda berisi daftar. Akan mudah berinteraksi dengan data Anda dan memanipulasinya dari konsol karena Anda dapat memvisualisasikan struktur data Anda dan memperbaruinya sesuai keinginan. Anda juga dapat mengekspor kumpulan data dan menyimpannya dan menambahkan data baru dari konsol python untuk analisis nanti. Kode ini lebih sederhana dan mengandung lebih sedikit baris kode. Saya mengasumsikan Anda memerlukan beberapa baris kode cepat untuk menyaring data Anda untuk analisis lebih lanjut
Contoh:
Namun, Anda tidak memposting data Anda untuk saya untuk melihat ukuran kumpulan data atau transformasi yang mungkin diperlukan sebelum analisis.
sumber
Hmm, banyak dari tanggapan ini yang panjang dan sulit dibaca kode ...
Saya sarankan menggunakan numpy dengan fitur-fiturnya yang bagus ketika bekerja dengan array:
sumber
Ini adalah implementasi fungsi Korelasi Pearson menggunakan numpy:
sumber
Berikut varian jawaban mkh yang berjalan lebih cepat daripada itu, dan scipy.stats.pearsonr, menggunakan numba.
sumber
Berikut ini adalah implementasi untuk korelasi pearson berdasarkan vektor jarang. Vektor di sini dinyatakan sebagai daftar tupel yang dinyatakan sebagai (indeks, nilai). Dua vektor jarang dapat memiliki panjang yang berbeda tetapi pada semua ukuran vektor harus sama. Ini berguna untuk aplikasi penambangan teks di mana ukuran vektor sangat besar karena sebagian besar fitur menjadi kantong kata dan karenanya perhitungan biasanya dilakukan menggunakan vektor jarang.
Tes unit:
sumber
Saya punya solusi yang sangat sederhana dan mudah dipahami untuk ini. Untuk dua array dengan panjang yang sama, koefisien Pearson dapat dengan mudah dihitung sebagai berikut:
sumber
Anda mungkin bertanya-tanya bagaimana menafsirkan probabilitas Anda dalam konteks mencari korelasi dalam arah tertentu (korelasi negatif atau positif.) Berikut adalah fungsi yang saya tulis untuk membantu hal itu. Bahkan mungkin benar!
Ini berdasarkan info yang saya peroleh dari http://www.vassarstats.net/rsig.html dan http://en.wikipedia.org/wiki/Student%27s_t_distribution , terima kasih atas jawaban lain yang diposting di sini.
sumber
Anda dapat melihat artikel ini. Ini adalah contoh yang terdokumentasi dengan baik untuk menghitung korelasi berdasarkan data pasangan mata uang forex historis dari beberapa file menggunakan panda library (untuk Python), dan kemudian menghasilkan plot peta panas menggunakan perpustakaan seaborn.
http://www.tradinggeeks.net/2015/08/calculating-correlation-in-python/
sumber
sumber