host绑定网站,昆山广告设计制作公司,传奇游戏网页,wordpress 外贸多语言相关系数矩阵#xff08;Correlation matrix#xff09;是数据分析的基本工具。它们让我们了解不同的变量是如何相互关联的。在Python中#xff0c;有很多个方法可以计算相关系数矩阵#xff0c;今天我们来对这些方法进行一个总结
Pandas
Pandas的DataFrame对象可以使用c…相关系数矩阵Correlation matrix是数据分析的基本工具。它们让我们了解不同的变量是如何相互关联的。在Python中有很多个方法可以计算相关系数矩阵今天我们来对这些方法进行一个总结
Pandas
Pandas的DataFrame对象可以使用corr方法直接创建相关矩阵。由于数据科学领域的大多数人都在使用Pandas来获取数据因此这通常是检查数据相关性的最快、最简单的方法之一。 import pandas as pdimport seaborn as snsdata sns.load_dataset(mpg)correlation_matrix data.corr(numeric_onlyTrue)correlation_matrix如果你是统计和分析相关工作的你可能会问 p值在哪里在最后我们会有介绍
Numpy
Numpy也包含了相关系数矩阵的计算函数我们可以直接调用但是因为返回的是ndarray所以看起来没有pandas那么清晰。 import numpy as npfrom sklearn.datasets import load_irisiris load_iris()np.corrcoef(iris[data])为了更好的可视化我们可以直接将其传递给sns.heatmap()函数。 import seaborn as snsdata sns.load_dataset(mpg)correlation_matrix data.corr()sns.heatmap(data.corr(), annotTrue, cmapcoolwarm)annotTrue这个参数可以输出一些额外的有用信息。一个常见hack是使用sns.set_context(‘talk’)来获得额外的可读输出。
这个设置是为了生成幻灯片演示的图像它能帮助我们更好地阅读(更大的字体)。 Statsmodels
Statsmodels这个统计分析库也是肯定可以的 import statsmodels.api as smcorrelation_matrix sm.graphics.plot_corr(data.corr(), xnamesdata.columns.tolist())plotly
默认情况下plotly这个结果是如何从左下到右上运行对角线1.0的。这种行为与大多数其他工具相反所以如果你使用plotly需要特别注意 import plotly.offline as pyopyo.init_notebook_mode(connectedTrue)import plotly.figure_factory as ffcorrelation_matrix data.corr()fig ff.create_annotated_heatmap(zcorrelation_matrix.values, xlist(correlation_matrix.columns), ylist(correlation_matrix.index), colorscaleBlues)fig.show()Pandas Matplotlib更好的可视化
这个结果也可以直接使用用sns.pairplot(data)两种方法产生的图差不多但是seaborn只需要一句话 sns.pairplot(df[[mpg,weight,horsepower,acceleration]])所以我们这里介绍如何使用Matplotlib来实现 import matplotlib.pyplot as pltpd.plotting.scatter_matrix(data, alpha0.2, figsize(6, 6), diagonalhist)plt.show()相关性的p值
如果你正在寻找一个简单的矩阵(带有p值)这是许多其他工具(SPSS, Stata, R, SAS等)默认做的那如何在Python中获得呢
这里就要借助科学计算的scipy库了以下是实现的函数 from scipy.stats import pearsonrimport pandas as pdimport seaborn as snsdef corr_full(df, numeric_onlyTrue, rows[corr, p-value, obs]):Generates a correlation matrix with correlation coefficients, p-values, and observation count.Args:- df: Input dataframe- numeric_only (bool): Whether to consider only numeric columns for correlation. Default is True.- rows: Determines the information to show. Default is [corr, p-value, obs].Returns:- formatted_table: The correlation matrix with the specified rows.# Calculate Pearson correlation coefficientscorr_matrix df.corr(numeric_onlynumeric_only)# Calculate the p-values using scipys pearsonrpvalue_matrix df.corr(numeric_onlynumeric_only, methodlambda x, y: pearsonr(x, y)[1])# Calculate the non-null observation count for each columnobs_count df.apply(lambda x: x.notnull().sum())# Calculate observation count for each pair of columnsobs_matrix pd.DataFrame(indexcorr_matrix.columns, columnscorr_matrix.columns)for col1 in obs_count.index:for col2 in obs_count.index:obs_matrix.loc[col1, col2] min(obs_count[col1], obs_count[col2])# Create a multi-index dataframe to store the formatted correlationsformatted_table pd.DataFrame(indexpd.MultiIndex.from_product([corr_matrix.columns, rows]), columnscorr_matrix.columns)# Assign values to the appropriate cells in the formatted tablefor col1 in corr_matrix.columns:for col2 in corr_matrix.columns:if corr in rows:formatted_table.loc[(col1, corr), col2] corr_matrix.loc[col1, col2]if p-value in rows:# Avoid p-values for diagonal they correlate perfectlyif col1 ! col2:formatted_table.loc[(col1, p-value), col2] f({pvalue_matrix.loc[col1, col2]:.4f})if obs in rows:formatted_table.loc[(col1, obs), col2] obs_matrix.loc[col1, col2]return(formatted_table.fillna().style.set_properties(**{text-align: center}))直接调用这个函数我们返回的结果如下 df sns.load_dataset(mpg)result corr_full(df, rows[corr, p-value])result总结
我们介绍了Python创建相关系数矩阵的各种方法这些方法可以随意选择那个方便用哪个。Python中大多数工具的标准默认输出将不包括p值或观察计数所以如果你需要这方面的统计可以使用我们子厚提供的函数因为要进行全面和完整的相关性分析有p值和观察计数作为参考是非常有帮助的。
https://avoid.overfit.cn/post/836b5590a96045faae2774bb3f23c9ef