csv格式文件数据分析
1.下载数据
1.1下载数据,处理csv格式文件的数据
安装csv模块,在网上下载或者自己写一个csv格式的文件
也可以访问官网,不过很多人下不了这些文档,我这的下载积分只要1个。
现在开始写代码吧:
先导入csv模块,打开对应的csv文件将结果存放在f里面,调用csv.reader()方法,将前面存储的文件对象传递给他,创建一个相关联的阅读器(reader)对象,将阅读器对象存储在reader里面,调用next()方法,将阅读器对象的行传递给文件的第一行,并返回文件对象的下一行数据。
importcsv
filename = 'sitka_weather_07-.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
print(header_row)
'''调用enumerate()方法获取每个元素的索引和数值'''
for index, column_header inenumerate(header_row):
print(index, column_header)#打印出列号和名称
1.2数据的读取
ps:由于书里面的最高气温提取是错的,实际上是每行的第一个数据
前面我们得到了文件里面的行数和数据名称
现在我们需要读取文件里面的数据
filename= 'sitka_weather_07-.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
heads = []#创建一个空列表用于存放每天的第一个检测的温度for row in reader:#遍历文件对象heads.append(row[1])#添加每行的第一列到列表里print(heads)
也可以转换成数字类型的列表
for rowin reader:#遍历文件对象head = int(row[1])#读取第二列的数值heads.append(head)
print(heads)
1.3描绘出气温图表
要将这些数据进行可视化,我们需要上一章的内容matplotlib创建图表
添加图表代码就行了
#绘制图形大小和格式fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(heads,c='red')
plt.title("Daily first temperatures, July ",fontsize = 24)
plt.xlabel('',fontsize = 16)
plt.ylabel('Temperture(F)',fontsize= 16)
1.5模块的datetime
顾名思义,就是日期时间,我们要把时间添加到图表里面
读取数据时,获得是字符串,要把这个字符串转换成日期对象
可以调用datetime中的strptime()方法
我现在IDLE里面试了一下这个方法,把这一天的放进去
得到这一天的第一个时间
‘%Y-%m-&d‘ 让Python能够识别年月日的数据
>>>from datetime import datetime
>>>first_date = datetime.strptime('-7-1','%Y-%m-%d')
>>>print(first_date)
-07-0100:00:00
>>>
在图表里面添加日期:
import csv
from matplotlib import pyplot as plt
from datetime import datetime
'''修改成这一年的温度值的文件'''
filename = 'sitka_weather_.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
dates,heads = [],[]#创建两个空列表用于存放每天的日期及其第一个检测的温度for row in reader:#遍历文件对象current_date =datetime.strptime(row[0],"%Y-%m-%d")//将第1列的日期传过去dates.append(current_date)
head = int(row[1])
heads.append(head)
print(heads)
#绘制图形大小和格式fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(dates,heads,c='red')
plt.title("Daily first temperatures, July ",fontsize = 24)
plt.xlabel('',fontsize = 16)
#调用fig.auto_xdate()来绘制斜的的标签日期fig.autofmt_xdate()
plt.ylabel('Temperture(F)',fontsize= 16)
plt.tick_params(axis='both',which='major',labelsize = 16)
plt.show()
结果展示:
1.6丰富数据内容
其实书上面无法计算读取csv文件每行数据的最大值,所以这里只能做个表面工作
importcsv
from matplotlib import pyplot as plt
from datetime import datetime
filename = 'sitka_weather_.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])
highs.append(high)
low = int(row[5])
lows.append(low)
print(highs,lows)
#绘制图形大小和格式fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(dates,highs,c='red')
plt.plot(dates,lows,c='blue')
plt.title("Daily high and low temperatures, July ",fontsize = 24)
plt.xlabel('',fontsize = 16)
#调用fig.auto_xdate()来绘制斜的的标签日期fig.autofmt_xdate()
plt.ylabel('Temperture(F)',fontsize= 16)
plt.tick_params(axis='both',which='major',labelsize = 16)
plt.show()
然而书上不能打印出最大值,所以。。。
import csv
import numpy
from matplotlib import pyplot as plt
from datetime import datetime
filename = 'sitka_weather_.csv'
with open(filename) as f:
reader = csv.reader(f)
header_column = next(reader)
max1 ,dates=[],[]
for row in reader:
current_date =datetime.strptime(row[0], "%Y-%m-%d") #将第1列的日期传过去dates.append(current_date)
row.pop(0)
row.pop(-2)
print(max(row))
max1.append(max(row))
fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(dates,max1,'red')
plt.title("Daily high and low temperatures, July ",fontsize = 24)
plt.xlabel('',fontsize = 16)
#调用fig.auto_xdate()来绘制斜的的标签日期fig.autofmt_xdate()
plt.ylabel('Temperture(F)',fontsize= 16)
plt.tick_params(axis='both',which='major',labelsize = 8)
plt.show()
ps:注意y轴的数值