Pandalarla Korelasyon Matrisinin Hesaplanması ve Görselleştirilmesi


35

Birkaç girişi olan bir panda veri çerçevem ​​var ve bazı mağaza türlerinin geliri arasındaki ilişkiyi hesaplamak istiyorum. Gelir verileri, faaliyet alanlarının sınıflandırılması (tiyatro, giyim mağazaları, yiyecek ...) ve diğer veriler bulunan çok sayıda mağaza vardır.

Yeni bir veri çerçevesi oluşturmaya ve aynı kategoriye ait tüm mağaza türlerinin geliri olan bir sütun eklemeye çalıştım ve geri dönen veri çerçevesi yalnızca ilk sütunu doldurdu ve geri kalanı NaN'lerle dolu. Yorgun olduğum kod:

corr = pd.DataFrame()
for at in activity:
    stores.loc[stores['Activity']==at]['income']

Bunu yapmak istiyorum, bu yüzden .corr()mağaza kategorileri arasındaki korelasyon matrisini vermek için kullanabilirim .

Ondan sonra matris değerlerini (-1 ile 1 arasında, Pearson'un korelasyonunu kullanmak istediğimden) matplolib ile nasıl çizebileceğimi bilmek istiyorum.


Yanıtlar:


24

Aşağıdakilere bir tür oyun öneririm:

Bu örnekte UCI Abalone verilerinin kullanılması ...

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# Read file into a Pandas dataframe
from pandas import DataFrame, read_csv
f = 'https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data'
df = read_csv(f)
df=df[0:10]
df

görüntü tanımını buraya girin

Korelasyon matrisi çizim fonksiyonu:

# Korelasyon matris komplo fonksiyonu

def correlation_matrix(df):
    from matplotlib import pyplot as plt
    from matplotlib import cm as cm

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    cmap = cm.get_cmap('jet', 30)
    cax = ax1.imshow(df.corr(), interpolation="nearest", cmap=cmap)
    ax1.grid(True)
    plt.title('Abalone Feature Correlation')
    labels=['Sex','Length','Diam','Height','Whole','Shucked','Viscera','Shell','Rings',]
    ax1.set_xticklabels(labels,fontsize=6)
    ax1.set_yticklabels(labels,fontsize=6)
    # Add colorbar, make sure to specify tick locations to match desired ticklabels
    fig.colorbar(cax, ticks=[.75,.8,.85,.90,.95,1])
    plt.show()

correlation_matrix(df)

görüntü tanımını buraya girin

Bu yardımcı olur umarım!


İkinci bölüm gerçekten çok yardımcı oldu, ama yine de ilk sorunum var ve ikinci bölüme geçmeden önce çözmem gerekiyor
gdlm

Bazı kısımlarda veri olmadan ne istediğinizi anlamak çok zor. Hakkında bir sorunuz olan diğer parçayı göstermek için veri ekleyebilirsiniz. Bahsettiğiniz şeye dayanarak bunun önemsizce çözüldüğüne inanıyorum. Sadece 10 satır dataframe ve ne istediğinizi ve önce ve sonra yazın.
AN6U5

1
Hat import numpy as npgerekli değil mi?
Martin Thoma

1
Kullanmıyorsun, peki cbarneden atarsın?
Martin Thoma

1
@Martin Thoma - Numpy'nin kullanılmadığı doğru. .Corr () 'in numpy işlevi olduğunu düşünüyordum ama pandalar. Renk çubuğunu kullanıyorum, ancak cbar'a atamam gerekmediği konusunda haklısın. Yanıtınızı yorumlarınıza göre düzenledim. Teşekkürler!
AN6U5

29

Başka bir alternatif, kovaryansı çizmek için ısı haritası fonksiyonunu deniz doğada kullanmaktır. Bu örnek, R'deki ISLR paketinden ayarlanan Otomatik verileri kullanır (gösterdiğiniz örnekte olduğu gibi).

import pandas.rpy.common as com
import seaborn as sns
%matplotlib inline

# load the R package ISLR
infert = com.importr("ISLR")

# load the Auto dataset
auto_df = com.load_data('Auto')

# calculate the correlation matrix
corr = auto_df.corr()

# plot the heatmap
sns.heatmap(corr, 
        xticklabels=corr.columns,
        yticklabels=corr.columns)

görüntü tanımını buraya girin

Daha da süslü olmak istiyorsanız, Pandas Style'ı kullanabilirsiniz , örneğin:

cmap = cmap=sns.diverging_palette(5, 250, as_cmap=True)

def magnify():
    return [dict(selector="th",
                 props=[("font-size", "7pt")]),
            dict(selector="td",
                 props=[('padding', "0em 0em")]),
            dict(selector="th:hover",
                 props=[("font-size", "12pt")]),
            dict(selector="tr:hover td:hover",
                 props=[('max-width', '200px'),
                        ('font-size', '12pt')])
]

corr.style.background_gradient(cmap, axis=1)\
    .set_properties(**{'max-width': '80px', 'font-size': '10pt'})\
    .set_caption("Hover to magify")\
    .set_precision(2)\
    .set_table_styles(magnify())

görüntü tanımını buraya girin


ilk defa python içinde R paketi kullanmaya bakın. Artık birçok R işlevi kullanılabilir. Harika
Diansheng

Pandaların> 0.19 sürümleri rpymodülü içermez . Tek başına bir proje kullanmanız gerekir rpy2. Burada Pandaların uyarısına bakınız .
n1k31t4,

7

Neden sadece bunu yapmıyorsun:

import seaborn as sns
import pandas as pd

data = pd.read_csv('Dataset.csv')

plt.figure(figsize=(40,40)) 
# play with the figsize until the plot is big enough to plot all the columns
# of your dataset, or the way you desire it to look like otherwise

sns.heatmap(data.corr())

Parametreyi kullanarak renk paletini değiştirebilirsiniz cmap:

sns.heatmap(data.corr(), cmap='BuGn')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.