Python读取CSV文件并进行数据可视化绘图
介绍:文件 sitka_weather_07-2018_simple.csv是阿拉斯加州锡特卡2018年1月1日的天气数据,其中包含当天的最高温度和最低温度。数据文件存储与data文件夹下,接下来用Python读取该文件数据,再基于数据进行可视化绘图。(详细细节请看代码注释)
sitka_highs.py
import csv# 导入csv模块from datetime import datetimeimport matplotlib.pyplot as pltfilename = 'data/sitka_weather_07-2018_simple.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 返回文件的下一行,在这便是首行,即文件头# for index, column_header in enumerate(header_row):# 对列表调用了 enumerate()来获取每个元素的索引及其值,方便我们提取需要的数据列#print(index, column_header) # 从文件中获取最高温度dates, highs = [], []for row in reader:current_date = datetime.strptime(row[2], '%Y-%m-%d')high = int(row[5])dates.append(current_date)highs.append(high) # 根据最高温度绘制图形plt.style.use('seaborn')fig, ax = plt.subplots()ax.plot(dates, highs, c='red')# 设置图形的格式ax.set_title("2018年7月每日最高温度", fontproperties="SimHei", fontsize=24)ax.set_xlabel('', fontproperties="SimHei", fontsize=16)fig.autofmt_xdate()ax.set_ylabel("温度(F)", fontproperties="SimHei", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
运行结果如下:
文章图片
设置以上图标后,我们来添加更多的数据,生成一副更复杂的锡特卡天气图。将sitka_weather_2018_simple.csv数据文件置于data文件夹下,该文件包含整年的锡特卡天气数据。
对代码进行修改:
sitka_highs.py
import csv# 导入csv模块from datetime import datetimeimport matplotlib.pyplot as pltfilename = 'data/sitka_weather_2018_simple.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 返回文件的下一行,在这便是首行,即文件头 # for index, column_header in enumerate(header_row):# 对列表调用了 enumerate()来获取每个元素的索引及其值,方便我们提取需要的数据列#print(index, column_header) # 从文件中获取最高温度dates, highs = [], []for row in reader:current_date = datetime.strptime(row[2], '%Y-%m-%d')high = int(row[5])dates.append(current_date)highs.append(high) # 根据最高温度绘制图形plt.style.use('seaborn')fig, ax = plt.subplots()ax.plot(dates, highs, c='red')# 设置图形的格式ax.set_title("2018年每日最高温度", fontproperties="SimHei", fontsize=24)ax.set_xlabel('', fontproperties="SimHei", fontsize=16)fig.autofmt_xdate()ax.set_ylabel("温度(F)", fontproperties="SimHei", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
运行结果如下:
文章图片
代码再改进:虽然上图已经显示了丰富的数据,但是还能再添加最低温度数据,使其更有用
【Python读取CSV文件并进行数据可视化绘图】对代码进行修改:
sitka_highs_lows.py
import csv# 导入csv模块from datetime import datetimeimport matplotlib.pyplot as pltfilename = 'data/sitka_weather_2018_simple.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 返回文件的下一行,在这便是首行,即文件头 # for index, column_header in enumerate(header_row):# 对列表调用了 enumerate()来获取每个元素的索引及其值,方便我们提取需要的数据列#print(index, column_header) # 从文件中获取日期、最高温度和最低温度dates, highs, lows = [], [], []for row in reader:current_date = datetime.strptime(row[2], '%Y-%m-%d')high = int(row[5])low = int(row[6])dates.append(current_date)highs.append(high)lows.append(low) # 根据最高温度和最低温度绘制图形plt.style.use('seaborn')fig, ax = plt.subplots()ax.plot(dates, highs, c='red', alpha=0.5)# alpha指定颜色的透明度,0为完全透明ax.plot(dates, lows, c='blue', alpha=0.5)ax.fill_between(dates, highs, lows, facecolor='blue',alpha=0.1) # 设置图形的格式ax.set_title("2018年每日最高温度", fontproperties="SimHei", fontsize=24)ax.set_xlabel('', fontproperties="SimHei", fontsize=16)fig.autofmt_xdate()ax.set_ylabel("温度(F)", fontproperties="SimHei", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
运行结果如下:
文章图片
此外,读取CSV文件过程中,数据可能缺失,程序运行时就会报错甚至崩溃。所有需要在从CSV文件中读取值时执行错误检查代码,对可能的异常进行处理,更换数据文件为:death_valley_2018_simple.csv,该文件有缺失值。
文章图片
对代码进行修改:
death_valley_highs_lows.py
import csv# 导入csv模块from datetime import datetimeimport matplotlib.pyplot as pltfilename = 'data/death_valley_2018_simple.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 返回文件的下一行,在这便是首行,即文件头 # for index, column_header in enumerate(header_row):# 对列表调用了 enumerate()来获取每个元素的索引及其值,方便我们提取需要的数据列#print(index, column_header) # 从文件中获取日期、最高温度和最低温度dates, highs, lows = [], [], []for row in reader:current_date = datetime.strptime(row[2], '%Y-%m-%d')try:high = int(row[5])low = int(row[6])except ValueError:print(f"Missing data for {current_date}")else:dates.append(current_date)highs.append(high)lows.append(low) # 根据最高温度和最低温度绘制图形plt.style.use('seaborn')fig, ax = plt.subplots()ax.plot(dates, highs, c='red', alpha=0.5)# alpha指定颜色的透明度,0为完全透明ax.plot(dates, lows, c='blue', alpha=0.5)ax.fill_between(dates, highs, lows, facecolor='blue',alpha=0.1)# 设置图形的格式ax.set_title("2018年每日最高温度和最低气温\n美国加利福利亚死亡谷", fontproperties="SimHei", fontsize=24)ax.set_xlabel('', fontproperties="SimHei", fontsize=16)fig.autofmt_xdate()ax.set_ylabel("温度(F)", fontproperties="SimHei", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
如果现在运行 death_valley_highs_lows.py,将会发现缺失数据的日期只有一个:
Missing data for 2018-02-18 00:00:00
妥善地处理错误后,代码能够生成图形并忽略缺失数据的那天。运行结果如下:
文章图片
到此这篇关于Python读取CSV文件并进行数据可视化绘图的文章就介绍到这了,更多相关Python读取CSV内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 太厉害了,通过文档内容快速查找文件,1行Python代码实现
- Python <算法思想集结;之抽丝剥茧聊动态规划
- Python之读写Excel
- python字符串选择排序轨迹_python算法学习第——第7天(二分查找、选择排序、快速排序)...
- python学习|6.2.3 python二分查找算法及LeetCode题目(3)之二维数组 —— Search a 2D Matrix
- Python 3的教程
- 中文起,Python 字体反爬实战案例,再一点
- python常用标准库(时间模块time和datetime)
- Python常用标准库(pickle序列化和JSON序列化)
- Python实战|逻辑回归实战-股票客户流失预警模型(Python代码)