第15章生成数据
数据可视化指的是通过可视化表示来探索数据,它与数据挖掘数紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。
数据集可以是用一行代码就能表示的小型数字列表,也可以是数以吉字节的数据。漂亮地呈现数据关乎的并非仅仅是漂亮的图片。以引人注目的简洁方式呈现数据,让观看者能够明白其含义,发现数据集中原本未意识到的规律和意义。
所幸即便没有超级计算机,也能够可视化复杂的数据。鉴于 Python 的高效性,使用它在笔记本电脑上就能快速地探索由数百万个数据点组成的数据集。数据点并非必须是数字,利用本书前半部分介绍的基本知识,也可以对非数字数据进行分析。在基因研究、天气研究、政治经济分析等众多领域,大家都使用 Python 来完成数据密集型工作。数据科学家使用 Python 编写了一系列令人印象深刻的可视化和分析工具,其中很多也可供你使用。最流行的工具之一是 matplotlib ,它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图。然后,我们将基于随机漫步概念生成一个更有趣的数据集 —— 根据一系列随机决策生成的图表。
我们还将使用 Pygal包 ,它专注于生成适合在数字设备上显示的图表。通过使用 Pygal ,可在用户与图表交互时突出元素以及调整其大小,还可轻松地调整整个图表的尺寸,使其适合在微型智能手表或巨型显示器上显示。我们将使用 Pygal 以各种方式探索掷骰子的结果。
15.1安装安matplotlib
15.1.3在在Windows系统中安装系matplotlib
在 Windows 系统中,首先需要安装 VisualStudio 。为此,请访问 https://dev.windows.com/ ,单击 Downloads ,再查找 VisualStudio Community—— 一组免费的 Windows 开发工具。请下载并运行该安装程序。接下来,需要下载 matplotlib 安装程序。为此,请访问 https://pypi.python.org/pypi/matplotlib/ ,并查找与你使用的 Python 版本匹配的 wheel 文件(扩展名为 .whl 的文件)。例如,如果你使用的是 32 位的 Python 3.5 ,则需要下载 matplotlib-1.4.3-cp35-none-win32.whl 。
注意:如果找不到与你安装的 Python 版本匹配的文件,请去 http://www.lfd.uci.edu/-gohlke/pythonlibs/#matplotlib 看看,这个网站发布安装程序的时间通常比 matplotlib 官网早些。将这个 .whl 文件复制到你的项目文件夹,打开一个命令窗口,并切换到该项目文件夹,再使用 pip 来安装 matplotlib :
> cd python_work
python_work> python -m pip install --user matplotlib-1.4.3-cp35-none-win32.whl
15.1.4测试matplotlib
安装必要的包后,对安装进行测试。为此,首先使用命令 python 或 python3 启动一个终端会话,再尝试导入 matplotlib :
>>> import matplotlib
如果没有出现任何错误消息,就说明你的系统安装了 matplotlib ,可以接着阅读下一节。
注意:如果你在安装过程中遇到了麻烦,请参阅附录 C 。如果依然无济于事,请向他人寻求帮助。对于你遇到的问题,只要向经验丰富的 Python 程序员提供少量的信息,他们很可能很快就能帮你解决。
15.1.5 matplotlib画廊
要查看使用 matplotlib 可制作的各种图表,请访问 http://matplotlib.org/ 的示例画廊。单击画廊中的图表,就可查看用于生成图表的代码。
15.2 绘制简单的折线图
下面来使用 matplotlib 绘制一个简单的折线图,再对其进行定制,以实现信息更丰富的数据可视化。我们将使用平方数序列 1 、 4 、 9 、 16 和 25 来绘制这个图表。
只需向 matplotlib 提供如下数字, matplotlib 就能完成其他的工作:
import matplotlib.pyplot as pltsquares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()
我们首先导入了模块 pyplot ,并给它指定了别名 plt ,以免反复输入 pyplot 。在线示例大都这样做,因此这里也这样做。模块 pyplot 包含很多用于生成图表的函数。
我们创建了一个列表,在其中存储了前述平方数,再将这个列表传递给函数 plot() ,这个函数尝试根据这些数字绘制出有意义的图形。 plt.show() 打开 matplotlib 查看器,并显示绘制的图形,如图 15-1 所示。查看器让你能够缩放和导航图形,另外,单击磁盘图标可将图形保存起来。
15.2.1修改标签文字和线条粗细
图 15-1 所示的图形表明数字是越来越大的,但标签文字太小,线条太细。所幸 matplotlib 让你能够调整可视化的各个方面。
import matplotlib.pyplot as pltsquares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth=5)
# 设置图表标题,并给坐标轴加上标签
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14)
plt.show()
参数 linewidth (见 ❶ )决定了 plot() 绘制的线条的粗细。函数 title() (见 ❷ )给图表指定标题。在上述代码中,出现了多次的参数 fontsize 指定了图表中文字的大小。
函数 xlabel() 和 ylabel() 让你能够为每条轴设置标题(见 ❸ );而函数 tick_params() 设置刻度的样式(见 ❹ ),其中指定的实参将影响 x 轴和 y 轴上的刻度( axes='both' ),并将刻度标记的字号设置为 14 ( labelsize=14 )。最终的图表阅读起来容易得多了,如图 15-2 所示:标签文字更大,线条也更粗。
15.2.2校正图形
图形更容易阅读后,我们发现没有正确地绘制数据:折线图的终点指出 4.0 的平方为 25 !下面来修复这个问题。
当你向 plot() 提供一系列数字时,它假设第一个数据点对应的 x 坐标值为 0 ,但我们的第一个点对应的 x 值为 1 。为改变这种默认行为,我们可以给 plot() 同时提供输入值和输出值:
import matplotlib.pyplot as pltinput_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]plt.plot(input_values, squares, linewidth=5)
# 设置图表标题并给坐标轴加上标签
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14)
plt.show()