python数据分析 –第四次笔记
假设检验
–*1、正态分布检验
–*2、卡方分布检验
–*3、方差检验
–*4、求相关性系数
–*5、回归分析
–*6、主成分分析(PCA)
所需要的模块:
import numpy as np
import scipy.stats as ss
1、正态分布检验
#创建一个20的正态分布的数据
norm_dist=ss.norm.rvs(size=20)
#normaltest基于偏度,和峰度的检验方法,检验是否符合正态分布
#输出:statistic统计值 pvalue P值>0.05表示符合正态分布
ss.normaltest(norm_dist)
*第二种方法:qq图
#qq图
from statsmodels.graphics.api import qqplot
from matplotlib import pyplot as plt
#散点图基本位于角平分线上说明符合正态分布
plt.show(qqplot(ss.norm.rvs(size=100)))
2、卡方分布检验
#卡方检验
#输出:检验统计量,P值,自由度,理论分布
ss.chi2_contingency([[15,95],[85,5]])
#独立t分布检验(检验两组值是否有较大差异)
#输出:统计量statistic,P值 pvalues
ss.ttest_ind(ss.norm.rvs(size=100),ss.norm.rvs(size = 200))
3、方差分布检验
#方差检验
#输出 统计量statistic,P值pvalue
ss.f_oneway([49,50,39,40,43],[28,32,30,26,34],[38,40,45,42,48])
4、求相关性系数
#求相关性系数
import pandas as pd
s1=pd.Series([0.1,0.2,1.1,2.4,1.3,0.3,0.5])
s2=pd.Series([0.5,0.4,1.2,2.5,1.1,0.7,0.1])
#相关系数
s1.corr(s2)
#method=“”方法,spearman相关系数
s1.corr(s2,method="spearman")
*第二种方法求相关系数
#第二种方法求相关系数
#构造一个的DataFrame 是对列进行相关性计算
df=pd.DataFrame([s1,s2])
df.corr()
#构造一个的DataFrame 是对行进行相关性计算
df=pd.DataFrame(np.array([s1,s2]).T)
df.corr()
#加上method方法
df.corr(method="spearman")
5、回归分析
#回归
#生成10个数,astype(np.float)精度为float,reshape((10,1)每个x值为一个数组
x=np.arange(10).astype(np.float).reshape((10,1))
#求y,np.random.random((10,1)在每个对应的y值加上(0,1)的噪声
y = x*3+4+np.random.random((10,1))
#导入scilit-learn模块的线性回归的方法
from sklearn.linear_model import LinearRegression
reg=LinearRegression()
res=reg.fit(x,y)
y_pred=reg.predict(x)
#预测值
print(y_pred)
#参数
print(reg.coef_)
#截距
print(reg.intercept_)
6、主成分分析(PCA)
#主成分分析(PCA)
data=np.array([np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]),np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1,1.6,0.9])]).T
#sklearn模块的降维方法PCA(奇异值分解的方法)
from sklearn.decomposition import PCA
#降成1维
lower_dim=PCA(n_components=1)
lower_dim.fit(data)
#维度的重要性,降维后多少的信息量
lower_dim.explained_variance_ratio_
#转化后的数值
lower_dim.fit_transform(data)
*第二种、函数实现
'''PCA方法'''
#data数据,n_components 指定维度
def myPCA(data,n_components=100000000):
#每个属性的均值,指的求列的均值
mean_vals=np.mean(data,axis=0)
#数据减去均值
mid=data-mean_vals
#求协方差,rowvar=False针对列的求协方差,否则会针对行求协方差
cov_mat=np.cov(mid,rowvar=False)
#做线性计算用的
from scipy import linalg
#求协方差的特征值,和特征向量
eig_vals,eig_vects=linalg.eig(np.mat(cov_mat))
#排序特征值和特征向量 argsort 排序取位置及索引,下标,而sort排序取得是值
eig_vals_index=np.argsort(eig_vals)
#取最大的
eig_vals_index=eig_vals_index[:-(n_components+1):-1]
#取出他的特征向量
eig_vects=eig_vects[:,eig_vals_index]
#然后进行转换,利用矩阵乘法mid乘特征向量
low_dim_mat=np.dot(mid,eig_vects)
#返回转换后的矩阵,特征,返回特征值
return low_dim_mat,eig_vals
print(myPCA(data,n_components=1))