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


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

相关文章
|
5天前
|
开发工具 Python
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
|
11天前
|
存储 JSON 数据库
Python中列表数据的保存与读取:以txt文件为例
Python中列表数据的保存与读取:以txt文件为例
25 2
|
11天前
|
存储 前端开发 机器人
Python网络数据抓取(6):Scrapy 实战
Python网络数据抓取(6):Scrapy 实战
27 2
|
2天前
|
机器学习/深度学习 网络协议 数据库
Python编程实战:解决常见编程问题
```markdown Python编程入门指南:涵盖文件操作、列表操作、字符串处理、函数编写、异常处理、网络编程和数据库操作等实战案例。通过示例代码,学习如何读写文件、排序列表、转换字符串、创建函数、处理异常、构建TCP服务器及操作SQLite数据库,逐步掌握Python核心技能。 ```
|
2天前
|
应用服务中间件 数据库 nginx
Python Web开发实战:从搭建博客到部署上线
使用Python和Flask初学者指南:从搭建简单博客到部署上线。文章详细介绍了如何从零开始创建一个博客系统,包括准备Python环境、使用Flask和SQLite构建应用、设计数据库模型、创建视图函数和HTML模板,以及整合所有组件。最后,简述了如何通过Gunicorn和Nginx将应用部署到Linux服务器。
|
3天前
|
机器学习/深度学习 算法 数据挖掘
4小时学完!15年技术大牛用247个实战案例剖析的Python教程
今天给小伙伴们分享一份15年技术大牛用247个实战案例剖析的Python教程,这份教程全程彩图讲解,告别枯燥!60秒学会⼀个⼩例⼦,带你系统学习Python,从⼊门到⼤师。 涵盖了Python基础、Python字符串和正则、Python⽂件和⽇期、Python三⼤利器、Python绘图、Python之坑、Python第三⽅包、机器学习和深度学必知算法、Python实战、Pandas数据分析案例实战十大篇幅的精品案例教程
|
5天前
|
数据采集 数据可视化 数据处理
利用Python和Pandas库实现高效的数据处理与分析
在大数据和人工智能时代,数据处理与分析已成为不可或缺的一环。Python作为一门强大的编程语言,结合Pandas库,为数据科学家和开发者提供了高效、灵活的数据处理工具。本文将介绍Pandas库的基本功能、优势,并通过实际案例展示如何使用Pandas进行数据清洗、转换、聚合等操作,以及如何利用Pandas进行数据可视化,旨在帮助读者深入理解并掌握Pandas在数据处理与分析中的应用。
|
5天前
|
数据采集 数据挖掘 计算机视觉
最全OpenCV-Python实战(3)——OpenCV中绘制图形与文本,面试官必问问题及答案
最全OpenCV-Python实战(3)——OpenCV中绘制图形与文本,面试官必问问题及答案
|
5天前
|
Python
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
|
7天前
|
存储 数据挖掘 数据处理
【Python DataFrame 专栏】优化 DataFrame 性能:提升数据处理效率的秘诀
【5月更文挑战第19天】优化 Python DataFrame 性能的关键点包括:选择合适的数据类型以节省内存,避免重复计算,利用向量化操作,考虑使用 `iterrows` 或 `itertuples` 迭代,优化索引以及借助 `Cython` 或 `Numba` 加速代码执行。通过这些策略,能提升数据处理效率,应对大规模数据挑战。
【Python DataFrame 专栏】优化 DataFrame 性能:提升数据处理效率的秘诀