Python实战系列<三> | 不规则txt空气质量数据处理并绘图

简介: Python实战系列<三> | 不规则txt空气质量数据处理并绘图

大家好,我是欧K~

本期给大家分享《Python实战系列》的第三篇文章:不规则数据统计分析,该系列主要来自粉丝的实际问题,后期会不断更新,希望对你有所帮助,如有疑问或者需要改进的地方可以私信小编。

一期:【Python实战系列<一> | 正则提取数据并绘图

第二期:【Python实战系列<二> | 70万+条表格信息标记 任务描述: 数据处理并完成绘图:12 个站点平均的逐月 PM2.5浓度变化曲线。

注意事项:这些数据里-999 表示缺测。一个月 30 天的数据里至少要有 20 天有有效数据,如果有效数据小于 20 天,那这个月的平均也就设置为缺测。

文件结构

文件内容

🏳️‍🌈 1. 读取数据

df = pd.read_csv('./datas/Y2014/1001A.txt')

数据格式乍一看很规则,实际第一行和后面是不一样的:

第一行:

YYYY-MM-DD , PM25(ug/m3) , PM10(ug/m3) , SO2(ug/m3) , NO2(ug/m3) , O3(ug/m3) , DailyO8h(ug/m3) , CO(ug/m3) , MDA8(ug/m3)

第n行:

Y2014-01-01     60.611    150.381     44.375     75.000     14.667     16.696   2679.167     45.201

我们先按正常格式读取,然后再单独处理后面的数据,至少表头是正常的,后面可以用上 🏳️‍🌈 2. 取数据表的第一列读取后我们看到数据都集中在了第一列,我们将这一列取出来处理:

datas = df['YYYY-MM-DD '].tolist()

这样看起来就好处理多了。

🏳️‍🌈 3. 正则拆分数据

第2步后我们把数据转换成列表,每一行数中间的空格数量不一定,直接用split分割的话会导致长度不一致,所以这里我们用正则表达式分割:

pd.DataFrame(df['YYYY-MM-DD '].map(lambda x: re.split('\s+', x)).tolist())


这样数据就正常了,然后我们再把原来的表头加上去,就是正常的数据格式了:

🏳️‍🌈 4. 提取月份数据

我们要统计每年每月平均值,所以这里我们把月份提取出来:

# 第一列数据切割
df_tmp['YYYY-MM-DD '] = df_tmp['YYYY-MM-DD '].str[1:]
# 转换成时间类型,提取月份
df_tmp['MM'] = pd.to_datetime(df_tmp['YYYY-MM-DD ']).dt.month
# 数据类型转换
df_tmp[' PM25(ug/m3) '] = df_tmp[' PM25(ug/m3) '].astype('float')


🏳️‍🌈 5. 按月统计这里需要注意一点,正常情况下我们按年、月分组求平均值就可以了,但是这里不可以!我们再看一眼任务要求:这些数据里-999 表示缺测。一个月 30 天的数据里至少要有 20 天有有效数据,如果有效数据小于 20 天,那这个月的平均也就设置为缺测。我们还需要统计缺失数据-999的情况!我们看一下是否有缺失超过10天的情况:

for i in range(1,13):
    df_mon = df_tmp[df_tmp['MM'] == i]
    print(i,df_mon[df_mon[' PM25(ug/m3) '] == -999].shape[0])
# 1 4
# 2 6
# 3 0
# 4 0
# 5 2
# 6 0
# 7 11
# 8 0
# 9 0
# 10 3
# 11 0
# 12 3

7月份有11天缺失。。。那么我们只能遍历去统计了:

for i in range(1,13):
    mean_val = 0
    df_mon = df_tmp[df_tmp['MM'] == i]
    if df_mon[df_mon[' PM25(ug/m3) '] == -999].shape[0]<=10:
        df_mon = df_mon[df_mon[' PM25(ug/m3) '] != -999]
        mean_val = df_mon[' PM25(ug/m3) '].mean()
    mean_vals.append(mean_val)

最后结果:

然后再mean()一下就可以了。

🏳️‍🌈 6. 绘图

绘图部分比较简单,我们还用比较熟悉的pyecharts绘图,之前的文章介绍的比较多,这里就不详细介绍了,代码如下:

line = (
    Line()
    .add_xaxis(x_data1)
    .add_yaxis("", y_data1, is_smooth=True,label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(
            name='date',
            axislabel_opts=opts.LabelOpts(rotate=30)
        ),
        yaxis_opts=opts.AxisOpts(name='ug/m3'),
        title_opts=opts.TitleOpts(title="AVG_PM25")
    )
)

效果:


END


以上就是本期为大家整理的全部内容了,喜欢的朋友可以点赞、点在看也可以分享让更多人知道。

相关文章
|
25天前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
101 3
|
25天前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
318 2
|
25天前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
1月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
156 0
|
1月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
104 0
|
30天前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
272 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
12天前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
181 0
|
10天前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
1月前
|
数据采集 消息中间件 并行计算
Python多线程与多进程性能对比:从原理到实战的深度解析
在Python编程中,多线程与多进程是提升并发性能的关键手段。本文通过实验数据、代码示例和通俗比喻,深入解析两者在不同任务类型下的性能表现,帮助开发者科学选择并发策略,优化程序效率。
115 1
|
12天前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。

推荐镜像

更多