Python应用实例(二)数据可视化(四)

数据可视化(四)下载数据

  • 1.CSV文件格式
    • 1.1 分析CSV文件头‘
    • 1.2 打印文件头及其位置
    • 1.3 提取并读取数据
    • 1.4 绘制温度图表
    • 1.5 在图表中添加日期

从网上下载数据,并对其进行可视化。网上的数据多得令人难以置信,大多未经仔细检查。如果能够对这些数据进行分析,就能发现别人没有发现的规律和关联。

访问并可视化的数据以两种常见格式存储:CSV和JSON。我们将使用Python模块csv来处理以CSV格式存储的天气数据,找出两个地区在一段时间内的最高温度和最低温度。然后,使用Matplotlib根据下载的数据创建一个图表,展示两个不同地区的温度变化:阿拉斯加州锡特卡和加利福尼亚州死亡谷。然后,使用模块json访问以JSON格式存储的地震数据,并使用Plotly绘制一幅散点图,展示这些地震的位置和震级。

1.CSV文件格式

要在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值(comma-separated values)写入文件。这样的文件称为CSV文件。例如,下面是一行CSV格式的天气数据:

"USW00025333","SITKA AIRPORT, AK US","2018-01-01","0.45",,"48","38"

这是阿拉斯加州锡特卡2018年1月1日的天气数据,其中包含当天的最高温度和最低温度,还有众多其他的数据。CSV文件对人来说阅读起来比较麻烦,但程序可轻松提取并处理其中的值,有助于加快数据分析过程。

我们将首先处理少量CSV格式的北京天气数据,将文件beijing_weather_07-2018_simple.csv复制到存储本章程序的文件夹中。

1.1 分析CSV文件头‘

csv模块包含在Python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴趣的值。先来查看这个文件的第一行,其中的一系列文件头指出了后续各行包含的是什么样的信息:sitka_highs.py

  import csvfilename = 'data/sitka_weather_07-2018_simple.csv'with open(filename) as f:
❷     reader = csv.reader(f)
❸     header_row = next(reader)print(header_row)

导入模块csv后,将要使用的文件的名称赋给filename。接下来,打开这个文件,并将返回的文件对象赋给f(见❶)。然后,调用csv.reader()并将前面存储的文件对象作为实参传递给它,从而创建一个与该文件相关联的阅读器对象(见❷)。这个阅读器对象被赋给了reader。

模块csv包含函数next(),调用它并传入阅读器对象时,它将返回文件中的下一行。在上述代码中,只调用了next()一次,因此得到的是文件的第一行,其中包含文件头(见❸)。将返回的数据存储到header_row中。如你所见,header_row包含与天气相关的文件头,指出了每行都包含哪些数据:

['STATION', 'NAME', 'DATE', 'PRCP', 'TAVG', 'TMAX', 'TMIN']

reader处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。文件头STATION表示记录数据的气象站的编码。这个文件头的位置表明,每行的第一个值都是气象站编码。文件头NAME指出每行的第二个值都是记录数据的气象站的名称。其他文件头则指出记录了哪些信息。当前,我们最关心的是日期(DATE)、最高温度(TMAX)和最低温度(TMIN)。这是一个简单的数据集,只包含降水量以及与温度相关的数据。你自己下载天气数据时,可选择涵盖众多测量值,如风速、风向以及详细的降水量数据。

1.2 打印文件头及其位置

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

  --snip--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()(见❶)来获取每个元素的索引及其值。(请注意,我们删除了代码行print(header_row),转而显示这个更详细的版本。)输出如下,指出了每个文件头的索引:

0 STATION
1 NAME
2 DATE
3 PRCP
4 TAVG
5 TMAX
6 TMIN

1.3 提取并读取数据

知道需要哪些列中的数据后,我们来读取一些数据。首先,读取每天的最高温度:sitka_highs.py

  --snip--with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 从文件中获取最高温度。
❶     highs = []for row in reader:
❸         high = int(row[5])highs.append(high)print(highs)

创建一个名为highs的空列表(见❶),再遍历文件中余下的各行(见❷)。阅读器对象从其停留的地方继续往下读取CSV文件,每次都自动返回当前所处位置的下一行。由于已经读取了文件头行,这个循环将从第二行开始——从这行开始包含的是实际数据。每次执行循环时,都将索引5处(TMAX列)的数据附加到highs末尾(见❸)。在文件中,这项数据是以字符串格式存储的,因此在附加到highs末尾前,使用函数int()将其转换为数值格式,以便使用。

highs现在存储的数据如下:

[62, 58, 70, 70, 67, 59, 58, 62, 66, 59, 56, 63, 65, 58, 56, 59, 64, 60, 60,61, 65, 65, 63, 59, 64, 65, 68, 66, 64, 67, 65]

提取每天的最高温度并将其存储到列表中之后,就可以可视化这些数据了。

1.4 绘制温度图表

为可视化这些温度数据,首先使用Matplotlib创建一个显示每日最高温度的简单图形,如下所示:sitka_highs.py

  import csvimport matplotlib.pyplot as pltfilename = 'data/sitka_weather_07-2018_simple.csv'with open(filename) as f:--_snip_—# 根据最高温度绘制图形。plt.style.use('seaborn')fig, ax = plt.subplots()
❶ ax.plot(highs, c='red')# 设置图形的格式。
❷ ax.set_title("2018年7月每日最高温度", fontsize=24)
❸ ax.set_xlabel('', fontsize=16)ax.set_ylabel("温度 (F)", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()

将最高温度列表传给plot()(见❶),并传递c='red’以便将数据点绘制为红色。(这里使用红色显示最高温度,用蓝色显示最低温度。)接下来,设置了一些其他的格式,如名称和字号(见❷),这些都在第15章介绍过。鉴于还没有添加日期,因此没有给[插图]轴添加标签,但ax.set_xlabel()确实修改了字号,让默认标签更容易看清❸。图显示了绘制的图表:一个简单的折线图,显示了阿拉斯加州锡特卡2018年7月的每日最高温度。

在这里插入图片描述

1.5 在图表中添加日期

现在,可以通过提取日期和最高温度并将其传递给plot(),对温度图形进行改进,如下所示:sitka_highs.py

  import csvfrom 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)# 从文件中获取日期和最高温度。
❶     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月每日最高温度", fontsize=24)ax.set_xlabel('', fontsize=16)
❹ fig.autofmt_xdate()ax.set_ylabel("温度 (F)", fontsize=16)ax.tick_params(axis='both', which='major', labelsize=16)plt.show()

我们创建了两个空列表,用于存储从文件中提取的日期和最高温度(见❶)。然后,将包含日期信息的数据(row[2])转换为datetime对象(见❷),并将其附加到列表dates末尾。在❸处,将日期和最高温度值传递给plot()。在❹处,调用fig.autofmt_xdate()来绘制倾斜的日期标签,以免其彼此重叠。图显示了改进后的图表。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式day03

01gradle极速安装与配置入门 下载6.8.2版本,配置环境变量 配置镜像仓库 给gradle安装目录下init.d文件夹,放一个init.gradle文件,内容如下: gradle.projectsLoaded {rootProject.allprojects {buildscript {repositories {def JCENTER_URL…

西贝柳斯Sibelius2023旗舰版曲谱大师必备音乐软件

乐谱太复杂,打起来太费时间?革命性的省时功能,如磁性布局和动态分谱,能够快速创作复杂的乐谱。音色库太简陋,找起来麻烦?收藏丰富的音色库供您直接使用,涵盖最广泛的专业级乐器,支持…

TortoiseGit 入门指南08:浏览引用以及在引用间切换

在上一节 创建分支 中,我们学会了在分支上开发新功能,那么随之而来的问题是:如何查看项目又多少分支?如何再切换到主分支?这节来解决这些问题。 在回答之前,需要先了解一个 Git 术语:引用&…

docker-compose安装redis高可用哨兵集群(一主二从三哨兵)

以redis 7.0为例子 直接上代码 docker-compose.yaml version: 3.3 services:master:image: redis:7.0container_name: redis-master#restart: alwayscommand: redis-server --port 6379 --requirepass root --appendonly yes --masterauth root --replica-announce-ip 192.1…

duilib绝对定位与相对定位

文章目录 前言1、绝对位置(floattrue)2、窗口3、布局及控件4、相对位置(floatfalse)5、窗口6、布局与控件7、嵌套在布局与控件之中的布局与控件 前言 duilib中窗口,布局,控件等在屏幕上的显示位置都是按照…

mpVue 微信小程序基于vant-weapp 组件的二次封装TForm 表单组件(修改源码插槽使用)

一、前言 1、mpVue微信小程序不支持动态组件&#xff08;<component> &#xff09; 2、mpVue微信小程序不支持动态属性及事件穿透&#xff08;$attrs和$listeners&#xff09; 3、mpVue微信小程序不支持render函数 二、最终效果 三、配置参数&#xff08;Attributes&…

WEB:lottery

背景知识 dirsearch扫描 题目 原题目应该使用dirsearch扫描发现git泄露然后使用Githack复原的但是攻防世界这边直接把源码给了我们 下载附件可得到 打开文件后进行代码审计 function buy($req){require_registered();require_min_money(2);$money $_SESSION[money];$numbers…

VBA命令及语法列表之字典Dictionaries相关

【分享成果&#xff0c;随喜正能量】真正的修佛之人。首先&#xff0c;得明白自己的来处和归宿&#xff0c;懂得敬畏自己的生命和他人的生命&#xff0c;尽其所能释放善意。学会悲天悯人&#xff0c;渡人的同时渡己&#xff0c;始终走在止于至善的路上。真正的慈悲为怀&#xf…

【unity细节】为什么发射炮弹实例化出来了却无法移动

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐为什么发射炮弹实例化出来了却无法移动⭐ 文章目录 ⭐为什么发射炮弹实例化出来…

Pytest+Jenkins+Allure的接口自动化测试

目录 生成Allure 两种形式 一 项目内直接生成不依赖Jenkins 1.先安装好allure 将allure\bin配置到环境变量中 cmd 命令行输入&#xff1a;allure 校验是否安装成功 2. 将json文件生成html文件 执行 allure generate report/ -o report/html其中的report/ 为生成的json路径&a…

带你了解储能行业PCB的设计与应用

高速先生成员---黄刚 高速先生有接触过储能相关的互连设计吗&#xff1f; 突然被粉丝一问&#xff0c;高速先生在大脑里面不停的搜索&#xff0c;的确储能方面的PCB设计板子很少有进来高速先生团队这边的&#xff0c;难道我们真的没怎么做过&#xff1f;这个问题高速先生先不回…

Vue+Ts+Echart使用以及后台接口对接逻辑【实战】

官网传送门 一.echarts介绍 是一个js插件 性能好可流畅远行PC和移动设备 兼容主流浏览器 提供很多图标,用户且可自行修改。 2.使用npm安装 npm install echarts二.echarts基本使用、自定义图例、选择7天日期查询图表数据内容 获取本地时间以及当前时间前几天后几天 /*** 获…