python - पांडा का उपयोग कर सहसंबंध मैट्रिक्स




pandas matplotlib data-visualization information-visualization (6)

मेरे पास बड़ी संख्या में सुविधाओं के साथ डेटा सेट है, इसलिए सहसंबंध मैट्रिक्स का विश्लेषण करना बहुत मुश्किल हो गया है। मैं एक सहसंबंध मैट्रिक्स प्लॉट करना चाहता हूं जिसे हम पांडा पुस्तकालय से dataframe.corr() फ़ंक्शन का उपयोग करते हैं। क्या इस मैट्रिक्स को साजिश करने के लिए पांडा लाइब्रेरी द्वारा प्रदान किया गया कोई अंतर्निहित फ़ंक्शन है?


Answers

आप matplotlib से pyplot.matshow() उपयोग कर सकते हैं:

import matplotlib.pyplot as plt

plt.matshow(dataframe.corr())

Seaborn के heatmap संस्करण:

import seaborn as sns
corr = dataframe.corr()
sns.heatmap(corr, 
            xticklabels=corr.columns.values,
            yticklabels=corr.columns.values)

इस फ़ंक्शन को आज़माएं, जो सहसंबंध मैट्रिक्स के लिए चर नाम भी प्रदर्शित करता है:

def plot_corr(df,size=10):
    '''Function plots a graphical correlation matrix for each pair of columns in the dataframe.

    Input:
        df: pandas DataFrame
        size: vertical and horizontal size of the plot'''

    corr = df.corr()
    fig, ax = plt.subplots(figsize=(size, size))
    ax.matshow(corr)
    plt.xticks(range(len(corr.columns)), corr.columns);
    plt.yticks(range(len(corr.columns)), corr.columns);

आप matplotlib से imshow () विधि का उपयोग कर सकते हैं

import pandas as pd
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')

plt.imshow(X.corr(), cmap=plt.cm.Reds, interpolation='nearest')
plt.colorbar()
tick_marks = [i for i in range(len(X.columns))]
plt.xticks(tick_marks, X.columns, rotation='vertical')
plt.yticks(tick_marks, X.columns)
plt.show()

यदि आपका मुख्य लक्ष्य प्रति साजिश बनाने के बजाय सहसंबंध मैट्रिक्स को देखना है, तो सुविधाजनक pandas स्टाइल विकल्प एक व्यवहार्य अंतर्निहित समाधान है:

import pandas as pd
import numpy as np

rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient()

ध्यान दें कि यह बैकएंड में होना चाहिए जो एचटीएमएल को प्रतिपादित करने में सहायता करता है, जैसे जुपीटरलैब नोटबुक। (अंधेरे पृष्ठभूमि पर स्वचालित प्रकाश पाठ मौजूदा पीआर से है और नवीनतम रिलीज़ संस्करण नहीं है, pandas 0.23)।

स्टाइलिंग

आप आसानी से अंकों की सटीकता को सीमित कर सकते हैं:

corr.style.background_gradient().set_precision(2)

या यदि आप एनोटेशन के बिना मैट्रिक्स पसंद करते हैं तो अंकों को पूरी तरह से छुटकारा पाएं:

corr.style.background_gradient().set_properties(**{'font-size': '0pt'})

स्टाइलिंग प्रलेखन में अधिक उन्नत शैलियों के निर्देश भी शामिल हैं, जैसे माउस पॉइंटर पर चलने वाले सेल के प्रदर्शन को कैसे बदला जाए। आउटपुट को सहेजने के लिए आप render() विधि को जोड़कर एचटीएमएल वापस कर सकते हैं और फिर इसे फाइल में लिख सकते हैं (या कम औपचारिक उद्देश्यों के लिए बस एक स्क्रीनशॉट लें)।

समय तुलना

मेरे परीक्षण में, sns.heatmap() 10x10 मैट्रिक्स के साथ sns.heatmap() से plt.matshow() और 120x तेज से 4x तेज था। दुर्भाग्यवश यह plt.matshow() साथ-साथ स्केल नहीं करता है: दोनों एक 100x100 मैट्रिक्स के लिए एक ही समय लेते हैं, और plt.matshow() 1000x1000 मैट्रिक्स के लिए 10x तेज है।


नीचे दिया गया कोड मेरे लिए काम किया।

import pandas

df = pandas.read_csv('somefile.txt')

df = df.fillna(0)




python pandas matplotlib data-visualization information-visualization