欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Python进行数据可视化(三、处理csv文件(二))

程序员文章站 2022-06-01 14:02:56
...

在"使用Python进行数据可视化(三、处理csv文件)"中,我们成功地从csv文件中获取了最高气温的信息,并且绘制了一个直观的折线图。接下来,我们还可以添加一些东西,使其显示更多的信息。

1.显示日期、时间信息

模板 datetime

datetime.datetime

在Python的官方文档中search datetime可以找到关于datetime的使用说明。

class datetime.datetime(yearmonthdayhour=0minute=0second=0microsecond=0tzinfo=None*fold=0)

......

我们要用到的是:

strptime()

 

classmethod datetime.strptime(date_stringformat)

Return a datetime corresponding to date_string, parsed according to format. This is equivalent to datetime(*(time.strptime(date_string, format)[0:6]))ValueError is raised if the date_string and format can’t be parsed by time.strptime() or if it returns a value which isn’t a time tuple. For a complete list of formatting directives, see strftime() and strptime() Behavior.

 

format的参数很多,在官方文档中可以找到。

 

从文档的介绍中我们可以知道,strptime的功能和用法,我们传入两个参数,第一个为日期的字符串,第二个为格式设置的参数。 而strptime将返回一个相应日期的对象。

举例:使用Python进行数据可视化(三、处理csv文件(二))

 

 

给图加上日期

#导入csv模块
import csv
#导入datetime
from datetime import datetime
#
from matplotlib import pyplot as plt

#指定文件名,然后使用 with open() as 打开
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
        #创建一个阅读器:将f传给csv.reader
        reader = csv.reader(f)
        #使用csv的next函数,将reader传给next,将返回文件的下一行
        header_row = next(reader)
        
      #  for index, column_header in enumerate(header_row):
                #print(index, column_header)
        
        #读取最高气温
        #创建最高气温的列表
        highs =[]
        dates = []
        #遍历reader的余下的所有行(next读取了第一行,reader每次读取后将返回下一行)
        for row in reader:
                 #
                current_date = datetime.strptime(row[0],"%Y-%m-%d")
                dates.append(current_date)
                #将字符串转换成数字
                high = int(row[1])
                highs.append(high)
               
#绘制图形
fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形的格式
plt.title("Daily high temperature, 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()#导入datetime
from datetime import datetime
#
from matplotlib import pyplot as plt

#指定文件名,然后使用 with open() as 打开
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
        #创建一个阅读器:将f传给csv.reader
        reader = csv.reader(f)
        #使用csv的next函数,将reader传给next,将返回文件的下一行
        header_row = next(reader)
        
      #  for index, column_header in enumerate(header_row):
                #print(index, column_header)
        
        #读取最高气温
        #创建最高气温的列表
        highs =[]
        dates = []
        #遍历reader的余下的所有行(next读取了第一行,reader每次读取后将返回下一行)
        for row in reader:
                 #
                current_date = datetime.strptime(row[0],"%Y-%m-%d")
                dates.append(current_date)
                #将字符串转换成数字
                high = int(row[1])
                highs.append(high)
               
#绘制图形
fig = plt.figure(dpi=128, figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形的格式
plt.title("Daily high temperature, 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()

 

2.更多的信息-将数据扩大到2014年

 

要将分析的范围扩大到2014年我们只需得到2014年的csv文件,然后同样的方法,就可以得到2014年的最高气温折线图。

将 filename 改为'sitka_weather_2014.csv'

同时修改标题

plt.title("Daily high temperature,  2014", fontsize=24)

即可。

使用Python进行数据可视化(三、处理csv文件(二))

 

3.更多的信息,加上最低气温

和最高气温的方法类似,我们可以读取最低气温,并且把它和最高气温绘制在同一张图上。

     lows= []

     low = int(row[3])

     lows.append(low)

    plt.plot(dates,lows,c= 'blue')  #更改颜色为蓝色,便于区分

添加最低气温后的图表显示如下:

使用Python进行数据可视化(三、处理csv文件(二))

 

 

4.更好地显示图表--给图表区域上色

只需更改三处代码 (alpha是透明度),fill_between()填充两条折现之间的区域.

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)

结果如下:

使用Python进行数据可视化(三、处理csv文件(二))

 

5.错误检查

csv文件中有时会出现一些意料之外的东西,有时会导致错误。

用try,except,else结构来避免错误。

举例:

我试图用同样的方法分析death_valley_2014.csv时,出现了错误。

使用Python进行数据可视化(三、处理csv文件(二))

上面提示我,在30行,执行语句 high=int(row[1])时出现错误,错误类型为ValueError,提示无法将''转化成int。

于是用 try ,except,else结构来避免这种ValueError.

我们将可能出错的部分放在try的内部

except ValueError :在出错时打印一条信息,

else:来执行正常的时候的操作。

        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')
                else:
                        dates.append(current_date)
                        highs.append(high)
                        lows.append(low)

 

结果如下:

 

使用Python进行数据可视化(三、处理csv文件(二))

 

可以看出,不仅成功地绘制出了折线图,而且打印出了出现错误时的日期。

 

最后,最终的完整代码:

#导入csv模块
import csv
#导入datetime
from datetime import datetime
#
from matplotlib import pyplot as plt

#指定文件名,然后使用 with open() as 打开
filename = 'death_valley_2014.csv'
with open(filename) as f:
        #创建一个阅读器:将f传给csv.reader
        reader = csv.reader(f)
        #使用csv的next函数,将reader传给next,将返回文件的下一行
        header_row = next(reader)
        
      #  for index, column_header in enumerate(header_row):
                #print(index, column_header)
        
        #读取最高气温
        #创建最高气温的列表
        highs =[]
        lows= []
        dates = []
        #遍历reader的余下的所有行(next读取了第一行,reader每次读取后将返回下一行)
        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')
                else:
                        dates.append(current_date)
                        highs.append(high)
                        lows.append(low)
               
#绘制图形
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 and low temperature,  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()

 

 

 

相关标签: csv