当前位置: 首页 > news >正文

做网站能赚能去什么公司广发证券 网站谁做的

做网站能赚能去什么公司,广发证券 网站谁做的,河北邯郸做移动网站,网站建设做什么生成数据 数据可视化 指的是通过可视化表示来探索数据#xff0c;它与数据挖掘 数据挖掘 紧密相关#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表 示的小型数字列表#xff0c;也可以是数以吉字节的数据。 漂亮地呈现数据关…生成数据 数据可视化  指的是通过可视化表示来探索数据它与数据挖掘 数据挖掘 紧密相关而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表 示的小型数字列表也可以是数以吉字节的数据。 漂亮地呈现数据关乎的并非仅仅是漂亮的图片。以引人注目的简洁方式呈现数据让观看者能够明白其含义发现数据集中原本未意识到的规律和意义。 所幸即便没有超级计算机也能够可视化复杂的数据。鉴于Python的高效性使用它在笔记本电脑上就能快速地探索由数百万个数据点组成的数据集。数据点并非必须 是数字利用基本知识也可以对非数字数据进行分析。 在基因研究、天气研究、政治经济分析等众多领域大家都使用Python来完成数据密集型工作。数据科学家使用Python编写了一系列令人印象深刻的可视化和分析工 具其中很多也可供你使用。最流行的工具之一是matplotlib它是一个数学绘图库我们将使用它来制作简单的图表如折线图和散点图。然后我们将基于随机漫 步概念生成一个更有趣的数据集——根据一系列随机决策生成的图表。 我们还将使用Pygal包它专注于生成适合在数字设备上显示的图表。通过使用Pygal可在用户与图表交互时突出元素以及调整其大小还可轻松地调整整个图表的尺 寸使其适合在微型智能手表或巨型显示器上显示。我们将使用Pygal以各种方式探索掷骰子的结果 1 安装matplotlib 首先需要安装matplotlib我们将使用它来制作开始的几个图表。 1.1 在 在Linux系统中安装matplotlib 如果你使用的是系统自带的Python版本可使用系统的包管理器来安装matplotlib为此只需执行一行命令 $ sudo apt-get install python3-matplotlib 如果你使用的是Python 2.7请执行如下命令 $ sudo apt-get install python-matplotlib 如果你安装了较新的Python版本就必须安装matplotlib依赖的一些库 $ sudo apt-get install python3.5-dev python3.5-tk tk-dev$ sudo apt-get install libfreetype6-dev g 再使用pip来安装matplotlib $ pip install --user matplotlib 1.2  在OSX系统中安装matplotlib Apple的标准Python安装自带了matplotlib。要检查系统是否安装了matplotlib可打开一个终端会话并尝试导入matplotlib。如果系统没有自带matplotlib且你的Python是使用Homebrew安 装的则可以像下面这样安装matplotlib $ pip install --user matplotlib注意 安装包时可能需要使用pip3 而不是pip 。另外如果这个命令不管用你可能需要删除标志--user 。 1.3 在Windows系统中安装matplotlib 在Windows系统中首先需要安装Visual Studio。为此请访问htps:/dev.windows.com/单击Downloads再查找Visual Studio Community——一组免费的Windows开发工具。请下载并 运行该安装程序。 接下来需要下载matplotlib安装程序。为此请访问htps:/pypi.python.org/pypi/matplotlib/ 并查找与你使用的Python版本匹配的wheel文件扩展名为.whl的文件。例如如果你使 用的是32位的Python 3.5则需要下载matplotlib-1.4.3-cp35-none-win32.whl。 注意  如果找不到与你安装的Python版本匹配的文件请去htp:/www.lfd.uci.edu/-gohlke/pythonlibs/#matplotlib 看看这个网站发布安装程序的时间通常比matplotlib官网早 些。 将这个.whl文件复制到你的项目文件夹打开一个命令窗口并切换到该项目文件夹再使用pip来安装matplotlib cd python_workpython_work python -m pip install --user matplotlib-1.4.3-cp35-none-win32.whl 1.4 测试matplotlib 安装必要的包后对安装进行测试。为此首先使用命令python 或python3 启动一个终端会话再尝试导入matplotlib $ python3 import matplotlib 如果没有出现任何错误消息就说明你的系统安装了matplotlib。 1.5 matplotlib画廊   要查看使用matplotlib可制作的各种图表请访问htp:/matplotlib.org/的示例画廊。单击画廊中的图表就可查看用于生成图表的代码。 2 绘制简单的折线 下面来使用matplotlib绘制一个简单的折线图再对其进行定制以实现信息更丰富的数据可视化。我们将使用平方数序列1、4、9、16和25来绘制这个图表。 只需向matplotlib提供如下数字matplotlib就能完成其他的工作 mpl_squares.py import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25]plt.plot(squares)plt.show() 我们首先导入了模块pyplot 并给它指定了别名plt 以免反复输入pyplot 。在线示例大都这样做因此这里也这样做。模块pyplot 包含很多用于生成图表的函数。 我们创建了一个列表在其中存储了前述平方数再将这个列表传递给函数plot() 这个函数尝试根据这些数字绘制出有意义的图形。plt.show() 打开matplotlib查看器并 显示绘制的图形如图所示。查看器让你能够缩放和导航图形另外单击磁盘图标可将图形保存起来。 使用matplotlib可制作的最简单的图表   2.1  修改标签文字和线条粗细 图示的图形表明数字是越来越大的但标签文字太小线条太细。所幸matplotlib让你能够调整可视化的各个方面。 下面通过一些定制来改善这个图形的可读性如下所示 mpl_squares.py import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25]❶ plt.plot(squares, linewidth5)# 设置图表标题并给坐标轴加上标签 ❷ plt.title(Square Numbers, fontsize24)❷ plt.xlabel(Value, fontsize14)plt.ylabel(Square of Value, fontsize14)# 设置刻度标记的大小 ❹ plt.tick_params(axisboth, labelsize14)plt.show() 参数linewidth 见❶决定了plot() 绘制的线条的粗细。函数title() 见❷给图表指定标题。在上述代码中出现了多次的参数fontsize 指定了图表中文字的大 小。 函数xlabel() 和ylabel() 让你能够为每条轴设置标题见❸而函数tick_params() 设置刻度的样式见❹其中指定的实参将影响x 轴和y 轴上的刻度 axesboth 并将刻度标记的字号设置为14labelsize14 。 最终的图表阅读起来容易得多了如图所示标签文字更大线条也更粗。 现在图表阅读起来容易得多 2.2 校正图形 图形更容易阅读后我们发现没有正确地绘制数据折线图的终点指出4.0的平方为25下面来修复这个问题。 当你向plot() 提供一系列数字时它假设第一个数据点对应的 x 坐标值为0但我们的第一个点对应的 x 值为1。为改变这种默认行为我们可以给plot() 同时提供输入值和 输出值 mpl_squares.py import matplotlib.pyplot as pltinput_values [1, 2, 3, 4, 5]squares [1, 4, 9, 16, 25]plt.plot(input_values, squares, linewidth5)# 设置图表标题并给坐标轴加上标签 现在plot() 将正确地绘制数据因为我们同时提供了输入值和输出值它无需对输出值的生成方式作出假设。最终的图形是正确的如图所示。 根据数据正确地绘制了图形 使用plot() 时可指定各种实参还可使用众多函数对图形进行定制。本章后面处理更有趣的数据集时将继续探索这些定制函数。 2.3 使用scatter() 绘制散点图并设置其样式 有时候需要绘制散点图并设置各个数据点的样式。例如你可能想以一种颜色显示较小的值而用另一种颜色显示较大的值。绘制大型数据集时你还可以对每个点都设置同 样的样式再使用不同的样式选项重新绘制某些点以突出它们。 要绘制单个点可使用函数scatter() 并向它传递一对 x 和 y 坐标它将在指定位置绘制一个点 scatter_squares.py import matplotlib.pyplot as pltplt.scatter(2, 4)plt.show() 下面来设置输出的样式使其更有趣添加标题给轴加上标签并确保所有文本都大到能够看清 import matplotlib.pyplot as plt❶ plt.scatter(2, 4, s200)# 设置图表标题并给坐标轴加上标签plt.title(Square Numbers, fontsize24)plt.xlabel(Value, fontsize14)plt.ylabel(Square of Value, fontsize14)# 设置刻度标记的大小plt.tick_params(axisboth, whichmajor, labelsize14)plt.show() 在❶处我们调用了scatter() 并使用实参s 设置了绘制图形时使用的点的尺寸。如果此时运行scatter_squares.py将在图表中央看到一个点如图所示。 绘制单个点 2.4 使用scatter() 绘制一系列点 要绘制一系列的点可向scatter() 传递两个分别包含x 值和y 值的列表如下所示 scatter_squares.py import matplotlib.pyplot as plt x_values [1, 2, 3, 4, 5]y_values [1, 4, 9, 16, 25]plt.scatter(x_values, y_values, s100)# 设置图表标题并给坐标轴指定标签 列表x_values 包含要计算其平方值的数字而列表y_values 包含前述每个数字的平方值。将这些列表传递给scatter() 时matplotlib依次从每个列表中读取一个值来绘制 一个点。要绘制的点的坐标分别为 (1, 1)、(2, 4)、(3, 9)、(4, 16)和(5, 25)最终的结果如图所示。 由多个点组成的散点图 由多个点组成的散点图 2.5 自动计算数据 手工计算列表要包含的值可能效率低下需要绘制的点很多时尤其如此。可以不必手工计算包含点坐标的列表而让Python循环来替我们完成这种计算。下面是绘制1000个点的代 码 scatter_squares.py import matplotlib.pyplot as plt❶ x_values list(range(1, 1001))y_values [x**2 for x in x_values]❷ plt.scatter(x_values, y_values, s40)# 设置图表标题并给坐标轴加上标签--snip--# 设置每个坐标轴的取值范围 ❸ plt.axis([0, 1100, 0, 1100000])plt.show() 我们首先创建了一个包含 x 值的列表其中包含数字1~1000见❶。接下来是一个生成 y 值的列表解析它遍历 x 值for x in x_values 计算其平方值x**2 并将结果存储到列表y_values 中。然后将输入列表和输出列表传递给scatter() 见❷。 由于这个数据集较大我们将点设置得较小并使用函数axis() 指定了每个坐标轴的取值范围见❸。函数axis() 要求提供四个值x 和 y 坐标轴的最小值和最大值。在 这里我们将 x 坐标轴的取值范围设置为0~1100并将 y 坐标轴的取值范围设置为0~1 100 000。结果如图所示。 Python绘制 绘制1000个点与绘制 个点与绘制5个点一样容易 2.6 删除数据点的轮廓 matplotlib允许你给散点图中的各个点指定颜色。默认为蓝色点和黑色轮廓在散点图包含的数据点不多时效果很好。但绘制很多点时黑色轮廓可能会粘连在一起。要删除数据 点的轮廓可在调用scatter() 时传递实参edgecolornone plt.scatter(x_values, y_values, edgecolornone, s40) 将相应调用修改为上述代码后如果再运行scater_squares.py在图表中看到的将是蓝色实心点。 2.7 自定义颜色 要修改数据点的颜色可向scatter() 传递参数c 并将其设置为要使用的颜色的名称如下所示 plt.scatter(x_values, y_values, cred, edgecolornone, s40) 你还可以使用RGB颜色模式自定义颜色。要指定自定义颜色可传递参数c 并将其设置为一个元组其中包含三个0~1之间的小数值它们分别表示红色、绿色和蓝色分量。例 如下面的代码行创建一个由淡蓝色点组成的散点图 plt.scatter(x_values, y_values, c(0, 0, 0.8), edgecolornone, s40) 值越接近0指定的颜色越深值越接近1指定的颜色越浅。 2.8 使用颜色映射 颜色映射  colormap是一系列颜色它们从起始颜色渐变到结束颜色。在可视化中颜色映射用于突出数据的规律例如你可能用较浅的颜色来显示较小的值并使用较深 的颜色来显示较大的值。 模块pyplot 内置了一组颜色映射。要使用这些颜色映射你需要告诉pyplot 该如何设置数据集中每个点的颜色。下面演示了如何根据每个点的 y 值来设置其颜色 scatter_squares.py import matplotlib.pyplot as pltx_values list(range(1001))y_values [x**2 for x in x_values]plt.scatter(x_values, y_values, cy_values, cmapplt.cm.Blues,edgecolornone, s40)# 设置图表标题并给坐 我们将参数c 设置成了一个 y 值列表并使用参数cmap 告诉pyplot 使用哪个颜色映射。这些代码将 y 值较小的点显示为浅蓝色并将 y 值较大的点显示为深蓝色生成的图形 如图所示。 使用颜色映射Blues 的图表 注意  要了解pyplot 中所有的颜色映射请访问http://matplotlib.org/单击Examples向下滚动到Color Examples再单击colormaps_reference。 2.9 自动保存图表 要让程序自动将图表保存到文件中可将对plt.show() 的调用替换为对plt.savefig() 的调用 plt.savefig(squares_plot.png, bbox_inchestight) 第一个实参指定要以什么样的文件名保存图表这个文件将存储到scater_squares.py所在的目录中第二个实参指定将图表多余的空白区域裁剪掉。如果要保留图表周围多余的空 白区域可省略这个实参。 动手试一试 立方 数字的三次方被称为其立方。请绘制一个图形显示前5个整数的立方值再绘制一个图形显示前5000个整数的立方值。 彩色立方 给你前面绘制的立方图指定颜色映射。 3 随机漫步 在本节中我们将使用Python来生成随机漫步数据再使用matplotlib以引人瞩目的方式将这些数据呈现出来。随机漫步 是这样行走得到的路径每次行走都完全是随机的没有 明确的方向结果是由一系列随机决策决定的。你可以这样认为随机漫步就是蚂蚁在晕头转向的情况下每次都沿随机的方向前行所经过的路径。 在自然界、物理学、生物学、化学和经济领域随机漫步都有其实际用途。例如漂浮在水滴上的花粉因不断受到水分子的挤压而在水面上移动。水滴中的分子运动是随机的 因此花粉在水面上的运动路径犹如随机漫步。我们稍后将编写的代码模拟了现实世界的很多情形。 3.1 创建RandomWalk() 类 为模拟随机漫步我们将创建一个名为RandomWalk 的类它随机地选择前进方向。这个类需要三个属性其中一个是存储随机漫步次数的变量其他两个是列表分别存储随 机漫步经过的每个点的 x 和 y 坐标。 RandomWalk 类只包含两个方法__init__() 和fill_walk() 其中后者计算随机漫步经过的所有点。下面先来看看__init__() 如下所示 random_walk.py ❶ from random import choiceclass RandomWalk():一个生成随机漫步数据的类❷ def __init__(self, num_points5000):初始化随机漫步的属性self.num_points num_points# 所有随机漫步都始于(0, 0)❸ self.x_values [0]self.y_values [0] 为做出随机决策我们将所有可能的选择都存储在一个列表中并在每次做决策时都使用choice() 来决定使用哪种选择见❶。接下来我们将随机漫步包含的默认点数设 置为5000这大到足以生成有趣的模式同时又足够小可确保能够快速地模拟随机漫步见❷。然后在❸处我们创建了两个用于存储x 和y 值的列表并让每次漫步都从 点(0, 0)出发。 3.2 选择方向 我们将使用fill_walk() 来生成漫步包含的点并决定每次漫步的方向如下所示。请将这个方法添加到random_walk.py中 random_walk.py def fill_walk(self):计算随机漫步包含的所有点# 不断漫步直到列表达到指定的长度 ❶ while len(self.x_values) self.num_points:# 决定前进方向以及沿这个方向前进的距离 ❷ x_direction choice([1, -1])x_distance choice([0, 1, 2, 3, 4])❸ x_step x_direction * x_distancey_direction choice([1, -1])y_distance choice([0, 1, 2, 3, 4])❹ y_step y_direction * y_distance# 拒绝原地踏步 ❺ if x_step 0 and y_step 0:continue# 计算下一个点的x和y值 ❻ next_x self.x_values[-1] x_stepnext_y self.y_values[-1] y_stepself.x_values.append(next_x)self.y_values.append(next_y) 在❶处我们建立了一个循环这个循环不断运行直到漫步包含所需数量的点。这个方法的主要部分告诉Python如何模拟四种漫步决定向右走还是向左走沿指定的方向走多 远向上走还是向下走沿选定的方向走多远 我们使用choice([1, -1]) 给x_direction 选择一个值结果要么是表示向右走的1要么是表示向左走的-1见❷。接下来choice([0, 1, 2, 3, 4]) 随机地 选择一个0~4之间的整数告诉Python 沿指定的方向走多远x_distance 。通过包含0我们不仅能够沿两个轴移动还能够沿y 轴移动。 在❸和❹处我们将移动方向乘以移动距离以确定沿 x 和 y 轴移动的距离。如果x_step 为正将向右移动为负将向左移动而为零将垂直移动如果y_step 为正就意 味着向上移动为负意味着向下移动而为零意味着水平移动。如果x_step 和y_step 都为零则意味着原地踏步我们拒绝这样的情况接着执行下一次循环见❺。 为获取漫步中下一个点的 x 值我们将x_step 与x_values 中的最后一个值相加见❻对于 y 值也做相同的处理。获得下一个点的 x 值和 y 值后我们将它们分别附加到 列表x_values 和y_values 的末尾。 3.3 绘制随机漫步图 下面的代码将随机漫步的所有点都绘制出来 rw_visual.py import matplotlib.pyplot as pltfrom random_walk import RandomWalk# 创建一个RandomWalk实例并将其包含的点都绘制出来 ❶ rw RandomWalk()rw.fill_walk()❷ plt.scatter(rw.x_values, rw.y_values, s15)plt.show()我们首先导入了模块pyplot 和RandomWalk 类然后创建了一个RandomWalk 实例并将其存储到rw 中见❶再调用fill_walk() 。在❷处我们将随机漫步包含的 x 和 y 值传递给scatter() 并选择了合适的点尺寸。图15-8显示了包含5000个点的随机漫步图本节的示意图未包含matplotlib查看器部分但你运行rw_visual.py时依然会看 到。 包含5000个点的随机漫步 3.4 模拟多次随机漫步 每次随机漫步都不同因此探索可能生成的各种模式很有趣。要在不多次运行程序的情况下使用前面的代码模拟多次随机漫步一种办法是将这些代码放在一个while 循环中 如下所示 rw_visual.py import matplotlib.pyplot as pltfrom random_walk import RandomWalk# 只要程序处于活动状态就不断地模拟随机漫步 while True:# 创建一个RandomWalk实例并将其包含的点都绘制出来 rw RandomWalk()rw.fill_walk()plt.scatter(rw.x_values, rw.y_values, s15)plt.show()❶ keep_running input(Make another walk? (y/n): )if keep_running n:break 这些代码模拟一次随机漫步在matplotlib查看器中显示结果再在不关闭查看器的情况下暂停。如果你关闭查看器程序将询问你是否要再模拟一次随机漫步。如果你输入y 可 模拟多次随机漫步这些随机漫步都在起点附近进行大多沿特定方向偏离起点漫步点分布不均匀等。要结束程序请输入n 。 注意  如果你使用的是Python 2.7别忘了将❶处的input() 替换为raw_input() 。 3.5 设置随机漫步图的样式 在本节中我们将定制图表以突出每次漫步的重要特征并让分散注意力的元素不那么显眼。为此我们确定要突出的元素如漫步的起点、终点和经过的路径。接下来确定 要使其不那么显眼的元素如刻度标记和标签。最终的结果是简单的可视化表示清楚地指出了每次漫步经过的路径。 3.6 给点着色 我们将使用颜色映射来指出漫步中各点的先后顺序并删除每个点的黑色轮廓让它们的颜色更明显。为根据漫步中各点的先后顺序进行着色我们传递参数c 并将其设置为 一个列表其中包含各点的先后顺序。由于这些点是按顺序绘制的因此给参数c 指定的列表只需包含数字1~5000如下所示 rw_visual.py --snip--while True:# 创建一个RandomWalk实例并将其包含的点都绘制出来 rw RandomWalk()rw.fill_walk()❶ point_numbers list(range(rw.num_points))plt.scatter(rw.x_values, rw.y_values, cpoint_numbers, cmapplt.cm.Blues,edgecolornone, s15)plt.show()keep_running input(Make another walk? (y/n): ) 在❶处我们使用了range() 生成了一个数字列表其中包含的数字个数与漫步包含的点数相同。接下来我们将这个列表存储在point_numbers 中以便后面使用它来设 置每个漫步点的颜色。我们将参数c 设置为point_numbers 指定使用颜色映射Blues 并传递实参edgecolornone 以删除每个点周围的轮廓。最终的随机漫步图从浅蓝 色渐变为深蓝色如图所示。 使用颜色映射Blues 着色的随机漫步图 3.7 重新绘制起点和终点 除了给随机漫步的各个点着色以指出它们的先后顺序外如果还能呈现随机漫步的起点和终点就更好了。为此可在绘制随机漫步图后重新绘制起点和终点。我们让起点和终 点变得更大并显示为不同的颜色以突出它们如下所示 rw_visual.py --snip--while True:--snip--plt.scatter(rw.x_values, rw.y_values, cpoint_numbers, cmapplt.cm.Blues,edgecolornone, s15)# 突出起点和终点plt.scatter(0, 0, cgreen, edgecolorsnone, s100)plt.scatter(rw.x_values[-1], rw.y_values[-1], cred, edgecolorsnone,s100)plt.show()--snip-- 为突出起点我们使用绿色绘制点(0, 0)并使其比其他点大s100 。为突出终点我们在漫步包含的最后一个 x 和 y 值处绘制一个点将其颜色设置为红色并将尺寸设置 为100。请务必将这些代码放在调用plt.show() 的代码前面确保在其他点的上面绘制起点和终点。 如果你现在运行这些代码将能准确地知道每次随机漫步的起点和终点如果起点和终点不明显请调整它们的颜色和大小直到明显为止。 3.8 隐藏坐标轴 下面来隐藏这个图表中的坐标轴以免我们注意的是坐标轴而不是随机漫步路径。要隐藏坐标轴可使用如下代码 rw_visual.py --snip--while True:--snip--plt.scatter(rw.x_values[-1], rw.y_values[-1], cred, edgecolorsnone,s100)# 隐藏坐标轴 ❶ plt.axes().get_xaxis().set_visible(False)plt.axes().get_yaxis().set_visible(False)plt.show()--snip-- 为修改坐标轴使用了函数plt.axes() 见❶来将每条坐标轴的可见性都设置为False 。随着你越来越多地进行数据可视化经常会看到这种串接方法的方式。 如果你现在运行rw_visual.py将看到一系列图形但看不到坐标轴。 3.9 增加点数 下面来增加点数以提供更多的数据。为此我们在创建RandomWalk 实例时增大num_points 的值并在绘图时调整每个点的大小如下所示 rw_visual.py --snip--while True:#创建一个RandomWalk实例并将其包含的点都绘制出来rw RandomWalk(50000)rw.fill_walk()# 绘制点并将图形显示出来point_numbers list(range(rw.num_points))plt.scatter(rw.x_values, rw.y_values, cpoint_numbers, cmapplt.cm.Blues,edgecolornone, s1)--snip--这个示例模拟了一次包含50 000个点的随机漫步以模拟现实情况并将每个点的大小都设置为1。最终的随机漫步图更纤细犹如云朵如图15-10所示。正如你看到的我们 使用简单的散点图制作出了一件艺术品 请尝试修改上述代码看看将漫步包含的点数增加到多少后程序的运行速度变得极其缓慢或绘制出的图形变得很难看。 包含50 000个点的随机漫步 3.10 调整尺寸以适合屏幕  图表适合屏幕大小时更能有效地将数据中的规律呈现出来。为让绘图窗口更适合屏幕大小可像下面这样调整matplotlib输出的尺寸 rw_visual.py --snip--while True:# 创建一个RandomWalk实例并将其包含的点都绘制出来 rw RandomWalk()rw.fill_walk()# 设置绘图窗口的尺寸 plt.figure(figsize(10, 6)) 函数figure() 用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize 指定一个元组向matplotlib指出绘图窗口的尺寸单位为英寸。 Python假定屏幕分辨率为80像素/英寸如果上述代码指定的图表尺寸不合适可根据需要调整其中的数字。如果你知道自己的系统的分辨率可使用形参dpi 向figure() 传递 该分辨率以有效地利用可用的屏幕空间如下所示 plt.figure(dpi128, figsize(10, 6)) 动手试一试   分子运动  修改rw_visual.py将其中的plt.scatter() 替换为plt.plot() 。为模拟花粉在水滴表面的运动路径向plt.plot() 传递rw.x_values 和rw.y_values 并指定实参值linewidth 。使用5000个点而不是50 000个点。 改进的随机漫步  在类RandomWalk 中x_step 和y_step 是根据相同的条件生成的从列表[1, -1] 中随机地选择方向并从列表[0, 1, 2, 3, 4] 中随机地选择距离。请修改这些列表中的值看看对随机漫步路径有何影响。尝试使用更长的距离选择列表如0~8或者将-1从 x 或 y 方向列表中删除。 重构  方法fill_walk() 很长。请新建一个名为get_step() 的方法用于确定每次漫步的距离和方向并计算这次漫步将如何移动。然后 在fill_walk() 中调用get_step() 两次 x_step get_step()y_step get_step() 4 使用Pygal模拟掷骰子   在本节中我们将使用Python可视化包Pygal来生成可缩放的矢量图形文件。对于需要在尺寸不同的屏幕上显示的图表这很有用因为它们将自动缩放以适合观看者的屏幕。 如果你打算以在线方式使用图表请考虑使用Pygal来生成它们这样它们在任何设备上显示时都会很美观。 在这个项目中我们将对掷骰子的结果进行分析。掷6面的常规骰子时可能出现的结果为1~6点且出现每种结果的可能性相同。然而如果同时掷两个骰子某些点数出现的 可能性将比其他点数大。为确定哪些点数出现的可能性最大我们将生成一个表示掷骰子结果的数据集并根据结果绘制出一个图形。 在数学领域常常利用掷骰子来解释各种数据分析但它在赌场和其他博弈场景中也得到了实际应用在游戏《大富翁》以及众多角色扮演游戏中亦如此。 4.1 安装Pygal 请使用pip 来安装Pygal 在Linux和OS X系统中应执行的命令类似于下面这样 pip install --user pygal 在Windows系统中命令类似于下面这样 python -m pip install --user pygal 注意  你可能需要使用命令pip3 而不是pip 如果这还是不管用你可能需要删除标志--user 。 4.2 Pygal画廊 要了解使用Pygal可创建什么样的图表请查看图表类型画廊访问http://www.pygal.org/单击Documentation再单击Chart types。每个示例都包含源代码让你知道这些图表是如何 生成的。 4.3 创建Die 类 下面的类模拟掷一个骰子 die.py from random import randintclass Die():表示一个骰子的类❶ def __init__(self, num_sides6):骰子默认为6面self.num_sides num_sidesdef roll(self):返回一个位于1和骰子面数之间的随机值❷ return randint(1, self.num_sides) 方法__init__() 接受一个可选参数。创建这个类的实例时如果没有指定任何实参面数默认为6如果指定了实参这个值将用于设置骰子的面数见❶。骰子是根据面 数命名的6面的骰子名为D68面的骰子名为D8以此类推。 方法roll() 使用函数randint() 来返回一个1和面数之间的随机数见❷。这个函数可能返回起始值1、终止值num_sides 或这两个值之间的任何整数。 4.4 掷骰子 使用这个类来创建图表前先来掷D6骰子将结果打印出来并检查结果是否合理 die_visual.py from die import Die# 创建一个D6❶ die Die()# 掷几次骰子并将结果存储在一个列表中results []❷ for roll_num in range(100):result die.roll()results.append(result)print(results) 在❶处我们创建了一个Die 实例其面数为默认值6。在❷处我们掷骰子100次并将每次的结果都存储在列表results 中。下面是一个示例结果集 [4, 6, 5, 6, 1, 5, 6, 3, 5, 3, 5, 3, 2, 2, 1, 3, 1, 5, 3, 6, 3, 6, 5, 4,1, 1, 4, 2, 3, 6, 4, 2, 6, 4, 1, 3, 2, 5, 6, 3, 6, 2, 1, 1, 3, 4, 1, 4,3, 5, 1, 4, 5, 5, 2, 3, 3, 1, 2, 3, 5, 6, 2, 5, 6, 1, 3, 2, 1, 1, 1, 6,5, 5, 2, 2, 6, 4, 1, 4, 5, 1, 1, 1, 4, 5, 3, 3, 1, 3, 5, 4, 5, 6, 5, 4,1, 5, 1, 2] 通过快速扫描这些结果可知Die 类看起来没有问题。我们见到了值1和6这表明返回了最大和最小的可能值我们没有见到0或7这表明结果都在正确的范围内。我们还看到 了1~6的所有数字这表明所有可能的结果都出现了。 4.5 分析结果 为分析掷一个D6骰子的结果我们计算每个点数出现的次数 die_visual.py --snip--# 掷几次骰子并将结果存储在一个列表中results []❶ for roll_num in range(1000):result die.roll()results.append(result)# 分析结果frequencies []❷ for value in range(1, die.num_sides1):❸ frequency results.count(value)❹ frequencies.append(frequency)print(frequencies)由于我们将使用Pygal来进行分析而不是将结果打印出来因此可以将模拟掷骰子的次数增加到1000见❶。为分析结果我们创建了空列表frequencies 用于存储每种 点数出现的次数。在❷处我们遍历可能的点数这里为1~6计算每种点数在results 中出现了多少次见❸并将这个值附加到列表frequencies 的末尾见❹。 接下来我们在可视化之前将这个列表打印出来 [155, 167, 168, 170, 159, 181] 结果看起来是合理的我们看到了6个值——掷D6骰子时可能出现的每个点数对应一个我们还发现没有任何点数出现的频率比其他点数高很多。下面来可视化这些结果。 4.6 绘制直方图 有了频率列表后我们就可以绘制一个表示结果的直方图。直方图直方图 是一种条形图指出了各种结果出现的频率。创建这种直方图的代码如下 die_visual.py import pygal--snip--# 分析结果frequencies []for value in range(1, die.num_sides1):frequency results.count(value)frequencies.append(frequency)# 对结果进行可视化 ❶ hist pygal.Bar()hist.title Results of rolling one D6 1000 times.❷ hist.x_labels [1, 2, 3, 4, 5, 6]hist.x_title Resulthist.y_title Frequency of Result❸ hist.add(D6, frequencies)hist.render_to_file(die_visual.svg) 为创建条形图我们创建了一个pygal.Bar() 实例并将其存储在hist 中见❶。接下来我们设置hist 的属性title 用于标示直方图的字符串将掷D6骰子的可 能结果用作 x 轴的标签见❷并给每个轴都添加了标题。在❸处我们使用add() 将一系列值添加到图表中向它传递要给添加的值指定的标签还有一个列表其中包含 将出现在图表中的值。最后我们将这个图表渲染为一个SVG文件这种文件的扩展名必须为.svg。 要查看生成的直方图最简单的方式是使用Web浏览器。为此在任何Web浏览器中新建一个标签页再在其中打开文件die_visual.svg它位于die_visual.py所在的文件夹中。你 将看到一个类似于图15-11所示的图表为方便印刷我稍微修改了这个图表默认情况下Pygal生成的图表的背景比你在图中看到的要暗。 使用Pygal创建的简单条形图 注意: Pygal让这个图表具有交互性如果你将鼠标指向该图表中的任何条形将看到与之相关联的数据。在同一个图表中绘制多个数据集时这项功能显得特别有用。 4.7 同时掷两个骰子 同时掷两个骰子时得到的点数更多结果分布情况也不同。下面来修改前面的代码创建两个D6骰子以模拟同时掷两个骰子的情况。每次掷两个骰子时我们都将两个骰子 的点数相加并将结果存储在results 中。请复制die_visual.py并将其保存为dice_visual.py再做如下修改 dice_visual.py import pygalfrom die import Die# 创建两个D6骰子die_1 Die()die_2 Die()# 掷骰子多次并将结果存储到一个列表中results []for roll_num in range(1000):❶ result die_1.roll() die_2.roll()results.append(result)# 分析结果frequencies []❷ max_result die_1.num_sides die_2.num_sides❸ for value in range(2, max_result1):frequency results.count(value)frequencies.append(frequency)# 可视化结果hist pygal.Bar()❹ hist.title Results of rolling two D6 dice 1000 times.hist.x_labels [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]hist.x_title Resulthist.y_title Frequency of Resulthist.add(D6 D6, frequencies)hist.render_to_file(dice_visual.svg) 创建两个Die 实例后我们掷骰子多次并计算每次的总点数见❶。可能出现的最大点数12为两个骰子的最大可能点数之和我们将这个值存储在了max_result 中见 ❷。可能出现的最小总点数2为两个骰子的最小可能点数之和。分析结果时我们计算2到max_result 的各种点数出现的次数见❸。我们原本可以使用range(2, 13) 但这只适用于两个D6骰子。模拟现实世界的情形时最好编写可轻松地模拟各种情形的代码。前面的代码让我们能够模拟掷任何两个骰子的情形而不管这些骰子有多少面。 创建图表时我们修改了标题、x 轴标签和数据系列见❹。如果列表x_labels 比这里所示的长得多那么编写一个循环来自动生成它将更合适。 运行这些代码后在浏览器中刷新显示图表的标签页你将看到如图所示的图表。 模拟同时掷两个6面骰子面骰子1000次的结果 这个图表显示了掷两个D6骰子时得到的大致结果。正如你看到的总点数为2或12的可能性最小而总点数为7的可能性最大这是因为在6种情况下得到的总点数都为7。这6种 情况如下1和6、2和5、3和4、4和3、5和2、6和1。 4.8 同时掷两个面数不同的骰子 下面来创建一个6面骰子和一个10面骰子看看同时掷这两个骰子50 000次的结果如何 different_dice.py from die import Dieimport pygal# 创建一个D6和一个D10die_1 Die()❶ die_2 Die(10)# 掷骰子多次并将结果存储在一个列表中results []for roll_num in range(50000):result die_1.roll() die_2.roll()results.append(result)# 分析结果--snip--# 可视化结果hist pygal.Bar()❷ hist.title Results of rolling a D6 and a D10 50,000 times.hist.x_labels [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14, 15, 16]hist.x_title Resulthist.y_title Frequency of Resulthist.add(D6 D10, frequencies)hist.render_to_file(dice_visual.svg) 为创建D10骰子我们在创建第二个Die 实例时传递了实参10 见❶。我们还修改了第一个循环以模拟掷骰子50 000次而不是1000次。可能出现的最小总点数依然是2但现 在可能出现的最大总点数为16因此我们相应地调整了标题、x 轴标签和数据系列标签见❷。 图显示了最终的图表。可能性最大的点数不是一个而是5个这是因为导致出现最小点数和最大点数的组合都只有一种1和1以及6和10但面数较小的骰子限制了得到 中间点数的组合数得到总点数7、8、9、10和11的组合数都是6种。因此这些总点数是最常见的结果它们出现的可能性相同。 同时掷6面骰子和 面骰子和10面骰子 面骰子50 000次的结果  通过使用Pygal来模拟掷骰子的结果能够非常自由地探索这种现象。只需几分钟就可以掷各种骰子很多次。 动手试一试 自动生成标签请修改die.py和dice_visual.py将用来设置hist.x_labels 值的列表替换为一个自动生成这种列表的循环。如果你熟悉列表解析可尝试将 die_visual.py和dice_visual.py中的其他for 循环也替换为列表解析。 两个D8骰子 请模拟同时掷两个8面骰子1000次的结果。逐渐增加掷骰子的次数直到系统不堪重负为止。 同时掷三个骰子  如果你同时掷三个D6骰子可能得到的最小点数为3而最大点数为18。请通过可视化展示同时掷三个D6骰子的结果。 将点数相乘 同时掷两个骰子时通常将它们的点数相加。请通过可视化展示将两个骰子的点数相乘的结果 练习使用本章介绍的两个库尝试使用matplotlib通过可视化来模拟掷骰子的情况并尝试使用Pygal通过可视化来模拟随机漫步的情况。 5 小结 在本章中你学习了如何生成数据集以及如何对其进行可视化如何使用matplotlib创建简单的图表以及如何使用散点图来探索随机漫步过程如何使用Pygal来创建直方图 以及如何使用直方图来探索同时掷两个面数不同的骰子的结果。 使用代码生成数据集是一种有趣而强大的方式可用于模拟和探索现实世界的各种情形。完成后面的数据可视化项目时请注意可使用代码模拟哪些情形。请研究新闻媒体中的 可视化看看其中是否有图表是以你在这些项目中学到的类似方式生成的。
http://www.zqtcl.cn/news/355691/

相关文章:

  • 东莞勒流网站制作wordpress 自定义字段 查询
  • 温州网站开发风格做影视剧组演员垂直平台网站
  • c 网站开发培训怎么做网站的站点地图
  • html 网站模板简单网站制作北京海淀
  • 大庆做网站找谁珠海网站搭建
  • 网站建设方面的外文宿迁房产网找房
  • 运营 网站遵义网站开发制作公司
  • 动力论坛源码网站后台地址是什么网站上微信支付功能
  • 网站需求分析模板深圳3d制作
  • 宿迁网站建设推广公司wordpress忘记密码了
  • 成都双语网站开发flat wordpress
  • 大连做公司网站的公司网络营销的网站
  • 做网站 人工智能怎么做商业服务网站
  • 自助建站公司四平市住房和城乡建设部网站
  • 淄博网站seo价格世界新闻最新消息
  • 网站开发 毕业答辩pptwordpress qq邮箱订阅
  • 国家icp备案网站群辉域名登录wordpress
  • 仙居住房和城乡建设规划局网站可以做思维导图的网站
  • 企业网站建设费怎么入账石家庄定制网站建设服务
  • 遂宁建设网站如何搭建微信公众号平台
  • 咖啡网站源码公司网站手机版
  • 新能源网站开发网站做5级分销合法吗
  • 西安建设网站排名简约风网站首页怎么做
  • 安远做网站做服务网站要多少钱
  • 功能网站模板电商平台项目商业计划书
  • 阿里巴巴国际站入驻费用及条件广州做网站比较好的公司
  • 淄博营销网站建设阳泉营销型网站建设费用
  • 珠海网站开发定制常德网站建设详细策划
  • 做电影网站侵权哈尔滨网站开发
  • 中国联通网站备案系统Wordpress建立空白页面