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))