🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。
一、引言
在数据分析的世界里,数据可视化是将复杂数据转化为直观图形的重要手段。今天,我们将通过 Python 和 Pyecharts 来对一份全球身高数据集进行可视化分析,绘制出炫酷的图表,并深入探讨其中的有趣现象。

这份数据集包含了按年龄和国家划分的 5 岁、10 岁、15 岁和 19 岁的全球平均身高数据。我们将从多个角度进行分析,包括性别差异、年龄趋势、地区对比等。
二、数据集预览
数据集的字段如下:
country
:国家名称AverageHeightBoysAge19
:19 岁男孩平均身高AverageHeightGirlsAge19
:19 岁女孩平均身高AverageHeightBoysAge15
:15 岁男孩平均身高AverageHeightGirlsAge15
:15 岁女孩平均身高AverageHeightBoysAge10
:10 岁男孩平均身高AverageHeightGirlsAge10
:10 岁女孩平均身高AverageHeightBoysAge5
:5 岁男孩平均身高AverageHeightGirlsAge5
:5 岁女孩平均身高
三、环境准备
在开始之前,请确保安装了以下库:
pip install pandas pyecharts
四、数据预处理
我们首先读取数据,并计算一些额外的字段,例如 19 岁男女身高的差值。
python
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
# 读取数据
df = pd.read_csv("average-height-by-country-By age group 2024.csv", encoding='utf-8')
# 计算 19 岁男女身高差值
df['diff_19'] = df['AverageHeightBoysAge19'] - df['AverageHeightGirlsAge19']
五、可视化分析
接下来,我们将通过多个图表来展示数据的内在规律。
5.1 前 20 国男孩年龄段热力图
我们查看前 20 个国家男孩在不同年龄段的身高分布。
ini
# 前 20 国男孩年龄段热力图
df_sample = df.nlargest(20, 'AverageHeightBoysAge19')
countries = df_sample["country"].tolist()
ages = ["5岁", "10岁", "15岁", "19岁"]
values = []
for idx, row in df_sample.iterrows():
values.extend([
[row["country"], "5岁", row["AverageHeightBoysAge5"]],
[row["country"], "10岁", row["AverageHeightBoysAge10"]],
[row["country"], "15岁", row["AverageHeightBoysAge15"]],
[row["country"], "19岁", row["AverageHeightBoysAge19"]],
])
heatmap = (
HeatMap()
.add_xaxis(countries)
.add_yaxis(
"",
yaxis_data=ages,
value=values,
label_opts=opts.LabelOpts(is_show=True)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="各国男孩各年龄段身高热力图"),
visualmap_opts=opts.VisualMapOpts(min_=80, max_=200)
)
)

分析: 热力图可以帮助我们直观地看到不同国家男孩在不同年龄段的身高分布情况,颜色越深表示身高越高。
5.2 10 岁女孩全球分布地图
我们查看 10 岁女孩的全球身高分布。
ini
# 10 岁女孩全球分布地图
geo_data = [[country, height] for country, height in zip(df["country"], df["AverageHeightGirlsAge10"])]
world_map = (
Map()
.add("10岁女孩身高 (cm)", geo_data, "world", label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="全球10岁女孩身高分布"),
visualmap_opts=opts.VisualMapOpts(min_=125, max_=150, is_piecewise=True)
)
)

分析: 地图可以帮助我们直观地看到全球不同国家 10 岁女孩的身高分布情况,颜色越深表示身高越高。
5.3 中日身高对比雷达图
最后,我们对比中国和日本的男女身高。
less
# 中日身高对比雷达图
country_data = df[df["country"] == "China"]
Japan_data = df[df["country"] == "Japan"]
ages = ["5岁", "10岁", "15岁", "19岁"]
boys_heights = [ country_data["AverageHeightBoysAge5"].values[0],
country_data["AverageHeightBoysAge10"].values[0],
country_data["AverageHeightBoysAge15"].values[0],
country_data["AverageHeightBoysAge19"].values[0]
]
girls_heights = [ country_data["AverageHeightGirlsAge5"].values[0],
country_data["AverageHeightGirlsAge10"].values[0],
country_data["AverageHeightGirlsAge15"].values[0],
country_data["AverageHeightGirlsAge19"].values[0]
]
J_boys_heights = [ Japan_data["AverageHeightBoysAge5"].values[0],
Japan_data["AverageHeightBoysAge10"].values[0],
Japan_data["AverageHeightBoysAge15"].values[0],
Japan_data["AverageHeightBoysAge19"].values[0]
]
J_girls_heights = [ Japan_data["AverageHeightGirlsAge5"].values[0],
Japan_data["AverageHeightGirlsAge10"].values[0],
Japan_data["AverageHeightGirlsAge15"].values[0],
Japan_data["AverageHeightGirlsAge19"].values[0]
]
schema = [{"name": age, "max": 170, "min": 100} for age in ages]
radar = (
Radar()
.add_schema(schema=schema)
.add("中国男孩", [boys_heights], color="blue")
.add("中国女孩", [girls_heights], color="red")
.add("日本男孩", [J_boys_heights], color="pink")
.add("日本女孩", [J_girls_heights], color="yellow")
.set_global_opts(title_opts=opts.TitleOpts(title="中日各年龄段男女身高对比"))
)

分析: 雷达图可以帮助我们直观地看到中国和日本在不同年龄段的男女身高差异。
5.4 19 岁男孩身高 TOP30
我们首先查看 19 岁男孩平均身高最高的 30 个国家。
ini
# 19 岁男孩身高 TOP30
top_boys = df.nlargest(30, 'AverageHeightBoysAge19')
bar_boys = (
Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
.add_xaxis(top_boys['country'].tolist())
.add_yaxis('', top_boys['AverageHeightBoysAge19'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="19岁男孩身高 TOP30", subtitle="--公众号:NLP随手记--", pos_left="center"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
legend_opts=opts.LegendOpts(is_show=True),
visualmap_opts=opts.VisualMapOpts(
is_show=False,
pos_top='60%',
pos_left='40%',
range_color=["yellow", "red", "pink"]
)
)
.reversal_axis()
)

分析: 从图表中可以看到,北欧国家在 19 岁男孩平均身高上表现突出,这可能与当地的饮食、运动习惯和遗传因素有关。
5.5 19 岁女孩身高 TOP30
接下来,我们查看 19 岁女孩平均身高最高的 30 个国家。
less
# 19 岁女孩身高 TOP30
top_girls = df.nlargest(30, 'AverageHeightGirlsAge19')
bar_girls = (
Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
.add_xaxis(top_girls['country'].tolist())
.add_yaxis('女孩身高(cm)', top_girls['AverageHeightGirlsAge19'].tolist())
.reversal_axis()
.set_global_opts(title_opts=opts.TitleOpts(title='19岁女孩身高 TOP30'))
)
分析: 19 岁女孩的平均身高分布与男孩有所不同,一些东欧国家的女孩身高表现较为突出。
5.6 男女身高差异 TOP30
我们计算 19 岁男女身高的差值,并查看差值最大的 30 个国家。
ini
# 男女身高差异 TOP30
top_diff = df.nlargest(30, 'diff_19')
bar_diff = (
Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
.add_xaxis(top_diff['country'].tolist())
.add_yaxis('男女差(cm)', top_diff['diff_19'].round(2).tolist())
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts(title="男女身高差异 TOP30", subtitle="--公众号:NLP随手记--", pos_left="center"),
visualmap_opts=opts.VisualMapOpts(
is_show=False,
pos_top='60%',
pos_left='40%',
range_color=["green", "yellow", "red", "pink", "orange", "purple"]
)
)
)

分析: 从图表中可以看到,一些国家的男女身高差异较大,这可能与性别发育差异、社会文化因素等有关。
5.7 中国男女身高随年龄增长趋势
我们特别关注中国的男女身高随年龄增长的趋势。
less
# 中国男女身高随年龄增长趋势
china = df[df['country'] == 'China']
line_cn = (
Line(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
.add_xaxis(['5', '10', '15', '19'])
.add_yaxis('男孩', china[['AverageHeightBoysAge5', 'AverageHeightBoysAge10',
'AverageHeightBoysAge15', 'AverageHeightBoysAge19']].values[0].tolist())
.add_yaxis('女孩', china[['AverageHeightGirlsAge5', 'AverageHeightGirlsAge10',
'AverageHeightGirlsAge15', 'AverageHeightGirlsAge19']].values[0].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title='中国男女身高随年龄增长'))
)

分析: 从图表中可以看到,中国男孩和女孩的身高在 5 岁到 19 岁期间都有明显的增长,且男孩的身高增长速度略高于女孩。
5.8 欧洲国家 19 岁男孩平均身高对比
我们对比欧洲主要国家 19 岁男孩的平均身高。
less
# 欧洲国家 19 岁男孩平均身高对比
eu = df[df['country'].isin(['Germany', 'France', 'Netherlands', 'Italy', 'Spain', 'UK', 'Sweden', 'Denmark', 'Norway', 'Finland'])]
bar_eu = (
Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
.add_xaxis(eu['country'].tolist())
.add_yaxis('19岁男孩(cm)', eu['AverageHeightBoysAge19'].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title='欧洲 19 岁男孩身高'))
)

分析: 从图表中可以看到,荷兰和挪威的 19 岁男孩平均身高较高,而意大利和西班牙相对较低。
六、组合大屏
最后,我们将所有图表组合成一个炫酷的大屏。
scss
# 组合大屏
page = Page(layout=Page.DraggablePageLayout)
page.add(bar_boys, bar_girls, bar_diff, line_cn, bar_eu, heatmap, world_map, radar)
page.render("global_height_dashboard.html")
print("✅ 已生成 global_height_dashboard.html")

七、总结
通过上述可视化分析,我们可以清晰地看到全球不同国家和年龄段的身高分布情况。从男女身高差异到各国的身高对比,再到年龄增长趋势,这些图表为我们提供了丰富的信息。希望这篇文章能帮助你更好地理解和分析全球身高数据。
如果你有任何问题或建议,欢迎在评论区留言!🎉
如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)
期待与您一起交流,共同探索AI的更多可能!