查看全课大纲(第 51 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
空气质量数据怎么“洗”干净,还能画成图?
约 12 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
欢迎来到空气质量分析项目的最后一站!经过前面几节的学习,我们已经能爬取数据、处理格式、进行基本统计。这节课,我们要做两件很酷的事:把数据里“不干净”的部分清理掉,然后把我们分析的结果用漂亮的柱状图画出来。学完这一节,你的程序就能从一个“数据处理工”升级为“数据分析师”了!
💡 核心导读
- 数据清洗:学会用一行代码过滤掉无效数据(比如AQI为0的城市),让分析结果更准确。
- 数据可视化:用Pandas内置的绘图功能,把空气质量最好的50个城市画成柱状图,一目了然。
- 中文显示:解决Matplotlib图表中中文变成“小方块”的老问题。
- 项目收官:回顾整个空气质量分析项目,看看我们从零开始都搭建了哪些能力。
数据也需要“洗澡”:过滤无效值
还记得我们之前统计时,发现有些城市的AQI值是0吗?这通常是因为没有监测点,数据无效。如果把这些数据也拿去算平均值、找最差城市,结果就不准了。所以,数据分析的第一步往往是数据清洗。
本节新增了什么? 我们只做一件事:用“过滤条件”来清洗数据。这个操作简单又强大,是处理数据的必备技能。
怎么过滤呢?Pandas给了我们一个非常直观的语法:数据框[过滤条件]。这个过滤条件,其实就是一列布尔值(True/False),告诉Pandas每一行要不要保留。
我们来实际操作一下。假设我们有一个很小的数据集:
import pandas as pd
# 构造一个包含"脏数据"的小样本
data = {
'City': ['北京', '上海', '广州', '未知城市A', '未知城市B'],
'AQI': [120, 95, 80, 0, 0] # 最后两个城市AQI为0,是无效数据
}
aqi_data = pd.DataFrame(data)
print("清洗前的数据:")
print(aqi_data)
print("\nAQI列大于0的条件:")
print(aqi_data['AQI'] > 0)清洗前的数据:
City AQI
0 北京 120
1 上海 95
2 广州 80
3 未知城市A 0
4 未知城市B 0
AQI列大于0的条件:
0 True
1 True
2 True
3 False
4 False
Name: AQI, dtype: bool看,aqi_data['AQI'] > 0 生成了一个布尔序列,True表示该行AQI>0,False表示AQI<=0。接下来,神奇的事情发生了:
import pandas as pd
# 再次构造数据(每个代码块独立)
data = {
'City': ['北京', '上海', '广州', '未知城市A', '未知城市B'],
'AQI': [120, 95, 80, 0, 0]
}
aqi_data = pd.DataFrame(data)
# 核心操作:用布尔序列作为索引,过滤数据
clean_aqi_data = aqi_data[aqi_data['AQI'] > 0]
print("清洗后的数据(只保留AQI>0的行):")
print(clean_aqi_data)清洗后的数据(只保留AQI>0的行):
City AQI
0 北京 120
1 上海 95
2 广州 80看!那两个AQI为0的城市自动消失了。这就是数据过滤,是不是比想象中简单?你可以把 aqi_data['AQI'] > 0 这个条件换成任何你想要的,比如 aqi_data['PM2.5'] < 35(PM2.5优),或者组合条件 (aqi_data['AQI'] > 0) & (aqi_data['AQI'] < 50)(空气质量优)。
让数据“开口说话”:用图表做可视化
数字列表看久了会眼花,一张图却能瞬间讲清故事。Pandas内置了绘图功能,基于强大的Matplotlib,但用法简单得多。我们试着把空气质量最好的50个城市画出来。
本节新增了什么? 我们引入Pandas的 .plot() 方法,并学会设置中文显示,让图表既专业又好看。
首先,我们得有一份排序后的干净数据。接着,调用 .plot() 方法,告诉它:画柱状图(kind='bar'),横坐标是城市名(x='City'),纵坐标是AQI值(y='AQI'),再给图表起个名字,调个大小。
import pandas as pd
import matplotlib.pyplot as plt # 导入matplotlib用于保存和显示图片
# 1. 设置全局字体,解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 2. 构造一份稍大的、已排序的模拟数据(代表清洗排序后的数据)
cities = [f'城市{i}' for i in range(1, 61)] # 生成60个城市名
aqi_values = list(range(10, 310, 5)) # 生成从10到305的AQI值,模拟排序后从好到差
sorted_data = {
'City': cities,
'AQI': aqi_values
}
sorted_aqi_data = pd.DataFrame(sorted_data)
# 3. 取出AQI最小的50个城市(即空气质量最好的50个)
top50_cities = sorted_aqi_data.head(50)
print("空气质量最好的5个城市:")
print(top50_cities.head())
# 4. 绘制柱状图
top50_cities.plot(kind='bar', # 图表类型:柱状图
x='City', # 横坐标数据列
y='AQI', # 纵坐标数据列
title='空气质量最好的50个城市', # 图表标题
figsize=(20, 6)) # 图表尺寸:宽20英寸,高6英寸
# 5. 保存图表到文件(在实际练习中,你可以取消下面这行的注释来保存)
# plt.savefig('top50_aqi_bar.png')
# 6. 显示图表
plt.show()空气质量最好的5个城市:
City AQI
0 城市1 10
1 城市2 15
2 城市3 20
3 城市4 25
4 城市5 30运行上面的代码,一个带有清晰标题和坐标轴的柱状图就会弹出来!你可以直观地看到哪个城市的柱子最短(AQI最小,空气质量最好)。
几个关键点:
plt.rcParams:这两行是解决中文显示问题的“万能钥匙”,几乎任何时候用Matplotlib画带中文的图都需要它们。.plot()参数:kind可以换成'line'(折线图)、'scatter'(散点图)等。figsize控制图片大小,如果城市名太多显示不全,可以把宽度调大。- 保存与显示:
plt.savefig()要在plt.show()之前调用,否则保存的是空白图片。plt.show()会弹出窗口并暂停程序,关闭窗口后程序才会继续。
项目大回顾:从零搭建数据分析流水线
到这里,我们为期六讲的“空气质量指数计算”大项目就全部完成了!让我们一起回顾一下这条我们亲手搭建的“数据流水线”:
v1.0 - v4.0:打好基础
- 理解问题:学会AQI的计算公式。
- 处理数据:认识了JSON和CSV两种常见数据格式,学会了读写和转换。
- 完善程序:让程序能智能判断文件类型,用更安全的方式操作文件。
v5.0 - v8.0:获取数据
- 网络爬虫:使用Requests库从网上抓取实时数据。
- 解析网页:用BeautifulSoup从复杂的HTML中精准提取我们需要的信息(城市列表和AQI值)。
- 保存结果:将爬取到的全国城市数据保存为结构化的CSV文件,方便后续分析。
v9.0 - v10.0(本节):分析与展示
- 数据分析:使用Pandas进行排序、统计(最大值、最小值、平均值)。
- 数据清洗:过滤掉无效数据,保证分析质量。
- 数据可视化:将分析结果用图表直观呈现。
这个过程,就是一个标准的、简易版的数据分析项目流程:定义问题 → 获取数据 → 清洗处理 → 分析建模 → 可视化展示。你已经掌握了每个环节的核心技能!
📝 动手练一练
- 改造可视化:上面的例子画了最好的50个城市。请你修改代码,画出空气质量最差的10个城市的柱状图,并将图表标题和保存的文件名相应修改。
👉 点击查看参考答案
思路:空气质量最差意味着AQI值最大。我们可以对数据按AQI降序排序,然后取前10名。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 构造数据
cities = [f'城市{i}' for i in range(1, 61)]
aqi_values = list(range(10, 310, 5))
aqi_data = pd.DataFrame({'City': cities, 'AQI': aqi_values})
# 按AQI降序排序,取前10个
bottom10_cities = aqi_data.sort_values(by='AQI', ascending=False).head(10)
# 绘图
bottom10_cities.plot(kind='bar',
x='City',
y='AQI',
title='空气质量最差的10个城市',
figsize=(12, 6))
# plt.savefig('bottom10_aqi_bar.png') # 可取消注释保存
plt.show()- 尝试新图表:Pandas的
.plot()方法中,kind参数还可以设置成'line'(折线图)或'pie'(饼图,需指定y)。请你尝试将“最好50城”的数据用折线图画出来,看看效果有什么不同。
👉 点击查看参考答案
思路:只需将 .plot() 中的 kind='bar' 改为 kind='line'。折线图更适合观察趋势。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
cities = [f'城市{i}' for i in range(1, 51)]
aqi_values = list(range(10, 260, 5)) # 生成50个值
top50_cities = pd.DataFrame({'City': cities, 'AQI': aqi_values})
# 绘制折线图
top50_cities.plot(kind='line',
x='City',
y='AQI',
title='空气质量最好的50个城市(折线图)',
figsize=(20, 6),
marker='o') # marker='o' 让每个数据点显示为圆点
plt.xticks(rotation=45) # 将x轴标签旋转45度,避免重叠
plt.tight_layout() # 自动调整布局
# plt.savefig('top50_aqi_line.png')
plt.show()本章小结
恭喜你!完成了《Python入门》课程中最后一个,也是最综合的一个项目。你不仅学会了爬虫、数据处理、分析可视化这些具体技能,更重要的是,你体验了如何将一个现实问题,拆解成多个编程步骤,并最终用代码实现的完整过程。
📋 行动清单
学完本章,你可以立刻:
- 运行本节完整的10.0代码(使用课程提供的真实
china_city_aqi.csv数据文件),生成属于你的“空气质量50强”图表。 - 总结你的项目笔记,画出从5.0到10.0的数据流图,理清思路。
- 挑战自己,尝试用这个流程去分析另一个你感兴趣的数据集(例如,电影评分、天气数据等)。
从对编程一无所知,到能完成这样一个涵盖数据获取、处理、分析、可视化的项目,你已经迈出了坚实而精彩的第一步。编程世界的大门已经向你敞开,接下来,选择你感兴趣的方向,继续探索吧!
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。