Logistic's Blog

生命不息,折腾不止!

Python Section3 Note

文章最后修改于:2020-2-8 06:40:31

Python Section3:数据可视化

  • 数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。
  • 漂亮地呈现数据关乎的并非仅仅是漂亮的图片。以引人注目的简洁方式呈现数据,让观看者能够明白其含义,发现数据集中原本未意识到的规律和意义。

chap15_generate data

  • 数据科学家使用Python编写了一系列令人印象深刻的可视化和分析工具,其中很多也可供你使用。最流行的工具之一是matplotlib,它是一个数学绘图库,我们将使用它来制作简单的图表。
  • 我们还将使用Pygal包,它用于生成可缩放的矢量图形文件。对于需要在尺寸不同的屏幕上显示的图表,这很有用,因为它们将自动缩放,以适合观看者的屏幕。如果你打算以在线方式使用图表,请考虑使用Pygal来生成它们,这样它们在任何设备上显示时都会很美观。

1、matplotlib安装及示例画廊

1) matplotlib安装

  • 访问https://pypi.python.org/pypi/matplotlib/, 点击 下载档案,在此处下载与你使用的Python版本匹配的 .whl文件。

  • 将这个 .whl文件复制到你的项目文件夹,打开PowerShell命令窗口,并切换到该项目文件夹,再使用pip来安装matplotlib:

2)matplotlib测试

  • 首先使用命令python启动一个终端会话,再导入matplotlib,如果没有出现任何错误消息, 就说明安装成功。

3)matplotlib示例画廊

2、绘制折线图

[1] 先使用matplotlib绘制一个简单的折线图

mpl_squares.py–version1

效果:

《Python Section3 Note》

说明:

  • 首先导入了模块pyplot,并给它指定了别名plt,以免反复输入pyplot。在线示例大都这样做,因此这里也这样做。模块pyplot包含很多用于生成图表的函数。
  • 创建了一个列表,在其中存储了前述平方数,再将这个列表传递给函数plot(),这个函数尝试根据这些数字绘制出有意义的图形。plt.show()打开matplotlib查看器,并显示绘制的图形。
  • 在IDEA里导出生成的图形:右键生成的图形(右侧列表里的)—— Save as File

[2] 下面通过一些定制来改善这个图形的可读性

mpl_squares.py–version2

效果:

《Python Section3 Note》

说明:

  • 函数tick_params()设置刻度的样式,其中指定的实参将影响x轴和y轴上的刻度(axes=’both’),并将刻度标记的字号设置为14(labelsize=14)

[3] 图形更容易阅读后,我们发现没有正确地绘制数据:折线图的终点指出4.0的平方为25!下面来修复这个问题。

mpl_squares.py–version3

效果:

《Python Section3 Note》

说明:

  • 当你向plot()提供一系列数字时,它假设第一个数据点对应的x坐标值为0,但我们的第一个点对应的x值为1。为改变这种默认行为,我们可以给plot()同时提供输入值和输出值。

3、绘制散点图

[1] 要绘制一系列的点,可向scatter()传递两个分别包含x值和y值的列表。

scatter_squares.py–version1

效果:

《Python Section3 Note》

说明:

  • plt.scatter(x_values, y_values, s=10)里的s控制的是点的大小

[2] 自动计算数据并删除数据点的轮廓

scatter_squares.py–version2

效果:

《Python Section3 Note》

说明:

  • matplotlib默认为蓝色点和黑色轮廓,在散点图包含的数据点不多时效果很好。但绘制很多点时,黑色轮廓可能会粘连在一起。要删除数据点的轮廓,可在调用scatter()时传递实参edgecolor=’none’

[3] 自定义颜色

scatter_squares.py–version3

效果:

《Python Section3 Note》

[4] 颜色映射从起始颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律。

scatter_squares.py–version4

效果:

《Python Section3 Note》

说明:

  • 要了解pyplot中所有的颜色映射,访问:matplotlib色彩图参考
  • plt.savefig()第一个实参指定保存目录及文件名,第二个实参指定将图表多余的空白区域裁剪掉,如果要保留图表周围多余的空白区域,可省略这个实参。

4、随机漫步

  • 随机漫步每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。
  • 在自然界、物理学、生物学、化学和经济领域,随机漫步都有其实际用途。例如,漂浮在水滴上的花粉因不断受到水分子的挤压而在水面上移动。水滴中的分子运动是随机的,因此花粉在水面上的运动路径犹如随机漫步。稍后将编写的代码模拟了现实世界的很多情形。

为模拟随机漫步,我们将创建一个名为RandomWalk的类,它随机地选择前进方向。

random_walk.py

[1] 绘制一次随机漫步图

rw_visual.py–version1

效果:

《Python Section3 Note》

[2] 模拟多次随机漫步

rw_visual.py–version2

说明:

  • 要在不多次运行程序的情况下使用前面的代码模拟多次随机漫步,一种方法是将version1的代码放在一个while循环中。

[3] 设置随机漫步图的样式

1)给点着色:使用颜色映射来指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让它们的颜色更明显。为根据漫步中各点的先后顺序进行着色,我们传递参数c,并将其设置为一个列表,其中包含各点的先后顺序。
2)重新绘制起点和终点:让起点和终点变得更大,并显示为不同的颜色,以突出它们。
3)隐藏坐标轴:使用了函数plt.axes(),来将每条坐标轴的可见性都设置为False。
4)增加点数:创建RandomWalk实例时增大num_points的值。
5)调整尺寸以适合屏幕:函数figure()用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。

rw_visual.py–version3

说明:

  • Python假定屏幕分辨率为80像素/英寸,如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以有效地利用可用的屏幕空间,如: plt.figure(dpi=128, figsize=(10, 6))

效果:

《Python Section3 Note》

5、Pygal安装及示例画廊

1)Pygal安装

在PowerShell命令窗口输入: python -m pip install --user pygal

2)Pygal示例画廊

  • 要了解使用Pygal可创建什么样的图表,请查看图表类型画廊:访问http://www.pygal.org/,单击Documentation(文献资料),再单击Chart types(图表类型),每个示例都包含源代码,让你知道这些图表是如何生成的。

6、使用Pygal模拟掷骰子

创建Die类模拟掷一个骰子:

die.py

创建掷骰子实例、统计结果,并使用直方图对结果进行可视化

die_visual.py

说明:

  • Pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何条形,将看到与之相关联的数据。在同一个图表中绘制多个数据集时,这项功能显得特别有用。

效果:

《Python Section3 Note》

chap16_download data

  • 我们将访问并可视化以两种常见格式存储的数据:CSV和JSON。
  • 使用Python模块csv来处理以CSV(逗号分隔的值)格式存储的天气数据,找出两个不同地区在一段时间内的最高温度和最低温度。然后,我们将使用matplotlib根据下载的数据创建一个图表,展示两个不同地区的气温变化:阿拉斯加锡特卡和加利福尼亚死亡谷。
  • 在本章的后面,我们将使用模块json来访问以JSON格式存储的人口数据,并使用Pygal绘制一幅按国别划分的人口地图。

1、CSV文件格式——制作阿拉斯加锡特卡和加利福尼亚死亡谷气温图

  • CSV文件格式:要在文本文件中存储数据,最简单的方式是将数据作为一系列以逗号分隔的值(CSV)写入文件
  • 这个项目使用的天气数据是从http://www.wunderground.com/history/下载而来的。

[1] 制作以月为单位的锡特卡最高气温图

highs_lows_1.py

说明:

  • 使用模块datetime对图表添加日期:
    • 首先导入了模块datetime中的datetime类,然后调用方法strptime(),并将包含所需日期的字符串作为第一个实参。
    • 第二个实参告诉Python如何设置日期的格式。’%Y-‘ 将字符串中第一个连字符前面的部分视为四位的年份;’%m-‘将第二个连字符前面的部分视为表示月份的数字;而’%d’将字符串的最后一部分视为月份中的一天

效果:

《Python Section3 Note》

[2] 制作以年为单位的锡特卡气温图

highs_lows_2.py

效果:

《Python Section3 Note》

[3] 制作以年为单位的死亡谷气温图(数据缺失,需要进行错误检查)

  • 我们应该能够使用有关任何地方的天气数据来运行代码,但有些气象站会偶尔出现故障,未能收集部分或全部其应该收集的数据。缺失数据可能会引发异常,如果不妥善地处理,还可能导致程序崩溃。

highs_lows_3.py

效果:

《Python Section3 Note》

2、JSON格式——制作世界人口地图

  • 下载JSON格式的人口数据,并使用json模块来处理它们。
  • Pygal提供了一个适合初学者使用的地图创建工具,你将使用它来对人口数据进行可视化,以探索全球人口的分布情况。
  • DataHub提供了大量可以免费使用的数据集,这个项目所用的“全球大部分国家1960~2016年的人口数据”就来自于此。【注意:要用英文搜索】

[1] 获取两个字母的国别码

  • Pygal中的地图制作工具要求数据为特定的格式:用国别码表示国家,以及用数字表示人口数量。
  • population_data.json中包含的是三个字母的国别码,但Pygal使用两个字母的国别码。因此我们需要根据国家名获取两个字母的国别码。
  • Pygal使用的国别码存储在模块pygal_maps_world.i18n中。字典COUNTRIES包含的键和值分别为两个字母的国别码和国家名。要查看这些国别码,可从模块pygal_maps_world.i18n中导入这个字典,并打印其键和值。

说明:

countries.py——Step1

country_codes.py——Step2

[2] 提取相关数据并绘制世界人口地图

world_population.py

说明:

《Python编程:从入门到实践》书中用的旧技术文档,书中的:

会报错:

应使用以下命令安装地图插件:

然后将其用作:

效果:

《Python Section3 Note》

chap17_use API

  • 使用Web应用编程接口(API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化。由于这样编写的程序始终使用最新的数据来生成可视化,因此即便数据瞬息万变,它呈现的信息也都是最新的。
  • 本章我们将编写一个程序,它自动下载GitHub上星级最高的Python项目的信息,并对这些信息进行可视化。

1、使用Web API绘制最受欢迎Python仓库的交互式条形图

[1] 使用Web API

  • Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求称为API调用。
  • 请求的数据将以易于处理的格式(如JSON或CSV)返回。依赖于外部数据源的大多数应用程序都依赖于API调用, 如集成社交媒体网站的应用程序。

1)GitHub的API让你能够通过API调用来请求各种信息。要知道API调用是什么样的,请在浏览器的地址栏中输入https://api.github.com/search/repositories?q=language:python&sort=stars

说明:

  • 这个调用返回GitHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息。下面来仔细研究这个调用。第一部分 https://api.github.com/将请求发送到GitHub网站中响应API调用的部分;接下来的一部分 search/repositories让API搜索GitHub上的所有仓库。
  • repositories后面的问号指出我们要传递一个实参。q表示查询,而等号让我们能够开始指定查询 q=。通过使用 language:python,我们指出只想获取主要语言为Python的仓库的信息。最后一部分 &sort=stars指定将项目按其获得的星级进行排序。

下面显示了响应的前几行。从响应可知,该URL并不适合人工输入。

说明:

  • 从第二行输出可知,此时GitHub总共有4601377个Python项目。”incomplete_results”的值为true,说明GitHub无法全面处理该API。接下来的列表中显示了返回的”items”,其中包含GitHub上最受欢迎的Python项目的详细信息。

2)大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉你是否接近了GitHub的限制,请在浏览器中输入https://api.github.com/rate_limit,你将看到类似于下面的响应:

说明:

  • 我们关心的信息是搜索API的速率限制(即”search”处),极限为每分钟10个请求,而在当前这一分钟内,我们还可执行10个请求,reset值指的是配额将重置的新纪元时间(1970年1月1日午夜后多少秒)。到达极限后,你必须等待配额重置。
  • 很多API都要求你注册获得API密钥后才能执行API调用。目前GitHub没有这样的要求,但获得API密钥后,配额将高得多。

3)requests包让Python程序能够轻松地向网站请求信息以及检查返回的响应。

[2] 提取最受欢迎的Python仓库相关数据

python_repos.py

[3] 使用Pygal可视化最受欢迎的Python仓库

创建一个交互式条形图:条形的高度表示项目获得了多少颗星。单击条形将带你进入项目在GitHub上的主页。

python_repos_pygal.py

效果:

《Python Section3 Note》

点赞

发表评论

电子邮件地址不会被公开。

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00