east4ming / data_visualization_study

学习数据可视化案例.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

data_visualization_study

学习数据可视化案例. 包括:

  • matplotlib
  • Pygal
  • json
  • datetime
  • csv处理
  • API
  • requests

生成数据

数据可视化: 通过可视化表示来探索数据, 它与数据挖掘紧密相关, 数据挖掘指的是使用代码来探索数据集的规律和关联. 漂亮的呈现数据关乎的并非仅仅是漂亮的图片. 以引人注目的简洁方式呈现数据, 然观看者能够明白其中含义, 发现数据集中原本未意识到的规律和意义. 数据可视化最流行的工具之一就是matplotlib, 它是一个数学绘图库, 用它来制作简单的图表, 如折线图和散点图. 然后, 基于随机漫步概念, 根据一系列决策生成图表.

使用Pygal包, 它专注于生成适合在数字设备上显示的图表. 通过Pygal, 可在用户与图表交互时突出元素及调整其大小, 还可轻松调整整个图表尺寸, 使其适合在微型智能手表或巨型显示器上显示. 我们使用Pygal以各种方式探索掷色子的结果.

安装 matplotlib

matplotlib 画廊

https://matplotlib.org/gallery/index.html

绘制简单折线图

绘制简单折线图, 再对其进行定制, 以实现信息更丰富的数据可视化. 使用平方数序列1/4/9/16/25来绘制图表.

mpl_squares.py

  • 导入matplotlib.pyplotplt
  • plt.plot()根据数据绘制有意义的图形
  • plt.show()打开 matplotlib 查看器, 并显示绘制的图形.

修改标签文字和线条粗细

上图: 标签文字太小, 线条太细. 通过一些定制来改善图形可读性.

mpl_squares.py

校正图形

发现没有正确地绘制数据: 4的平方时25. 下面修复该问题. 当向plot()提供数字时, 它假设第一个数据点对应的x坐标值为0, 但我们的应该为1. 这种情况, 可以给plot()提供输入值和输出值.

mpl_squares.py

使用 scatter() 绘制散点图并设置其样式

有时候, 需要绘制散点图并设置各个数据点的样式. 要绘制单个点, 可使用函数scatter(), 并向它传递一对x和y坐标, 它将在指定位置绘制一个点.

scatter_squares.py

使用 scatter() 绘制一系列点

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

scatter_squares.py

自动计算数据

绘制1000个点的代码, 让Python自动循环计算.

scatter_squares.py

删除数据点的轮廓

matplotlib 允许你给散点图的个个点指定颜色. 默认为:蓝色点和黑色轮廓. 绘制很多点时, 黑色轮廓会粘连在一起. 要删除数据点的轮廓, 可以在调用 scatter() 时传递实参edgecolor='none'

2.0 之后的版本, edgecolor默认为'none'

自定义颜色

修改数据点颜色, 可以向scatter()传递参数c, 并将其设置为要使用的颜色名称. 还可以使用RGB颜色自定义颜色. 要指定自定义颜色, 向参数c传递一个元组, 包含3个0-1的小数值, 分别表示红色, 绿色, 蓝色分量. 值越接近0, 指定颜色越深, 值越接近1, 指定颜色越浅.

使用颜色映射

*颜色映射(colormap)*是一系列颜色, 从起始颜色渐变到结束颜色. 在可视化中, 颜色映射用于突出数据的规律.

scatter_squares.py

要了解pyplot中的所有颜色映射, 访问官网, 单击Examples, 向下滚动到Color Examples, 再单击colormaps_reference.

自动保存图表

要让程序自动将图表保存到文件中, 可将对plt.show()的调用替换为对plt.savafig()的调用.

随机漫步

使用Python来生成随机漫步数据, 再使用matplotlib 将数据呈现出来. 随机漫步: 这样行走的路径, 每次行走完全是随机的, 没有明确的方向, 结果是由一系列随机决策决定的. 在自然界/物理学/生物学/化学/经济领域, 随机漫步都有实际用途. 如: 漂浮在水滴上的花粉因不断受水分子的挤压而在水面上移动. 水滴中的分子运动是随机的, 因此 花粉在水面上的运动路径犹如随机漫步.

创建 RandomWalk() 类

为做出随机决策, 将所有可能的选择都存储在一个列表中, 并在每次做决策时都使用choice()来决定使用哪种选择. 将随机漫步包含的默认点数设置为5000.

random_walk.py

选择方向

random_walk.py

建立一个循环, 该循环不断运行, 直到漫步包含所需数量的点. 方法决策:

  • 向左还是向右? 走多远?
  • 向上还是向下? 走多远?

使用choice([-1, 1])指定方向, 使用choice([0, 1, 2, 3, 4])`指定走多远. (通过包含0, 不仅能沿2个轴移动, 还能够沿一个轴移动)

如果x_stepy_step都为0, 意味着原地踏步, 拒绝这样的情况, 接着执行下一次循环. 为获取漫步中下一个点的x值, 将x_stepx_values中的最后一个值相加. 并把计算的值附加到列表的末尾.

绘制随机漫步图

rw_visual.py

  • 创建RandomWalk实例
  • 调用fill_walk()
  • 将x y 值传递给scatter(), 并选择合适的点的尺寸.

模拟多次随机漫步

rw_visual.py

设置随机漫步图的样式

本节将定制图表, 以突出每次漫步的重要特征, 并让分散注意力的元素不那么明显. 为此, 确定要突出的元素, 如漫步的起点/终点/经过的路径. 接下来要确定使其不那么显眼的元素, 如刻度标记和标签. 最终的结果是简单的可视化表示, 清楚地指出每次漫步经过的路径.

给点着色

使用颜色映射来指出漫步中个点的先后顺序.

rw_visual.py

重新绘制起点/终点

在绘制随机漫步图后重新绘制起点和终点. 让起点和终点变得更大, 并显示为不同的颜色.

rw_visual.py

隐藏坐标轴

rw_visual.py

增加点数

增加点数, 以提供更多数据.

rw_visual.py

调整尺寸以适合屏幕

让绘图窗口更适合屏幕大小.

rw_visual.py

figure()用于指定图表的宽度/高度/分辨率/背景色. 给形参figsize一个元组, 指出绘图窗口尺寸, 单位为英寸. Python假定屏幕分辨率为100像素/英寸. 可使用形参dpi向figure()传递分辨率.

使用 Pygal 模拟掷色子

本节中, 使用Python可视化包 Pygal 来生成可所犯的矢量图形文件. 对于需要在尺寸不同的屏幕上展示的图表很有用, 因为它们将自动缩放, 以适合观看者的屏幕. 如果打算以在线方式使用图表, 考虑使用 Pygal 来生成, 这样它们在任何设备上显示都很美观.

掷色子, 2个, 某些点数可能性将比其他点数打. 为确定哪些点数出现的可能性最大, 将生成一个表示掷色子结果的数据集, 并根据结果绘制图形. 在数学领域, 使用掷色子来解释各种数据分析, 在赌场和游戏中也有实际应用.

安装 Pygal

Pygal 画廊

http://pygal.org/en/stable/documentation/types/index.html

创建 Die 类

die.py

掷骰子

die_visual.py

分析结果

为分析掷6面骰子的结果, 计算每个点数的出现次数

die_visual.py

绘制直方图

die_visual.py

同时掷2个骰子

die_visual.py

同时掷两个面数不同的骰子

创建一个6面和10面的骰子. 掷50000次.

different_dice.py

作业

同时掷3个骰子

将点数相乘

使用2个库

使用matplotlib 可视化模拟掷骰子; 使用Pygal 可视化模拟随机漫步.

小结

  • 如何生成数据集
  • 如何对其可视化
  • 如何使用matplotlib创建简单图表
  • 如何使用散点图探索随机漫步过程
  • 如何使用Pygal创建直方图
  • 如何使用直方图展示掷骰子结果

尝试对网上的各类图表进行code

下载数据

从网上下载数据, 并对数据可视化. 格式: csv和json. 使用Python模块csv来处理CSV格式的天气数据, 找出2个区域的最高和最低温度. 然后使用matplotlib根据下载的数据创建图表, 展示2个不同区域的气温变化. 在本章后面, 使用模块json来访问以JSON格式存储人口数据, 并使用Pygal绘制一幅按国别划分的人口地图.

CSV文件格式

2014-1-5,61,44,26,18,7,-1,56,30,9,30.34,30.27,30.15,,,,10,4,,0.00,0,,195

CSV程序可以轻松地提取并处理其中的值, 有助于加快数据分析过程.

分析 CSV 文件头

high_lows.py

调用csv.reader(), 将前面存储的文件对象作为实参传递给它, 从而创建一个与该文件相关联的阅读器(reader)对象. 调用next()并将阅读器对象传递给它时, 返回文件中的下一行. 因为只调用了next()一次, 因此得到的是第一行, 其中包含文件头. reader处理文件中以都好分隔的第一行数据, 并将每项数据都作为一个元素存储在列表中.

打印文件头及其位置

high_lows.py

从中可知道, 日期和最高气温分别存储在第0列和第1列. 为研究这些数据, 将处理csv中的每行数据, 并提取索引为0和1的值.

提取并读取数据

首先读取每天的最高气温

high_lows.py

创建空列表, 再遍历文件中余下的各行. 阅读器从其停留的地方继续往下读取csv文件, 每次都自动返回当前所处位置的下一行. 每次执行该循环时, 都将索引(第1列)的数据附加到highs末尾. 下面使用int()将这些字符串转换为数字.

high_lows.py

下面来对这些数据进行可视化.

绘制气温数据

为可视化这些气温数据, 首先使用 matplotlib 创建一个显示每日最高气温的简单图形

high_lows.py

模块 datetime

将字符串*'2014-7-1'*转换为一个表示相应日期的对象. 使用datetime.strptime()

In[2]: from datetime import datetime
In[3]: first_date = datetime.strptime('2014-7-1', '%Y-%m-%d')
In[4]: print(first_date)
2014-07-01 00:00:00

模块datetime中设置日期和时间格式的实参:

  • %A: 星期, 如 Monday
  • %B: 月份, 如 January
  • %m: 月份, (01-12)
  • %d: 日期,(01-31)
  • %Y: 四位年份, 如2015
  • %y: 两位年份, 如15
  • %H: 24进制小时(00-23)
  • %I: 12进制小时(01-12)
  • %p: am或pm
  • %M: 分钟数(00-59)
  • %S: 秒数(00-61)

在图表中添加日期

high_lows.py

涵盖更长的时间

high_lows.py

再绘制一个数据系列

再添加最低气温的数据.

high_lows.py

给图表区域着色

high_lows.py

实参alpha指定颜色的透明度. alpha值为0表示完全透明, 1(默认设置)表示完全不透明. 向fill_between()传递一个x值系列: 列表dates, 还传递2个y值系列: highs和lows. 实参facecolor指定填充区域的颜色.

错误检查

但有些气象站会偶尔出现故障, 未能收集部分或全部其应该收集的数据. 缺失数据可能会引发异常. 比如没有某一天的最高气温, 字符串为空. 为解决该问题, 在从CSV文件中读取值时执行错误检查代码, 对分析数据集时可能出现的异常进行处理.

high_lows.py

尝试提取日期/最高/最低气温. 只要缺失其中一项数据, Python就会引发ValueError异常. 如果没有发生错误, 将运行else代码块, 并将数据附加到相应列表末尾. 在有些情况下, 需要使用continue来跳过一些数据, 或者使用remove()或del将已提取的数据删除.

作业

旧金山

比较两地的气温

降雨量

探索

生成一些图表, 对你好奇的任何地方的其他天气数据进行研究.

制作世界人口地图: JSON格式

在本节中, 下载JSON格式的人口数据, 使用json模块来处理. Pygal提供了一个地图创建工具, 可以使用它来对人口数据可视化.

下载世界人口数据

Open Knowledge Foundation提供了大量可以免费使用的数据集

提取相关数据

world_population.py

将字符串转换为数字值

world_population.py

About

学习数据可视化案例.

License:MIT License


Languages

Language:Python 100.0%