关于“Python”的核心知识点整理大全44

目录

​编辑

15.3.4 模拟多次随机漫步

rw_visual.py

注意

15.3.5 设置随机漫步图的样式

15.3.6 给点着色

rw_visual.py

15.3.7 重新绘制起点和终点

rw_visual.py

15.3.8 隐藏坐标轴

rw_visual.py

15.3.9 增加点数

rw_visual.py

15.3.10 调整尺寸以适合屏幕

rw_visual.py

15.4 使用 Pygal 模拟掷骰子

15.4.1 安装 Pygal

注意

15.4.2 Pygal 画廊

15.4.3 创建 Die 类

die.py

15.4.4 掷骰子

die_visual.py

15.4.5 分析结果

die_visual.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


15.3.4 模拟多次随机漫步

每次随机漫步都不同,因此探索可能生成的各种模式很有趣。要在不多次运行程序的情况下 使用前面的代码模拟多次随机漫步,一种办法是将这些代码放在一个while循环中,如下所示:

rw_visual.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk() rw.fill_walk()plt.scatter(rw.x_values, rw.y_values, s=15)plt.show()
1 keep_running = input("Make another walk? (y/n): ")
if keep_running == 'n':break 

这些代码模拟一次随机漫步,在matplotlib查看器中显示结果,再在不关闭查看器的情况下暂 停。如果你关闭查看器,程序将询问你是否要再模拟一次随机漫步。如果你输入y,可模拟多次 随机漫步:这些随机漫步都在起点附近进行,大多沿特定方向偏离起点,漫步点分布不均匀等。 要结束程序,请输入n。


注意

如果你使用的是Python 2.7,别忘了将Ø处的input()替换为raw_input()。


15.3.5 设置随机漫步图的样式

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

15.3.6 给点着色

我们将使用颜色映射来指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让它们的颜 色更明显。为根据漫步中各点的先后顺序进行着色,我们传递参数c,并将其设置为一个列表, 其中包含各点的先后顺序。由于这些点是按顺序绘制的,因此给参数c指定的列表只需包含数字 1~5000,如下所示:

rw_visual.py
--snip--
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk()rw.fill_walk()
1 point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=15)plt.show()keep_running = input("Make another walk? (y/n): ")--snip-- 

在1处,我们使用了range()生成了一个数字列表,其中包含的数字个数与漫步包含的点数相 同。接下来,我们将这个列表存储在point_numbers中,以便后面使用它来设置每个漫步点的颜 色。我们将参数c设置为point_numbers,指定使用颜色映射Blues,并传递实参edgecolor=none以 删除每个点周围的轮廓。最终的随机漫步图从浅蓝色渐变为深蓝色,如图15-9所示。

15.3.7 重新绘制起点和终点

除了给随机漫步的各个点着色,以指出它们的先后顺序外,如果还能呈现随机漫步的起点和 终点就更好了。为此,可在绘制随机漫步图后重新绘制起点和终点。我们让起点和终点变得更大, 并显示为不同的颜色,以突出它们,如下所示:

rw_visual.py
--snip--
while True:--snip--plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=15)# 突出起点和终点plt.scatter(0, 0, c='green', edgecolors='none', s=100)plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none',s=100)plt.show()--snip--

为突出起点,我们使用绿色绘制点(0, 0),并使其比其他点大(s=100)。为突出终点,我们在 漫步包含的最后一个x和y值处绘制一个点,将其颜色设置为红色,并将尺寸设置为100。请务必 将这些代码放在调用plt.show()的代码前面,确保在其他点的上面绘制起点和终点。 如果你现在运行这些代码,将能准确地知道每次随机漫步的起点和终点(如果起点和终点不 明显,请调整它们的颜色和大小,直到明显为止)。

15.3.8 隐藏坐标轴

下面来隐藏这个图表中的坐标轴,以免我们注意的是坐标轴而不是随机漫步路径。要隐藏坐 标轴,可使用如下代码:

rw_visual.py
--snip--
while True:--snip--plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none',s=100)# 隐藏坐标轴
1 plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)plt.show()--snip-- 

为修改坐标轴,使用了函数plt.axes()(见Ø)来将每条坐标轴的可见性都设置为False。随 着你越来越多地进行数据可视化,经常会看到这种串接方法的方式。 如果你现在运行rw_visual.py,将看到一系列图形,但看不到坐标轴。

15.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, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=1)--snip-- 

这个示例模拟了一次包含50 000个点的随机漫步(以模拟现实情况),并将每个点的大小都 设置为1。最终的随机漫步图更纤细,犹如云朵,如图15-10所示。正如你看到的,我们使用简单 的散点图制作出了一件艺术品!

请尝试修改上述代码,看看将漫步包含的点数增加到多少后,程序的运行速度变得极其缓慢 或绘制出的图形变得很难看。

15.3.10 调整尺寸以适合屏幕

图表适合屏幕大小时,更能有效地将数据中的规律呈现出来。为让绘图窗口更适合屏幕大小, 可像下面这样调整matplotlib输出的尺寸:

rw_visual.py
--snip--
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk()rw.fill_walk()# 设置绘图窗口的尺寸plt.figure(figsize=(10, 6))--snip-- 

函数figure()用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个 元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。

Python假定屏幕分辨率为80像素/英寸,如果上述代码指定的图表尺寸不合适,可根据需要调 整其中的数字。如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以 有效地利用可用的屏幕空间,如下所示:

plt.figure(dpi=128, figsize=(10, 6))

15.4 使用 Pygal 模拟掷骰子

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

在这个项目中,我们将对掷骰子的结果进行分析。掷6面的常规骰子时,可能出现的结果为 1~6点,且出现每种结果的可能性相同。然而,如果同时掷两个骰子,某些点数出现的可能性将 比其他点数大。为确定哪些点数出现的可能性最大,我们将生成一个表示掷骰子结果的数据集, 并根据结果绘制出一个图形。 在数学领域,常常利用掷骰子来解释各种数据分析,但它在赌场和其他博弈场景中也得到了实际应用,在游戏《大富翁》以及众多角色扮演游戏中亦如此。

15.4.1 安装 Pygal

请使用pip来安装Pygal(如果还未使用过pip,请参阅12.2.1节)。 在Linux和OS X系统中,应执行的命令类似于下面这样:

pip install --user pygal

在Windows系统中,命令类似于下面这样:

python -m pip install --user pygal

注意

你可能需要使用命令pip3而不是pip,如果这还是不管用,你可能需要删除标志--user。


15.4.2 Pygal 画廊

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

15.4.3 创建 Die 类

下面的类模拟掷一个骰子:

die.py
from random import randint
class Die():"""表示一个骰子的类"""
1 def __init__(self, num_sides=6):"""骰子默认为6面"""self.num_sides = num_sidesdef roll(self):""""返回一个位于1和骰子面数之间的随机值"""
2 return randint(1, self.num_sides) 

方法__init__()接受一个可选参数。创建这个类的实例时,如果没有指定任何实参,面数默 认为6;如果指定了实参,这个值将用于设置骰子的面数(见1)。骰子是根据面数命名的,6面 的骰子名为D6,8面的骰子名为D8,以此类推。

方法roll()使用函数randint()来返回一个1和面数之间的随机数(见2)。这个函数可能返回起始值1、终止值num_sides或这两个值之间的任何整数。

15.4.4 掷骰子

使用这个类来创建图表前,先来掷D6骰子,将结果打印出来,并检查结果是否合理:

die_visual.py
from die import Die
# 创建一个D6
1 die = Die()
# 掷几次骰子,并将结果存储在一个列表中
results = []
2 for roll_num in range(100):result = die.roll()results.append(result)
print(results) 

在1处,我们创建了一个Die实例,其面数为默认值6。在2处,我们掷骰子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的所 有数字,这表明所有可能的结果都出现了。

15.4.5 分析结果

为分析掷一个D6骰子的结果,我们计算每个点数出现的次数:

die_visual.py
--snip--
# 掷几次骰子,并将结果存储在一个列表中
results = []
1 for roll_num in range(1000):result = die.roll()results.append(result)
# 分析结果
frequencies = []
2 for value in range(1, die.num_sides+1):
3 frequency = results.count(value)
4 frequencies.append(frequency)
print(frequencies)

由于我们将使用Pygal来进行分析,而不是将结果打印出来,因此可以将模拟掷骰子的次数 增加到1000(见1)。为分析结果,我们创建空列表frequencies,用于存储每种点数出现的次 数。在2处,我们遍历可能的点数(这里为1~6),计算每种点数在results中出现了多少次(见3), 并将这个值附加到列表frequencies的末尾(见4)。接下来,我们在可视化之前将这个列表打印 出来: 

[155, 167, 168, 170, 159, 181]

结果看起来是合理的:我们看到了6个值——掷D6骰子时可能出现的每个点数对应一个;我 们还发现,没有任何点数出现的频率比其他点数高很多。下面来可视化这些结果。


关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

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

相关文章

Linux磁盘与文件管理

目录 一、磁盘介绍 1. 磁盘数据结构 2. 磁盘的接口类型 3. 磁盘在Linux上的表现形式 二、磁盘分区与MBR 1. 分区优缺点 2. 分区方式 3. MBR分区 4. GPT分区 三、文件系统 1. 文件系统的组成 2. 默认的文件系统 3. 文件系统的作用 4. 模拟破坏文件与修复文件 4…

C语言二维数值数组常用算法------------(C每日一编程)

--主、次对角线求和 --上、下三角求和 --N*N方阵转置 --杨辉三角 正文开始&#xff1a; 主对角线&#xff1a; 用两个双重for循环 int a[3][3], i, j, s 0; for (i 0; i < 3; i)for (j 0; j < 3; j)if (i j)s s a[i][j]; 次对角线&#xff1a; 用两个双重…

Next Station of Flink CDC

摘要&#xff1a;本文整理自阿里云智能 Flink SQL、Flink CDC 负责人伍翀&#xff08;花名&#xff1a;云邪&#xff09;&#xff0c;在 Flink Forward Asia 2023 主会场的分享。Flink CDC 是一款基于 Flink 打造一系列数据库的连接器。本次分享主要介绍 Flink CDC 开源社区在过…

STM32基础概念

1 什么是STM32 ST 是意法半导体&#xff0c;为公司名称&#xff0c;是SOC厂商。 M 是Microelectronics 的缩写。 32 表示32 位。 STM32 就是指ST 公司开发的32 位微控制器。 2 功能 自带了各种常用通信接口&#xff0c;比如USART、I2C、SPI 等&#xff0c;可接非常多的传感器…

uniapp实现前端银行卡隐藏中间的数字,及隐藏姓名后两位

Vue 实现前端银行卡隐藏中间的数字 主要应用了 filters过滤器 来实现效果 实现效果&#xff0c;如图&#xff1a; <template><div><div style"background-color: #f4f4f4;margin:50px 0 0 460px;width:900px;height:300px;"><p>原来&#…

python之Selenium WebDriver安装与使用

首先把python下载安装后&#xff0c;再添加到环境变量中&#xff0c;再打开控制台输入: pip install selenium 正常情况下是安装好的&#xff0c;检查一下“pip show selenium”命令&#xff0c;出现版本号就说明安装好了。 1&#xff1a;如果出现安装错误&#xff1a; 那就用“…

C++ 返回当前EXE所在的绝对路径和文件夹路径

目录 一、代码示例二、运行结果在代码里打印当前EXE所在的绝对路径和文件夹路径,以便调用该可执行程序时我可以知道当前执行程序的路径,以方便后续我使用别的文件夹和文件。 一、代码示例 #include<iostream> #include<string> #include<Windows.h> using…

EasyExcel简单合并单元格数据工具类

代码&#xff1a; package com.ly.cloud.util;import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.merge.AbstractMergeStrategy; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.use…

Alibaba Cloud Linux 3.2104 LTS 64位镜像兼容CentOS吗?

Alibaba Cloud Linux 3.2104 LTS 64位镜像兼容CentOS吗&#xff1f;完全兼容RHEL/CentOS生态和操作方式。 阿里云Alibaba Cloud Linux 3.2104 LTS 64位镜像是可以选择的&#xff0c;它阿里云打造的Linux服务器操作系统发行版&#xff0c;针对云服务器ECS做了大量深度优化&…

Windows 源码编译 MariaDB

环境 Win11, vs2022, git, cmake, Bison from GnuWin32, perl, Gnu Diff. 默认都安装好。 perl 看之前博客教程。perl Bison from GnuWin32 默认安装到 C:\GnuWin32 Add C:\GnuWin32\bin to your system PATH after installation. 下载mariadb源码 地址&#xff1a;MariaD…

【maven】pom.xml 文件详解

有关 maven 其他配置讲解参考 maven 配置文件 setting.xml 详解 pom.xml 文件是 Maven 项目的核心配置文件&#xff0c;其中包含了项目的元数据、构建配置、依赖管理等信息。以下是一个 pom.xml 文件的主要部分&#xff1a; <?xml version"1.0" encoding"U…

测试:抓包工具

抓包工具是网络安全和软件测试领域中非常重要的工具&#xff0c;它能够帮助用户捕获、分析和修改网络数据包。这些工具对于开发人员、测试人员以及安全研究人员来说都非常实用&#xff0c;因为它们可以用来监测网络流量、定位问题、分析协议以及进行安全评估。 Fiddler Fiddl…

代码随想录 Leetcode27. 移除元素

题目&#xff1a; 代码(首刷看解析 2023年12月28日)&#xff1a; class Solution { public:int removeElement(vector<int>& nums, int val) {int n nums.size();int slowIndex 0;for(int fastIndex 0; fastIndex < n; fastIndex){if(val ! nums[fastIndex])…

电影“AI化”已成定局,华为、小米转战入局又将带来什么?

从华为、Pika、小米等联合打造电影工业化实验室、到Pika爆火&#xff0c;再到国内首部AI全流程制作《愚公移山》开机……业内频繁的新动态似乎都在预示着2023年国内电影开始加速进入新的制片阶段&#xff0c;国内AI电影热潮即将来袭。 此时以华为为首的底层技术科技企业加入赛…

leaflet学习笔记-地图缩略图(鹰眼)的添加(三)

介绍 地图缩略图控件有助于用户了解主窗口显示的地图区域在全球、全国、全省、全市等范围内的相对位置&#xff0c;也称为鹰眼图。Leaflet提供了好几种地图缩略图控件&#xff0c;本文介绍其中一个最常用控件&#xff0c;即插件Leaflet.MiniMap。 依赖添加 这些地图控件都可以…

清除conda和pip缓存的方法

conda 清除conda缓存中的所有包、索引和临时文件&#xff0c; conda clean --all 只清除conda缓存中的包&#xff0c;而不清除索引和临时文件 &#xff0c; conda clean --packages pip 清除pip缓存中的所有包和索引文件&#xff0c; pip cache purge

使用机器学习进行语法错误检测/纠正

francescofranco_39234 一、说明 一般的学习&#xff0c;特别是深度学习&#xff0c;促进了自然语言处理。各种模型使人们能够执行机器翻译、文本摘要和情感分析——仅举几个用例。今天&#xff0c;我们将研究另一个流行的用途&#xff1a;我们将使用Gramformer构建一个用于机器…

时间序列系列03-统计模型

时间序列统计模型是用来描述和预测时间序列数据的数学模型。这些模型通常基于过去的观测值&#xff0c;并假设时间序列的行为是可预测的。以下是一些常见的时间序列统计模型&#xff1a; 1. 自回归移动平均模型&#xff08;ARMA&#xff09;&#xff1a; ARMA 模型是由自回归…

vue常见面试题

1. Vue的最大优势是什么? 简单易学, 轻量级整个源码js文件不大, 双向数据绑定, 数据驱动视图, 组件化, 数据和视图分离, vue负责关联视图和数据, 作者中国人(尤雨溪), 文档都是中文的, 入门教程非常多, 上手简单. 相比传统网页, vue是单页面可以只刷新某一部分 2. Vue和jQ…

使用mysqldump命令备份数据库

在MySQL数据库管理中&#xff0c;备份和恢复数据库是非常重要的操作。备份可以帮助我们在数据丢失或者出现其他问题时恢复数据&#xff0c;而恢复可以帮助我们将备份的数据重新导入到数据库中。本文将详细介绍如何备份和恢复MySQL数据库。 一、备份MySQL数据库 使用mysqldump命…