csv模块包含在python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴趣的值。首先绘制一个简单的折线图:

 1 #!usr/bin/env python
2 #*-*Coding=UTF-8 *-*
3 import csv #导入csv模块
4 from matplotlib import pyplot as plt
5
6 filename = 'sitka_weather_07-2014.csv' #要处理的文件名,2014年7月的数值
7
8 with open(filename) as file_object: #打开文件filename并且将结果文件对象存储在file_object中
9 reader = csv.reader(file_object) #调用csv.reader()将文件对象file_object作为实参传递给阅读器reader
10 header_row = next(reader) #调用一次next,得到文件的第一行
11 row_2 = next(reader) #再调用一次next,就会得到文件第二行的内容
12 #print(header_row,row_2)
13
14 #文件头的格式并非总是一致,空格和单位可能总是出现在奇怪的地方。这在原始数据文件中很常见,但不会带来任何问题
15 #为让文件头更容易理解,将列表中的每个头文件及其位置打印出来
16 for index, column_header in enumerate(header_row): #调用enumerate()来获取每个元素的索引及其值。
17 print(index, column_header) #打印索引,还有对应的值
18
19 #提取并读取数据
20 highs = [] #创建空列表来存储最高气温
21 for row in reader: #在文件对象中循环读取每一行
22 print(row,"\n") #打印文件对象中的所有行
23 print(type(row[1])) #查看第一行第一列数据类型
24 #highs.append(row[1]) #把每一行索引为1的值(字符串)附加到列表,也就是文件中我们所需的最高气温
25 high = int(row[1]) #将每一行的索引值为1的类型为字符串的值转化成整型以便绘制图形
26 highs.append(high) #将转化成整型的数值依次附加到列表末尾
27
28 print(highs) #打印是不是符合预期
29
30 #绘制最高气温图表
31 fig = plt.figure(dpi=128,figsize=(16,9)) #定义图表输出样式
32 plt.plot(highs,c='red') #绘制最高气温并且把颜色设置成红色
33
34 plt.title("Daily High Temperatures of Sitka in July 2014",fontsize=14) #图形标题
35 plt.xlabel(" ",fontsize=10) #图形x轴标签
36 plt.ylabel("Temperatures (F) ",fontsize=10) #图形y轴标签
37 plt.tick_params(axis='both',which='major',labelsize=5) #刻度参数
38
39 plt.show() #显示图形

没有出错的话,效果图应该如下。应该注意的一点是,代码中,如果没把从每一行索引值为1的字符串转化成整型数据类型,matplotlib也能画图,但是绘制出来的图形不是预期的。

---------------------------------------------------------------------------------我是分割线---------------------------------------------------------------------------------

上面的图形只绘制了一个简单的表示最高气温的折线图,下面来添加时间还有最低气温还有涵盖更长时间(sitka_weather_2014.csv,即一整年的数值)以便比较:

 1 #!usr/bin/env python
2 # *-* Coding=utf-8 *-*
3
4 import csv #导入csv模块
5 from matplotlib import pyplot as plt #导入模块以便绘图
6 from datetime import datetime #导入模块处理日期格式
7
8 filename = 'sitka_weather_2014.csv' #要处理的文件名
9 with open(filename) as file_object: #打开文件并将结果文件对象存储在file_object中
10 reader = csv.reader(file_object) #调用csv.reader()将文件对象file_object作为实参传递给阅读器reader
11 header_row = next(reader) #调用一次next,得到文件的第一行
12 row_2 = next(reader) #再调用一次next,得到文件第二行
13 print(header_row,row_2) #打印一下是不是符合预期
14
15 #文件头的格式并非总是一致,空格和单位可能总是出现在奇怪的地方。这在原始数据文件中很常见,但不会带来任何问题
16 for index, column_header in enumerate(header_row): #调用enumerate来获取每个元素的索引及其值
17 print(index, column_header) #打印索引还有对应的值
18
19 highs = [] #创建空列表以存储最高气温
20 dates =[] #创建空列表以存储日期
21 lows = [] #创建空列表以存储最低气温
22 for row in reader: #循环读取文件对象的每一行
23 high = int(row[1]) #把每一行索引为1的值即最高气温(字符串)转换成整型
24 date = datetime.strptime(row[0],"%Y-%m-%d") #利用datetime模块处理日期格式
25 low = int(row[3]) #把每一行索引为3的值即最低气温(字符串)转换成整型
26
27 highs.append(high) #将转换好的整型数值通过循环依次附加到列表末尾形成最高气温列表highs
28 dates.append(date) #将做好格式的日期通过循环依次福建到列表末尾以形成日期列表dates
29 lows.append(low) #将转换好的整型数值通过循环依次福建到列表末尾形成最低气温列表lows
30
31 print(highs,dates,lows) #打印一下是不是符合预期
32 #开始绘制图表
33 fig = plt.figure(dpi=128,figsize=(16,9)) #定义图表输出的dpi数值和输出格式
34 plt.plot(dates,highs,c='red',alpha=0.5) #绘制最高气温数据系列,并把线条设置为红色,不透明度设置为0.5
35 plt.plot(dates,lows,c='blue',alpha=0.5) #绘制最低气温数据系列,并把线条设置为蓝色,不透明度设置为0.5
36 plt.title("High and Low temperature of Sitka in 2014",fontsize=10) #图形标题
37 plt.xlabel(' ',fontsize=8) #x轴标签,绘制空标签,因为日期会出现在x轴标签位置
38 plt.ylabel("Temperatures (F) ",fontsize=8) #y轴标签
39 plt.tick_params(axis='both',labelsize=8) #刻度参数
40 fig.autofmt_xdate() #绘制斜体日期标签,以免日期标签太长而彼此重叠
41 #方法fill_between()接收一个x值系列和两个y值系列,并填充两个y值系列的空间
42 plt.fill_between(dates,highs,lows,color='green',alpha=0.1) #dates是x值系列,两个y值系列分别是highs和lows,颜色设置为绿色,不透明度设置为0.1
43 plt.show() #显示图形
44

没有出错的话,效果图应该如下。通过着色,让两个数据集之间的区域显而易见。

---------------------------------------------------------------------------------我是分割线---------------------------------------------------------------------------------

最后一个内容是错误检查。上面的代码,应该能处理来自世界各地任何地方的天气数据(可能会出现参数要改的情况),假定有的气象站出现了故障(或者服务器故障,或者工作人员粗心),未能收集部分或者全部应该收集的数据。缺失数据缺失可能会引发程序异常。下面把文件改成另一个文件,有数据缺失的情况。运行出现如下错误:

Traceback (most recent call last):
File "practice.py", line 23, in <module>
high = int(row[1]) #把每一行索引为1的值即最高气温(字符串)转换成整型
ValueError: invalid literal for int() with base 10: ''

这个错误表明,python无法将空字符串' '转换成整型。通过打印print(row),发现:

['2014-2-16', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0.00', '', '', '-1']

2014年2月16日的一整行数据大部分都是空的,特别是需要的最高气温和最低气温。现在来改下代码以适应这种情况:

 1 #!usr/bin/env python
2 # *-* Coding=utf-8 *-*
3
4 import csv #导入csv以处理csv文件
5 from matplotlib import pyplot as plt #从matplotlib导入pyplot以处理图形
6 from datetime import datetime #导入datetime以处理日期
7
8 filename = 'death_valley_2014.csv' #要处理的文件
9 with open(filename) as file_object: #打开文件并将结果文件对象存储在file_object中
10 reader = csv.reader(file_object) #调用csv.reader()将文件对象file_object作为实参传递给reader
11 header_row = next(reader) #调用next,读取文件的第一行
12 print(header_row) #打印是否符合预期
13
14 for index, column_header in enumerate(header_row): #调用enumerate()获取每个元素的索引和值
15 print(index,column_header) #打印索引还有对应的值
16 #文件头的格式并非总是一致,空格和单位可能总是出现在奇怪的地方。这在原始数据中非常常见,但不会带来任何问题。
17 #为让文件头更容易理解,将列表中的每个头文件及其位置打印出来
18 highs = [] #创建空列表以存储最高气温
19 dates = [] #创建空列表以存储日期
20 lows = [] #创建空列表以存储最低气温
21
22 for row in reader: #循环读取文件对象的每一行
23 #开始错误检查和处理,对于文件对象的每一行,都尝试从中提取日期,最高气温和最低气温,尝试失败就会引发ValueError异常
24 try:
25 high = int(row[1])
26 date = datetime.strptime(row[0],"%Y-%m-%d")
27 low = int(row[3])
28 except ValueError: #处理ValueError异常
29 #pass #直接pass,忽略
30 print(date,"data missing") #打印出缺失的数据日期和提示语
31 else:
32 highs.append(high) #将没有引发ValueError异常并且提取到的数值附加到列表highs末尾形成列表highs
33 dates.append(date) #将没有引发ValueError异常并且提取到的数值附加到列表dates末尾形成列表dates
34 lows.append(low) #将没有引发ValueError异常并且提取到的数值附加到列表lows末尾形成列表lows
35
36 fig = plt.figure(dpi=128,figsize=(16,9)) #定义图表输出的dpi数值和输出格式
37 plt.plot(dates,highs,c='red',alpha=0.5) #绘制最高气温数据系列,并把线条设置为红色,不透明度设置为0.5
38 plt.plot(dates,lows,c='blue',alpha=0.5) #绘制最低气温数据系列,并把线条设置为蓝色,不透明度设置为0.5
39 plt.title("High and Low Temperature (F) of Death Valley in 2014",fontsize=10) #图形标题
40 plt.xlabel(' ',fontsize=8) #x轴标签,绘制空标签,因为日期会出现在x轴标签位置
41 plt.ylabel('Temperature (F)',fontsize=8) #y轴标签
42 plt.tick_params(axis='both',which='major',labelsize=5) #刻度参数
43 fig.autofmt_xdate() #绘制斜体日期标签,以免日期标签太长而彼此重叠
44 #方法fill_between()接收一个x值系列和两个y值系列,并填充两个y值系列的空间
45 plt.fill_between(dates,highs,lows,color='green',alpha=0.1) #dates是x值系列,两个y值系列分别是highs和lows,颜色设置为绿色,不透明度设置为0.1
46 plt.show() #显示图形

没有出错的话,效果图应该如下。

打完收工,数据参考:<python编程,从入门班到实践>。

Matplotlib处理csv文件的更多相关文章

  1. matplotlib读取csv文件

    一,从本地加载csv文件 from matplotlib import pyplot as pltimport numpy as npimport csv#用来正常显示中文标签plt.rcParams ...

  2. 深度学习原理与框架-递归神经网络-时间序列预测(代码) 1.csv.reader(进行csv文件的读取) 2.X.tolist(将数据转换为列表类型)

    1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...

  3. pandas 读csv文件 TypeError: Empty 'DataFrame': no numeric data to plot

    简单的代码,利用pandas模块读csv数据文件,这里有两种方式,一种是被新版本pandas遗弃的Series.from_csv:另一种就是pandas.read_csv 先说一下问题这个问题就是在读 ...

  4. python3使用csv包,读写csv文件

    python操作csv,现在很多都用pandas包了,不过python还是有一个原始的包可以直接操作csv,或者excel的,下面举个例子说明csv读写csv文件的方法: import os impo ...

  5. Python开发【模块】:CSV文件 数据可视化

    CSV模块 1.CSV文件格式 要在文本文件中存储数据,最简单的方式是讲数据作为一系列逗号分隔的值(CSV)写入文件,这样的文件成为CSV文件,如下: AKDT,Max TemperatureF,Me ...

  6. [Python Study Notes]pd.read_csv()函数读取csv文件绘图

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  7. python-pandas读取mongodb、读取csv文件

    续上一篇博客(‘’selenium爬取NBA并将数据存储到MongoDB‘)https://www.cnblogs.com/lutt/p/10810581.html 本篇的内容是将存储到mongo的数 ...

  8. python读取csv文件数据绘制图像,例子绘制天气每天最高最低气温气象图

  9. 2. 假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据。

    假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实  际数据.编写程序,完成下 ...

随机推荐

  1. mybatis中的一些标签使用

    主要有两个配置文件,一个是主配置文件SqlConfig.xml, 还有一个是dao接口实现类相对应的mapper的配置文件 .比如userDao的userDao.xml配置文件. 1.resultTy ...

  2. 抓包工具fiddler使用-初级

    参考 https://kb.cnblogs.com/page/130367/#introduce

  3. 【mq读书笔记】mq消息消费

    消息消费以组的的模式开展: 一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题: 消费组之间有集群模式与广播模式两种消费模式:集群模式-主题下的同一条消息只允许被其中一个消费者消费.广播模式- ...

  4. CentOS 7下安装Docker

    安装一些必要的系统工具: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加软件源信息: sudo yum-conf ...

  5. od中低位地址和高位的顺序,以及数据的存放读写

    在观察内存的时候应当注意"内存数据"与"数值数据"的区别. 在我们的调试环境中,内存由低到高分布,你可以简单地把这种情形理解成Win32系统在内存中由地位向高位 ...

  6. springboot:读取application.yml文件

    现在开发主要使用微服务框架springboot,在springboot中经常遇到读取application.yml文件的情形. 一.概述 开发过程中经常遇到要读取application.yml文件中的 ...

  7. 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出

    第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...

  8. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget类实例的树型部件中,可以根据文本.搜索列以及匹配模式来搜索满足条件的项,调用 ...

  9. PyQt学习随笔:QtDesigner ListView控件列表项的初始化

    在QtDesigner中设计的界面中添加ListView控件后,是没办法添加需要在ListView控件中显示的列表项.由于ListView控件只是一个展示列表项的视图控件,实现了界面与数据的分离,其要 ...

  10. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...