谈谈Python实战数据可视化之matplotlib模块(实战篇)

举报
技术火炬手 发表于 2018/08/13 16:19:45 2018/08/13
【摘要】 前沿通过上一篇谈谈Python实战数据可视化之matplotlib模块(基础篇)的学习,我们初步了解了matplotlib模块的pyplot基础,本节实战将利用CSV模块获取某地的天气数据,并且使用matplotlib模块将天气数据可视化。配套资源鉴于Python编程从入门到实战这本书的配套资源网上难找的悲伤,我深有体会。

前沿

通过上一篇谈谈Python实战数据可视化之matplotlib模块(基础篇)的学习,我们初步了解了matplotlib模块的pyplot基础,本节实战将利用CSV模块获取某地的天气数据,并且使用matplotlib模块将天气数据可视化。


配套资源

鉴于Python编程从入门到实战这本书的配套资源网上难找的悲伤,我深有体会。所以,在此提供链接供下载(有帮助点个赞支持下我哦(●'◡'●)):

百度云链接:https://pan.baidu.com/s/1-XE0pBS8IaDLoUBdO8hDOw 密码:n39g


CSV文件格式

CSV - 逗号分隔值文件格式,逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。

例如:

image.png

Country,Indicator,Year,ValueAFG,NGDP_R,2002,183.26AFG,NGDP_R,2003,198.736AFG,NGDP_R,2004,200.069AFG,NGDP_R,2005,223.737AFG,NGDP_R,2006,235.731AFG,NGDP_R,2007,267.177AFG,NGDP_R,2008,277.498AFG,NGDP_R,2009,334.621AFG,NGDP_R,2010,362.857AFG,NGDP_R,2011,386.368AFG,NGDP_R,2012,440.336AFG,NGDP_R,2013,456.453.......................

.......................

利用CSV模块获取天气数据

先将sitka_weather_07-2014.csv文件放到项目同一目录下,然后利用Python标准库提供的CSV模块可以用于分析CSV文件中的数据行(也就是上面提到的记录),让我们能快速提取感兴趣的值。案例代码如下:

image.png

运行结果如下:

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

好了,初步获取到了CSV文件的内容,但是我们有一点要注意,就是reader里面的每行记录只能被遍历一次,我们下面添加一行代码更深刻领会:


import csv

filename = 'sitka_weather_07-2014.csv'with open(filename) as f:

reader = csv.reader(f)

print(reader)

print(list(reader))  # 值得注意的是,当先调用 print(list(reader)),发现遍历到最后了,再执行后面的代码就报错了

head_row = next(reader)

print(head_row)    for row in reader:

print(reader.line_num, row)

运行结果如下:

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

对上面的结果进行分析:对于list内置函数,内部实现大概可以猜到是先将reader对象里面的记录遍历再添加进一个列表中,然后返回整个列表。调用list内置函数其实已经遍历一次了,遍历指针指向了最后一个记录,并且因为reader的记录(一行算一个记录)只能被遍历一次的特性,所以后面的代码再遍历reader对象就没啥意义了。


绘制阿拉斯加锡特卡2014年7月每日最高气温折线图

我们前面已经知道怎么获取天气数据了,那么我们将使用pyplot模块绘制阿拉斯加锡特卡2014年7月每日最高气温折线图。代码如下(注释有助于理解代码):

image.png

运行结果如下:

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

仔细观察上面的运行结果,X轴还是与书本图片有些出入,其实无碍,这是正确的,因为我们运行的结果也是7月初开始,只不过X轴把6月份也包括进去了。


绘制阿拉斯加锡特卡2014年每日最高气温和最低气温折线图前面我们绘制了阿拉斯加锡特卡7月份每日最高气温折线图,现在我们将获取阿拉斯加锡特卡2014年整一年的天气数据,再绘制阿拉斯加锡特卡2014年每日最高气温和最低气温折线图。我们先将sitka_weather_2014.csv文件也放到项目同一目录下。代码如下:

image.png

 运行结果如下:

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

由于有些气象站会偶尔出现故障,未能收集全应该收集的数据,所以如果我们还是采用上一个代码例子这样获取某个城市的天气数据,那么就会报错,因为这个城市的csv文件中某一天可能是缺少数据的,所以会报ValueError错误。就如下图这样缺少某天的数据:

谈谈Python实战数据可视化之matplotlib模块(实战篇)

image.png

所以,鉴于上面的问题,下一节获取死亡谷整年的天气数据将会采用异常处理机制就能预防这种情况。


绘制死亡谷2014年每日最高气温和最低气温折线图

前面说了可能在实际应用中可能会出现缺少数据等问题,作为一名程序开发者,必须设想到各种可能出现的问题,并且采用实用的方法解决问题。我们将会采用异常处理机制来绘制死亡谷2014年每日最高气温和最低气温折线图。代码如下:


运行结果如下(两张图):

(1)折线图

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

(2)终端图

image.png

谈谈Python实战数据可视化之matplotlib模块(实战篇)

通过上面两个图可以知道,2014-02-16这一天的温度数据是丢失了,所以在折线图其实没有画出2014-02-16这一天的最高和最低气温(由于太密集看不出)。


本文转自CFishHome博客51CTO博客,如需转载,请自行联系原作者。

原文链接


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。