Python学习之路日志—利用matplotlib开发数据可视化项目(3)
2020-09-03 00:22
1301 查看
在今晚的学习中,我将学着获取数据,并对这些数据进行可视化。
3.1 CSV文件:
要在文本文件中存储数据,最简单的方式是将数据作为一系列以逗号分隔的值 (CSV)写入文件。这样的文件称为CSV文件。
3.1.1 分析CSV文件头:
csv模块包含在Python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴趣的值。下面先来查看这个文件的第一行,其中包含一系列有关数据的描述:
# -*- coding:utf-8 -*- 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后,我们将要使用的文件的名称存储在
filename中。接下来,我们打开这个文件,并将结果文件对象存储在
f中(见第6行)。然后,我们调用
csv.reader(), 并将前面存储的文件对象作为实参传递给它,从而创建一个与该文件相关联的阅读器对象(见第7行)。我们将这个阅读器对象存储在
reader中。 模块
csv包含函数
next(),调用它并将阅读器对象传递给它时,它将返回文件中的下一行。在上头的代码中,我们只调用了
next()一次,因此得到的是文件的第一行,其中包含文件头。我们将返回的数据存储在
header_row中。正如上图看到的,
header_row包含与天气相关的文件头,指出了每行都包含哪些数据。
3.1.2 打印文件头及其位置:
为让文件头数据更容易理解,可以将列表中的每个文件头及其位置打印出来:
# -*- coding:utf-8 -*- import csv filename = 'sitka_weather_07-2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) for index, column_header in enumerate(header_row): print(index, column_header)
我们对列表调用了
enumerate()(见第10行)来获取每个元素的索引及其值。输出如上,其中指出了每个文件头的索引。
3.1.3 提取并读取数据:
知道需要哪些列中的数据后,我们可以试着来读取一些数据。首先读取每天的最高气温:
# -*- coding:utf-8 -*- import csv # 从文件中获取最高气温 filename = 'sitka_weather_07-2014.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) highs =[] for row in reader: highs.append(row[1]) print(highs)
我们创建了一个名为
highs的空列表(见第11行),再遍历文件中余下的各行(见第13行处)。阅读器对象从其停留的地方继续往下读取CSV文件,每次都自动返回当前所处位置的下一行。由于我们已经读取了文件头行,这个循环将从第二行开始——从这行开始包含的是实际数据。每次执行该循环时,我们都将索引的数据附加到
highs末尾(见第14行)。
下面使用
int()将这些字符串转换为数字,让
matplotlib能够读取它们:
# -*- coding:utf-8 -*- import csv # 从文件中获取最高气温 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)
在第14行处,我们将表示气温的字符串转换成了数字,再将其附加到列表末尾。这样,最终的列表将包含以数字表示的每日最高气温。
3.1.4 绘制气温图表:
为可视化这些气温数据,我们首先使用
matplotlib创建一个显示每日最高气温的简单图形,如下所示:
# -*- coding:utf-8 -*- import csv from matplotlib import pyplot as plt # 从文件中获取最高气温 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) # 根据数据绘制图形 fig = plt.figure(dpi=127, figsize=(10, 6)) plt.plot(highs, c='red') # 设置图形的格式 plt.title('Daily high. temperature, July 2014', fontsize=23) plt.xlabel('', fontsize=17) plt.ylabel('Temperature(F)', fontsize=17) plt.tick_params(axis='both', which='major', labelsize=17) plt.show()
我们将最高气温列表传给
plot()(见第23行),并传递
c='red'以便将数据点绘制为红色。接下来,我们设置了一些其他的格式,如字体大小和标签(见第26行),鉴于我们还没有添加日期,因此没有给x轴添加标签,但
plt.xlabel()确实修改了字体大小,让标签更容易看清。下图显示了绘制的图表:一个简单的折线图:
3.1.5 模块datetime:
下面我们在图表中添加日期,使其更有用。读取该数据时,获得的是一个字符串,因为我们需要想办法将字符串’2014-7-1’ 转换为一个表示相应日期的对象。为创建一个表示2014年7月1日的对象,可使用模块
datetime中的方法
strptime()。我们先在终端会话中看看
strptime()的工作原理:
我们首先导入了模块
datetime中的
datetime类,然后调用方法
strptime(),并将包含所需日期的字符串作为第一个实参。第二个实参告诉Python如何设置日期的格式。在这个示例中,
'%Y-'让Python将字符串中第一个连字符前面的部分视为四位的年份;
'%m-'让Python将第二个连字符前面的部分视为表示月份的数字;而
'%d'让Python将字符串的最后一部分视为月份中的一天(1~31)。
3.1.6 在图表中添加日期:
# -*- coding:utf-8 -*- import csv from matplotlib import 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) print(highs) # 根据数据绘制图形 fig = plt.figure(dpi=127, figsize=(10, 6)) plt.plot(dates,highs, c='red') # 设置图形的格式 plt.title('Daily high. temperature, July 2014', fontsize=23) plt.xlabel('', fontsize=17) fig.autofmt_xdate() plt.ylabel('Temperature(F)', fontsize=17) plt.tick_params(axis='both', which='major', labelsize=17) plt.show()
我们创建了两个空列表,用于存储从文件中提取的日期和最高气温(见第14行)。然后,我们将包含日期信息的数据(
row[0])转换为
datetime对象(见第17行),并将其附加到列表
dates末尾。在第27行处,我们将日期和最高气温值传递给
plot()。在第32行处,我们调用了
fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠。下图显示了改进后的图表:
相关文章推荐
- python小常识
- 100天精刷LeetCode-Day6:Linked List Cycle2问题(附详细思路和python题解)
- 100天精刷LeetCode-Day5:141 Linked List Cycle问题(附详细思路和python题解)
- Python学习之路日志—利用matplotlib开发数据可视化项目(2)
- Python学习的收费标准是多少?Python学习
- Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略
- 43、最长公共前缀-Python-LeetCode-14
- leetcode_486. 预测赢家 python3
- Python学习:第23课-文件读写和异常处理(Python学习路线图+学习视频教程+Python就业面试题)
- Python压缩zip文件
- pythonl列表(list)
- 用python自动发送邮件
- 淘宝用户行为分析+python可视化
- Python小白零基础入门 —— 列表 149e 和元组
- Python小白零基础入门 —— 集合(set)
- 成功解决ImportError: Something is wrong with the numpy installation. While importing we detected an olde
- Python课堂笔记-第五讲(条件控制语句)
- Python学习之路日志—利用matplotlib开发数据可视化项目(1)
- python连接mysql有哪些方法
- leetcode_214. 最短回文串 python3