用真实气象数据来学习python可视化分析 目录一、我们为什么要去学习python可视化二、为什么用气象数据真实项目里怎么更新数据三、如何选图先读表再想问题四、matplotlib 基础四步画图模板五、八种常用图表详解5.1 折线图Line Plot— 看趋势5.2 柱状图Bar Chart— 做对比5.3 散点图Scatter Plot— 看关系5.4 直方图Histogram— 看分布5.5 箱线图Box Plot— 看分布 异常值5.6 双轴组合图 — 多指标同屏5.7 饼图Pie Chart— 看占比5.8 热力图Heatmap— 看矩阵/强度六、可视化与机器学习的关系一、我们为什么要去学习python可视化机器学习不只有公式和代码还需要把数据「画」出来。一张好图胜过千言万语——但前提是你知道这张图要回答什么问题。本篇用气象数据把八种常用图表练一遍让你在建模前就能系统做EDA探索性数据分析。数据可视化用图形表达数据规律帮助我们探索数据训练模型前先看分布、缺失、异常展示结果向他人解释模型、汇报分析结论监控业务网站后台的实时曲线、柱状 KPI本教程用南京市 2024 年每日气象数据真实 API 数据练习matplotlib八种常用图表。二、为什么用气象数据选熟悉、能判断对错的数据后面八种图才有直觉。气温人人懂画错了你一眼能发现。我们都知道生活中天天接触天气预报、穿衣指数、出行计划——气温、降水人人都懂看图时容易判断「画得对不对」。真实项目里怎么更新数据场景做法天气 App / 网站定时调用气象 API如 Open-Meteo、和风天气每小时或每天刷新数据大屏后端拉 API → 存数据库 → 前端 ECharts 轮询展示本教程已下载 2024 年全年历史数据到 CSV离线学习逻辑与线上一致三、如何选图先读表再想问题画图之前先对着 CSV 问自己两个个问题——后面选图就不会乱。你想知道什么我该画什么图一年里气温怎么变折线图哪个月最热/最冷柱状图最高温和最低温有关系吗散点图气温大多集中在哪一段直方图各月气温分布差多少、有无异常天箱线图气温和降水能放一张图吗双轴组合图晴天多还是雨天多饼图12 个月温度强弱一眼看清热力图文件数据集/nanjing_weather_2024.csv列名含义单位date日期YYYY-MM-DDtemp_max日最高气温°Ctemp_min日最低气温°Ctemp_mean日平均气温°Cprecipitation_mm日降水量mmwind_max_kmh日最大风速km/h加载代码可视化分析.py→load_data()def load_data(path: str DATA_PATH) - pd.DataFrame: df pd.read_csv(path, parse_dates[date]) df[month] df[date].dt.month df[day_of_year] df[date].dt.dayofyear return df四、matplotlib 基础四步画图模板import matplotlib.pyplot as plt plt.figure(figsize(宽, 高)) # 1. 创建画布 plt.plot(x, y) # 2. 画某种图 plt.xlabel(横轴); plt.ylabel(纵轴); plt.title(标题) # 3. 标注 plt.savefig(图片/xxx.png) # 4a. 保存 plt.show() # 4b. 弹窗显示中文显示plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] plt.rcParams[axes.unicode_minus] False # 负号正常显示五、八种常用图表详解每种图先问什么问题 → 怎么画 → 对应哪张图 → 机器学习里何时用。折线图整体趋势 → 柱状图按月对比 → 散点图两变量关系 → 直方图单变量分布 → 箱线图多组分布 异常 → 双轴图不同量纲同屏 → 饼图占比 → 热力图矩阵强度5.1 折线图Line Plot— 看趋势第一个问题2024 年南京气温随时间怎么变用途气温随时间变化、股票走势、网站 UV 曲线、训练损失随 epoch 变化——连续/有序数据看趋势的首选。本教程2024 年每日平均气温 最高最低填充带。代码可视化分析.py→plot_line_daily_temp()def plot_line_daily_temp(df, filename01_折线图_日均气温趋势.png): plt.figure(figsize(12, 5)) plt.plot(df[date], df[temp_mean], colorcrimson, linewidth0.9, label日均气温) plt.fill_between(df[date], df[temp_min], df[temp_max], alpha0.15, colorcrimson) plt.xlabel(日期) plt.ylabel(气温 (°C)) plt.title(f{CITY}市 {YEAR} 年每日气温变化折线图) plt.legend() plt.grid(True, alpha0.3) plt.tight_layout() save_and_show(filename)何时用X 轴是时间或有序序列关心「怎么变」。机器学习里损失曲线、准确率曲线、学习率调度5.2 柱状图Bar Chart— 做对比承接 5.1折线图信息太细按月聚合后比高低柱状图更直观。用途各月销售额、各城市 PM2.5、班级人数——分类之间比大小。本教程12 个月的平均气温颜色随温度冷暖变化coolwarm色图。代码可视化分析.py→plot_bar_monthly_avg()def plot_bar_monthly_avg(df, filename02_柱状图_月均气温.png): monthly df.groupby(month)[temp_mean].mean() colors plt.cm.coolwarm((monthly - monthly.min()) / (monthly.max() - monthly.min())) plt.figure(figsize(10, 5)) plt.bar(MONTH_LABELS, monthly.values, colorcolors, edgecolorgray, linewidth0.5) plt.xlabel(月份) plt.ylabel(平均气温 (°C)) plt.title(f{CITY}市 {YEAR} 年各月平均气温柱状图) plt.grid(True, alpha0.3, axisy) plt.tight_layout() save_and_show(filename)何时用X 轴是离散类别月份、城市、产品。机器学习里各类别样本数量、特征重要性排序、各模型准确率对比。5.3 散点图Scatter Plot— 看关系承接 5.2柱状图比的是「汇总后的类别」散点图看两个数值变量是否相关、有没有离群点。用途身高 vs 体重、广告投入 vs 销量、房屋面积 vs 房价——观察两个变量是否相关。本篇每日最低温 vs 最高温颜色表示月份。代码可视化分析.py→plot_scatter_max_min()def plot_scatter_max_min(df, filename03_散点图_最高与最低气温.png): plt.figure(figsize(7, 6)) plt.scatter(df[temp_min], df[temp_max], cdf[month], cmapcoolwarm, s18, alpha0.7, edgecolorsnone) plt.xlabel(日最低气温 (°C)) plt.ylabel(日最高气温 (°C)) plt.title(f{CITY}市 {YEAR} 年 最高温 vs 最低温散点图) plt.grid(True, alpha0.3) plt.tight_layout() save_and_show(filename)何时用两个数值变量想看相关性、聚类、离群点。机器学习里线性回归前必画特征与标签关系。5.4 直方图Histogram— 看分布承接 5.3散点看的是「两个变量」直方图只看一个变量落在各区间的频率。用途成绩分布、用户年龄分布——一个变量落在各区间的频率。本教程366 天日均气温落在各温度区间的天数。代码可视化分析.py→plot_histogram_temp()def plot_histogram_temp(df, filename04_直方图_气温分布.png): plt.figure(figsize(8, 5)) plt.hist(df[temp_mean], bins20, colorsteelblue, edgecolorwhite, alpha0.85) plt.axvline(df[temp_mean].mean(), colorcrimson, linestyle--, linewidth2, labelf年均 {df[temp_mean].mean():.1f}°C) plt.xlabel(日均气温 (°C)) plt.ylabel(天数) plt.title(f{CITY}市 {YEAR} 年日均气温分布直方图) plt.legend() plt.grid(True, alpha0.3, axisy) plt.tight_layout() save_and_show(filename)何时用关心「数据集中在哪一段」机器学习里常用来检查特征分布是否偏态、是否需要标准化。5.5 箱线图Box Plot— 看分布 异常值承接 5.4直方图是一个整体分布箱线图适合多组并排比较这里是 12 个月。用途多组数据对比分布中位数、四分位、异常点一目了然。本教程12 个月各自的日均气温箱线。代码可视化分析.py→plot_box_monthly()def plot_box_monthly(df, filename05_箱线图_各月气温分布.png): data_by_month [df.loc[df[month] m, temp_mean].values for m in range(1, 13)] plt.figure(figsize(11, 5)) bp plt.boxplot(data_by_month, tick_labelsMONTH_LABELS, patch_artistTrue) plt.xlabel(月份) plt.ylabel(日均气温 (°C)) plt.title(f{CITY}市 {YEAR} 年各月气温分布箱线图) plt.grid(True, alpha0.3, axisy) plt.tight_layout() save_and_show(filename)箱线图读法部分含义中间线中位数箱子25%~75% 分位IQR须正常范围圆点异常值机器学习里按类别看特征分布、发现标注异常数据清洗前常用。5.6 双轴组合图 — 多指标同屏承接 5.5箱线图是「分组对比」双轴图是「同一时间轴、两种量纲」——气象网站最常见。用途气象网站常见气温折线 降水柱状画在同一张图。代码可视化分析.py→plot_temp_precipitation()def plot_temp_precipitation(df, filename06_组合图_气温与降水量.png): fig, ax1 plt.subplots(figsize(12, 5)) ax1.plot(df[date], df[temp_mean], colorcrimson, linewidth0.9, label日均气温) ax1.set_xlabel(日期) ax1.set_ylabel(气温 (°C), colorcrimson) ax2 ax1.twinx() # 创建右轴 ax2.bar(df[date], df[precipitation_mm], width1.0, colorsteelblue, alpha0.35) ax2.set_ylabel(降水量 (mm), colorsteelblue) fig.suptitle(f{CITY}市 {YEAR} 年 气温与降水量双轴组合图) fig.tight_layout() save_and_show(filename)何时用两个量纲不同的指标要放在同一时间轴上对比。机器学习里同时监控训练损失与验证损失、学习率与梯度范数。5.7 饼图Pie Chart— 看占比承接 5.6双轴图仍是时间序列饼图回答「整体里各部分占多少」。用途市场份额、预算分配——部分占整体的比例类别不宜超过 5~7 个。本教程2024 年上海有降水天数 vs 无降水天数。代码可视化分析.py→plot_pie_rainy_days()def plot_pie_rainy_days(df, filename07_饼图_晴雨天天数占比.png): rainy (df[precipitation_mm] 0).sum() dry len(df) - rainy plt.figure(figsize(6, 6)) plt.pie( [dry, rainy], labels[f晴天/无降水\n{dry} 天, f有降水\n{rainy} 天], autopct%1.1f%%, colors[#FFD966, #6FA8DC], startangle90, ) plt.title(f{CITY}市 {YEAR} 年 晴雨天天数占比饼图) plt.tight_layout() save_and_show(filename)注意占比类图表也可用条形图替代饼图适合类别少、强调「整块」的场景。5.8 热力图Heatmap— 看矩阵/强度承接 5.7饼图是「两类占比」热力图适合矩阵数据——颜色深浅表示数值大小。用途相关矩阵、日历热力、地理温度网格——颜色深浅表示数值大小。本教程简化版——12 个月平均气温一行热力条。代码可视化分析.py→plot_heatmap_month_day()def plot_heatmap_month_day(df, filename08_热力图_月平均气温.png): monthly_avg df.groupby(month)[temp_mean].mean().values.reshape(1, -1) plt.figure(figsize(12, 2.8)) im plt.imshow(monthly_avg, aspectauto, cmapcoolwarm) plt.colorbar(im, label平均气温 (°C)) plt.xticks(range(12), MONTH_LABELS) plt.yticks([0], [f{YEAR}年]) plt.title(f{CITY}市 {YEAR} 年各月平均气温热力图) plt.tight_layout() save_and_show(filename)何时用二维矩阵数据、时间×类别 的强度展示。机器学习里特征相关矩阵热力图、混淆矩阵可视化。六、可视化与机器学习的关系可视化不是独立技能而是贯穿「看数据 → 训模型 → 讲结果」的纽带。阶段可视化作用探索性分析EDA直方图、散点图发现异常与相关特征工程箱线图比较分组、热力图看相关矩阵训练监控损失曲线、参数收敛算法对比多条损失曲线、参数路径模型解释特征重要性柱状图、决策边界散点图结果汇报各类业务图表