pandas 统计函数[corr,scatter_matrix]

这篇博客介绍了如何使用pandas的DataFrame.corr()函数计算数据集中的列与列之间的相关系数,并探讨了不同相关系数的含义。示例中展示了相关系数矩阵及其与线性相关性的关系。此外,还提到了scatter_matrix函数用于绘制散点图矩阵,帮助理解变量间的关系,特别是在房价分析案例中,强调了房价与收入的相关性较强。

DataFrame.corr(method=‘pearson’, min_periods=1)

计算列与列之间的相关系数,返回相关系数矩阵

  • method : {‘pearson’, ‘kendall’, ‘spearman’}
    • pearson : standard correlation coefficient
    • kendall : Kendall Tau correlation coefficient
    • spearman : Spearman rank correlation

解释:相关系数的取值范围为[-1, 1],当接近1时,表示两者具有强烈的正相关性,比如‘s’和‘x’;当接近-1时,表示有强烈的的负相关性,比如‘s’和‘c’,而若值接近0,则表示相关性很低.

代码:

allDf = pd.DataFrame({
    'x':[0,1,2,4,7,10],
    'y':[0,3,2,4,5,7],
    's':[0,1,2,3,4,5],
    'c':[5,4,3,2,1,0]
},index = ['p1','p2','p3','p4','p5','p6'])

# print(allDf) 

corr_matrix = allDf.corr()
print(corr_matrix)

out:
x y s c
x 1.000000 0.941729 0.972598 -0.972598
y 0.941729 1.000000 0.946256 -0.946256
s 0.972598 0.946256 1.000000 -1.000000
c -0.972598 -0.946256 -1.000000 1.000000

注意: 这里的相关性指的是线性相关性,下图是一些简单的例子:
数字为相关系数,数字下面为数据图形展示
在这里插入图片描述

接下来是房价分析的例子:

	corr_matrix = housing.corr()
	corr_matrix["median_house_value"].sort_values(ascending=False)

out:
median_house_value 1.000000
median_income 0.687160
total_rooms 0.135097
housing_median_age 0.114110
households 0.064506
total_bedrooms 0.047689
population -0.026920
longitude -0.047432
latitude -0.142724
Name: median_house_value, dtype: float64

可以看出,房价与收入有比较强的相关性,而与纬度的相关性很低。

scatter_matrix

pandas.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal=‘hist’, marker=’.’, density_kwds=None, hist_kwds=None, range_padding=0.05, **kwds)
画任意两列数值属性的散点图,最后画一个散点图的矩阵,对角线为分布直方图。

  • figsize 图片大小
 df = DataFrame(np.random.randn(1000, 4), columns=['A','B','C','D'])
  scatter_matrix(df, alpha=0.2)

在这里插入图片描述

继续分析房价的例子,通过计算相关系数,只看几个与房价相关性较大的数据

from pandas.tools.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms",
"housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12, 8))

在这里插入图片描述

#一 # 导入数据 import pandas as pd file_path = r"D:\Jiqixuexi\塑性铰案例\数据.CSV" data = pd.read_csv(file_path, encoding='ISO-8859-1') #二 #查看数据情况 from pandas import set_option #前5行打印 print(data.head()) # 数据维度 print(type(data),data.shape) # 特征属性的字段类型 print(data.dtypes) # 描述性统计信息 set_option('display.precision', 1) print(data.describe()) # 关联关系 设置显示精度并计算皮尔逊相关系数矩阵 set_option('display.precision', 2) print(data.corr(method='pearson')) #三数据可视化 import numpy as np from numpy import arange from matplotlib import pyplot import matplotlib.pyplot as plt from pandas.plotting import scatter_matrix # 单一特征图表 # 直方图 data.hist(sharex=False, sharey=False, xlabelsize=10, ylabelsize=10, figsize=(12,10),layout=(4,4)) pyplot.savefig('1_hist.png') #保存图片 pyplot.show() # 密度图 data.plot(kind='density', subplots=True, layout=(4,4), sharex=False, fontsize=1) pyplot.show() # 箱线图 data.plot(kind='box', subplots=True, layout=(4,4), sharex=False, sharey=False, fontsize=8) pyplot.show() #scatter_matrix() - 散点图矩阵,可以一次性查看多个变量之间的两两关系 scatter_matrix(data) pyplot.show() #分离数据集 from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score array = data.values X=array[:, 0:7] Y=array[:, 7] validation_size=0.2 # 20%的数据用于评估 seed=7 X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed) #4.1使用原始数据做模型 # 评估算法——评估标准 num_folds=5 # 10折交叉验证 seed=7 scoring='neg_mean_squared_error' # negative MSE评价结果,不是用MSE,是为了与损失函数的规则保持一致 # 一次使用6种算法做模型 from sklearn.linear_model import LinearRegression from sklearn.linear_model import Lasso from sklearn.linear_model import ElasticNet from sklearn.tree import DecisionTreeRegressor from sklearn.neighbors import KNeighborsRegressor from sklearn.svm import SVR ###### 建模1:用原始数据做分析 # 评估算法- baseline models={} models['LR']=LinearRegression() models['LASSO']=Lasso() models['EN']=ElasticNet() models['KNN']=KNeighborsRegressor() models['CART']=DecisionTreeRegressor() models['SVM']=SVR() # 评估算法 results = [] print("原始数据分析后的结果:") for key in models: kfold = KFold(n_splits=num_folds, shuffle=True, random_state=seed) # 构造交叉验证,必要参数:n_splits交叉验证折数、shuffle是否随机打乱数据、random_state随机数种子 cv_result = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring=scoring) # 计算交叉验证评分,必要参数:models[key]模型,X_train特征值、Y_train目标变量、cv交叉验证方法、scoring评分结果 results.append(cv_result) print('%s: %f(%f)' % (key, cv_result.mean(), cv_result.std())) # 6组结果,每组10个,查看均值、标准差 print()
10-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值