哈喽大家好!我是你们的统计学+Python保姆级老师~零露老师
昨天Day1咱们成功迈出了第一步:搞懂了统计学的本质、分清了4种数据类型,还搭建好了Python环境,写出了第一行代码!是不是发现,原来这俩玩意儿根本没那么吓人?
今天咱们要啃描述统计学的核心硬骨头——数据集中趋势。听名字有点玄乎?其实大白话翻译过来就是:一堆数据里,最“中心”、最“有代表性”的那个数到底是啥?
比如你想知道科室里患者的“平均体温”,想知道公司员工的“普遍工资”,想知道店里卖得“最多的商品颜色”——这些问题,全靠今天学的三个统计量解决:均值、中位数、众数。
而且我向你保证:不用记复杂公式,不用按计算器算到手酸,Python一行代码就能帮你搞定!跟着我一步一步来,小白也能秒变数据小能手~
一、最熟悉的“老大哥”:均值(平均数)
1. 大白话讲懂:均值到底是啥?
均值就是咱们从小用到大的“算术平均数”——把所有数加起来,再除以数的个数,代表一组数据的“平均水平”。
比如你有5位患者的体温:36.5℃、36.8℃、37.0℃、37.2℃、37.5℃,加起来是185℃,除以5,均值就是37℃——这就是这组患者的“平均体温”。
2. 什么时候用均值?
当你的数据比较均匀,没有特别大或特别小的“极端值”时,用均值最准确,也最有代表性。
3. 医学护理场景实战:计算患者平均体温 & 平均住院天数
咱们直接上代码,跟着我复制粘贴就行,每一步我都给你讲明白!
第一步:老规矩,先导入工具库
新建一个代码框,输入下面的代码,按【Shift+Enter】运行:
Python# 导入数值计算工具numpy(昨天用过,今天继续用!)import numpy as np# 导入表格处理工具pandasimport pandas as pd# 偷偷加一个:后面算众数要用的scipy工具库from scipy import stats as sts |
运行后没报错,就说明工具都准备好了!
第二步:创建患者数据表格
咱们模拟10位内科住院患者的真实数据,新建代码框,输入代码运行:
Python# 创建10位患者的数据:体温和住院天数patient_data = pd.DataFrame({"患者编号": [1,2,3,4,5,6,7,8,9,10],"体温(℃)": [36.2, 36.7, 37.0, 37.1, 36.9, 37.3, 36.8, 37.0, 36.6, 37.2],"住院天数": [4, 6, 7, 5, 8, 10, 6, 7, 5, 9]})# 打印数据看看print("10位内科住院患者数据:")print(patient_data) |
运行后你就能看到完整的患者表格啦,数据都很均匀,没有特别离谱的极端值,适合用均值。
第三步:一行代码算均值!
新建代码框,输入下面的代码,运行:
Python# 计算平均体温:用np.mean()函数,括号里放要算的列mean_temp = np.mean(patient_data["体温(℃)"])# 计算平均住院天数mean_days = np.mean(patient_data["住院天数"])# 打印结果,用f-string让结果更清晰print(f"✅ 10位患者的平均体温为:{mean_temp:.2f}℃")print(f"✅ 10位患者的平均住院天数为:{mean_days:.1f}天") |
这里的:.2f是让结果保留2位小数,:.1f是保留1位小数,不用记,想用的时候复制就行!
运行后你会看到:
Plain Text✅ 10位患者的平均体温为:36.88℃✅ 10位患者的平均住院天数为:6.7天 |
是不是超级简单!一行代码就搞定了,比按计算器快多了~
4. 非医学场景实战:计算电商用户平均消费金额
咱们再换一个电商运营的场景,巩固一下方法,不管你是做什么行业的,都能直接套用!
新建代码框,输入代码创建用户数据:
Python# 创建10位电商用户的消费数据user_data = pd.DataFrame({"用户编号": [1,2,3,4,5,6,7,8,9,10],"消费金额(元)": [89, 159, 299, 99, 199, 359, 129, 259, 79, 189]})print("10位电商用户消费数据:")print(user_data) |
然后新建代码框,算平均消费金额:
Python# 一行代码算平均消费金额mean_money = np.mean(user_data["消费金额(元)"])print(f"✅ 10位用户的平均消费金额为:{mean_money:.1f}元") |
运行后结果是:✅ 10位用户的平均消费金额为:196.0元
二、“抗造”的中间派:中位数
1. 大白话讲懂:中位数到底是啥?
均值虽然好用,但有个致命缺点:怕极端值!
比如你算科室里5位患者的住院费用:5000元、6000元、7000元、8000元、9000元,均值是7000元,很准确。但如果突然来了一位用了50000元的重症患者,数据变成:5000、6000、7000、8000、9000、50000,这时候均值就变成了14167元——这能代表“普通患者的住院费用”吗?显然不能!
这时候就要用中位数了:把数据从小到大排好队,正中间的那个数就是中位数。如果是偶数个数据,就取中间两个数的平均值。
上面的例子排好队是:5000、6000、7000、8000、9000、50000,中间两个数是7000和8000,中位数就是7500元——这才是真正的“普通患者水平”!
2. 什么时候用中位数?
当你的数据里有特别大或特别小的极端值时,中位数比均值更靠谱,更能代表“大多数人的情况”。
3. 医学护理场景实战:计算患者住院费用(含极端值)
咱们就用刚才的例子,真实模拟一下临床场景,新建代码框,输入代码:
Python# 创建6位患者的住院费用数据,最后一位是重症患者,费用很高cost_data = pd.DataFrame({"患者编号": [1,2,3,4,5,6],"住院费用(元)": [5000, 6000, 7000, 8000, 9000, 50000]})print("6位患者住院费用数据:")print(cost_data) |
现在咱们分别算一下均值和中位数,对比一下差距有多大!新建代码框:
Python# 算均值mean_cost = np.mean(cost_data["住院费用(元)"])# 算中位数:用np.median()函数median_cost = np.median(cost_data["住院费用(元)"])print(f"⚠️ 住院费用均值为:{mean_cost:.0f}元")print(f"✅ 住院费用中位数为:{median_cost:.0f}元") |
运行后你会看到惊人的对比:
Plain Text⚠️ 住院费用均值为:14167元✅ 住院费用中位数为:7500元 |
你看!均值被极端值拉得特别高,完全不能代表普通患者,这时候用中位数才是对的!临床中算住院费用、药费这种容易有极端值的数据,一定要优先考虑中位数哦~
4. 非医学场景实战:计算公司员工工资(含老板工资)
这个例子大家肯定都听过!咱们用代码真实还原一下,新建代码框:
Python# 创建10位员工+1位老板的工资数据salary_data = pd.DataFrame({"姓名": ["员工A","员工B","员工C","员工D","员工E","员工F","员工G","员工H","员工I","员工J","老板"],"工资(元)": [5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 100000]})print("公司员工工资数据:")print(salary_data) |
然后算均值和中位数对比:
Python# 算均值mean_salary = np.mean(salary_data["工资(元)"])# 算中位数median_salary = np.median(salary_data["工资(元)"])print(f"⚠️ 公司平均工资为:{mean_salary:.0f}元")print(f"✅ 公司工资中位数为:{median_salary:.0f}元") |
运行结果:
Plain Text⚠️ 公司平均工资为:15909元✅ 公司工资中位数为:7500元 |
是不是很真实!老板一个人的工资,把全公司的平均工资拉到了15000+,但中位数7500才是真正的“打工人普遍工资”~
三、“最受欢迎”的人气王:众数
1. 大白话讲懂:众数到底是啥?
众数就更简单了:一组数据里出现次数最多的那个数,代表“最常见、最普遍的情况”。
比如你统计10位患者的疼痛等级:0(无痛)、1(轻度)、1(轻度)、2(中度)、1(轻度)、0(无痛)、1(轻度)、3(重度)、1(轻度)、2(中度)——这里“1(轻度)”出现了5次,最多,所以众数就是1,说明“大多数患者都是轻度疼痛”。
2. 什么时候用众数?
当你想知道哪个情况最普遍、最受欢迎时,用众数最合适。而且众数不仅能用于数值型数据,还能用于分类数据(比如血型、商品颜色),这是均值和中位数做不到的!
3. 医学护理场景实战:找最常见的疼痛等级 & 血型
咱们先看疼痛等级的例子,新建代码框:
Python# 创建10位患者的疼痛等级数据:0=无痛,1=轻度,2=中度,3=重度pain_data = pd.DataFrame({"患者编号": [1,2,3,4,5,6,7,8,9,10],"疼痛等级": [0,1,1,2,1,0,1,3,1,2]})print("10位患者疼痛等级数据:")print(pain_data) |
然后用Python算众数,这里要用到刚才导入的scipy.stats工具,新建代码框:
Python# 算众数:用sts.mode()函数mode_result = sts.mode(pain_data["疼痛等级"])# 提取众数和出现次数mode_pain = mode_result.mode[0]count_pain = mode_result.count[0]print(f"✅ 最常见的疼痛等级是:{mode_pain}(轻度)")print(f"✅ 一共出现了:{count_pain}次") |
运行结果:
Plain Text✅ 最常见的疼痛等级是:1(轻度)✅ 一共出现了:5次 |
咱们再试一个分类数据的例子——血型,新建代码框:
Python# 创建15位患者的血型数据blood_data = pd.DataFrame({"患者编号": range(1,16),"血型": ["A型","B型","O型","A型","AB型","O型","A型","B型","O型","A型","O型","B型","A型","O型","A型"]})print("15位患者血型数据:")print(blood_data) |
分类数据也能算众数哦,新建代码框:
Python# 算血型的众数mode_blood_result = sts.mode(blood_data["血型"])mode_blood = mode_blood_result.mode[0]count_blood = mode_blood_result.count[0]print(f"✅ 最常见的血型是:{mode_blood}")print(f"✅ 一共出现了:{count_blood}次") |
运行结果:
Plain Text✅ 最常见的血型是:A型✅ 一共出现了:6次 |
4. 非医学场景实战:找最受欢迎的商品颜色 & 最常见的会员等级
咱们用电商场景再练一下,新建代码框,创建商品颜色数据:
Python# 创建20位用户购买的商品颜色数据color_data = pd.DataFrame({"用户编号": range(1,21),"商品颜色": ["黑色","白色","红色","黑色","蓝色","白色","黑色","白色","黑色","粉色","白色","黑色","蓝色","白色","黑色","红色","白色","黑色","白色","黑色"]})print("20位用户购买的商品颜色:")print(color_data) |
算众数:
Python# 算最受欢迎的颜色mode_color_result = sts.mode(color_data["商品颜色"])mode_color = mode_color_result.mode[0]count_color = mode_color_result.count[0]print(f"✅ 最受欢迎的商品颜色是:{mode_color}")print(f"✅ 一共卖出了:{count_color}件") |
运行结果:
Plain Text✅ 最受欢迎的商品颜色是:黑色✅ 一共卖出了:9件 |
四、一张表总结:什么时候用哪个?
今天学了三个统计量,是不是有点记混?没关系,我给你整理了一张对比表,收藏起来,用的时候看一眼就知道!
统计量 | 大白话定义 | 优点 | 缺点 | 适用场景 |
均值 | 所有数加起来除以个数 | 利用了所有数据,最常用 | 怕极端值,容易被带偏 | 数据均匀,无极端值(如体温、考试分数) |
中位数 | 排好队后中间的数 | 抗造,不受极端值影响 | 没利用所有数据,信息有损失 | 有极端值(如住院费用、工资) |
众数 | 出现次数最多的数 | 能用于分类数据,看“最普遍” | 可能没有众数,也可能有多个 | 看最常见情况(如疼痛等级、商品颜色) |
第二天学习总结
恭喜你!今天又解锁了三个核心技能:
(1)均值:算平均水平,数据均匀时用;
(2)中位数:算中间水平,有极端值时用;
(3)众数:算最常见情况,分类数据也能用;
(4)而且你已经能熟练用Python一行代码算出这三个统计量了!
是不是觉得自己离数据分析高手又近了一步?
下期预告
明天的Day3,咱们要搞懂数据的离散趋势——光知道数据“集中在哪”还不够,还要知道数据“散不散、波动大不大”!比如两位患者的平均体温都是37℃,但一位体温一直很稳定,另一位忽高忽低,这时候就要用方差、标准差、分位数来分析了!
明天依旧是大白话+双场景实战+Python保姆级代码,咱们不见不散~
✨ 粉丝福利时间
(1)关注公众号,Day3更新第一时间推送!
(2)评论区扣【2】,我会把今天的全套代码文件(含所有医学+非医学案例)免费发给你,直接复制就能用!
(3)有任何不懂的地方,评论区留言,我一一解答!