Python 读取CSV文件数据并生成可视化图形
文章目录
CSV 文件数据读取并生成图形
CSV 文件格式
在文本文件中存储数据,最简单的方式就是将数据按照一定的格式存放在文件中,在读取文件时根据设计好的格式去将对应数据读取出来,这样就能很方便的进行简单数据的分类存储和读取了。
CSV 文件格式就是这样一种有着固定的格式的文件格式,CSV 文件中保存的数据之间会以逗号分割开来。例如下图这样。
CSV 文件头
Python 模块 csv 包含在 Python 标准库中,可用于分析 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 后,读取文件数据,并使用模块中的 reader (文件阅读器)对象读取文件信息,模块包含函数 next()
,调用它可以返回读取的阅读器对象的下一行内容,这里调用了一次,返回当前文件的文件头数据,使用 print()
将数据打印出来,如下图:
此时能够看出该文件的文件头数据内容,reader 处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。文件头 AKDT 表示阿拉斯加时间、其他数据都各有表示,分别对应文件中后面每一列中具体数据所代表的含义。
输出文件头位置信息
为了方便后面对文件进行数据提取可以直接提取到感兴趣的数据,在 CSV 文件中就需要准确的了解到对应数据所存放的列序号,所以首先需要输出文件头位置信息,从而了解到每一列所对应的数据含义,如下代码:
import csv
filename = 'sitka_weather_07-2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) for index, colum_header in enumerate(header_row): print(index, colum_header)
从输出结果可以看出,日期数据和最高气温数据都存放在第0列和第1列。接下来就可以直接提取对应数据并绘制图表。
提取数据绘制图表
知道需要的数据存放在哪一列中,就可以直接去提取对应的列数据,代码如下:
import csv from matplotlib import pyplot as plt
filename = 'death_valley_2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) highs = [] for row in reader: try: high = int(row[1]) highs.append(high) except ValueError: print('missing data') # 根据数据绘制图形 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()
绘制如下图:
使用模块 datetime 提取时间信息
下面在图表中添加日期,使得图表显示的信息更有效。在数据文件中的日期数据是存在第二行,所以读取该数据获得一个字符串,通过使用 datetime 模块将字符串时间数据转换为更友好的时间显示方式,使用 datetime 模块中的 strptime()
方法。例如下面代码演示这样:
from datetime import datetime
first_data = datetime.strptime("2014-7-1", '%Y-%m-%d') print(first_data)
输出显示如下:
下表列出了调用 strptime
方式接受的各种形式的实参及对应的格式:
实参 | |
---|---|
%A | 星期的名称,如 Monday |
%B | 月份的名称,如 January |
%m | 用数字表示的月份(01~02) |
%d | 用数字表示月份中的一天(01~31) |
%Y | 四位的年份,如2014 |
%y | 两位的年份,如 15 |
%H | 24小时制的小时数(00~23) |
%I | 12小时制的小时数(01~12) |
%p | am 或 pm |
%M | 分钟数(00~59) |
%S | 秒数(00~61) |
接下来就是在刚刚的代码中添加日期显示,需要完成提取日期信息并转换格式,最后加入图表作为 X坐标轴即可。
import csv from datetime import datetime from matplotlib import as plt # 从文件中提取日期和最高气温 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_data) high = int(row[1]) highs.append(high) # 根据数据绘制图形 fig = plt.figure(dpi=128, figsize=(10, 6)) plt.plot(dates, highs, c='red') plt.xlabel('', fontsize=16) fig.autofmt_xdate() plt.ylabel("Temperature (F)", fontsize=16) plt.tick_params(axis='both', which='major', labelsize=16) plt.show()
显示结果如下图所示:
添加低温数据曲线
前面绘制了高温数据变化曲线,同时在这个图表上添加低温的变化曲线以方便我们通过图表能清晰看到温度的具体变化情况,修改代码如下:
# 从文件中获取日期,最高气温和最低气温 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[3]) lows.append(low) # 根据数据绘制图形 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- 2014', fontsize=24)
显示如下:
图表区域着色
在同时显示高温和低温后,能够看到每天温度的变化区间,如果在这个区域添加上颜色那么久会是图表显示更清晰。
import csv from matplotlib import pyplot as plt from datetime import datetime
filename = 'death_valley_2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) 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) # Plot data. 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) # Format plot. title = "Daily high and low temperatures - 2014\nDeath Valley, CA" plt.title(title, fontsize=20) plt.xlabel('', fontsize=16) fig.autofmt_xdate() plt.ylabel("Temperature (F)", fontsize=16) plt.tick_params(axis='both', which='major', labelsize=16) plt.show()
如下图所示:
添加错误检查
为了防止因为数据提取和处理不正常而影响程序的正常运行,需要对一些意外情况做一定的处理,也就是对容易出现的意外错误进行检查。
import csv from matplotlib import pyplot as plt from datetime import datetime
filename = 'death_valley_2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) 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) # Plot data. 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) # Format plot. title = "Daily high and low temperatures - 2014\nDeath Valley, CA" plt.title(title, fontsize=20) plt.xlabel('', fontsize=16) fig.autofmt_xdate() plt.ylabel("Temperature (F)", fontsize=16) plt.tick_params(axis='both', which='major', labelsize=16) plt.show()
本文地址:https://blog.csdn.net/qq_37596943/article/details/107822870
上一篇: js原型原型链
下一篇: 线性表 - 单向链表
推荐阅读
-
使用python的pandas库读取csv文件保存至mysql数据库
-
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
-
python 读取.csv文件数据到数组(矩阵)的实例讲解
-
php从csv文件读取数据并输出到网页的方法
-
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
-
对python读取zip压缩文件里面的csv数据实例详解
-
python实现从文件中读取数据并绘制成 x y 轴图形的方法
-
使用python读取csv文件快速插入数据库的实例
-
Python 读取CSV文件数据并生成可视化图形
-
python读取csv文件并将数据传到数据库