第11章 统计分析的智慧:从数据中洞察规律

第11章 统计分析的智慧:从数据中洞察规律 第11章 统计分析的智慧:从数据中洞察规律在完成了数据清洗和预处理之后,数据分析便进入了核心的探索阶段——统计分析。这一阶段的目标是从数据中提炼出具有业务意义的洞察,揭示变量之间的关系,为决策提供量化依据。无论是对业务指标进行简单的描述性统计,还是通过分组对比发现差异,抑或使用数据透视表进行多维交叉分析,统计分析都是连接原始数据与业务结论的桥梁。本章将深入探讨如何利用ChatGPT与pandas实现全面的统计分析。我们将从描述性统计入手,逐步深入到分组统计、频数分析,最后系统讲解数据透视表这一强大工具的各种高级应用。每个知识点都结合真实的商业场景,提供可直接运行的代码实例,帮助读者建立从统计理论到业务实践的完整认知。11.1 描述性统计:刻画数据的全貌描述性统计是数据分析的第一步,它用几个关键的数字概括整个数据集的整体特征。这些数字包括反映数据集中趋势的均值、中位数、众数,反映数据离散程度的方差、标准差、极差,以及反映数据分布形状的偏度和峰度。理解这些统计量,可以帮助我们快速把握数据的“脾气”。11.1.1 集中趋势的度量:数据的中心在哪里集中趋势描述了数据中心点的位置。最常见的指标包括均值(算术平均数)、中位数(排序后位于中间的值)和众数(出现次数最多的值)。均值对异常值敏感,而中位数则稳健;众数适用于分类数据。商业实例:某电商平台需要分析用户单次消费金额的整体水平。如果直接计算均值,可能会被少数高消费用户拉高,无法反映大多数用户的真实消费能力。因此,我们同时计算均值和分位数,全面了解消费分布。importpandasaspdimportnumpyasnpclassDescriptiveStats:""" 描述性统计计算类 """def__init__(self,Data):self.Data=DatadefGetCentralTendency(self,ColumnName):""" 计算集中趋势指标 """meanVal=self.Data[ColumnName].mean()medianVal=self.Data[ColumnName].median()modeVal=self.Data[ColumnName].mode()print(f"列 '{ColumnName}' 的集中趋势:")print(f" 均值:{meanVal:.2f}")print(f" 中位数:{medianVal:.2f}")iflen(modeVal)0:print(f" 众数:{modeVal.tolist()}")else:print(" 众数: 无唯一众数")return{'mean':meanVal,'median':medianVal,'mode':modeVal}defGetQuantiles(self,ColumnName,Quantiles=[0.25,0.5,0.75]):""" 计算分位数 """quantiles=self.Data[ColumnName].quantile(Quantiles)print(f"列 '{ColumnName}' 的分位数:")forq,valinzip(Quantiles,quantiles):print(f"{q*100:.0f}%:{val:.2f}")returnquantiles# 商业实例:分析用户消费金额if__name__=="__main__":np.random.seed(42)# 模拟用户消费数据:大部分用户在50-300之间,少数高消费consumption=np.concatenate([np.random.normal(150,50,950),# 普通用户np.random.normal(800,200,50)# 高消费用户])consumption=np.clip(consumption,10,None)# 最低10元dfConsumption=pd.DataFrame({'消费金额':consumption})stats=DescriptiveStats(dfConsumption)stats.GetCentralTendency('消费金额')stats.GetQuantiles('消费金额',[0.1,0.25,0.5,0.75,0.9])# 输出说明print("\n结论: 均值被高消费用户拉高,而中位数更代表典型用户消费水平")11.1.2 离散程度的度量:数据的波动有多大离散程度描述了数据分布的分散程度。常用的指标有方差(每个值与均值的差的平方的平均)、标准差(方差的平方根)、极差(最大值减最小值)以及四分位距(IQR)。标准差越大,数据越分散;极差和IQR则直观反映了数据的跨度。商业实例:某零售公司有多个门店,需要评估各门店销售额的稳定性。我们计算销售额的标准差和变异系数(标准差/均值),来衡量波动性。importpandasaspdclassDispersionStats:""" 离散程度统计类 """def__init__(self,Data):self.Data=DatadefGetDispersion(self,ColumnName):""" 计算离散程度指标 """variance=self.Data[ColumnName].var()std=self.Data[ColumnName].std()rangeVal=self.Data[ColumnName].max()-self.Data[ColumnName].min()Q1=self.Data[ColumnName].quantile(0.25)Q3=self.Data[ColumnName].quantile(0.75)iqr=Q3-Q1 cv=std/self.Data[ColumnName].mean()# 变异系数print(f"列 '{ColumnName}' 的离散程度:")print(f" 方差:{variance:.2f}")print(f" 标准差:{std:.2f}")print(f" 极差:{rangeVal:.2f}")print(f" 四分位距:{iqr:.2f}")print(f" 变异系数:{cv:.3f}")return{'variance':variance,'std':std,'range':rangeVal,'iqr':iqr,'cv':cv}# 商业实例:比较各门店销售额的稳定性if__name__=="__main__":np.random.seed(42)# 模拟四个门店的日销售额(万元)storeSales={'门店A':np.random.normal(50,5,30),# 稳定'门店B':np.random.normal(52,12,30),# 波动大'门店C':np.random.normal(48,4,30),# 稳定但偏低'门店D':np.random.normal(55,15,30)# 波动大且高}dfSales=pd.DataFrame(/