Python数据可视化工具matplotlib的学习笔记(四)-CSV文件

(2020.03.27)

CSV模块包含在Python标准库中

  • CSV文件 :将数据作为一系列以逗号分隔的值(CSV)写入文件。
  • 分析CSV文件头
import csv

filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

模块csv中的函数next():返回文件中的下一行。

  • 打印文件头及其位置
    for index,column_header in enumerate(header_row):
        print(index,column_header)

函数enumerate() : 获取每个元素的索引及其值
因此我们知道了哪种信息在第几列

  • 提取并读取数据
#从文件中获取最高气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)

    highs = []
    for row in reader:
        high = int(row[1])
        highs.append(high)

    print(highs)

(1)、创建一个空列表;
(2)、遍历文件中余下的各行,阅读器对象
从其停留的地方继续往下读取CSV文件,每次都自动返回当前所处位置的下一行
。由于已经读取了文件头行,这个循环将从第二行开始;
(3)、使用int()将字符串转换成数字。

  • 绘制气温图表
#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(highs,c='red')

#设置图形的格式
plt.title("Daily high temperatures, July 2014",fontsize=24)
plt.xlabel('',fontsize=16)
plt.ylabel("Temperature (F)",fontsize=16)
plt.tick_params(axis='both',which='major',labelsize=16)

plt.show()

(1)、函数figure()指定图表的长度、宽度、像素;
(2)、将highs列表传递给plot();
(3)、然后修改图表的相关信息。

  • 模块datetime
    需要将字符串’2014-7-1’转换为一个表示相应日期的对象。 可使用模块datetime中的方法strptime()
>>> from datetime import datetime
>>> first_date = datetime.strptime("2014-7-1",'%Y-%m-%d')
>>> print(first_date)
2014-07-01 00:00:00

(1)、首先导入模块datetime中的datetime类,再调用方法strptime()
(2)、第一个实参为包含所需日期的字符串,第二个实参告诉Python如何设置日期的格式;
’%Y-’ 让Python将字符串中第一个连字符前面的部分视为四位的年份
’%m-’ 让Python将第二个连字符前面的部分视为表示月份的数字
’%d’ 让Python将字符串的最后一部分视为月份中的一天
Python数据可视化工具matplotlib的学习笔记(四)-CSV文件_第1张图片

  • 在图表中添加日期
import csv
import matplotlib.pyplot as plt
from datetime  import datetime

#从文件中获取最高气温和气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)

    dates,highs = [], []
    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 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()

(1)、首先创建两个空列表,用于存储从文件中提取的日期和最高气温;
(2)、然后将包含日期信息的数据row[0])转换为datetime对象,并将其附加到列表dates末尾;
(3)、将日期最高气温值传递给plot()。
(4)、调用fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠。

  • 涵盖更长的时间
    在上面代码中更换时间更长的csv文件,再更换标题,就OK了。
  • 再添加一个数据系列
    再添加一个空列表,将csv文件中另一个数据系列读取出来。
    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[3])
        lows.append(low)
  • 给图标区域着色
    使用方法fill_between() : 它接受一个x值系列和两个y值系列,并填充两个y值系列之间的空间。
#根据数据绘制图形
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)

实参alpha指定颜色的透明度,alpha值为0表示完全透明,1表示完全不透明。
Python数据可视化工具matplotlib的学习笔记(四)-CSV文件_第2张图片

  • 错误处理
    dates,highs,lows = [], [], []
    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)

文件中因为缺少数据而引发ValueError错误时,使用try-except-else进行异常处理,可以指出错误并且继续运行程序。

你可能感兴趣的:(python,可视化,csv)