大师兄的数据分析学习笔记(五):探索性数据分析(四)
大师兄的数据分析学习笔记(七):探索性数据分析(六)
四、多因子与复合分析
4. 相关系数
- 相关系数是衡量两组数据的分布趋势和变化趋势一致性程度的因子。
- 相关系数有正相关、负相关和不相关之分。
- 相关系数越大,越接近1,变化趋势越正向同步;
- 相关系数越小,越接近-1,变化趋势越反向同步;
- 相关系数越接近0,变化趋势越不相关;
- 常用的相关系数有两种:皮尔逊相关系数(Pearson correlation coefficient)和斯皮尔曼相关系数(spearman correlation coefficient):
4.1 皮尔逊相关系数
- 皮尔逊相关系数的分子是两组数据的协方差,分母是两组数据的标准差的集。
>>>import numpy as np
>>>import scipy.stats as ss
>>>data1 = np.random.rand(10)
>>>data2 = np.random.rand(10)
>>>pccs = ss.pearsonr(data1,data2)
>>>print(f"data1:{data1}")
>>>print(f"data2:{data2}")
>>>print(f"Pearson's correlation coefficient:{pccs[0]}")
>>>print(f"Two-tailed p-value:{pccs[1]}")
data1:[0.99837294 0.784658 0.53345186 0.59309483 0.28240823 0.66189433
0.29580696 0.31315612 0.7754216 0.77443794]
data2:[0.48826977 0.81899969 0.77566201 0.91464751 0.05536523 0.35246479
0.32585614 0.71434004 0.37966254 0.94915496]
Pearson's correlation coefficient:0.32409101999585543
Two-tailed p-value:0.3609398908469933
4.2 斯皮尔曼相关系数
- 斯皮尔曼相关系数关注两组数据的名次差。
- :每组数据的数量;
- :两组数据排名后的名次差;
>>>import numpy as np
>>>import scipy.stats as ss
>>>data1 = np.random.rand(10)
>>>data2 = np.random.rand(10)
>>>pccs = ss.spearmanr(data1,data2)
>>>print(f"data1:{data1}")
>>>print(f"data2:{data2}")
>>>print(f"Spearman's correlation coefficient:{pccs[0]}")
>>>print(f"Two-tailed p-value:{pccs[1]}")
data1:[0.0085787 0.94480457 0.29985499 0.54689296 0.13564683 0.72558257
0.83684571 0.2797848 0.58108358 0.96698258]
data2:[0.71151971 0.3121948 0.20845518 0.68793807 0.62991839 0.43235496
0.93005684 0.64161376 0.93214243 0.06559743]
Spearman's correlation coefficient:-0.32121212121212117
Two-tailed p-value:0.3654683104386702
5. 线性回归
- 回归是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,如果变量间的关系是线性关系,则称为线性回归。
- 线性回归最常用的算法是最小二乘法,最小二乘法的本质是最小化误差的平方的方法,公式如下:
- 线性回归的关键指标包括决定系数和残差不相关:
- 一元线性回归决定系数公式:
:实际值
:均值
:预测值
决定系数越接近1,代表线性回归效果越好。
- 多元线性回归采用了校正式的决定系数:adjusted
:参数的个数
- 残差不相关(DW检验)的公式:
值得范围在0-4之间;
如果值为2则残差不相关(好的回归);
接近4代表残差正相关;
接近0代表残差负相关。
>>>import random
>>>import numpy as np
>>>import matplotlib.pyplot as plt
>>>from sklearn.linear_model import LinearRegression
>>>x = np.arange(10).astype(float).reshape((10,1))
>>>y = random.randint(-5,20)+np.random.rand(10,1)
>>>reg = LinearRegression()
>>>res = reg.fit(x,y) # 拟合
>>>y_pred = reg.predict(x) # 预测值
>>>print(f"coefficient:{reg.coef_}")
>>>print(f"intercept:{reg.intercept_}")
>>>plt.scatter(x,y)
>>>plt.plot(y_pred)
>>>plt.show()
coefficient:[[-0.01168797]]
intercept:[19.51730895]
6. 主成分分析
- 主成分分析(PCA),通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分,最重要的作用是给数据降维
- 主成分分析的步骤:
- 求特征协方差矩阵;
- 求协方差的特征值和特征向量;
- 将特征值按照从大到小的顺序排序,选择其中最大的k个;
- 将样本点投影到选取的特征向量上。
>>>import numpy as np
>>>import matplotlib.pyplot as plt
>>>from sklearn.decomposition import PCA
>>>data = np.array([np.random.randint(0,5,10),np.random.randint(0,5,10),np.random.randint(0,5,10),np.random.randint(0,5,10)]).T
>>>lower_dim = PCA(n_components=1)
>>>lower_dim.fit(data)
>>>print(f"explained_variance_ratio:{lower_dim.explained_variance_ratio_}")
>>>plt.plot(lower_dim.fit_transform(data))
>>>plt.show()
explained_variance_ratio:[0.40663428]