Python对csv格式文件进行数据分析

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轴的数值

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/80463033