本章节内容节自《python 编程从入门到实践》第十六章,我们将从网络上下载数据,并对数据进行可视化。就可以对其进行分析甚至观察其规律和关联。

学习目标

我们将访问并可视化以下两种常见格式存储的数据:

  1. CSV

    使用 Python 模块 CSV 来处理以 CSV格式存储的天气数据,找出两个不同地区在同一个时间段内的最高气温和最低温度。然后 使用 matplotlib 根据下载的数据创建一个图表,展示两个不同地区的气温变化

  2. JSON
    使用 Python 模块 json来访问 JSON格式存储的交易收盘价格数据,并使用Pygal 绘制图形以探索价格变化的周期性

文章目录

  • 学习目标
  • 1. CSV 文件格式
    • 1.1 分析 CSV 文件头
    • 1.2 打印文件头及其位置
    • 1.3 提取并读取数据
    • 1.4 绘制气温图表
    • 1.5 模块 datetime
      • strptime() 可接受的参数:
    • 1.6 在图标中添加日期
    • 1.7 涵盖更长的时间
    • 1.8 再绘制一个数据系列
    • 1.9 给图表区域着色
    • 1.10 错误检查

1. CSV 文件格式

要在文本文件中存储数据,最简单的方式:

将数据作为一系列以逗号分隔的值(CSV)写入文件。这样的文件称为 CSV 文件。

例如:

2023-5-14,19,99,12,12,1,2,3,4,5,6,7,8,9,1.0,1.1,1.2,,,,,2.3

虽然 CSV 文件对人来说阅读起来比较麻烦,但程序可以轻松地提取并处理其中的值,这有助于加快数据分析过程。

我们首先处理少量 CSV 格式的天气数据:

这些数据存储在: sitka_weather_07-2014.csv 中,需要将其复制到程序所在的文件夹中。


如果你没有练习资料,也没关系,我已经将其上传到个人资源中,可以到我的个人主页中下载。

我发布的所有内容,即便对你无益,却都是我学到的,无需任何浏览条件。
我分享的所有文件,即便对你无用,却都是无任何下载条件的。


准备阶段的内容已经彻底完成了,下面我们开始正式进入到学习状态:

1.1 分析 CSV 文件头

csv 模块包含在 python 标准库中,可用于分析 CSV 文件中的数据行。

下面我们来查看这个文件的第一行,其中包含一系列有关数据的描述:

highs_lows.py:

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

代码片段说明:

我们先导入了 csv模块。
然后将要是有的文件 存储到一个名为 filename 的变量当中。接下来去打开这个文件,并将其结果对象存储在 f 中,然后在调用 svc.reader(),将前面存储的文件作为实参传递给它,从而创建一个与该文件相关联的阅读器。
我们将这个阅读器存储对象存储在 reader 中。

调用的 next() 函数,包含自 : reader 类。
调用 reader 内置的 next 方法并将reader 作为参数传递给它时,会返回文件中的下一行。

我们先执行程序看一下运行效果:

的确如实读出来文件的第一行内容了。

因为我们只调用了一次 next() 函数,所以只读出来了一行内容。

reader 处理文件中以逗号分隔的每一行数据,并将每项数据都作为一个元素存储到列表中。

1.2 打印文件头及其位置

为了让文件头数据更容易理解,将列表中的每个文件头及其位置打印出来:
fighs_lows.py:

这里我们需要使用一下 enumerate() 函数,用其获取每个元素的索引及其值。

import csvfilename = 'sitka_weather_07-2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)#print(header_row)for index,column_header in enumerate(header_row):print(index,column_header)

程序执行完成后是这样的:

这里删除了第一个用于打印reader.next读取文件内容信息的print语句。
然后对列表调用 enumerate() 函数,这个函数的作用:获取每个元素的索引及其值。最后 print 一下 存储文件下一行内容的 header_row 变量。

1.3 提取并读取数据

现在,我们能将数据读取出来了。现在要做的就是可以将读取数据中提取出来自己需要的。

filename = 'sitka_weather_07-2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)print(header_row)highs = []for row in reader:highs.append(row[1])print(highs)

在这里我们创建了一个名为 highs的空列表。然后遍历文件中余下的各行。阅读器对象从其停留的地方继续向下读取。且每次都会返回当前所处位置的下一行。
由于我们之前读取了文件头行,所以这里会从第二行开始读取。每次执行循环时都会将索引1处也就是第二列的数据附加到highs的末尾处。

执行效果:

下面我们使用 int() 将这些数字提取为数字,让 matplotlib 能够提取他们:

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

然后是将其可视化:

1.4 绘制气温图表

使用 matplotlib 绘制一个显示每日最高气温的图像:
highs_lows_mp:

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)print(header_row)highs = []for row in reader:high = int(row[1])highs.append(high)print(highs)#根据数据绘制图形
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.xlabel("Temperature(F)",fontsize =16)
plt.tick_params(axis='both',which='major',labelsize =16)
plt.show()

1.5 模块 datetime

我们的 sitka_weather_01-2014.csv 文件内容是这样的:


在这个文件中,第一行数据相当于所有数据的标题。
从第二行开始,才是具体的时间数据。

下面开始在图表中添加日期,使其更有用。
想读取时间数据时,获得的是一个字符串,因为我们需要想办法将字符串’2017-7-1’转换为一个表示相应日期的对象。为创建一个表示2014年7月1日的对象,可以使用 模块datetime 中的方法 strptime()。

使用示例:

from datetime import datetime as dt
first_time = dt.strptime('2014-7-1','%Y-%m-%d')
print(first_time)

其效果是这样的:

这里:我们首先创建了一个 datetime中的 datetime 类,然后调用它的 strptime() 方法,并且将包含所需日期的字符串作为第一个参数。第二个实参告诉 python 如何设置日期的格式。
.
‘%Y-’ 表示将字符串中的第一个连字符前面的部分视为四位的年份。
‘%m-’ 表示见字符串中的第二个连字符前面的部分视为月份的数字。
‘%d’ 让python 将字符串中的最后一个连字符部分视为月份中的第一天。

strptime() 可接受的参数:
实参 含义
%A 星期的名称。如Monday
%B 月份名。 如January
%m 用数字表示的月份(01~12)
%d 用数字表示月份中的一天(01~31)
%Y 四位的年份。如2023
%y 两位的年份。如23
%H 24小时制的小时数
%I 12小时制的小时数
%p am 或 pm
%M 分钟数。(00~59)
%S 秒数。(00~60)
1.6 在图标中添加日期

现在知道了如何处理 CSV文件中的日期后。就可以对气温图形进行改进了。
即提取日期和最高气温,并将它们传递给plot()。

highs_lows_mp.py:

import csv
from matplotlib import pyplot as plt
from datetime import datetime as dt#从文件中获取最高气温
filename = 'sitka_weather_07-2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)print(header_row)dates,highs = [],[]for row in reader:current_date = dt.strptime(row[0],"%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)print(highs)#根据数据绘制图形
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.xlabel("Temperature(F)",fontsize =16)
plt.tick_params(axis='both',which='major',labelsize =16)
plt.show()

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

1.7 涵盖更长的时间

现在我们要在图表上添加更多的数据。 以 一座城市的天气图为例。

先将 sitka_weather_2014.csv 文件放到本程序所在的文件夹当中,该文件包含 某城市的一整年天气数据。



放好之后,我们该开始思考怎么用代码将这些数据绘制成图了:

import csv
from matplotlib import pyplot as plt
from datetime import datetime as dt#从文件中获取最高气温
filename = 'sitka_weather_2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)print(header_row)dates,highs = [],[]for row in reader:current_date = dt.strptime(row[0],"%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)print(highs)#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形格式
plt.title("Daily high temperatures - 2014",fontsize = 24)
plt.xlabel('',fontsize=16)
fig.autofmt_xdate()
plt.xlabel("Temperature(F)",fontsize =16)
plt.tick_params(axis='both',which='major',labelsize =16)
plt.show()

其实这段代码和前面的示例别无区别。只是更改了所要读取的目标文件。其次就是还修改了绘制图表的标题。

1.8 再绘制一个数据系列

现在需要从数据文件中提取最低气温,并将它们添加到图表中。

import csv
from matplotlib import pyplot as plt
from datetime import datetime as dt#从文件中获取最高气温
filename = 'sitka_weather_2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)print(header_row)dates,highs,lows = [],[],[]for row in reader:current_date = dt.strptime(row[0],"%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)low = int(row[3])lows.append(low)print(highs)#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形格式
plt.title("Daily high temperatures - 2014",fontsize = 24)
plt.xlabel('',fontsize=16)
fig.autofmt_xdate()
plt.xlabel("Temperature(F)",fontsize =16)
plt.tick_params(axis='both',which='major',labelsize =16)
plt.show()

1.9 给图表区域着色

通过添加两个数据系列后,可以了解每天的气温范围。
下面来给这个图表最后的修饰,通过着色来呈现每天的天气范围。

fill_between()
它接受一个x值系列和两个值系列,并填充两个y值系列之间的空间:

plt.plot(dates,highs,c='red',alpha =0.5)
plt.plot(dates,lows,c='red',alpha =0.5)
plt.fill_between(dates,highs,lows,facecolor ='blue',alpha =0.1)

alpha 指定颜色的透明度。0表示完全透明,1表示完全不透明。
设置为0.5,可让红色和蓝色都看起来更浅。
.
fill_between() 说明:
这里我们传递的x值系列为 列表 dates,传递的两个y值分别为:highs,lows。实参facecolor指定了填充区域的颜色。

1.10 错误检查

这是关于 处理CSV格式的最后一小节内容。

现在程序的状态为: 我们使用 highs_lows.py中写好的逻辑来读取文件:sitka_weather_2014.csv 中的数据。

但如果,我们不想读取这个文件中的数据了。

首先要做的就是更改程序中定义好的文件的名字:
将 titak_weather_2014.csv 更改为 death_valley_2014.csv

然后运行程序,开始读取数据:

运行结果报错了,其信息显示如下

出现这个bug的原因源于:

python 无法处理其中一天的最高气温,因为它无法将空字符串(’ ') 转换为整数。

现在,我们知道了原因,但是为了确凿事实,在去看一下所读取文件的内容:

为了解决这个问题,我们可以在代码程序中加入异常处理:

import csv
from matplotlib import pyplot as plt
from datetime import datetime as dt#从文件中获取最高气温
filename = 'death_valley_2014.csv'with open(filename) as f:reader = csv.reader(f)header_row = next(reader)#print(header_row)dates,highs,lows = [],[],[]for row in reader:try:current_date = dt.strptime(row[0],"%Y-%m-%d")high = int(row[1])low = int(row[3])except ValueError:print(current_date,'missing date')else:dates.append(current_date)highs.append(high)lows.append(low)#print(highs)#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red',alpha =0.5)
plt.plot(dates,lows,c='red',alpha =0.5)
plt.fill_between(dates,highs,lows,facecolor ='blue',alpha =0.1)
#设置图形格式
plt.title("Daily high temperatures - 2014",fontsize = 24)
plt.xlabel('',fontsize=16)
fig.autofmt_xdate()
plt.xlabel("Temperature(F)",fontsize =16)
plt.tick_params(axis='both',which='major',labelsize =16)
plt.show()

添加了异常处理之后,我们的程序又能正常运行了:

关于如何使用 python 下载CSV格式数据相关推荐

  1. csv加header python_用python处理csv格式文件

    用python处理csv格式文件 在各种平台上获取数据时,我们常常获得的是csv格式的文件.csv格式是一种逗号分隔值的文件格式,它并不是非常reader-friendly.所幸,python标准库中 ...

  2. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  3. csv格式清洗与转换python_实例详解Python中 CSV格式清洗与转换

    Python中 CSV格式清洗与转换的实例代码 题目: CSV格式清洗与转换 描述 附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬ ...

  4. python 读取csv文件转成字符串,python实现csv格式文件转为asc格式文件的方法

    一.背景描述 csv格式文件是一种类似于excel的文件格式 asc格式文件是一种可以用text打开的文本文件 csv转asc本来可以用arcgis顺利完成,但由于csv数据量太大(744万行),ar ...

  5. MongoDB导出csv格式数据

    第一步: 在cmd中进入mongodb的安装目录下的bin文件夹 C:\Users\zzz>cd C:\Program Files\MongoDB\Server\4.0\bin 第二步: 从Mo ...

  6. python操作json_Python学习之利用Python处理JSON格式数据

    最近在研究利用zabbix的自动发现功能来监控一台服务器上的多个Redis端口.网上有篇文章写个Python程序来发现Redis端口并显示成JSON格式.这里就学习下Python如何处理JSON格式数 ...

  7. xml python gb2312_使用Python处理XML格式数据的方法介绍

    本文实例讲述了Python处理XML格式数据的方法.分享给大家供大家参考,具体如下: 这里的操作是基于Python3平台. 在使用Python处理XML的问题上,首先遇到的是编码问题. Python并 ...

  8. mysql数据导入导出 CSV格式_MySQL中导入导出CSV格式数据

    原标题:MySQL中导入导出CSV格式数据 预备阅读:MySQL中的主键问题和赋权限问题 今天来讲一下在MySQL中导入和导出CSV格式数据的操作. CSV格式数据 逗号分隔值(Comma-Separ ...

  9. 使用python将csv文件数据可视化

    简介 本文介绍如何通过python将csv文件数据简单地可视化. 使用到的文件 历年台风数量统计数据 代码 import csv import math import numpy as np impo ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5 标签 guestbookPage
  2. mysql order by 多字段排序
  3. 迅雷离线工具 小众雷友 测试版
  4. jstl java_JSTL-Java-Baby-51CTO博客
  5. 洛谷 P1202 模拟 - 黑色星期五 Friday the Thirteenth
  6. 使用对象存储应对勒索病毒
  7. ROS2学习(十二).ROS概念 - RQt工具的使用
  8. 服务器ssr进程启动怎么运行,要SSR? NUXT项目从初始化到部署服务器流程全记录
  9. 低秩矩阵分解 matlab,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
  10. 南阳32--组合数(Dfs)
  11. SQL 读取不连续的第30到40之间的数据
  12. linux ipc 信号量,linux ipc信号量
  13. 《实用软件工程》复习知识点
  14. 数字孪生智慧监狱三维可视化系统建设方案
  15. 鼠标失灵,但鼠标和USB接口都是好的的情况。
  16. substring用法,between...and用法 trim标签的用法 模糊查询
  17. [翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
  18. 免费快速提升网站流量之方法大结合(转摘有修改)
  19. OpenLayer仿天地图多时相
  20. 国外访问学者申请政策解析

热门文章

  1. 第09课 图像的算术运算
  2. 椭圆曲线介绍(一):实数上面的椭圆曲线
  3. 学习探索-3D分割图片效果
  4. 游戏音乐重要的是让玩家产生共鸣
  5. 会声会影怎么把视频和音频合起来 会声会影下面的轨道不见了
  6. Android OpenGL ES 学习(九) – 坐标系统和实现3D效果
  7. vuex mutations参数传递
  8. MAC 10.14 安装理光 3501
  9. 想知道图片编辑修改文字怎么操作吗
  10. JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调录像回放视频PS码流并解析预览图像