import pandas as pd
import scipy as sp
fish_multi = pd.DataFrame({'species': ['A', 'A', 'A', 'B', 'B', 'B'], 'length': [2, 3, 4, 6, 8, 10]})
group = fish_multi.groupby('species')
# 平均值
print(group.mean())
# 标准差
print(group.std(ddof=1))
# 一次性求均值 标准差 四分位
print(group.describe())
# 协方差:研究两个变量之间关系
'''
协方差大于0,一个变量取值越大,另外一个变量也越大
协方差小于0,一个变量取值越大,另一个变量取值越小
协方差等于0,两个变量不相关
'''
协方差公式
C
o
v
(
x
,
y
)
=
1
N
∑
i
=
1
N
(
x
i
−
m
u
x
)
(
y
i
−
m
u
y
)
Cov(x,y)=frac1{N}sum_{i=1}^{N}(x_i-mu_x)(y_i-mu_y)
Cov(x,y)=N1i=1∑N(xi−mux)(yi−muy)
其中,
μ
x
mu_x
μx、
μ
y
mu_y
μy分别是变量x、y的均值,N是样本容量。
与方差公式不一样的地方
σ
2
=
1
N
∑
i
=
1
N
(
x
i
−
m
u
)
2
sigma^2=frac1{N}sum_{i=1}^{N}(x_i-mu)^2
σ2=N1i=1∑N(xi−mu)2
方差是(
x
i
−
μ
x_i-mu
xi−μ)×(
x
i
−
μ
x_i-mu
xi−μ)
协方差是(
x
i
−
μ
x
x_i-mu_x
xi−μx)×(
y
i
−
μ
y
y_i-mu_y
yi−μy)
协方差矩阵
把多个变量的方差和协方差放在一起的矩阵。
变量x,y的协方差矩阵为
C
o
v
(
x
,
y
)
=
[
σ
2
C
o
v
(
x
,
y
)
C
o
v
(
x
,
y
)
σ
2
]
Cov(x,y)= begin{bmatrix} sigma^2& Cov(x,y) \ Cov(x,y) & sigma^2 \ end{bmatrix}
Cov(x,y)=[σ2Cov(x,y)Cov(x,y)σ2]
cov_data = pd.DataFrame(
{'x': [18.5, 18.7, 19.1, 19.7, 21.5, 21.7, 21.8, 22.0, 23.4, 23.8],
'y': [34, 39, 41, 38, 45, 41, 52, 44, 44, 49]})
# 分别读取xy
x = cov_data['x']
y = cov_data['y']
# 读取样本容量
N = len(cov_data)
# 求各项变量均值
mu_x = np.mean(x)
mu_y = np.mean(y)
# 协方差
cov_sample = sum((x - mu_x)*(y - mu_y)) / N
print(cov_sample)
# N-1协方差
cov_sample_1 = sum((x - mu_x)*(y - mu_y)) / (N - 1)
print(cov_sample_1)
# 协方差矩阵
cov_array = np.cov(x,y,ddof=0)
print(cov_array)
# 协方差N-1矩阵
cov_array_1 = np.cov(x,y,ddof=1)
print(cov_array_1)
皮尔逊积矩相关系数
皮尔森(pearson)相关系数、斯皮尔曼(spearman)相关系数和肯德尔(kendall)相关系数并称为统计学三大相关系数。其中,spearman和kendall属于等级相关系数亦称为“秩相关系数”,是反映等级相关程度的统计分析指标。pearson是用来反应俩变量之间相似程度的统计量,在机器学习中可以用来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。
ρ
x
y
=
C
o
v
(
x
,
y
)
σ
x
2
σ
y
2
rho_{xy}=frac{Cov(x,y)}{sqrt{sigma_x^2sigma_y^2}}
ρxy=σx2σy2
Cov(x,y)
把多个变量的相关系数放在一起得到的矩阵叫相关矩阵
C
o
v
(
x
,
y
)
=
[
1
ρ
x
y
ρ
x
y
1
]
Cov(x,y)= begin{bmatrix} 1&rho_{xy} \ rho_{xy} & 1 \ end{bmatrix}
Cov(x,y)=[1ρxyρxy1]
皮尔逊积矩相关系数实现
''' 皮尔逊积矩相关系数 将协方差标准化最大值为1,最小值为-1 ''' # 计算N-1方差 sigma_2_x = np.var(x,ddof=1) sigma_2_y = np.var(y,ddof=1) # 计算相关系数 rho = cov_sample_1 / np.sqrt(sigma_2_x * sigma_2_y) print(np.round(rho,3)) # 相关矩阵 rho_array = np.corrcoef(x, y) print(rho_array)



