谈谈Python实战数据可视化之matplotlib模块(实战篇)51CTO博客 - AG环亚娱乐集团

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

2019-01-03 10:40:31 | 作者: 昌黎 | 标签: 数据,模块,可视化 | 浏览: 2688

前沿

经过上一篇谈谈Python实战数据可视化之matplotlib模块(根底篇)的学习,咱们开端了解了matplotlib模块的pyplot根底,本节实战将运用CSV模块获取某地的气候数据,而且运用matplotlib模块将气候数据可视化。

配套资源

鉴于Python编程从入门到实战这本书的配套资源网上难找的哀痛,我深有体会。所以,在此供给链接供下载(有协助点个赞支撑下我哦(●◡●)):
百度云链接:https://pan.baidu.com/s/1-XE0pBS8IaDLoUBdO8hDOw 暗码:n39g

CSV文件格局

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

Country,Indicator,Year,Value
AFG,NGDP_R,2002,183.26
AFG,NGDP_R,2003,198.736
AFG,NGDP_R,2004,200.069
AFG,NGDP_R,2005,223.737
AFG,NGDP_R,2006,235.731
AFG,NGDP_R,2007,267.177
AFG,NGDP_R,2008,277.498
AFG,NGDP_R,2009,334.621
AFG,NGDP_R,2010,362.857
AFG,NGDP_R,2011,386.368
AFG,NGDP_R,2012,440.336
AFG,NGDP_R,2013,456.453
.......................
.......................
运用CSV模块获取气候数据

先将sitka_weather_07-2014.csv文件放到项目同一目录下,然后运用Python规范库供给的CSV模块能够用于剖析CSV文件中的数据行(也便是上面说到的记载),让咱们能快速提取感兴趣的值。事例代码如下:

import csv

# 包括一个sitka城市七月份气候信息的CSV文件,里边都是用逗号离隔
filename = sitka_weather_07-2014.csv

# 翻开csv文件,实例化一个csv模块的reader阅读器目标,是一个可迭代目标,所以能够运用for循环遍历该reader阅读器目标,
# 也能够调用BIF-next函数遍历下一行,需求留意的是reader里边的每行记载只能被遍历一次,其间reader有一个line_num特点回来遍历过程中对应的行号。
with open(filename) as f:
    reader = csv.reader(f)  # 回来的是一个csv的阅读器目标,直接打印获取不到里边的内容
    print(reader)  # 打印出的是<_csv.reader object at 0x000002D1B24912B8>
    head_row = next(reader)  # 回来榜首行的记载内容组成的字符串列表
    print(head_row)  # 打印 [AKDT, Max TemperatureF...]
    for row in reader:
        # 依据阅读器目标的记载(一行算一个记载)只能遍历一次的特性,行号从2开端了哦
        print(reader.line_num, row)  # 打印 2 [2014-7-1, 64, 56, 50....]

运转成果如下:

好了,开端获取到了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)

运转成果如下:

对上面的成果进行剖析:关于list内置函数,内部完成大约能够猜到是先将reader目标里边的记载遍历再增加进一个列表中,然后回来整个列表。调用list内置函数其实现已遍历一次了,遍历指针指向了最终一个记载,而且因为reader的记载(一行算一个记载)只能被遍历一次的特性,所以后边的代码再遍历reader目标就没啥含义了。

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

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

# 制作锡特卡7月份的气候数据
# 导入python支撑的csv模块,用来处理csv文件,剖析csv文件中的数据行,让咱们提取咱们感兴趣的值
import csv
# 导入matplotlib包里的pyplot模块,用于可视化获取到的每天最高温度
from matplotlib import pyplot as plt

from datetime import datetime

# 包括一个城市气候信息的CSV文件,里边都是用逗号离隔
filename = sitka_weather_07-2014.csv

# 翻开csv文件,实例化一个csv模块的reader阅读器目标
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 回来榜首行的记载内容组成的字符串列表,例如:[1,2....]
    highs = []  # 用于存储每天最高的温度
    dates = []  # 用于存储日期
    for row in reader:  # row也是回来遍历行的记载内容组成的字符串列表
        current_date = datetime.strptime(row[0], "%Y-%m-%d")  # 讲时刻字符串转化为指定格局的datetime目标
        dates.append(current_date)
        high = int(row[1])  # 因为前面现已next过一次了,依据reader只能被遍历一次的性质,这儿for循环就从第二行开端遍历
        highs.append(high)  # 将每天的最高温度保存在highs列表中,这时候列表存储的元素都是数字而非字符串,那么咱们就能够运用这个列表进行可视化处理了
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c=red)
plt.title("Daily high temperatures,July 2014", fontsize=24)
plt.xlabel(, fontsize=16)
fig.autofmt_xdate()  # 制作歪斜的日期标签
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis=both, which=major, labelsize=14)
plt.show()

运转成果如下:

仔细观察上面的运转成果,X轴仍是与书本图片有些收支,其实无碍,这是正确的,因为咱们运转的成果也是7月初开端,只不过X轴把6月份也包括进去了。

制作阿拉斯加锡特卡2014年每日最高气温文最低气温折线图

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

# 制作锡特卡整年的气候数据,未进行过错查看
# 导入python支撑的csv模块,用来处理csv文件,剖析csv文件中的数据行,让咱们提取咱们感兴趣的值
import csv
# 导入matplotlib包里的pyplot模块,用于可视化获取到的每天最高温度
from matplotlib import pyplot as plt

from datetime import datetime

# 包括一个城市气候信息的CSV文件,里边都是用逗号离隔
filename = sitka_weather_2014.csv

# 翻开csv文件,实例化一个csv模块的reader阅读器目标
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 回来榜首行的记载内容组成的字符串列表,例如:[1,2....]
    highs = []  # 用于存储整年每一天中的最高温度
    dates = []  # 用于存储日期
    lows = []  # 用于存储整年每一天中的最低温度
    for row in reader:  # row也是回来遍历行的元素内容组成的字符串列表
        current_date = datetime.strptime(row[0], "%Y-%m-%d")
        dates.append(current_date)
        high = int(row[1])  # 因为前面现已next过一次了,依据reader只能被遍历一次的性质,这儿for循环就从第二行开端遍历
        highs.append(high)  # 将每天的最高温度保存在highs列表中,这时候列表存储的元素都是数字而非字符串,那么咱们就能够运用这个列表进行可视化处理了
        low = int(row[3])
        lows.append(low)
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c=red, alpha=0.5)  # 制作整年每一天的最高气温折线图
plt.plot(dates, lows, c=blue, alpha=0.5)  # 制作整年每一天的最低气温折线图
plt.fill_between(dates, highs, lows, facecolor=blue, alpha=0.1)  # 填充每日最高气温文最低气温之间的区域
plt.title("Daily high and low temperatures,- 2014", fontsize=24)
plt.xlabel(, fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis=both, which=major, labelsize=14)
plt.show()

运转成果如下:

因为有些气象站会偶然呈现毛病,未能搜集全应该搜集的数据,所以假如咱们仍是选用上一个代码比如这样获取某个城市的气候数据,那么就会报错,因为这个城市的csv文件中某一天或许是短少数据的,所以会报ValueError过错。就如下图这样短少某天的数据:

所以,鉴于上面的问题,下一节获取逝世谷整年的气候数据将会选用反常处理机制就能防备这种状况。

制作逝世谷2014年每日最高气温文最低气温折线图

前面说了或许在实践使用中或许会呈现短少数据等问题,作为一名程序开发者,有必要设想到各种或许呈现的问题,而且选用有用的办法解决问题。咱们将会选用反常处理机制来制作逝世谷2014年每日最高气温文最低气温折线图。代码如下:

# 导入python支撑的csv模块,用来处理csv文件,剖析csv文件中的数据行,让咱们提取咱们感兴趣的值
import csv
# 导入matplotlib包里的pyplot模块,用于可视化获取到的每天最高温度
from matplotlib import pyplot as plt

from datetime import datetime

# 包括一个城市气候信息的CSV文件
filename = death_valley_2014.csv

# 翻开csv文件,实例化一个csv模块的reader阅读器目标
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 回来榜首行的记载内容组成的字符串列表,例如:[1,2....]
    highs = []  # 用于存储每天最高的温度
    dates = []  # 用于存储日期
    lows = []  # 用于存储每天最低的温度
    for row in reader:  # row也是回来遍历行的记载内容组成的字符串列表
        try:
            current_date = datetime.strptime(row[0], "%Y-%m-%d")
            high = int(row[1])  # 因为前面现已next过一次了,依据reader只能被遍历一次的性质,这儿for循环就从第二行开端遍历
            low = int(row[3])
        except ValueError:
            print(current_date,missing data)
        else:
            dates.append(current_date)
            highs.append(high)  # 将每天的最高温度保存在highs列表中,这时候列表存储的元素都是数字而非字符串,那么咱们就能够运用这个列表进行可视化处理了
            lows.append(low)
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c=red,alpha=0.5)
plt.plot(dates, lows, c=blue,alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor=blue,alpha=0.1)
plt.title("Daily high and low temperatures,- 2014\nDeath Valley.CA", fontsize=20)
plt.xlabel(, fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis=both, which=major, labelsize=14)
plt.show()

运转成果如下(两张图):
(1)折线图

(2)终端图

经过上面两个图能够知道,2014-02-16这一天的温度数据是丢掉了,所以在折线图其实没有画出2014-02-16这一天的最高和最低气温(因为太密布看不出)。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    oxygenxml.oxygenITeye

    插件,生成器,代码
  • 2

    JVM参数装备大全ITeye

    信息,打印,前后
  • 3

    ThreadITeye

    先后,正常,作业
  • 4
  • 5

    vba upgradeITeye

    文件,程序,晋级
  • 6

    java 多线程ITeye

    线程,作业,内存
  • 7
  • 8

    ClassLoaderITeye

    运用,文件,办法
  • 9
  • 10

    手机号码校验合法性ITeye

    代表,必定,第二位