前言:
这次做的是数据可视化里的一个小练习,绘制图表。数据是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计数变量,来统计缺失数据的个数。