পান্ডা ব্যবহার করে প্লট পারস্পরিক সম্পর্ক ম্যাট্রিক্স


212

আমার কাছে বিপুল সংখ্যক বৈশিষ্ট্যযুক্ত একটি ডেটা সেট রয়েছে, সুতরাং পারস্পরিক সম্পর্ক ম্যাট্রিক্স বিশ্লেষণ করা খুব কঠিন হয়ে পড়েছে। আমি একটি পারস্পরিক সম্পর্ক ম্যাট্রিক্স প্লট করতে চাই যা আমরা dataframe.corr()পান্ডাস লাইব্রেরি থেকে ফাংশন ব্যবহার করে পাই । এই ম্যাট্রিক্স প্লট করার জন্য পান্ডাস লাইব্রেরি দ্বারা প্রদত্ত কোনও বিল্ট-ইন ফাংশন রয়েছে কি?


সম্পর্কিত উত্তরগুলি এখানে পাওয়া যাবে পান্ডাস
ডেটা

উত্তর:


292

আপনি এর pyplot.matshow() থেকে ব্যবহার করতে পারেন matplotlib:

import matplotlib.pyplot as plt

plt.matshow(dataframe.corr())
plt.show()

সম্পাদনা:

মন্তব্যে অক্ষ টিক লেবেলগুলি কীভাবে পরিবর্তন করা যায় তার জন্য একটি অনুরোধ ছিল। এখানে একটি ডিলাক্স সংস্করণ যা একটি বড় চিত্রের আকারের উপর আঁকানো হয়, ডেটাফ্রেমের সাথে মেলে অক্ষ অক্ষর এবং রঙ স্কেলটি ব্যাখ্যা করার জন্য একটি কালারবার কিংবদন্তি রয়েছে।

আমি কীভাবে লেবেলের আকার এবং ঘূর্ণন সামঞ্জস্য করতে পারি তা অন্তর্ভুক্ত করছি এবং আমি একটি চিত্রের অনুপাত ব্যবহার করছি যা রঙ বার এবং মূল চিত্রটি একই উচ্চতায় প্রকাশিত করে।

f = plt.figure(figsize=(19, 15))
plt.matshow(df.corr(), fignum=f.number)
plt.xticks(range(df.shape[1]), df.columns, fontsize=14, rotation=45)
plt.yticks(range(df.shape[1]), df.columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.title('Correlation Matrix', fontsize=16);

পারস্পরিক সম্পর্ক প্লট উদাহরণ


1
আমি অবশ্যই কিছু মিস করছি:AttributeError: 'module' object has no attribute 'matshow'
টম রাসেল

1
@ টমরাসেল আপনি কি করেছেন import matplotlib.pyplot as plt?
joelostblom

1
আমি ভাবতে চাই আমি করেছি! :-)
টম রাসেল

7
আপনি কীভাবে প্লটে প্রকৃত কলামের নামগুলি প্রদর্শন করবেন জানেন?
ওয়েবকিউব 4'19

2
@ সিসিলিয়া আমি ঘূর্ণন প্যারামিটারটি 90
ইকবেল বেনাবেডসামাদ

182

যদি আপনার মূল লক্ষ্য প্রতি সেটের জন্য প্লট তৈরির পরিবর্তে পারস্পরিক সম্পর্ক ম্যাট্রিক্সটি কল্পনা করা হয় তবে সুবিধাজনক pandas স্টাইলিং বিকল্পগুলি একটি কার্যকর বিল্ট-ইন সমাধান solution

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(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps

এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে এটি এমন একটি ব্যাকএন্ডে থাকা দরকার যা জুপিটারল্যাব নোটবুকের মতো রেন্ডারিং এইচটিএমএল সমর্থন করে। (অন্ধকার ব্যাকগ্রাউন্ডে স্বয়ংক্রিয় হালকা পাঠ্যটি বিদ্যমান PR থেকে এবং সর্বশেষ প্রকাশিত সংস্করণ, pandas0.23 নয়)


স্টাইল

আপনি সহজেই অঙ্কের নির্ভুলতা সীমাবদ্ধ করতে পারেন:

corr.style.background_gradient(cmap='coolwarm').set_precision(2)

এখানে চিত্র বর্ণনা লিখুন

বা যদি আপনি টিকা ছাড়াই ম্যাট্রিক্সকে পছন্দ করেন তবে পুরোপুরি অঙ্কগুলি থেকে মুক্তি পান:

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

এখানে চিত্র বর্ণনা লিখুন

স্টাইলিং ডকুমেন্টেশনে আরও উন্নত শৈলীর নির্দেশাবলীও অন্তর্ভুক্ত রয়েছে যেমন মাউস পয়েন্টারটি ঘুরে বেড়াচ্ছে এমন সেলটির প্রদর্শন কীভাবে পরিবর্তন করা যায়। আউটপুট সংরক্ষণ করার জন্য আপনি render()পদ্ধতিটি যুক্ত করে এইচটিএমএল ফিরিয়ে দিতে পারেন এবং তারপরে এটি কোনও ফাইলে লিখতে পারেন (বা কেবল কম আনুষ্ঠানিক উদ্দেশ্যে স্ক্রিনশট নিতে পারেন)।


সময়ের তুলনা

আমার পরীক্ষায়, 10x10 ম্যাট্রিক্সের চেয়ে style.background_gradient()4x plt.matshow()এবং 120x দ্রুত ছিল sns.heatmap()। দুর্ভাগ্যক্রমে এটি পাশাপাশি স্কেল হয় না plt.matshow(): দু'জন 100x100 ম্যাট্রিক্সের জন্য একই সময় নেয় এবং plt.matshow()1000x1000 ম্যাট্রিক্সের জন্য 10x দ্রুত হয়।


সেভিং

স্টাইলাইজড ডেটাফ্রেম সংরক্ষণের কয়েকটি সম্ভাব্য উপায় রয়েছে:

  • render()পদ্ধতিটি যুক্ত করে এইচটিএমএল ফিরিয়ে দিন এবং তারপরে একটি ফাইলে আউটপুট লিখুন।
  • পদ্ধতিটি .xslxযুক্ত করে শর্তসাপেক্ষ্য বিন্যাসযুক্ত ফাইল হিসাবে সংরক্ষণ করুন to_excel()
  • বিটম্যাপটি সংরক্ষণ করতে ইমগকিটের সাথে একত্রিত করুন
  • একটি স্ক্রিনশট নিন (কম আনুষ্ঠানিক উদ্দেশ্যে)।

পান্ডা> = 0.24 এর জন্য আপডেট

সেট করে axis=None, এখন কলাম বা প্রতি সারিতে না হয়ে পুরো ম্যাট্রিক্সের ভিত্তিতে রঙগুলি গণনা করা সম্ভব:

corr.style.background_gradient(cmap='coolwarm', axis=None)

এখানে চিত্র বর্ণনা লিখুন


2
যদি কোনও চিত্র হিসাবে রফতানির উপায় থাকে তবে তা দুর্দান্ত হত!
ক্রিস্টাদা 673

1
ধন্যবাদ! আপনার অবশ্যই একটি ডাইভারিং প্যালেট দরকারimport seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
স্টলিং

1
@ স্টলিংএন ভাল পয়েন্ট, উদাহরণে আমার নেতিবাচক মানগুলি অন্তর্ভুক্ত করা উচিত নয়, আমি পরে এটি পরিবর্তন করতে পারি। কেবল এটি পড়ার লোকদের রেফারেন্সের জন্য, আপনাকে সমুদ্র সৈকত সহ একটি কাস্টম ডাইভারজেন্ট সিএম্যাপ তৈরি করার দরকার নেই (যদিও উপরের মন্তব্যে একটি দেখতে বেশ চটুল দেখায়), আপনি ম্যাটপ্লটলিব থেকে বিল্ট-ইন ডাইভারজেন্ট cmaps ব্যবহার করতে পারেন, যেমন corr.style.background_gradient(cmap='coolwarm')। বর্তমানে নির্দিষ্ট মানটিতে সিএমএপকে কেন্দ্র করার কোনও উপায় নেই, যা ডাইভারজেন্ট সিএম্যাপের সাহায্যে ভাল ধারণা হতে পারে।
joelostblom

1
@ রোভিকো আপনি কি পান্ডাসে আছেন> = 0.24.0?
joelostblom

2
এই প্লটগুলি দৃশ্যত দুর্দান্ত, তবে @ ক্রিস্টাড 673৩ প্রশ্নটি যথেষ্ট প্রাসঙ্গিক, আপনি কীভাবে এগুলি রপ্তানি করবেন?
এরফান

89

এই ফাংশনটি ব্যবহার করে দেখুন, যা পারস্পরিক সম্পর্ক ম্যাট্রিক্সের জন্য পরিবর্তনশীল নামগুলিও প্রদর্শন করে:

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);

6
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')আপনি যদি এক্স-অক্ষের উপর কলামের নামের উলম্ব দিকনির্দেশ চান
নিশান্ত

অন্য গ্রাফিকাল জিনিস, তবে একটি plt.tight_layout()দীর্ঘ যুক্ত কলামের নামগুলির জন্যও যুক্ত হতে পারে।
ব্যবহারকারী 3017048

86

সিবর্নের হিটম্যাপ সংস্করণ:

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

9
সিউর্ন হিটম্যাপটি অভিনব তবে এটি বড় ম্যাট্রিকগুলিতে খারাপ অভিনয় করে। ম্যাটপ্লটলিবের ম্যাটশো পদ্ধতিটি আরও দ্রুত।
anilbey

3
সিউর্ন কলামের নামগুলি থেকে স্বয়ংক্রিয়ভাবে টিক্লেবেলগুলি অনুমান করতে পারে।
তুলিও ক্যাসাগ্রান্ডে

80

আপনি সামুদ্রিক অংশ থেকে উত্তাপের মানচিত্র বা পান্ডাস থেকে বিচ্ছুরিত ম্যাট্রিক্সের মাধ্যমে বৈশিষ্ট্যগুলির মধ্যে সম্পর্কটি পর্যবেক্ষণ করতে পারেন।

স্ক্যাটার ম্যাট্রিক্স:

pd.scatter_matrix(dataframe, alpha = 0.3, figsize = (14,8), diagonal = 'kde');

আপনি যদি প্রতিটি বৈশিষ্ট্যের সঙ্কোচনের পাশাপাশি কল্পনা করতে চান - তবে সমুদ্র সৈকত জোড়া ব্যবহার করুন।

sns.pairplot(dataframe)

এসএনএস হিটম্যাপ:

import seaborn as sns

f, ax = pl.subplots(figsize=(10, 8))
corr = dataframe.corr()
sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(220, 10, as_cmap=True),
            square=True, ax=ax)

আউটপুট বৈশিষ্ট্যগুলির একটি সম্পর্কিত মানচিত্র হবে। যেমন নীচের উদাহরণ দেখুন।

এখানে চিত্র বর্ণনা লিখুন

মুদি এবং ডিটারজেন্টের মধ্যে পারস্পরিক সম্পর্ক বেশি। একইভাবে:

উচ্চ সম্পর্কের সাথে পিডিওডাক্টস:
  1. মুদি এবং ডিটারজেন্টস।
মাঝারি সম্পর্কযুক্ত পণ্য:
  1. দুধ এবং মুদি
  2. দুধ এবং ডিটারজেন্টস_প্যাপার
নিম্ন সহাসংক্রান্ত পণ্য:
  1. দুধ এবং বিতরণ
  2. হিমশীতল এবং সতেজ
  3. হিমশীতল এবং ডেলি

পেয়ারপ্লটস থেকে: আপনি জুটি প্লট বা স্ক্রেটার ম্যাট্রিক্স থেকে একই সংযোগের সম্পর্কগুলি পর্যবেক্ষণ করতে পারেন। তবে এগুলি থেকে আমরা বলতে পারি যে তথ্যগুলি সাধারণত বিতরণ করা হয় কি না।

এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য: উপরেরটি ডেটা থেকে নেওয়া একই গ্রাফ, যা হিটম্যাপ আঁকার জন্য ব্যবহৃত হয়।


3
আমার মনে হয় এটি হওয়া উচিত .pl না .pl (যদি এটি
ম্যাটপ্ল্লোলিবকে বোঝায়

2
পছন্দ করেছেন তিনি এটিকে উল্লেখ করতে পারতেনfrom matplotlib import pyplot as pl
জেরু লুক

পারস্পরিক সম্পর্কের সীমানাটি কীভাবে সর্বদা -1 থেকে +1 এর মধ্যে স্থাপন করতে হবে, পরস্পর সম্পর্কিত প্লটে
debaonline4u

7

আপনি ম্যাটপ্লোটিলিব থেকে ইমশো () পদ্ধতি ব্যবহার করতে পারেন

import pandas as pd
import matplotlib.pyplot as plt
plt.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()

5

যদি আপনার ডেটাফ্রেম হয় তবে dfআপনি কেবল ব্যবহার করতে পারেন:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(15, 10))
sns.heatmap(df.corr(), annot=True)

3

স্ট্যাটমোডেলস গ্রাফিকগুলি পারস্পরিক সম্পর্ক ম্যাট্রিক্সের একটি দুর্দান্ত ভিউ দেয়

import statsmodels.api as sm
import matplotlib.pyplot as plt

corr = dataframe.corr()
sm.graphics.plot_corr(corr, xnames=list(corr.columns))
plt.show()


1

অন্যান্য পদ্ধতির পাশাপাশি পেয়ারপ্লট থাকাও ভাল যা সমস্ত ক্ষেত্রে বিচ্ছুরিত প্লট দেবে-

import pandas as pd
import numpy as np
import seaborn as sns
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
sns.pairplot(df)

0

ফর্ম সম্পর্কিত সম্পর্ক ম্যাট্রিক্স, আমার ক্ষেত্রে zdf হ'ল ডেটা ফ্রেম যা আমার প্রাসঙ্গিক ম্যাট্রিক্স সম্পাদন করা প্রয়োজন।

corrMatrix =zdf.corr()
corrMatrix.to_csv('sm_zscaled_correlation_matrix.csv');
html = corrMatrix.style.background_gradient(cmap='RdBu').set_precision(2).render()

# Writing the output to a html file.
with open('test.html', 'w') as f:
   print('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-widthinitial-scale=1.0"><title>Document</title></head><style>table{word-break: break-all;}</style><body>' + html+'</body></html>', file=f)

তারপরে আমরা স্ক্রিনশট নিতে পারি। অথবা এইচটিএমএল একটি চিত্র ফাইলে রূপান্তর করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.