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

news2025/1/18 17:01:28

目录

15.4.6 绘制直方图

die_visual.py

注意

15.4.7 同时掷两个骰子

dice_visual.py

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

different_dice.py

15.5 小结

第 16 章

16.1 CSV 文件格式

16.1.1 分析 CSV 文件头

highs_lows.py

注意

16.1.2 打印文件头及其位置

highs_lows.py

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

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


15.4.6 绘制直方图

有了频率列表后,我们就可以绘制一个表示结果的直方图。直方图是一种条形图,指出了各 种结果出现的频率。创建这种直方图的代码如下:

die_visual.py
import pygal
--snip--
# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
 frequency = results.count(value)
 frequencies.append(frequency)
# 对结果进行可视化
1 hist = pygal.Bar()
hist.title = "Results of rolling one D6 1000 times."
2 hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
3 hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

为创建条形图,我们创建了一个pygal.Bar()实例,并将其存储在hist中(见1)。接下来, 我们设置hist的属性title(用于标示直方图的字符串),将掷D6骰子的可能结果用作x轴的标签 (见2),并给每个轴都添加了标题。在3处,我们使用add()将一系列值添加到图表中(向它传递要给添加的值指定的标签,还有一个列表,其中包含将出现在图表中的值)。最后,我们将这个 图表渲染为一个SVG文件,这种文件的扩展名必须为.svg。

要查看生成的直方图,最简单的方式是使用Web浏览器。为此,在任何Web浏览器中新建一 个标签页,再在其中打开文件die_visual.svg(它位于die_visual.py所在的文件夹中)。你将看到一 个类似于图15-11所示的图表(为方便印刷,我稍微修改了这个图表;默认情况下,Pygal生成的 图表的背景比你在图15-11中看到的要暗)。


注意

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


15.4.7 同时掷两个骰子

同时掷两个骰子时,得到的点数更多,结果分布情况也不同。下面来修改前面的代码,创建 两个D6骰子,以模拟同时掷两个骰子的情况。每次掷两个骰子时,我们都将两个骰子的点数相 加,并将结果存储在results中。请复制die_visual.py并将其保存为dice_visual.py,再做如下修改:

dice_visual.py
import pygal
from die import Die
# 创建两个D6骰子
die_1 = Die()
die_2 = Die()
# 掷骰子多次,并将结果存储到一个列表中
results = []
for roll_num in range(1000):
1 result = die_1.roll() + die_2.roll()
results.append(result)
# 分析结果
frequencies = []
2 max_result = die_1.num_sides + die_2.num_sides
3 for value in range(2, max_result+1):
 frequency = results.count(value)
 frequencies.append(frequency)
# 可视化结果
hist = pygal.Bar()
4 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 = "Result"
hist.y_title = "Frequency of Result"
hist.add('D6 + D6', frequencies)
hist.render_to_file('dice_visual.svg')

创建两个Die实例后,我们掷骰子多次,并计算每次的总点数(见1)。可能出现的最大点数 12为两个骰子的最大可能点数之和,我们将这个值存储在了max_result中(见2)。可能出现的最 小总点数2为两个骰子的最小可能点数之和。分析结果时,我们计算2到max_result的各种点数出 现的次数(见3)。我们原本可以使用range(2, 13),但这只适用于两个D6骰子。模拟现实世界 的情形时,最好编写可轻松地模拟各种情形的代码。前面的代码让我们能够模拟掷任何两个骰子 的情形,而不管这些骰子有多少面。

创建图表时,我们修改了标题、x轴标签和数据系列(见4)。(如果列表x_labels比这里所示 的长得多,那么编写一个循环来自动生成它将更合适。)

运行这些代码后,在浏览器中刷新显示图表的标签页,你将看到如图15-12所示的图表。

这个图表显示了掷两个D6骰子时得到的大致结果。正如你看到的,总点数为2或12的可能性 最小,而总点数为7的可能性最大,这是因为在6种情况下得到的总点数都为7。这6种情况如下: 1和6、2和5、3和4、4和3、5和2、6和1。

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

下面来创建一个6面骰子和一个10面骰子,看看同时掷这两个骰子50 000次的结果如何:

different_dice.py
from die import Die
import pygal
# 创建一个D6和一个D10
die_1 = Die()
1 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()
2 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 = "Result"
hist.y_title = "Frequency of Result"
hist.add('D6 + D10', frequencies)
hist.render_to_file('dice_visual.svg')

为创建D10骰子,我们在创建第二个Die实例时传递了实参10(见1)。我们还修改了第一个 循环,以模拟掷骰子50 000次而不是1000次。可能出现的最小总点数依然是2,但现在可能出现 的最大总点数为16,因此我们相应地调整了标题、x轴标签和数据系列标签(见2)。 图15-13显示了最终的图表。可能性最大的点数不是一个,而是5个,这是因为导致出现最小 点数和最大点数的组合都只有一种(1和1以及6和10),但面数较小的骰子限制了得到中间点数的 组合数:得到总点数7、8、9、10和11的组合数都是6种。因此,这些总点数是最常见的结果,它 们出现的可能性相同。

通过使用Pygal来模拟掷骰子的结果,能够非常自由地探索这种现象。只需几分钟,就可以 掷各种骰子很多次。

15.5 小结

在本章中,你学习了:如何生成数据集以及如何对其进行可视化;如何使用matplotlib创建简 单的图表,以及如何使用散点图来探索随机漫步过程;如何使用Pygal来创建直方图,以及如何 使用直方图来探索同时掷两个面数不同的骰子的结果。 使用代码生成数据集是一种有趣而强大的方式,可用于模拟和探索现实世界的各种情形。完 成后面的数据可视化项目时,请注意可使用代码模拟哪些情形。请研究新闻媒体中的可视化,看 看其中是否有图表是以你在这些项目中学到的类似方式生成的。 在第16章中,我们将从网上下载数据,并继续使用matplotlib和Pygal来探索这些数据。

第 16 章

下载数据

16.1 CSV 文件格式

要在文本文件中存储数据,最简单的方式是将数据作为一系列以逗号分隔的值(CSV)写入 文件。这样的文件称为CSV文件。例如,下面是一行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

这是阿拉斯加锡特卡2014年1月5日的天气数据,其中包含当天的最高气温和最低气温,还有 众多其他数据。CSV文件对人来说阅读起来比较麻烦,但程序可轻松地提取并处理其中的值,这 有助于加快数据分析过程。


注意 这个项目使用的天气数据是从http://www.wunderground.com/history/下载而来的。


16.1.1 分析 CSV 文件头

csv模块包含在Python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴 趣的值。下面先来查看这个文件的第一行,其中包含一系列有关数据的描述:

highs_lows.py
import csv
filename = 'sitka_weather_07-2014.csv'
1 with open(filename) as f:
2 reader = csv.reader(f)
3 header_row = next(reader)
print(header_row)

导入模块csv后,我们将要使用的文件的名称存储在filename中。接下来,我们打开这个文 件,并将结果文件对象存储在f中(见1)。然后,我们调用csv.reader(),并将前面存储的文件 对象作为实参传递给它,从而创建一个与该文件相关联的阅读器(reader)对象(见2)。我们 将这个阅读器对象存储在reader中。

模块csv包含函数next(),调用它并将阅读器对象传递给它时,它将返回文件中的下一行。 在前面的代码中,我们只调用了next()一次,因此得到的是文件的第一行,其中包含文件头(见 3)。我们将返回的数据存储在header_row中。正如你看到的,header_row包含与天气相关的文件 头,指出了每行都包含哪些数据:

['AKDT', 'Max TemperatureF', 'Mean TemperatureF', 'Min TemperatureF',
'Max Dew PointF', 'MeanDew PointF', 'Min DewpointF', 'Max Humidity',
' Mean Humidity', ' Min Humidity', ' Max Sea Level PressureIn',
' Mean Sea Level PressureIn', ' Min Sea Level PressureIn',
' Max VisibilityMiles', ' Mean VisibilityMiles', ' Min VisibilityMiles',
' Max Wind SpeedMPH', ' Mean Wind SpeedMPH', ' Max Gust SpeedMPH',
'PrecipitationIn', ' CloudCover', ' Events', ' WindDirDegrees']

reader处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。 文件头AKDT表示阿拉斯加时间(Alaska Daylight Time),其位置表明每行的第一个值都是日期或 时间。文件头Max TemperatureF指出每行的第二个值都是当天的最高华氏温度。可通过阅读其他 的文件头来确定文件包含的信息类型。


注意

文件头的格式并非总是一致的,空格和单位可能出现在奇怪的地方。这在原始数据文件 中很常见,但不会带来任何问题。


16.1.2 打印文件头及其位置

为让文件头数据更容易理解,将列表中的每个文件头及其位置打印出来:

highs_lows.py
--snip--
with open(filename) as f:
 reader = csv.reader(f)
 header_row = next(reader)
1 for index, column_header in enumerate(header_row):
 print(index, column_header) 

我们对列表调用了enumerate()(见1)来获取每个元素的索引及其值。(请注意,我们删除 了代码行print(header_row),转而显示这个更详细的版本。) 输出如下,其中指出了每个文件头的索引:

0 AKDT
1 Max TemperatureF
2 Mean TemperatureF
3 Min TemperatureF
--snip--
20 CloudCover
21 Events
22 WindDirDegrees

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


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

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

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

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

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

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

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

相关文章

k8s 网络

还没有部署网络。 k8s的网络类型: k8s中的通信模式: 1,pod内部之间容器和容器之间的通信。 在同一个pod中的容器共享资源和网络,使用同一个网络命名空间。可以直接通信的。 2,同一个node节点之内不同pod之间的通信。…

docker 搭建gitlab 恢复和备份

最近一直在折腾gitlab 代码管理系统 采用docker搭建 镜像网址 https://hub.docker.com/ 技术交流 http://idea.coderyj.com/ 1.因为我要恢复的版本是12.0.9的所有我就下载了docker-ce的12.0.9的镜像 1.下载镜像 docker pull gitlab/gitlab-ce:12.0.9-ce.02.安装 docker run …

VUE2入门教程

VUE2 1.vue环境搭建 1.1.什么是vue ​ vue是一套用于构建用户界面的渐进式JavaScript框架。中文官网:https://cn.vuejs.org/ 渐进式:vue可以自底向上逐层的应用。(引入轻量的核心库逐渐递进到各种各样的复杂库) ​ vue由当时…

uniapp发送formdata表单请求(全网最简单方法)

因为uniapp不支持直接传输formdata,只提供了uploadFile方法上传文件,但是利用该方法就可以传输formdata了。 第一种: 可以直接使用filePath属性进行空文件传输,只需要设置filePath为空就行了。 function $uploadForm(url, data…

Python(九十二)函数的参数定义-个数可变的位置参数和个数可变的关键字形参

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

骨传导耳机和开放式耳机的区别是什么?使用开放式耳机会损伤听力吗?

其实很多人对开放式耳机不了解,开放式耳机是指不用塞入耳道,开放双耳佩戴的耳机,而骨传导耳机也算开放式耳机的一种,在开放式耳机中,分为骨传导耳机和气传导耳机,想要知道开放式耳机是否会损伤听力&#xf…

《数据库开发实践》之存储过程【知识点罗列+例题演练】

一、什么是存储过程? 1.概念理解: 存储过程是一组为了完成特定功能的SQL语句集。通过组成SQL语句和控制语句,提供一种封装任务的方法。因此在创建编译好某个存储过程后,因为存储过程中有可执行操作的sql语句,用户可以…

会议室占用时间段 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间, 格式为: [[会议1开始时间,会议1结束时间],[会议2开始时间,会议2结束时间]] 请计算会议室占用时间段。 输入描述 [[会议1开始时间,…

Deep Learning(wu--108-118)CNN详解(一)

文章目录 4 卷积神经网络计算机视觉CV边缘检测示例CNNPaddingStride三维卷积参数量计算单层卷积网络小结池化为什么使用卷积 4 卷积神经网络 计算机视觉CV 边缘检测示例 CNN Padding Stride 三维卷积 参数量计算 单层卷积网络小结 池化 为什么使用卷积 参数共享和稀疏计算

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup(KY-008)具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器(KY-02…

Qt学习:Qt的意义安装Qt

Qt 的简介 QT 是一个跨平台的 C图形用户界面应用程序框架。它为程序开发者提供图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正地组件编程。 支持平台 xP 、 Vista、Win7、win8、win2008、win10Windows . Unix/Linux: Ubuntu 等…

ERROR: No matching distribution found for torch==1.12.0+cu113

原因 pip install torch1.12.0cu113用pip安装torch时,出现: ERROR: No matching distribution found for torch1.12.0cu113好像不少用清华源的会出现这个问题 解决办法 pytorch官网:https://pytorch.org/get-started/previous-versions/ …

Flink1.17实战教程(第七篇:Flink SQL)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

网络编程『简易TCP网络程序』

🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌤️前言🌦️正文TCP网络程序1.字符串回响1.1.核心功能1.2.程序…

数据结构学习 jz13衣橱整理

关键词:搜索算法 dfs bfs 回溯 题目: 各数位之和: 求法代码: int sums(int x){int s0;while(x!0){sx%10;xx/10;}return s;} 总的思路: 这道题是求可以到达的格子数,想到可以用搜索算法来做,…

Unity中Shader 齐次坐标

文章目录 前言一、什么是齐次坐标二、齐次坐标增加分量 w 的意义1、当 w ≠ \neq  0时:2、当 w 0时:3、用方程组,直观的看一下w的意义 前言 在之前的文章中,我们进行了正交相机视图空间转化到裁剪空间的推导。 Unity中Shade…

独立站:品牌建设的新高地

一、引言 在当今的商业环境中,品牌建设已成为企业成功的关键因素之一。随着电子商务的迅猛发展,独立站已成为品牌建设的新高地,为企业提供了展示品牌形象、扩大知名度和美誉度的平台。本文将深入探讨独立站在品牌建设中的优势和应用&#xf…

C++实现令牌桶过滤算法

什么是令牌桶算法 令牌桶算法通过限制令牌桶的固定容量,实现对资源以及流量的延迟控制。请求者需先获取令牌,方可执行动作。若令牌桶内具有足够令牌便可通过消耗相等数量放过请求;而若令牌不足,则会拒绝请求。 该算法具备平滑的…

OpenStack搭建和部署

Centos官网qcow2镜像修改root账号密码,开启ssh等 wget http://172.16.20.10/vmtemplate/KVM/wangrui/Debian/debian-10.2.0-openstack-amd64.qcow2 一、查看镜像文件信息 [debian-10.2-cloud] nameDebian 10.2.0 (Buster) Cloud osinfodebian10 archx86_64 fi…

洛谷P1498 南蛮图腾

题目背景 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们…