news 2026/10/15 15:03:33

描述统计实战:从直方图、箱线图到均值、标准差与数据挖掘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
描述统计实战:从直方图、箱线图到均值、标准差与数据挖掘

先把话说在前面:数据挖掘这件事,真正动手之后你会发现,最花时间的往往不是算法本身,而是在喂算法之前那堆“理不清、说不明”的数据。而描述统计就是帮你把这堆数据理顺的第一步。系列这套“数据挖掘数学基础”课程里,上一篇讲了数据的类型、测量尺度和数据清洗的基本思路,这一篇“描述统计(中)”,重点落在两件事上:怎么把数据“画”出来看,以及怎么用几个数字把数据“压缩”出来。说白了,就是让你在跑任何模型之前,心里先有底。

我见过太多新人拿到数据就直奔均值,算出个几万几十万的数就觉得“哦,原来平均是这么多”,然后开始建模。这恰恰是最容易翻车的地方。均值只是一个点估计,它背后隐藏着数据的分布形状、离散程度、偏斜方向——这些信息不挖出来,后面的模型做得再漂亮也是空中楼阁。所以这篇虽然叫“数学基础”,但内容其实非常实战:频数分布表、直方图、箱线图,再加上集中趋势、离散程度、偏度和峰度,最后用一个完整案例把这些工具串起来。适合正在学描述统计的初学者,也适合那些“会用软件但讲不清原理”的分析师,读完你至少能回答一个问题:为什么有时候中位数比均值更可信。

1. 前半程走完,为什么下一步是“看图”和“算离差”

1.1 描述统计不是“算个平均”那么简单

很多人觉得描述统计就是算均值、中位数、众数、标准差,这几个数一出来,任务就结束了。但实际工作里,这几个数字只会告诉你“大概长什么样”,完全回答不了“数据为什么会这样”。比如某零售平台一个月的订单金额,均值是120元,听起来挺正常——但如果80%的订单其实只有30元,只有极少数大客户把平均值拉高了,那你拿120元去做库存预估、做促销策略,全都会偏。

描述统计的真正任务,是把一个几千行甚至几万行的原始表格,压缩成一组“可解释的线索”。这个压缩过程分三步:先通过图形看整体形状,再用少量指标描述集中位置,最后用离散程度的指标说明数据有多“散”。这三步缺一不可。图形负责给你直觉,均值负责给你锚点,方差和四分位距负责告诉你这个锚点靠不靠谱。很多人只做了第二步,所以踩坑。

还有一个更实际的点:数据挖掘建模之前,几乎都要做数据探索(EDA,即Exploratory Data Analysis)。EDA里面用到的大部分图表,像直方图、箱线图、散点图,底层全是描述统计的概念。你在探索阶段看到“某字段右偏严重”“有大量离群点”,这些判断不是靠肉眼瞎看,而是靠偏度系数、四分位距、z-score这些量化工具得出来的。所以描述统计不光是数学课,它直接就是你做特征工程和异常值处理时的基本功。

1.2 本篇内容在全系列里的位置

这套系列课程是按“数学基础”的线索展开的。上一篇的重点是:数据类型怎么分、测量尺度有什么差别、缺失值和重复值要如何处理。那是进入数据分析前的“原材料处理”阶段。这一篇接续上一篇,专门解决一个核心问题:当数据已经“能用”了,你该怎么全面地描述它。

所以我给这篇安排了四块内容。第一块是可视化:频数分布表、直方图、箱线图,你先学会让数据“现形”。第二块是集中趋势:均值、中位数、众数到底在什么场景下用哪个,为什么有时均值会“说谎”。第三块是离散程度:极差、四分位距、方差、标准差,这些指标才真正反映了数据的稳定性。第四块是分布形态:偏度、峰度、z-score,这是描述统计和后续推论统计、建模之间的接口。

至于下一篇“描述统计(下)”,大概率会围绕两个以上变量之间的关系展开,比如协方差、相关系数、交叉分组描述。到时候你会看到,这一篇的“单变量描述”就是下一篇“多变量描述”的地基。前期基础打得稳,后面学相关分析、回归分析才会顺。

2. 频数分布表到箱线图:把一万个数压成一张图

2.1 频数分布表:分几组、组距怎么定

数据拿到手里,第一件事不应该是算均值,而是先把数据“摊开”看看。最简单的工具就是频数分布表——把数值范围分成若干区间,统计每个区间落入多少条记录。听起来很基础,但真正做的时候有个问题:到底分多少组?组距取多大?

分组数太多,每个组里没几个数,图形就像锯齿一样乱;分组数太少,数据细节全被吞掉,直方图变成一根扁平的“方块”。理论上有不少经验公式,比如Sturges公式:组数 ≈ 1 + log2(n),其中n是样本量。对于1000条数据,组数大约就是1 + log2(1000) ≈ 11组。但这个公式只适合接近正态分布的数据,如果数据严重偏斜,我更倾向于用“分组后每组样本量不低于5”作为实际约束,再手动微调。

比如有一组100个订单金额,最小值10元,最大值10000元,跨度非常大。按Sturges公式分7组,组距大约是(10000-10)/7≈1427元,结果就是第一组“10到1437”塞了90个订单,后面几组几乎全空。这种表画出来毫无信息量。正确的做法是先取对数、按数量级分组,或者用分位数来切分区间,保证每组都有足够样本。记住,频数分布表的核心目的不是“标准”,而是“可读”。

2.2 直方图和条形图不是一回事

频数分布表配直方图,是描述统计最经典的一对组合。但每次带新人,我都会发现有人把直方图和条形图搞混。直方图的横轴是连续数值,柱子之间没有间隙,柱子的面积对应频数;条形图的横轴是类别,柱子之间有间隙,柱子的高度对应类别的数量。这俩长得像,语义完全不同。

直方图的真正价值,是让你一眼看出分布的形状。以订单金额为例,画出来如果右边有一条长长的尾巴,说明数据右偏,少数高价订单把分布拉长了;如果中间高两头低,接近钟形,那很多基于正态假设的方法才勉强可用。你不需要先跑偏度检验,直方图就能给你一个预判。而且直方图和频数分布表是互相校验的关系:表告诉你具体的数量,图告诉你形状。两者结合,数据的第一印象就出来了。

不过直方图有一个天然缺陷——它把数据“装箱”了,装箱的起点和宽度会直接影响图形形状。同一份数据,组距设成50和设成200,画出来的直方图观感完全不同。所以我现在在实际项目里,直方图只用来做快速判断,真要细看分布,我更喜欢箱线图。

2.3 箱线图里的五数概括

箱线图可能是描述统计里“性价比”最高的图。它只用五个数字就概括了一组数据的核心信息:最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)、最大值。这五个数字合称“五数概括”。箱体从Q1到Q3,箱中间那条线是中位数,箱体外的两条须线延伸到非离群范围的最远点,超过须线的点单独标出来,就是离群点。

举个例子,一组数据是20个订单金额,从小到大排完后,Q1=51.5元,中位数=174.5元,Q3=530元。于是箱体就画在51.5到530之间,中位数线明显偏下,箱子本身就被拉得很长。上须线延伸到Q3+1.5×(Q3-Q1),也就是大约1247.75元的位置,所以1200元这个订单还在须线内,但2500元和5000元的订单就成了箱线图上方单独的小点——离群点。

箱线图的好处是:它不像直方图那样依赖组距设置,纯粹基于分位数,所以抗离群值能力很强。多个组的数据并排列出来,还能直接对比中位数和分布展布。我在做特征筛选的时候,经常把十几个特征的箱线图横着排一排,一眼就能看出哪些字段离群点多、哪些字段分布太窄没什么区分度。这些字段后续要么做变换,要么直接淘汰。

3. 集中趋势三件套,关键不是“算”而是“选”

3.1 均值最常用,也最容易翻车

均值大概是所有统计量里大家最熟的。计算公式很简单:x̄ = Σxi / n,把所有数值加起来除以个数。但越简单的指标,越容易在应用中翻车。

翻车场景主要出现在数据存在离群值或分布偏斜时。假设一组收入数据:[3, 6, 8, 10, 12],均值是7.8,中位数是8,两者差不多。但如果数据变成[3, 6, 8, 10, 120]——只有一个极端值120——均值立刻被拉到29.4,而中位数仍然是8。你看,一个离群值就能让均值从7.8跳到29.4,这还能反映“大多数人的水平”吗?

所以均值本质上是一个对“总量”敏感的指标。如果你的业务关注的是总盘子,比如总销售额除以订单数得到客单价,那均值就是正确选择。但如果你的目标是用一个数代表“典型个体”,比如新入职员工的普遍薪资水平,那均值就很容易被几个高薪高管带偏。做数据挖掘时,均值最常用的场景是在特征缩放里——比如z-score标准化就需要用到均值——但它必须搭配标准差一起使用,单独拎出来下结论非常危险。

3.2 中位数:抗离群值的定海神针

中位数是排序后位于正中间的那个数,样本量为偶数时就取中间两个的平均。它最大的优点就是稳健。不管数据里有5000还是50000的极端值,只要它们的数量不超过一半,中位数基本不为所动。

在实际业务里,中位数的可靠性经常比均值高。举个例子,一个社区超市20笔订单,有大额团购也有小额散客,这时候“客单中位数”比“客单均值”更能代表普通顾客的消费水平。很多平台的“平均薪资”“平均房价”被吐槽“被平均”,就是因为这些场景更该看中位数。

在数据挖掘中,中位数还有一个有意思的用途:填入缺失值。给一个有离群值的连续特征填充缺失值时,用均值填充会被离群值污染,导致填充值偏离正常范围;而用中位数填充,能把这种风险压低很多。所以每次做数据清洗,遇到偏斜严重的连续变量,我默认就用中位数来做填充,而不是均值。记住一个判断标准:数据像正态分布,均值和中位数接近,用哪个都行;数据偏斜明显或离群值多,优先中位数。

3.3 众数不是没有,而是经常被遗忘

众数是数据中出现次数最多的值。很多教材里把众数放在均值和中位数之后一笔带过,好像它不太重要。但在数据挖掘实操里,众数的重要性一点不低,尤其是处理分类特征的时候。

比如一个“用户等级”字段,取值有普通、银卡、金卡、钻石,你看均值等于多少?毫无意义。这时候众数告诉你,数据里出现最多的等级是“普通”,这就是最有代表性的信息。当你需要对分类变量的缺失值做填充时,用众数填充几乎是默认做法。连续变量也可以算众数,但实际意义要看数据精度——订单金额精确到小数点后两位时,几乎每个值都只出现一次,众数就失去意义了。

还有更复杂的情况:数据可能有多个众数,这叫多峰分布。出现双峰时,你反而要警惕——这组数据可能不是同一个整体的,而是两个不同子群体混在一起。比如“所有用户”的消费金额出现双峰,很可能意味着里面有个人用户和企业用户两种模式。这种洞察在业务分层上很有价值。

3.4 选型对照:什么时候用哪个

为了让你看得更清楚,我把三个集中趋势指标的选型建议整理成一张表。这张表也是我在实际项目中反复用到的判断逻辑。

指标计算思路抗离群值能力适用场景数据挖掘中的典型用途
均值总和 ÷ 个数弱,一个极端值就能大幅改变数据近似对称分布、需要总量视角z-score标准化、线性模型中的均值填充(仅限正态)
中位数排序后取中间强,不受极端值影响数据偏斜、存在明显离群值偏斜特征缺失值填充、稳健基线模型
众数出现次数最多强,只看频次分类变量、离散变量、多峰分布识别分类特征缺失值填充、用户分层探查

再看一遍这三个指标的差异,你会发现它们回答的是不同问题:均值回答“总盘子平均到每个人是多少”,中位数回答“排在正中间的那个人是多少”,众数回答“最常见的那个值是什么”。做数据探索时,我建议把三者一起算出来对比。如果均值、中位数差距不大,说明数据比较对称;如果均值明显大于中位数,大概率右偏;如果均值明显小于中位数,数据左偏。这三者的差异本身就是一条很有价值的探索线索。

4. 离散程度:没有波动数据,平均值就是“谎言”

4.1 极差:简单但脆弱的波动标尺

离散程度描述的是数据“散不开”。入门必学的是极差:最大值减最小值。它确实简单,但脆弱程度和均值一个级别——只需要一个异常值,极差就完全失真。

好比两组数据的均值都是10,第一组是[9.9, 10.1, 10],极差只有0.2;第二组是[1, 10, 19],极差是18。两组均值相同、离散程度天差地别。极差能告诉你数据跨了多大范围,但完全不知道中间那些数是怎么分布的。如果数据里有一个5000的极端值,极差直接变成4990,这个数字除了说明“存在极端值”以外,没有任何参考价值。

所以极差在数据挖掘里一般不单独用,最多在做数据质量检查时看一眼睛,比如“某个字段的取值是否超出了合理物理范围”。真要评估数据的波动水平,得看后面几个指标。

4.2 四分位距:不惧离群值的稳健区间

四分位距(IQR)定义是Q3减去Q1,也就是中间50%数据的跨度。它的好处很明显:完全不理会两端那25%的数据,所以离群值再狂,也影响不到IQR。

IQR最著名的应用就是箱线图里的离群点判定规则:把低于Q1-1.5×IQR或高于Q3+1.5×IQR的点视为离群点。这个规则虽然没有严格的理论推导,但在工程实践中非常好用,尤其是初步异常筛查。回到前面那组订单金额数据,Q1=51.5,Q3=530,IQR=478.5,于是判定阈值为1247.75,超出这个值的2500元和5000元订单就被标记为异常。

不过用IQR做异常筛查也会漏掉一些情况,比如分布本身就很“胖”的长尾数据,哪怕那个点其实是正常的高消费用户,也会被规则标出来。所以我会把IQR判断当作“候选异常”的生成器,后续要不要剔除,还得结合业务判断。

4.3 方差与标准差:为什么要先“平方”

方差和标准差是离散程度的核心指标。方差的计算逻辑是:先算每个点与均值的距离,然后把这些距离的平方加起来,再除以个数。标准差就是方差的平方根。

很多人问,为什么不用“平均距离”而要用“平方”?因为距离有正有负,直接加起来正负抵消,永远是0,根本没法衡量差异。那能不能取绝对值?技术上可以,叫“平均绝对偏差”,但它数学性质不如平方好。平方之后,那些偏离均值较远的点会被赋予更大的权重,这正好符合很多场景的逻辑——极端偏差往往意味着更大的风险。

标准差的实际含义,可以理解成“平均来看,每个数据点偏离均值多远”。比如排队时长数据1到10分钟,均值5.5,标准差约2.87,说明大部分顾客的排队时长分布在5.5±2.87分钟左右的范围附近。如果标准差只有0.5,说明所有顾客排队时长都差不多,管理流程稳定;如果标准差大到3以上,说明排队时多时少,波动剧烈,这背后往往有高峰期和空闲期的问题,就需要进一步拆时间段了。

在数据挖掘里,标准差的重要性主要体现在特征缩放。z-score标准化就是拿每个值减去均值,再除以标准差,把不同量纲的特征拉到同一个尺度上。如果某个特征的标准差接近0,说明这个特征几乎是个常数,对模型没有任何区分能力,可以直接删掉。

4.4 变异系数:跨量纲比较的标配

变异系数(CV)等于标准差除以均值。它解决了一个很实际的问题:不同量纲、不同均值水平的数据,怎么比较离散程度?

比如一个特征“用户年龄”,均值30,标准差3,CV=0.1;另一个特征“订单金额”,均值1000,标准差100,CV也是0.1。如果你只看标准差,会以为订单金额的波动远大于年龄,但事实上两者相对于自身均值的波动程度是一样的。这就是CV的价值——消除量纲和均值水平的影响,得到“相对离散度”。

做特征工程时,CV常用来筛选特征:那些CV特别小的特征,说明所有样本取值都很接近,区分度低;CV特别大的特征,可能本身就不稳定,或者存在大量离群值。不过CV有一个隐藏问题——当均值接近0时,CV会变得巨大甚至无意义,所以均值本来就该接近0的特征用CV要格外小心。另外,CV只适用于比率尺度(取值有固定0点)的数据,像温度这种有任意零点的测量,CV没有解读意义。

5. 偏度、峰度与z-score:从“描述”到“建模”的接口

5.1 偏度:看尾巴往哪边拖

偏度描述分布的不对称程度。偏度为0,表示分布对称;偏度>0,称为右偏或正偏,尾巴往右边拖,均值一般大于中位数;偏度<0,称为左偏或负偏,尾巴往左边拖,均值一般小于中位数。

还是看订单金额那组数据,均值601.14远大于中位数174.5,这就是典型的右偏特征。直方图会表现为左边高、右边拖着长长的尾巴。偏度为什么重要?因为很多统计模型和机器学习算法都默认数据接近对称分布,偏度过大时,模型的收敛速度和预测效果都会受影响。

处理偏度有一种常见手段:对数变换或Box-Cox变换。对严重右偏的数值做对数变换后,分布通常会更接近对称,模型的线性假设也更容易满足。所以我做特征工程时,会先计算所有连续特征的偏度,把偏度绝对值大于1的特征单独拎出来,考虑做变换。

偏度不等于所有数据都“有问题”。有些字段天生就该偏态,比如用户收入、成交金额这种长尾数据,偏态本来就是数据内在特性,强行变对称反而会丢失业务语义。

5.2 峰度:不是“高矮”,而是“尾巴权重”

峰度常被误解为“峰顶的尖平程度”,其实准确说,它刻画的是分布的“尾部厚度”。峰度高,不一定是峰顶更尖,而是更可能存在极端值,也就是“厚尾”。峰度>0时,分布比正态分布有更厚的尾巴,极端值出现的概率更高;峰度<0时,尾部更薄,取值更集中在均值附近。

这一点在金融风控里特别敏感:像股价收益这类数据,峰度往往远大于0,说明极端大涨大跌的发生频率比正态分布假设要高得多。如果你按正态分布去估算风险,很可能低估了极端事件的发生概率。

数据分析时,偏度和峰度要放在一起看。偏度告诉你分布哪边偏,峰度告诉你极端值有多“极端”。两个都大的字段,在建模前必须重点处理,比如做截尾处理、对数变换,或者用对离群值不敏感的算法。这里补一张小表,方便对照:

指标正方向含义负方向含义常见处理
偏度>0右偏,长尾在右左偏,长尾在左对数变换、Box-Cox变换
峰度>0厚尾,极端值多瘦尾,极端值少鲁棒缩放、截尾处理、用中位数填充缺失值

5.3 z-score与3σ准则

z-score的公式很简单:z = (x - μ) / σ。它把一个原始值变成“相对均值多少个标准差”的标准化数值。z=1,说明该值比均值高一个标准差;z=-2,说明比均值低两个标准差。做完z-score变换之后,不同量纲、不同单位的特征就放到同一个尺度上了,这在很多机器学习模型里是绕不开的预处理步骤。

z-score还有一层用途:异常值判断。在近似正态分布的数据里,约68%的数据落在均值±1个标准差内,约95%在±2个标准差内,约99.7%在±3个标准差内。所以习惯上把z-score绝对值大于3的点视为异常候选,这就是“3σ准则”。

但注意,3σ准则的前提是数据接近正态分布。如果数据严重右偏,直接用z-score筛异常会把正常的高值大量误判成异常。实际做法是:要么先把数据做变换使其接近正态,再套3σ;要么干脆用IQR方法筛异常。这两类方法各有偏好,我的建议是都算一遍,把两边的候选异常取个交集,再交给业务判断。

5.4 一个零售订单金额的完整描述统计流程

最后用一组实际数据把这一篇的内容串起来。假设某社区超市随机抽取了20笔订单,金额分别为:9.9、19.9、25、35、45、58、63、70、88、120、150、199、260、320、460、600、800、1200、2500、5000元。

第一步,先算集中趋势。均值是601.14元,中位数是(150+199)/2=174.5元,众数这一组数据里没有明显重复,可以忽略。第二步,看离散程度。Q1=51.5,Q3=530,IQR=478.5,标准差按总体公式算下来也远大于均值本身。第三步,做图形判断。直方图上左边一堆低金额订单,右边拖出2500、5000两个长尾巴,明显右偏;箱线图把2500和5000标记为离群点。第四步,算偏度与峰度,偏度明显为正,峰度也偏高,印证了厚尾特征。第五步,做标准化检查,z-score算下来,5000元这单的z值远超3,基本可判定为需要业务确认的异常单。

这一通操作下来,不需要任何机器学习模型,你就已经能回答几个关键业务问题:大多数顾客消费水平大概在什么区间?哪些订单属于异常大单?平均值是否被离群值“绑架”?这,就是描述统计在数据挖掘里的真正价值——它不直接产出模型,但它让你在建模前,先真正认识自己的数据。

实话说,我在带新人时发现,最容易忽略的就是这最后一步:把计算结果重新翻译回业务语言。“均值601元”是个数学事实,“大多数顾客其实只花一百多块,还有两笔大单非常可疑”才是能指导行动的结论。所以别停留在公式和数字上,多花时间想想,这个统计量到底在替数据说什么。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 15:03:29

SpringBoot生鲜电商团购平台技术实现与优化

1. 项目概述&#xff1a;生鲜电商团购平台的技术实现这个基于SpringBoot的生鲜团购平台&#xff0c;本质上是一个聚焦于高频、刚需消费场景的垂直电商解决方案。与综合类电商平台不同&#xff0c;我们专门针对生鲜商品短保质期、高损耗率的特性&#xff0c;设计了限时团购和社区…

作者头像 李华
网站建设 2026/10/15 15:03:23

B站动漫数据采集与分析:Python爬虫合规实践指南

简介&#xff1a;本资源是一套面向Python初学者与数据分析爱好者的B站番剧全链路分析实践项目&#xff0c;聚焦ACG文化数据采集、清洗、分析与可视化全流程&#xff0c;可作为爬虫与数据分析入门的完整学习范例。压缩包共23个文件&#xff0c;含3个Jupyter Notebook&#xff08…

作者头像 李华
网站建设 2026/10/15 15:03:22

翻页电子书放大就糊?不是分辨率不行,是你上传的PDF类型选错了

我以前一直以为翻页电子书放大就糊是行业通病&#xff0c;还总甩锅"压缩太狠"“屏幕不行”。直到朋友在 FLBOOK 上做了一本讲义发我&#xff0c;我放大到整页只剩四五个字&#xff0c;字还是字——才意识到&#xff1a;问题不在工具&#xff0c;也不在分辨率&#xf…

作者头像 李华
网站建设 2026/10/15 15:03:12

百亿量化私募数据清单:28家机构核心参数与选型逻辑

简介&#xff1a;这份PDF资料聚焦国内规模超百亿的量化私募机构&#xff0c;面向关注私募基金、量化投资与资产配置的投资者及金融从业者&#xff0c;帮助读者快速了解头部量化机构的团队背景、策略布局与业绩表现。包内共1个PDF文件&#xff0c;约800KB&#xff0c;内容以机构…

作者头像 李华
网站建设 2026/10/15 15:02:28

Go服务私有Docker仓库搭建与生产级集成实践

1. 为什么非得自己搭私有仓库&#xff1f;——从“镜像拉取失败”说起上周五下午三点&#xff0c;某跨平台系统上线前的最后一次集成测试突然卡住。CI流水线在docker pull阶段持续超时&#xff0c;日志里反复刷着Error response from daemon: Get https://registry-1.docker.io…

作者头像 李华
网站建设 2026/10/15 15:01:10

Anthropic 内部大仓库弃用 Git:AI 写代码太快,开发工具先遇到瓶颈

发布日期&#xff1a;2026-10-15Anthropic 于 2026 年 10 月 13 日披露&#xff0c;已将内部单体仓库从 Git 迁移到自研版本控制系统 Scion。AI 编程提速后&#xff0c;公司日均合并量从 5 月约 2500 次增至 9 月超过 3 万次&#xff0c;代码获取、审查和测试随之承压。7 人团队…

作者头像 李华