前言:
这次做的是数据可视化里的一个小练习,绘制图表。数据是2014年死亡谷的气温,数据格式为csv.主要练习了怎样读取csv文件并对其进行数据可视化。
1.读取csv文件里的7月份每天最高温数据,并绘制2014年7月份的高温图。
import csv
from datetime import datetime
from matplotlib import pyplot as plt
filename="sitka_weather_07-2014.csv"
with open(filename) as f:
reader=csv.reader(f)
head_row=next(reader)
highs=[]
dates=[]
for row in reader:
highs.append(int(row[1]))
date=datetime.strptime(row[0],'%Y-%m-%d')
dates.append(date)
print(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=16)
plt.show()
提取出的7月份每天最高温的数据为:
图形可视化为:
在处理数据的时候有两个点是需要注意的,一个是读取的CSV文件里气温是字符串格式,需要将其转换成int型,还有一个是调用datetime模块中的striptime函数来将字符串格式的数据转换成想要的时间类型。
2.同时绘制最高温和最低温。
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)
head_row=next(reader)
highs=[]
dates=[]
lows=[]
errnum=0
# for row in reader:
# high=int(row[1])
# low=int(row[3])
# date=datetime.strptime(row[0],'%Y/%m/%d')
# highs.append(high)
# lows.append(low)
# dates.append(date)
for row in reader:
try:
current_date = datetime.strptime(row[0], "%Y/%m/%d")
high = int(row[1])
low = int(row[3])
except ValueError:
print(current_date, 'missing data')
errnum=errnum+1
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
print(errnum)
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 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=16)
plt.show()
在绘图的时候有些日期的气温是缺失的,直接绘图会报错,所以用到了try....except..来处理有问题的数据,抛出missing data错误。另我又设置了一个errnum计数变量,来统计缺失数据的个数。