进行数据分析应该遵循一个什么样的步骤
numpy
1.pandas提供basestat功能:单变量、双变量数据分析,包括描述统计(集中和离散、图形、交叉表)、相关分析(r、卡方)等。
2.statsmodels提供假设检验及统计模型功能,主要研究结构性归因问题,并不强调预测功能,主要为推论统计小数据服务。
3.sklearn提供数据挖掘模型功能,主要研究预测性问题,主要为大数据服务,以探讨速度问题为特征。
4.Deep Learning深度学习,侧重数据挖掘及复杂智能方法、已非线性模型为主,擅长处理非结构数据。
5.PyMC拟合贝叶斯模型,侧重于业务问题和统计算法的整合,这类技术提供业务知识对统计模型的修正。
6.Seaborn基于matplotlib的可视化功能,统计应用者最重要的可视化包。
7.opencv-python图片视频库。
#=======================================================================================
#警告:原始数据的实际意义均经过脱敏,所有数据仅供数据分析案例使用,不能作为商业用途参考。
#数据集:烟草、卷烟工艺、客户信息表、短期绩效、商品材质等
#=========================================================================================
#导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
from sklearn import linear_model
%matplotlib inline
#中文显示
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
#使用pandas读取数据支持xls和xlsx
data=pd.read_excel(r"烟草.xlsx")
data.head(6)#显示数据开头6行
# data.info()
# scipy这个包很容易进行数值计算、优化的问题;
# scipy.stats导入py统计包
# ttest_ind导入t检验
from scipy.stats import ttest_ind as ttest, levene
from scipy import stats
#异方差检验-部门
bgroup1=data[data["班次"]=='早班']["总耗"] # 提取出早班的总耗为bgroup1
bgroup2=data[data["班次"]=='晚班']["总耗"] # 提取出早班的总耗为bgroup2
# levene(bgroup1,bgroup2)
# #单样本t检验
# stats.ttest_1samp(data["总耗"],3)
#独立样本t检验-性别
ttest(bgroup1,bgroup2,equal_var=False)#equal_var=True
Ttest_indResult(statistic=-1.0935840682920928,
pvalue=0.2741819213824044)
statistic统计值,statistic=bgroup1-bgroup2 为负数,表明bgroup1小于bgroup2,说明晚班总耗高于早班
pvalue为显著性,显著性不明显,所以早班和晚班耗能一样,差异与统计误差造成
(大于0.05是不显著,小于0.05是显著)
statistic=bgroup1-bgroup2 = -1.0935840682920928
# scipy这个包很容易进行数值计算、优化的问题;
# scipy.stats导入py统计包
# ttest_ind导入t检验
from scipy.stats import ttest_ind as ttest, levene
from scipy import stats
#异方差检验-部门
bgroup1=data[data["班次"]=='早班']["总耗"] # 提取出早班的总耗为bgroup1
bgroup2=data[data["班次"]=='晚班']["总耗"] # 提取出早班的总耗为bgroup2
levene(bgroup1,bgroup2)
# #单样本t检验
# stats.ttest_1samp(data["总耗"],3)
#独立样本t检验-性别
#ttest(bgroup1,bgroup2,equal_var=False)#equal_var=True
结果
LeveneResult(statistic=5.255884883173223,
pvalue=0.021907559093342466)
需要把qual_var的值改为True,改为True之后运行代码
# scipy这个包很容易进行数值计算、优化的问题;
# scipy.stats导入py统计包
# ttest_ind导入t检验
from scipy.stats import ttest_ind as ttest, levene
from scipy import stats
#异方差检验-部门
bgroup1=data[data["班次"]=='早班']["总耗"] # 提取出早班的总耗为bgroup1
bgroup2=data[data["班次"]=='晚班']["总耗"] # 提取出早班的总耗为bgroup2
levene(bgroup1,bgroup2)
# #单样本t检验
# stats.ttest_1samp(data["总耗"],3)
# 独立样本t检验-性别
ttest(bgroup1,bgroup2,equal_var=True)#equal_var=True
pvalue还是大于0.05,表面显著性不明显
Ttest_indResult(statistic=-1.0930198202034351, pvalue=0.27442953509209483)
# statsmodels小数据的包
# stats 统计
# anova方差
# anova_lm方差分析
#方差分析——多因素和交互
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import (pairwise_tukeyhsd,MultiComparison)
# smf.ols表示调用公式的算法,类似y=ax1+bx2+cx3+...
#这里y=总耗
#~表示等号=
modelols=smf.ols("总耗~班次",data=data).fit()
# 提取出anova_lm方差分析模型
anova=anova_lm(modelols)
# 打印anova
print(np.round(anova,3))
# print("部门事后检验",pairwise_tukeyhsd(data['总耗'],data['品牌']))#y和x的位置需要固定
# print("性别事后检验",pairwise_tukeyhsd(data['总耗'],data['品牌']))
#import seaborn as sns
#fig,ax=plt.subplots(2,1,figsize=(16,12))
#sns.lineplot(x="品牌",y="总耗",hue="质量控制",data=data,ax=ax[0])#交互效应图
#sns.violinplot(x="品牌",y="总耗",hue="质量控制",data=data,ax=ax[1])
有些因素之间的显著关系不能通过数值的结果进行分析,需要通过分析图形才能知道之间的相关性,这里就要进行多因素交互分析
#方差分析——多因素和交互
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import (pairwise_tukeyhsd,MultiComparison)
modelols=smf.ols("总耗~品牌+质量控制+机器类型+品牌*机器类型",data=data).fit()
anova=anova_lm(modelols)
print(np.round(anova,3))
#print("部门事后检验",pairwise_tukeyhsd(data['总耗'],data['品牌']))#y和x的位置需要固定
#print("性别事后检验",pairwise_tukeyhsd(data['总耗'],data['质量控制']))
import seaborn as sns
fig,ax=plt.subplots(2,1,figsize=(16,12))
sns.lineplot(x="品牌",y="总耗",hue="机器类型",data=data,ax=ax[0])#交互效应图
sns.violinplot(x="品牌",y="总耗",hue="机器类型",data=data,ax=ax[1])
在求解y可能会存在多个x的情况,有可能几个有可能10多个,有可能100个,所以维度太多了需要降维度,这里就得采用主次归因了