csv 格式文件数据分析
1. 下载数据
1.1 下载数据, 处理 csv 格式文件的数据
安装 csv 模块, 在网上下载或者自己写一个 csv 格式的文件
相关文档请访问 https://download.csdn.net/download/qq_37504771/10438857
https://download.csdn.net/download/qq_37504771/10438862
也可以访问官网, 不过很多人下不了这些文档, 我这的下载积分只要 1 个.
现在开始写代码吧:
先导入 csv 模块, 打开对应的 csv 文件将结果存放在 f 里面, 调用 csv.reader()方法, 将前面存储的文件对象传递给他, 创建一个相关联的阅读器 (reader) 对象, 将阅读器对象存储在 reader 里面, 调用 next()方法, 将阅读器对象的行传递给文件的第一行, 并返回文件对象的下一行数据.
- importcsv
- filename = 'sitka_weather_07-2014.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-2014.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 2014",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('2014-7-1','%Y-%m-%d')
- >>>print(first_date)
- 2014-07-0100:00:00
- >>>
在图表里面添加日期:
- 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,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 2014",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_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])
- 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 2014",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_2014.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 2014",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 轴的数值
来源: http://www.92to.com/bangong/2018/05-31/33859247.html