45_Pandas.DataFrame计算每列之间的相关系数并用热图可视化

45_Pandas.DataFrame计算每列之间的相关系数并用热图可视化

使用corr()方法计算pandas.DataFrame中各列之间的相关系数。

这里,将描述以下内容。

  • pandas.DataFrame.corr()的基本用法
    • 数据类型为数值型或布尔型的列的计算目标
    • 排除并计算缺失值 NaN
  • 指定如何计算相关系数:argument method
  • 使用热图可视化相关系数:seaborn

以下面的pandas.DataFrame为例。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame({'A': range(5),
                   'B': [x**2 for x in range(5)],
                   'C': [x**3 for x in range(5)]})

print(df)
#    A   B   C
# 0  0   0   0
# 1  1   1   1
# 2  2   4   8
# 3  3   9  27
# 4  4  16  64

pandas.DataFrame.corr()的基本用法

从 pandas.DataFrame 对象调用 corr() 方法计算每列之间的相关系数。 结果在 pandas.DataFrame 中返回。

df_corr = df.corr()
print(df_corr)
print(type(df_corr))
#           A         B         C
# A  1.000000  0.958927  0.905882
# B  0.958927  1.000000  0.987130
# C  0.905882  0.987130  1.000000
# <class 'pandas.core.frame.DataFrame'>

数据类型为数值型或布尔型的列的计算目标

添加字符串和布尔列以进行说明。

df['D'] = list('abcde')
df['E'] = [True, False, True, True, False]
print(df)
#    A   B   C  D      E
# 0  0   0   0  a   True
# 1  1   1   1  b  False
# 2  2   4   8  c   True
# 3  3   9  27  d   True
# 4  4  16  64  e  False

print(df.dtypes)
# A     int64
# B     int64
# C     int64
# D    object
# E      bool
# dtype: object

corr()方法排除数据类型object(字符串)的列,计算numeric(int、float)和bool类型的列之间的相关系数。

对于 bool 类型,True 被视为 1,False 被视为 0。

df_corr = df.corr()
print(df_corr)
#           A         B         C         E
# A  1.000000  0.958927  0.905882 -0.288675
# B  0.958927  1.000000  0.987130 -0.346023
# C  0.905882  0.987130  1.000000 -0.424522
# E -0.288675 -0.346023 -0.424522  1.000000

排除并计算缺失值 NaN

准备一个包含缺失值 Nan 的 pandas.DataFrame 对象以供解释。

df_nan = df.copy()
df_nan.iloc[[2, 3, 4], 1] = np.nan
print(df_nan)
#    A    B   C  D      E
# 0  0  0.0   0  a   True
# 1  1  1.0   1  b  False
# 2  2  NaN   8  c   True
# 3  3  NaN  27  d   True
# 4  4  NaN  64  e  False

在corr()方法中,剔除缺失值NaN,计算相关系数。

df_nan_corr = df_nan.corr()
print(df_nan_corr)
#           A    B         C         E
# A  1.000000  1.0  0.905882 -0.288675
# B  1.000000  1.0  1.000000 -1.000000
# C  0.905882  1.0  1.000000 -0.424522
# E -0.288675 -1.0 -0.424522  1.000000

指定如何计算相关系数:method

在corr()方法中,可以通过argument方法指定计算相关系数的方法。

从以下三种类型中选择。

  • ‘pearson’:皮尔逊积矩相关系数(默认)
  • ‘kendall’:肯德尔等级相关系数
  • ‘spearman’:斯皮尔曼等级相关系数

使用热图可视化相关系数:seaborn

Python 的可视化库 seaborn 可以很容易地将 pandas.DataFrame 可视化为热图,就像使用 corr() 一样。

sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)
plt.savefig('./data/45/seaborn_heatmap_corr_example.png')

在这里插入图片描述

原始数据有很多列(特征),但是如上所述, corr() 方法排除了数据类型为 object 的列。

df_house = pd.read_csv('./data/45/house_prices_train.csv', index_col=0)

print(df_house.shape)
# (1460, 80)

print(df_house.dtypes.value_counts())
# object     43
# int64      34
# float64     3
# dtype: int64

df_house_corr = df_house.corr()

print(df_house_corr.shape)
# (37, 37)

用 seaborn.heatmap() 函数可视化。

fig, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(df_house_corr, square=True, vmax=1, vmin=-1, center=0)
plt.savefig('./data/45/seaborn_heatmap_house_price.png')

在这里插入图片描述

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split # 读取训练集和测试集数据 train_data = pd.read_csv(r'C:\ADULT\Titanic\train.csv') test_data = pd.read_csv(r'C:\ADULT\Titanic\test.csv') # 统计训练集和测试集缺失值数目 print(train_data.isnull().sum()) print(test_data.isnull().sum()) # 处理 Age, Fare 和 Embarked 缺失值 most_lists = ['Age', 'Fare', 'Embarked'] for col in most_lists: train_data[col] = train_data[col].fillna(train_data[col].mode()[0]) test_data[col] = test_data[col].fillna(test_data[col].mode()[0]) # 拆分 X, Y 数据并将分类变量 one-hot 编码 y_train_data = train_data['Survived'] features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare', 'Sex', 'Embarked'] X_train_data = pd.get_dummies(train_data[features]) X_test_data = pd.get_dummies(test_data[features]) # 合并训练集 Y 和 X 数据,并创建乘客信息分类变量 train_data_selected = pd.concat([y_train_data, X_train_data], axis=1) print(train_data_selected) cate_features = ['Pclass', 'SibSp', 'Parch', 'Sex', 'Embarked', 'Age_category', 'Fare_category'] train_data['Age_category'] = pd.cut(train_data.Fare, bins=range(0, 100, 10)).astype(str) train_data['Fare_category'] = pd.cut(train_data.Fare, bins=list(range(-20, 110, 20)) + [800]).astype(str) print(train_data) # 统计各分类变量的分布并作出可视化呈现 plt.figure(figsize=(18, 16)) plt.subplots_adjust(hspace=0.3, wspace=0.3) for i, cate_feature in enumerate(cate_features): plt.subplot(7, 2, 2 * i + 1) sns.histplot(x=cate_feature, data=train_data, stat="density") plt.xlabel(cate_feature) plt.ylabel('Density') plt.subplot(7, 2, 2 * i + 2) sns.lineplot(x=cate_feature, y='Survived', data=train_data) plt.xlabel(cate_feature) plt.ylabel('Survived') plt.show() # 绘制点状的相关系数热图 plt.figure(figsize=(12, 8)) sns.heatmap(train_data_selected.corr(), vmin=-1, vmax=1, annot=True) plt.show() sourceRow = 891 output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions}) output.head() # 保存结果 output.to_csv('gender_submission.csv', index=False) print(output) train_X, test_X, train_y, test_y = train_test_split(X_train_data, y_train_data, train_size=0.8, random_state=42) print("随机森林分类结果") y_pred_train1 = train_data.predict(train_X) y_pred_test1 = train_data.predict(test_X) accuracy_train1 = accuracy_score(train_y, y_pred_train1) accuracy_test1 = accuracy_score(test_y, y_pred_test1) print("训练集——随机森林分类器准确率为:", accuracy_train1) print("测试集——随机森林分类器准确率为:", accuracy_train1)
最新发布
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值