Saya memiliki dataframe panda berikut Top15
:
Saya membuat kolom yang memperkirakan jumlah dokumen citable per orang:
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
Saya ingin mengetahui korelasi antara jumlah dokumen citable per kapita dan pasokan energi per kapita. Jadi saya menggunakan .corr()
metode (korelasi Pearson):
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
Saya ingin mengembalikan satu angka, tetapi hasilnya adalah:
python
pandas
correlation
tong zhu
sumber
sumber
.corr
langsung ke kerangka data Anda, itu akan mengembalikan semua korelasi berpasangan; itulah mengapa Anda kemudian mengamati 1 di diagonal matriks Anda (setiap kolom berkorelasi sempurna dengan dirinya sendiri). Lihat hasil edit saya di bawah.Jawaban:
Tanpa data aktual, sulit untuk menjawab pertanyaan tetapi saya rasa Anda mencari sesuatu seperti ini:
Itu menghitung korelasi antara dua kolom Anda
'Citable docs per Capita'
dan'Energy Supply per Capita'
.Sebagai contoh:
Kemudian
berikan
1
seperti yang diharapkan.Sekarang, jika Anda mengubah nilai, mis
perintah
kembali
yang masih mendekati 1, seperti yang diharapkan.
Jika Anda menerapkan
.corr
langsung ke kerangka data Anda, itu akan mengembalikan semua korelasi berpasangan antara kolom Anda ; itulah mengapa Anda kemudian mengamati1s
diagonal matriks Anda (setiap kolom berkorelasi sempurna dengan dirinya sendiri).karena itu akan kembali
Dalam grafik yang Anda tunjukkan, hanya sudut kiri atas dari matriks korelasi yang diwakili (saya asumsikan).
Mungkin ada kasus, di mana Anda mendapatkan
NaN
solusi Anda - lihat posting ini untuk contoh.Jika Anda ingin memfilter entri di atas / di bawah ambang tertentu, Anda dapat memeriksa pertanyaan ini . Jika Anda ingin memplot peta panas dari koefisien korelasi, Anda dapat memeriksa jawaban ini dan jika Anda kemudian mengalami masalah dengan label sumbu yang tumpang tindih, periksa posting berikut .
sumber
df.loc[1, :].corr(df.loc[2, :])
akan bekerja dengan baik juga. Untuk seluruh dataframe, Anda hanya dapat transpos:df.T.corr()
.1
dalam kasus Anda, bukan0.99586
?Saya mengalami masalah yang sama. Itu tampak
Citable Documents per Person
seperti pelampung, dan python melompati entah bagaimana secara default. Semua kolom lain dari kerangka data saya dalam format numpy, jadi saya menyelesaikannya dengan mengonversi kolom menjadinp.float64
Ingat itu persis kolom yang Anda hitung sendiri
sumber
Solusi saya adalah setelah mengonversi data ke tipe numerik:
sumber
Jika Anda menginginkan korelasi antara semua pasangan kolom, Anda dapat melakukan sesuatu seperti ini:
sumber
Saat Anda menyebutnya:
Karena, fungsi DataFrame.corr () melakukan korelasi berpasangan, Anda memiliki empat pasangan dari dua variabel. Jadi, pada dasarnya Anda mendapatkan nilai diagonal sebagai korelasi otomatis (korelasi dengan dirinya sendiri, dua nilai karena Anda memiliki dua variabel), dan dua nilai lainnya sebagai korelasi silang satu vs yang lain dan sebaliknya.
Lakukan korelasi antara dua rangkaian untuk mendapatkan satu nilai:
atau, jika Anda menginginkan satu nilai dari fungsi yang sama (koreksi DataFrame):
Semoga ini membantu.
sumber
Ini bekerja seperti ini:
sumber
Saya memecahkan masalah ini dengan mengubah tipe datanya. Jika Anda melihat 'Energy Supply per Capita' adalah tipe numerik sedangkan 'Citable docs per Capita' adalah tipe objek. Saya mengubah kolom menjadi float menggunakan astype. Saya memiliki masalah yang sama dengan beberapa fungsi np:
count_nonzero
dansum
bekerja sementaramean
danstd
tidak.sumber
mengubah 'Citable docs per Capita' menjadi numerik sebelum korelasi akan menyelesaikan masalah.
sumber