如同打印机一般,整整齐齐的将csv格式存储的数据可视化,(就是要整整齐齐!!!)

要在文本文件中存储数据,最简单的方式就是将数据作为一系列以逗号分割的值(csv)写入文件。
下面让我们来可视化以csv文件格式储存的文件:

import csv

filename = 'sitka_weather_07-2014.csv'

我们需要在读文件之前,先导入csv模块,将文件名称储存在filename中(注意:文件sitka_weather_07-2014.csv存储在本程序所在的文件夹)(文件在下面资源里面有,记得关注哦哦哦~)

with open(filename) as f:
	reader = csv.reader(f)
	header_row = next(reader)

打开文件,并将文件结果存储到f中。然后调用csv,.reader(),并将f作为实参传递给它,从而创建一个与该文件相关联的阅读器(reader)对象存储到reader中。模块csv的reader类包含next()方法,调用内置函数next()并将一个reader作为参数传递给它时,将调用reader的next()方法,从而返回文件的下一行。我们在这里只调用了next()一次,所以得到的是文件的第一行,其中包含文件头,指出了每行都包含哪些数据:(你可以用print(header_row)来检查是否运行成功,如果成功,会出现下面图片)
在这里插入图片描述
(注意:文件头的格式并非总是保持一致,空格和单位可能出现在奇怪的地方。这在原始数据文件中很常见,但是不会带来任何问题)

highs = []
for row in reader:
	high = int(row[1])
	highs.append(high)

这里我们创建highs的空列表(存储最高温度),在遍历文件中余下的各行。阅读器对象从其停留的地方继续往下读取csv文件,每次都自动返回当前所处位置的下一行。由于我们已经读取了文件头行,这个循环将从第二行开始------从这行开始包含的是实际数据。每次执行该循环时,我们都将索引1处(第二列)的数据从字符串转化数字,在附加到highs末尾(你可以用print(highs)输出看一下,会出现)
在这里插入图片描述
下面让我们来对这些数据进行可视化

import csv
from matplotlib import pyplot as plt
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
	reader = csv.reader(f)
	header_row = next(reader)
	highs = []
	for row in reader:
		high = int(row[1])
		highs.append(high)

#根据数据绘制图形
fig = plt.figure(dpi = 128,figsize=(10,6))		
plt.plot(highs,c='red')
#设置图片格式
plt.title("Daily temperatures, July 2014",fontsize = 24)
plt.xlabel('',fontsize = 16)
plt.ylabel("Temperature(F)",fontsize = 16)
plt.tick_params(axis='both',which = 'major',labelsize = 16)
plt.show()

为可视化这些气温数据,我们首先使用matplotlib创建一个显示每日最高气温的简单图形,这个在这里就不详细说了,我在之前发布的博客中有写哦(敲黑板咳咳要是能顺道关注我一下的话,那就太好啦~嘿嘿),运行程序,会出现下图:
在这里插入图片描述
5.
处理csv文件中的日期,对气温图像进行改进

import csv
from matplotlib import pyplot as plt
from datetime import datetime

#从文件中获取日期和最高气温
filename = 'sitka_weather_2014.csv'
with open(filename) as f:
	reader = csv.reader(f)
	header_row= next(reader)
	
	dates,highs,lows = [],[],[]
	for row in reader:
		current_date = datetime.strptime(row[0],"%Y-%m-%d")
		dates.append(current_date)
		high=int(row[1])
		low=int(row[2])
		lows.append(low)
		highs.append(high)
#根据数据绘制图形
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)
plt.ylabel('Temperature (F)',fontsize  = 16)
fig.autofmt_xdate()#x轴自适应
plt.tick_params(axis = 'both',which  = 'major', labelsize = 16)
plt.show()
print(dates)

修改文件名,使用新的数据文件,并修改了文件的标题,添加空列表lows,用于储存最低温度。添加一个对plot()的调用,已使用蓝色绘制最低气温。调用fill_between()方法,它接收一个x值系列和两个y值系列,并填充两个y值系列之间的空间。实参alpha指颜色透明度(0表示完全透明,1表示完全不透明)。运行代码,可以得到下面图片:
在这里插入图片描述
6.
错误提示。将文件death_valley_2014.csv复制到本程序所在的文件夹(文件在下面资源里面有,记得关注哦哦哦~),在修改filename使其生成死亡谷的气温图

#coding=utf-8
import csv
from matplotlib import pyplot as plt
from datetime import datetime
import matplotlib.dates as mdate



#从文件中获取日期和最高气温
filename = 'death_valley_2014.csv'
with open(filename) as f:
	reader = csv.reader(f)
	header_row= next(reader)
	
	dates,highs,lows = [],[],[]
	for row in reader:
		try:
			current_date = datetime.strptime(row[0],"%Y-%m-%d")
			high=int(row[1])
			low=int(row[2])
		except ValueError:
			print(current_date,'missing date')
		else:
			lows.append(low)
			highs.append(high)
			dates.append(current_date)
#根据数据绘制图形
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 temperature - 2014",fontsize = 24)
plt.xlabel(' ',fontsize = 16)
plt.ylabel('Temperature (F)',fontsize  = 16)
fig.autofmt_xdate()#自适应
plt.tick_params(axis = 'both',which  = 'major', labelsize = 16)
plt.show()
print(dates)

对于每一行,我们都尝试从中提取日期、最高气温、最低气温。只要缺失其中一项数据,Python就会引发ValueError异常,我们在这里打印一条错误信息,指出缺失数据的日期。下面是代码运行的效果:
在这里插入图片描述
在这里插入图片描述
这就是我学的处理csv格式文件的知识,希望能对大家有帮助,记得关注我哦~

猜你喜欢

转载自blog.csdn.net/zhu_rui/article/details/105322377