原文:AskPython Blog
协议:CC BY-NC-SA 4.0
原文:https://www.askpython.com/python/examples/color-detection
你好,程序员朋友们!今天在本教程中,我们将学习如何在 Python 中的 OpenCV 库的帮助下检测图像中的各种颜色。
检测图像中任何颜色名称的过程称为颜色检测。对人类来说,这是一项极其简单的任务,但对计算机来说却不那么简单。人类的眼睛和大脑协同工作,将光转化为颜色。信号通过我们眼睛里的光感受器传递到大脑。这种颜色被我们的大脑识别出来。
在这个 Python 颜色检测教程中,我们将创建一个应用程序,让您只需点击它就可以获得颜色的名称。因此,我们需要一个包含颜色名称和值的数据文件。然后我们将计算每种颜色之间的距离,并选择距离最小的颜色。
红、绿、蓝是构成任何可用颜色的三原色。计算机中的每个颜色值都被定义为 0 到 255 之间的一个数字。一种颜色可以有大约 1650 万种不同的表现方式。我们需要使用数据集将每种颜色的值转换成它们的名称。我们将使用包含 RGB 值及其名称的数据集。
第一步是导入所有需要的模块和 OpenCV,然后加载图像,但是要确保图像和代码文件在同一个文件夹中。
我们利用库对 CSV 这样的数据文件进行操作。而函数用于加载和读取 CSV 文件。我们还在索引列表中为每一列指定了一个名称,以便于访问。
首先,我们必须创建一个显示输入图像的新窗口。然后,我们提供了一个回调函数,只有当鼠标事件在图像上发生时,该函数才会被激活。
但是现在我们要创建一个这个名字提到的回调函数。
让我们来理解这个回调函数将做什么:它将计算我们双击的像素的 rgb 值,并保存鼠标位置的(x,y)坐标。
既然我们已经从图像中提取了 rgb 值,现在我们需要将 rgb 值更改为颜色名称。下面的函数也是如此。
为了得到颜色名称,我们计算一个距离(d ),它告诉我们离一个特定的颜色有多近,然后选择一个距离最小的颜色。使用以下公式计算距离:
d = abs(红-红颜色)+(绿-绿颜色)+(蓝-绿颜色)
我们利用函数在我们之前创建的窗口上绘制图像。当用户双击窗口时,在图像上绘制一个矩形,分别使用和函数获得窗口的颜色名称。
Color Detection Window Opencv
Detected Red Color Detection
Detected Cyan Color Detection
Skin Color Detection Image2
今天我们学习了如何使用 Python 编程语言中的 OpenCV 来检测颜色。希望你学到了一些东西!
感谢您的阅读!
原文:https://www.askpython.com/python-modules/colorsys-module
读者朋友们,你们好!在本文中,我们将详细关注 Python colorsys 模块。所以,让我们开始吧!🙂
Python 为我们提供了不同的模块来测试数据值的功能,并执行操作和表示。Python colorsys 模块就是这样一个模块。
colorsys 模块帮助我们对以下颜色值进行双向转换
- (色调明度饱和度)
- YIQ(亮度(Y)同相正交)
- HSV(色调饱和度值)
- RGB(红、绿、蓝)
所有这些颜色的坐标表示都是浮点值。转换值的允许范围通常分别在 0–1 之间。
现在让我们在下一节看看它们之间的相互转换。
1。RGB 到 YIQ 的相互转换
colorsys 模块为我们提供了 rgb_to_yiq()方法,该方法启动 rgb 到亮度(Y)同相正交颜色范围之间的转换。同样,我们需要将三个颜色值作为参数传递给函数,如下所示:
- 红色
- 绿色
- 蓝色
看看下面的语法!🙂
语法:
例 1: RGB- > YIQ
在下面的例子中,我们将红色、绿色和蓝色这三个颜色值传递给了 rgb_to_yiq()函数,并实现了 rgb 到 yiq 色阶的转换。
输出:
Python colorsys 模块包括 yiq_to_rgb()函数,用于将亮度(Y)同相正交颜色值转换为 rgb 模式。
语法:
例二: YIQ- > RGB
我们已经执行了 YIQ 色标值到红绿蓝色标的转换。
输出:
2。HSV 到 RGB 的相互转换
除了 YIQ 和 rgb,colorsys 模块还为我们提供了 hsv_to_rgb(H,S,V)函数来执行 hsv 比例数据到 RGB 比例的转换。
语法:
例 1: HSV- > RGB
输出:
除此之外,colorsys 模块还为我们提供了 rgb_to_hsv(R,G,B)函数来执行 rgb 比例到 hsv 颜色值格式的转换。
例 2: HSV- > RGB
我们利用 rgb_to_hsv()函数实现了 rgb 色标到 hsv 色标的转换。
输出:
3。RGB 到 HLS 的相互转换
使用 Python colorsys 模块,您可以使用 rgb_to_hls()函数轻松执行 RGB 色标到 HLS 色标的转换。
语法:
举例:
在本例中,我们将 RGB 色阶值转换为 HLS 格式。
输出:
如下所示,在上面的例子中也是如此,转换范围通常只限于 0 到 1 的范围。
如果你遇到任何问题,欢迎在下面评论。更多与 Python 编程相关的帖子,请继续关注我们。
在那之前,学习愉快!!🙂
- Python colorsys 模块— 文档
原文:https://www.askpython.com/python-modules/pandas/combine-csv-files-using-python
通常在处理 CSV 文件时,我们需要处理大型数据集。根据数据分析的要求,我们可能会发现所有需要的数据都不会出现在一个 CSV 文件中。然后,需要合并多个文件以获得所需的数据。然而,将所需的列从一个文件复制粘贴到另一个文件,以及从大型数据集中复制粘贴,并不是解决这个问题的最佳方法。
为了解决这个问题,我们将学习如何使用熊猫的、和方法来合并 CSV 文件。
首先,让我们创建将要使用的示例 CSV 文件。
CSV File 1
CSV File 2
CSV File 3
请注意,所有三个文件都有相同的列或标题,即**、【姓名】、、【年龄】、、【分数】、。此外,文件 1 和文件 3 的‘name’列有一个公共条目,即 Sam ,但是这些文件中的其余值是不同的。**
注意,在下面的例子中,我们认为所有的 CSV 文件都与 Python 代码文件在同一个文件夹中。如果不是这样,请在自己尝试示例时相应地指定路径。所有的例子都记录在一本笔记本上。
开始之前,我们将创建一个 CSV 文件列表,这些文件将在下面的示例中使用,如下所示:
输出:
方法 1: append()
我们来看看这里的 append 方法合并三个 CSV 文件。
输出:
方法,顾名思义,将每个文件的数据帧附加到前一个文件的末尾。在上面的代码中,我们首先创建一个数据帧来存储名为 df_csv_append 的结果。然后,我们遍历列表,读取每个 CSV 文件,并将其附加到数据帧 df_csv_append 。
方法 2: concat()
另一种用于合并 CSV 文件的方法是熊猫方法。该方法需要一系列对象作为参数,因此我们首先为每个 CSV 文件创建一系列数据框对象,然后对其应用方法。
编写这段代码的一种更容易理解的方式是:
以上两个代码在执行时会产生如下所示的相同输出。
注意,产生的数据帧与方法的数据帧相同。
方法 3:合并()
方法用于连接非常大的数据帧。一次可以对两个数据框执行连接。我们可以指定执行连接所基于的键。
为避免重复行,为数据框中的每个条目选择一个唯一的键是一种很好的做法。我们还可以指定希望执行的连接类型,即*、、、、、、、或、【交叉】、*连接。
我们需要首先将每个 CSV 文件读入一个单独的数据帧。
df1
df2
df3
连接 df1 和 df2:
输出:
Merge Output 1
基于密钥“name”连接 df1 和 df3。
输出:
Merge Output 2
df1 和 df3 都有一个名为“Sam”的条目,并且两者的年龄和分值不同。因此,在结果数据帧中,存在用于表示来自 df1 和 df3 的条目的列。由于约翰和鲍勃在数据帧 df1 和 df3 中不常见,因此它们的值在任何适用的情况下都是 NaN。
在本文中,我们学习了 Pandas 方法,即 concat 、 merge 和 append ,以及如何使用它们通过 Python 组合 CSV 文件。
- 熊猫附加官方文件
- 熊猫串联官方文档
- 熊猫合并官方文件
原文:https://www.askpython.com/python-modules/pandas/combine-dataframes-in-python
读者你好!在本教程中,我们将学习在 Python 中组合数据帧的不同方法。
在 Python 中,数据帧是结构化的二维 Python 对象,用于以表格格式存储数据,即使用行和列。为了处理数据帧,我们需要 Python 模块。我们可以从各种 Python 对象创建 Pandas 数据帧,例如 list、dictionary、NumPy ndarray、另一个数据帧等。使用功能。下面是安装 Python 模块的命令:
让我们创建两个数据帧,我们将在以后的讨论中使用它们。创建熊猫数据帧的 Python 代码。
输出:
沿任一轴组合两个或多个数据帧的过程是在数据分析中使用的核心数据预处理技术之一。数据科学家或数据分析师必须经常使用不同的方法组合以熊猫数据帧形式呈现的数据。当从多个来源收集不同格式的数据时,在数据分析过程中执行这一步骤变得非常关键。我们已经创建了两只熊猫的数据帧,让我们开始讨论用 Python 逐个组合数据帧的不同方法。
方法 1:使用 concat()函数
在 Python 中,函数在 pandas 模块中定义,用于沿指定轴组合两个或多个 pandas 数据帧。轴= 0 表示垂直轴,轴= 1 表示水平轴。
通过连接它们,函数返回一个新的 DataFrame 对象。它可用于将一个数据帧的行或列组合到另一个数据帧中。让我们编写 Python 代码来实现熊猫数据帧上的功能。
输出:
方法 2:使用 append()函数
在 Python 中,函数也用于通过沿任一轴(水平轴或垂直轴)追加两个或更多熊猫数据帧来组合它们。让我们通过 Python 代码在熊猫数据帧上实现功能。
输出:
方法 3:使用 merge()函数
在 Python 中,pandas 模块提供了函数来组合 Python 中的数据帧,方法是使用数据库风格的连接来合并它们。默认情况下,它使用一个""操作来合并熊猫数据帧。
它可用于根据列名或索引组合数据帧,但传递的列名或索引级别必须同时出现在两个数据帧中。让我们来理解在 pandas 数据帧上实现功能的 Python 代码。
输出:
方法 4:使用 join()函数
在 Python 中,pandas 模块提供了函数,它可以通过在指定的列或索引级别上连接两个或多个 pandas 数据帧来有效地组合它们。默认情况下,它通过索引级别连接 pandas Dataframe 对象。让我们看看在 pandas 数据帧上实现功能的 Python 代码。
输出:
在本教程中,我们学习了以下内容:
- Python 中的 DataFrame 对象是什么
- 结合熊猫数据帧的重要性
- 组合熊猫数据帧的不同方法
原文:https://www.askpython.com/python-modules/comic-visualization-python
我们都知道,普通人对视觉信息的反应远远好于单纯的文字。通常情况下,Matplotlib 生成的图形非常完美,但是很无聊。观察这些图表并不有趣。
在本教程中,我们将以 XKCD 为例,努力使常规图像更具娱乐性和幽默性。
网络漫画 xkcd 由美国作家兰道尔·门罗于 2005 年创立。xkcd 是每周更新的网络连环画。它是最受欢迎的漫画书之一。我们将在这里尝试用 xkcd 漫画的风格来描绘我们的剧情!
我们将从导入必要的库开始,然后将数据导入到程序中。在这里,我们加载 tips 数据集并输出其最初的五行。
Tips Dataset
条形图是数据的图形表示,其中的类别可以用特定的形式突出显示,如矩形。条形图中条形的长度和高度显示了数据集中数据的分布。
也读作: Python 条形图——可视化 Python 中的分类数据
使用 sns.countplot 函数,我们可以生成一个基本的条形图。
BarPlot Normal
为了让剧情具有喜剧效果,我们需要在整个代码之前添加 plt.xkcd 方法。
BarPlot Comic
箱线图是对数据集数据分布的度量。它将数据集分成四分位数。此图描述了数据集的最小值、最大值、中值、第一个四分位数和第三个四分位数。
也读: Boxplots:你需要知道的一切
使用下面的代码,我们可以使用 sns.boxplot 函数生成一个箱线图。
BoxPlot Normal
要制作一个剧情漫画,我们需要在整个代码之前添加 plt.xkcd 方法。
BoxPlot Comic
在本例中,我们将利用 linspace 和 sin 函数生成正弦波图的值,如下面的代码所示。
Sine Wave Normal
要制作一个剧情漫画,我们需要在整个代码之前添加 plt.xkcd 方法。
Sine Wave Comic
Matplotlib 的 pie()函数支持饼状图。plt.pie()方法可用于生成绘图。以下代码生成一个饼图:
PieChart Normal
为了让剧情漫画化,我们需要在整个代码之前添加 plt.xkcd 方法。
PieChart Comic
我希望你喜欢这个教程,在 xkcd 的帮助下,从枯燥的标准可视化到有趣的漫画。我还会向您推荐以下教程:
- 使用 Python 散景进行数据可视化
- 用 Python 制作数据动画——简单指南
- Python 编程语言中的 ASCII 艺术
感谢您的阅读!快乐学习!😃
原文:https://www.askpython.com/python/examples/comparing-date-time-in-python
当一个人必须分析数据时,没有例外。为分析而部署的工具必须能够兼容处理各种类型的数据。数据可以是文本、分数、日期、整数、时间等形式。Python 是最受欢迎的数据分析工具之一,它有自己的一套模块来处理这种数据多样性。
本文将重点展示如何使用 python 来比较不同的日期和时间。通过不同的日期和时间,推断是针对不同时区的日期和时间。
表面上看,时间可能是一样的,但如果把时区因素考虑在内,情况就完全不同了。我们将通过导入 python 中的一些库——pytz &datetime来探索这一点。
这可以通过键入以下代码来完成。
Datetime Time Zone Libraries Imported
模块日期时间 包含了两个日期&时间,所以本节我们只选择日期进行比较。这可以通过使用下面的代码从上面的模块中只提取日期来完成。
现在让我们尝试比较两个日期,以确定它们是否属于一周中的同一天。我们将首先使用下面的代码调用今天的日期。
Calling Todays Date
如果选择使用 datetime.today() 而不是 date.today() 会怎么样?这将导致以下结果,因为我们已经选择只使用来自日期时间模块的日期。
Datetime Error
现在让我们继续输入另一个日期,以便与当前日期进行比较。但是在输入月份或日期时要小心,因为 Python 不喜欢在这些地方使用前导零。否则将出现以下错误。
Leading Zero Error
所以如果没有前导零,代码就变成了,
既然我们知道了如何构造一个日期,现在让我们使用 weekday() 来比较这两个日期,看看它们是否共享同一个工作日。
执行上面的代码会得到下面的输出。
Weekdays Of Two Dates Compared
在本节中,我们将尝试比较两个时区之间的差异&验证它们是否相同。为此,我们将使用 Python 中的一个专有命令,称为 *timedelta()。*下面是它的语法,
该命令不能立即使用,而是从 datetime 库中导入,
使用的任何两个日期或时间之间的时间差就是 时间增量 有助于指示的。让我们将它设置为 3 小时 30 分钟,并将其赋给一个变量*‘Td’*,以验证任意两个选定时区之间的时差是否与之匹配。
现在我们将使用下面的代码包括时间和日期,因为我们只限于上一节中的日期。
一旦完成,印度时区和澳大利亚时区的当前时间被分别分配给变量*‘tind’和‘taus’*。
Assigning Timedelta Time Zones
然后使用 if 逻辑进行如下比较。
下面是代码执行后的输出。
Different Time Zones Compared
既然我们已经到了本文的结尾,希望它已经详细阐述了如何使用 Python 中的 datetime & pytz 库来比较不同时区的日期和时间。这里有另一篇文章详细介绍了如何在 Pandas 中使用 isin()命令。在 AskPython 中还有许多其他有趣的&文章,这些文章可能对那些想提高 Python 水平的人有很大帮助。欢呼!
原文:https://www.askpython.com/python/competitive-programming
你好,这里是编码器!我很确定你熟悉什么是竞争性编程。但是在用 python 编码时,需要记住一些重要的事情。这些小事情会给你的代码带来巨大的不同。
让我们逐一研究其中的几个。
1.发电机的使用
使用生成器可以减少空间和时间的复杂性,并且比使用函数要好。下面显示了一个生成器函数的图示。
同时一个接一个地返回多个值也很有帮助。
2.内置函数的使用
使用内置函数和库是比普通方法更好的方法。让我们看下面一个简单的程序,它有一个新的列表,包含第一个列表的元素的平方。
为了更好地说明差异,我们将在 time 模块的帮助下计算程序的执行时间。
上面的方法显示了在秒内的正确输出,这无疑是相当不错的。
现在让我们使用内置函数来尝试相同的程序,并将声明的函数直接应用于列表。
在这里,我们看到相同列表所用的时间是秒,这看起来是一个非常小的差异,但是对于更大的数据,这个差异可能会变得更大。
3.使用 itertools
这个模块对于解决一些复杂的问题非常有帮助。例如,看看下面给出的程序,找出一个列表的所有排列。
同样的事情也可以通过创建你自己的逻辑和函数来完成,但是那样会太复杂,时间复杂度也更高。
4.使用地图功能
每当我们需要在由空格分隔的一行中输入一个整数数组的所有元素时, map 函数是实现这一点的最佳方法。
使用函数简化了在一行中输入多个值的复杂性。
5.串并置
要将多个字符串连接在一起,我们可以使用两种方法:将字符串添加到字符串或使用 join 函数。
建议使用函数,因为它在一行中执行整个连接过程,如果字符串数量很大,可以降低复杂性。
让我们看看第一种方法:对字符串使用加法运算。下面给出的程序最后的执行时间是秒。
然而,第二种方法:使用 join 操作给出的时间复杂度只有秒,这显然要小得多。
恭喜你!今天,您学习了一些非常基本但重要的事情,在使用 python 编程语言进行竞争性编程时,请记住这些事情。
这些技巧肯定能在很大程度上帮助您提高我们解决方案的效率和准确性。
自己去试试吧!编码快乐!
原文:https://www.askpython.com/python/examples/compute-distances-in-python
你好。今天我们将学习如何用 python 编程语言计算距离。在本教程中,我们将计算以下距离:
- 汉娩距
- 欧几里得距离
- 曼哈顿距离
我们将查看每个距离计算的公式,然后学习如何在 python 代码的帮助下进行计算。
也读:用 Python 计算 a^n:用 Python 计算幂的不同方式
汉明距离是以二进制格式计算两个数字之间的距离。它基本上意味着二进制格式中两个数之间的位数不同。
例如,如果我们选择二进制数 101 和 111,那么它们之间的汉明距离是 1,因为它们只相差一个二进制数字。
用 Python 实现汉明距离
现在,为了计算不同的位数,我们将使用 XOR 运算。XOR 仅在比特不同时产生 1,否则产生 0。最后,我们将计算这两个数字的 XOR 运算中的置位位数。
我们输入 12 和 9 作为两个输入,汉明距离为 3,如下图所示。
欧几里得距离是空间中两点之间的距离,可以借助毕达哥拉斯公式来测量。公式如下所示:
把这些点看作是(x,y,z)和(a,b,c),那么距离计算如下:
[(x-a)2+(y-b)2+(z-c)^2)]的平方根。
实施
为了计算两个坐标点之间的欧几里德距离,我们将使用 python 中的 numpy 模块。
上面提到的代码的输出结果是 2.8284271247461903。你也可以用计算器手动计算距离,结果大致相同。
也读作:计算未加权图中节点间的距离
两个向量/数组(比如说 A 和 B) 之间的曼哈顿距离被计算为σ| A[I]–B[I]|其中 A [i] 是第一个数组中的第 I 个元素,B [i] 是第二个数组中的第 I 个元素。
代码实现
上面提到的代码的输出如下所示。
我希望你理解了教程中提到的所有距离计算的概念和代码逻辑。感谢您阅读教程!
快乐学习!😇
原文:https://www.askpython.com/python/examples/compute-raised-to-power
在本教程中,我们将以几种不同的方式计算 的 次方。让我们一步一步地看一个又一个方法。
也读作: Python pow()方法
计算最基本的方法就是将乘以数字 a,n 乘以反复计算。这种方法非常慢,效率也不高。
尽管如此,这种方法的代码还是在下面提到了。
我们从上面提到的代码得到的输出是 32 ,这是正确的输出。现在让我们转到下一个方法。
我们将通过递归来处理这个方法。如果你想知道更多关于递归的知识,你可以阅读下面提到的教程。
了解更多关于递归的知识:Python 中的递归
这里的基本概念是 fun(a,n) = a * fun(a,n-1) 。所以递归可以用来计算 a 的 n 次幂。
代码如下所述。添加评论供您参考。
我们从上面的代码中得到的输出是 32 ,这是准确无误的输出。让我们转到下一个方法,它只使用递归,但以更好的方式。
前面我们使用了线性递归方法,但是计算 n 的幂也可以基于 n 的值(幂值)来计算。
- 如果 n 是偶数那么 fun(a,n)=【fun(a,n/2)】^ 2
- 如果 n 是奇数那么 *fun(a,n)= a (fun(a,n/2)】^ 2)
这将是一种更有效的方法,并将在很大程度上减少程序所花费的时间。下面提到了相同方法的代码。
该代码的输出也是正确的 32 。与以前的方法相比,这种方法占用一半的时间。
因此,在本教程中,我们学习了如何使用各种方法计算 a 的 n 次幂,有些方法涉及递归,有些不涉及。你可以采用任何一种方法,但选择最有效的方法总是更好。
感谢您的阅读!编码快乐!👩💻
原文:https://www.askpython.com/python/examples/computing-parity-of-a-word
你好编码器!因此,在本教程中,我们将学习什么是单词的奇偶性,以及如何在 Python 编程中计算单词的奇偶性。我们先来了解一下一个词的奇偶性是如何计算的。
二进制字的奇偶性为:
- 如果单词包含奇数个 1 和,
- 如果它包含偶数个 1。
一些例子如下:
-
字 1:1011
1 的个数= 3
0 的个数= 1
奇偶校验= 1 因为 1 是奇数。 -
word 2:10001000
1 的个数= 2
0 的个数= 6
奇偶校验= 0 因为 1 是偶数。
问题陈述清楚地说我们需要计算一个词的宇称。简单来说,如果设置位(为 1 的位)的总数为奇数,则奇偶校验为,否则为。
方法 2 将利用右移位和异或运算。下面实现了这种方法,并添加了一些注释供您理解。
我希望你很好地理解了问题陈述和解决方案。您可以尝试在您的代码编辑器上实现相同的代码,并更多地了解单词的奇偶性。
感谢您的阅读!编码快乐!
原文:https://www.askpython.com/python/list/concatenate-multiple-lists-in-python
在本文中,我们将了解在 Python 中连接多个列表的各种技术。Python 列表为我们提供了一种存储数据和对数据进行操作的方法。
以下任一技术可用于将两个或多个列表连接在一起:
- 通过使用 itertools 模块
- 通过使用 Python 的’+'运算符
- 通过使用 Python 的’ * '运算符
1.使用 Python itertools.chain()方法
Python itertools 模块为我们提供了 itertools.chain()方法,将多个列表串联在一起。
方法接受不同的可迭代数据,如列表、字符串、元组等,并从中提供元素的线性序列。
该函数的工作与输入数据的数据类型无关。
语法:
举例:
输出:
2.使用 Python“*”运算符
Python 提供了一种更有效的方法来对输入列表进行操作并将它们连接在一起。
它在提供的索引位置表示并展开数据元素。
语法:
如前所述,*input_list1,*input_list2 等将包含该列表中给定索引处的元素,按上述顺序排列。
举例:
输出:
3.使用 Python“+”运算符
Python 可以用来将列表连接在一起。
语法:
举例:
输出:
因此,在本文中,我们揭示了用 Python 连接多个列表的不同方法。
Python 中连接列表的方法
原文:https://www.askpython.com/python/conda-vs-pip
在我们对 Python 的日常使用中,Conda 和 Pip 有时可以互换。PIP 和 conda 是 Python 非常流行的包管理器。尽管这两个工具的某些功能重叠,但它们是为不同的目的而设计和使用的。下面是一个表格,展示了 conda 和 pip 之间的一系列差异。
| 差异点 | 点 | 康达 |
| 多语言依赖性 | 不支持 | 支持 |
| 软件包安装 | 建立在轮子上 | 下载二进制文件 |
| 包装可用性 | 235,000 包 | 1,500 多个包装 |
| 依赖性管理 | 没有 SAT 考试 | 执行 SAT 测试 |
| 虚拟环境管理 | 没有内置的虚拟管理 | 内置虚拟管理系统 |
| 简约主义 | 是 | 不 |
Table 1: Key summary of differences between pip and conda
在我们进一步了解这两个包管理器之间的区别之前,让我们了解一些关于 pip 和 conda 的基本信息。
皮普是什么?
Pip 一个简单的命令行工具,用于安装 python 包。这是从 python 包索引(PyPI) 中所有已发布的 Python 包中安装包的标准和推荐方式。如果你使用的是 Python 3.4(或更高版本),并且是从 python.org下载的,或者如果你在由 virtualenv 或 venv 创建的虚拟环境中工作,那么 pip 已经安装好了。
康达是什么?
Conda 是一个包、依赖和环境管理系统,最初是为 Python 开发的,但后来被扩展用于 Python、R、Java、Scala、FORTRAN、C/C++等语言。它提供了一种安装、更新和删除软件包以及处理依赖关系的简单方法。在它的默认配置中,conda 从官方的 Conda 库安装软件包,而不是标准的特定语言库。
现在,我们已经对这两个软件包管理系统有了一些基本的了解,我们将看看这两个管理器之间的重要区别,这些区别造就了它们:
1.非 Python 依赖项的处理
正如我们之前了解到的,Conda 支持除 Python 之外的语言。这可能看起来微不足道,但是对于依赖性管理来说,这是一个非常强大且非常需要的特性。
Python 包恰好依赖于用 python 之外的语言编写的程序/包。Pip 不能像 LLVM 一样处理这些非 python 依赖性。HDF5 等。完全正确。这可能会导致某些包装破损。
所以我们看到 Conda 实际上在处理依赖性方面比 pip 领先一步。
2.软件包安装
这两种安装包的方式有非常重要的区别。
PyPI 中的 python 包被打包成 wheel 或 source 发行版。这意味着我们需要在本地机器上编译这个包,然后才能使用它。在调用 pip 命令之前,包编译需要在我们的本地机器上安装兼容的编译器和库。
另一方面,Conda 使用从 Anaconda 存储库和云中下载的编译后的二进制文件。这种方法使得安装过程没有任何编译器或库依赖问题。
3.包装可用性
打包和安装包的方法都是有效的,并且有各自的优缺点。
Conda 使安装变得更容易并优化了用户体验,而 pip 使开发人员的包维护变得更容易,否则他们将不必要地被迫为所有平台编译他们的包。
包编译在时间和空间上都是昂贵的。PyPI 中发布和维护了大量的包(超过 150,000 个)。这些包中的一些实际上是个人项目或具有一些利基用户群的包。
遗憾的是,Conda 不支持 PyPI 中的所有包。Conda 存储库和云包含近 1,500 多个包,主要专注于科学计算和机器学习。
软件包可用性之间的差异非常明显,就软件包可用性而言,pip 是迄今为止最好的软件包管理器。
注意:要安装 Conda 中没有的包,您可以在任何 Conda 环境中使用 pip。Pip 和 Conda 可以同时使用,但通常不推荐使用。
4.依赖性管理
pip 和 conda 之间最重要的区别是它们如何解决依赖性问题。
Pip 使用递归的串行循环来安装依赖项。Pip 并不检查以确保所有包的所有依赖项同时得到满足。
如果按顺序较早安装的软件包与按顺序较晚安装的软件包的版本有不兼容的依赖关系,那么环境就被破坏了,最重要的是,这个问题一直没有被发现,直到您发现一些奇怪的错误。
Conda 使用可满足性(SAT)求解器来验证环境中安装的所有软件包的所有要求都得到满足,从而解决了这个问题。该检查可能会花费额外的时间,但有助于防止破坏环境的创建。只要关于依赖关系的包元数据是正确的,conda 将可预见地产生工作环境。
所以当涉及到依赖性管理时,conda 通常是更好的选择。
5.虚拟环境管理
我们前面提到的 pip 只是一个维护包的小工具。康达提供的远不止这些。它带有一个内置的虚拟环境管理器。
使用 pip,您需要像 pipenv、virutalenv 这样的程序来创建虚拟环境。这是一个让 pip 只关注包管理而不使其臃肿的设计决策。pip 和其中一个环境管理器可以用来有效地创建和管理虚拟环境。
Conda 提供了开箱即用的虚拟环境管理器。它不仅提供虚拟环境功能,如 virutalenv 和 pipenv,我们还可以选择每个虚拟环境的 python 版本。这个特性有助于用户更容易地使用过时的包或只有在较低版本的 python 中才可用的包。
6.最低纲领
Pip 是一个简单的命令行工具,旨在只做一件事。它是简单的,模块化的,极简主义的设计。
另一方面,Conda 旨在提供一个简单的一体化解决方案。这是 pip 的替代方法。它的方法一点也不简单。Conda 自带一堆预装的包和软件。
对于一些用户来说,非极简方法可能是一个不受欢迎的特性。Conda 试图通过提供一个较小版本的 Conda 来克服这一点:Miniconda。Miniconda 提供了 conda 的所有功能,但只安装了设置 conda 所需的最小软件包。
这就把我们带到了这篇关于 pip 和 conda 的文章的结尾。请继续关注更多关于 python 的此类文章。
原文:https://www.askpython.com/python-modules/pandas/conditionally-grouping-values
在本文中,我们将有条件地对熊猫的值进行分组。我们已经通过详细介绍了 Python 熊猫群。因此,如果您不确定该函数是如何工作的,可以浏览一下这篇文章。
对数据库/数据框进行分组是日常数据分析和数据清理中的常见做法。分组是指将相同的数据(或具有相同属性的数据)组合成不同的组。
例如:想象一个学校数据库,里面有所有班级的学生。现在,如果校长希望比较班级之间的成绩/出勤情况,他需要比较每个班级的平均数据。但是他怎么能这样做呢?他根据学生所属的班级(同一个班级的学生进入同一个组)对学生数据进行分组,然后对组中每个学生的数据进行平均。
我们的例子涵盖了一个非常理想的情况,但它是分组的最基本的应用。分组可以基于多个属性。这有时称为分层分组,根据数据的其他属性将一个组进一步细分为更小的组。这使得我们的查询可以根据我们的需要而变得复杂。
还有一个非常基本的问题,我们在例子中忽略了,数据库中的所有数据不需要平均。例如,如果我们只需要比较每个班级的平均出勤率和百分比,我们可以忽略其他值,如手机号码或点名号码,它们的平均值实际上没有意义。在本文中,我们将学习如何在 pandas 中制作如此复杂的分组命令。
Pandas 提供了一个函数来分割数据帧,应用一个函数如和来形成分组数据集。对于数据帧来说,这似乎是一个可怕的操作,所以让我们首先将工作分成两组:拆分数据和应用并组合数据。对于这个例子,我们使用来自 Kaggle 的超市数据集。
An overview of pandas Groupby method
输出:
函数将接受标签或标签列表。这里我们想根据列分支进行分组,所以我们在函数定义中只指定了’ Branch’。我们还需要指定沿着哪个轴进行分组。 代表‘列’, 表示‘索引’。
输出:
现在我们已经学习了如何创建分组数据帧,我们将研究如何对数据应用分组条件。
A hierarchical map showing the difference between discrete and continuous data. Discrete data are counted whereas continuous data are measured.
使用离散(表格)数据进行分组是一种常见的做法。连续数据不适合分组。但这不会限制我们的数据分析能力吗?是的,很明显。所以我们需要一个变通方法。我们将对连续数据进行宁滨,以将数据制成表格。
例如:百分比是一个连续的数据,为了将它转换成带标签的数据,我们采用四个预定义的组-优秀(75-100)、良好(50-75)、差(25-50)、非常差(0-25)。每个数据无论如何变化,都将归入这 4 组。
Conversion of data from continuous to discrete from.
另一种方法是对不同的值使用 true 和 false。
例如,超市经理想知道有多少顾客一次购买了超过 3 件商品。一种方法是,如果文章数量大于或等于 3,则用 1/True 替换文章数量,否则用 0/False 替换。
输出:
基于其他列对值进行有条件分组
对于我们的最终查询,我们需要根据是否售出了 3 件以上的商品将数据帧分组。我们需要找到一次性购买超过 3 件商品的平均单价。
- 我们需要过滤掉我们感兴趣的列。
- 如果对连续数据进行分组,我们需要将连续数据转换成表格数据。
- 使用 分割数据。
- 应用聚合函数。
从上图可以看出,一次购买 3 件以上的物品的单价是 55.5846。
Pandas 内置了和等功能,使得查询变得更加容易。这允许用户对数据库进行更高级和复杂的查询。这些是我们在前面的例子中看到的 df.loc 的高级抽象
df.filter()方法
Pandas filter 方法允许你过滤数据帧的标签。它不作用于数据帧的内容。这是一个过滤掉数据集中的城市和性别标签的例子。
我们也可以使用正则表达式过滤掉标签。我们尝试过滤以字母 c 开头的标签。
df.query()方法
查询方法允许查询任意复杂程度的数据帧列的内容。这里有一个例子来找出顾客一次购买超过 3 件商品的情况。
我们还可以使用’ & ‘和’ | '将许多条件组合在一起。例如,我们想找出顾客一次购买超过 3 件商品并使用现金付款的情况。
组合 df.query()和 df.filter()以及 df.groupby()
我们想解决根据是否有超过 3 件商品售出来将数据帧分组的问题。我们需要找到每个城市一次性购买超过 3 件商品的平均单价。
我们分三步进行:
- 使用筛选出超过 3 条的数据。
- 使用仅保留感兴趣的标签(此处为城市和单价)
- 使用对数据进行分组
参考
- 了解熊猫 groupby()函数
- pandas group by function–journal dev
原文:https://www.askpython.com/python/examples/conditionals-in-python
这个世界比看起来要复杂得多。这就是为什么在某些情况下我们需要设置条件来解决复杂性。在条件句的帮助下,你可以跳过一些复杂的内容或者快速运行一系列的语句。您也可以在语句和执行程序之间进行选择。例如,在日常生活中,我们使用很多条件句,如如果今天下雪,我就不去市场了,否则我就去。
在本教程中,我们将学习如何在 Python 中使用条件句。所以让我们开始吧!
我们一个一个来看条件语句。
如果语句
我们将从最基本的“如果”陈述开始。if 语句的语法如下:
语法的意思是,如果条件满足,语句将被执行,否则将被跳过。
例如:
输出:
现在,如果我们想一起执行多条语句,if 语句看起来会像这样:
Else 语句
现在让我们看看 else 条件是什么样的。在这种情况下,我们将把 if 语句与 else 条件结合起来。
else 语句的基本语法:
例如:
输出:
Elif 语句
elif 语句是 Python 中的另一个条件语句,有助于检查多个为真的条件。Elif 语句几乎类似于 if 语句,只是只能有一个 else 语句,而可以有多个 elif 语句。
下面是 elif 语句的语法。
让我们来看看下面的例子。
输出:
**注意:**所有的语句都应该保持它们的缩进级别,否则会抛出一个缩进错误。
在本文中,我们学习了 Python 中的条件或控制结构。这些控制结构决定了程序的执行。您可以使用循环和这些控制结构来执行不同的程序。因此,了解 Python 中的条件语句非常重要。
原文:https://www.askpython.com/python-modules/configparser-module
在本教程中,我们将了解什么是配置文件,在 ConfigParser 模块的帮助下,我们将创建一个配置文件,修改配置文件中的数据,向其中添加新数据,并从配置文件中删除现有数据。所以不要再拖延了,让我们开始吧。
配置文件通常称为配置文件,是存储计算机程序的一些特定数据和设置的特殊文件。大多数计算机程序在启动时读取它们的配置文件,并定期检查这些配置文件中的变化。
用户可以使用这些文件来更改应用程序的设置,而无需重新编译程序。通常每个配置文件由不同的部分组成。每个部分都包含键和值对,就像一个 Python 字典。
下面给出了一个样本配置文件,它由三部分组成,即地址、教育和个人爱好。
现在我们将使用 python 中的 ConfigParser 模块创建上面的配置文件。
为了用 python 创建配置文件,我们将使用 configparser 模块。在下面的实现中,我们创建一个 ConfigParser 对象,并向其中添加一些节,这些节基本上是包含键值对的字典。然后我们用。ini 扩展。
上述代码片段的输出是:
要在配置文件中添加新的节,我们只需读取配置对象中的配置文件,通过以字典格式定义节来添加新的节,然后我们可以将配置对象保存到同一个文件中。
在下面的示例中,我们将在 person.ini 文件中添加一个新的部分“Physique ”,该文件已经包含地址、教育和收藏夹部分。
上述代码片段的输出是:
我们也可以使用方法添加一个新的部分,然后使用方法在该部分中添加新的字段。
输出:
在上面的例子中,我们可以看到方法将节名作为它的参数,而方法将节名作为它的第一个参数,将字段名作为它的第二个参数,将字段的值作为它的第三个参数。****
在创建新的配置文件时,也可以使用这两种方法向文件中添加节和字段,而不是像本例中那样使用字典。
因为我们已经将配置文件的节定义为字典,所以适用于字典的操作也适用于配置文件的节。我们可以在配置文件的任何部分添加字段,或者以类似于处理字典项的方式修改字段的值。
在下面的代码中,我们在 person.ini 配置文件的“Education”部分添加了一个新字段“Year ”,并修改了文件中“Branch”字段的值。
输出:
在上面的例子中,我们可以使用方法添加新的字段以及修改现有的字段。如果文件中存在作为参数给出的字段,它将更新该字段,否则将创建一个新字段。
我们可以使用 configparser 模块中的和模块从配置文件中删除数据。用于从任何部分删除一个字段,用于删除配置文件的整个部分。
输出:
在上面的例子中,我们可以看到方法将 section name 作为它的第一个参数,将 field name 作为它的第二个参数,而方法将待删除的 section 的名称作为它的参数。
在本教程中,我们已经了解了什么是配置文件,以及如何在 Python configparser 模块的帮助下创建和操作配置文件。快乐学习!🙂
参考文献——https://docs.python.org/3/library/configparser.html
原文:https://www.askpython.com/python/examples/confusion-matrix
嘿,伙计们!今天,我们将了解数据科学中最重要的概念之一—混淆矩阵及其在 Python 中的实现。
数据科学是一个巨大的领域,我们在其中研究数据,清理数据,并使用各种机器学习算法进行预测。在使用任何算法之后,检查算法对期望输出的贡献的准确性和效果是非常重要的。
评估模型性能的一个这样的误差度量是混淆矩阵。
有时,我们会遇到这样的情况,我们需要应用特定的 ML 算法来预测的结果,即结果/目标/响应变量是分类数据的业务问题。示例:检测电子邮件是否为垃圾邮件。
因此,在上面的场景中,我们需要一个特殊的误差度量来判断最佳模型的准确性和正确性。
混淆矩阵是一个误差度量,用于判断分类机器学习算法的性能。它为我们提供了关于模型的准确度、精确度和误差百分比的详细信息。
通过使用混淆矩阵,我们可以区分分类响应变量的实际正确结果和预测结果。
因此,在理解了混淆矩阵的需要之后,现在让我们将注意力集中在各种组件上,通过这些组件,我们可以判断和预测任何模型的正确拟合算法。
看看下面混乱矩阵的结构!
Confusion Matrix
它表示由分类模型执行的预测的汇总。
- 真负值(TN) :实际为负值,也预测为负值的值。
- 假阴性(FN) :实际为阳性但预测为阴性的值。
- 假阳性(FP) :实际为阴性但预测为阳性的值。
- 真正(TP) :实际为正且预测为正的值。
那么,现在让我们看看混淆矩阵提供的关于模型的其他信息-
- 准确度 —它被定义为显示从提供的输入中成功预测的百分比的值。
精度= TP + TN / (TP + TN + FP + FN)
2.—它是定义被正确预测为真并且在实际集合中也恰好为真的一组值的值。
就精度而言,我们的意思是理解正值确实被预测为正值。
精度= TP / (TP + FP)
3.—它是代表一组实际上为真并且也被正确预测为真的值的值,
通过回忆,我们的意思是理解特定类别的样本被正确预测。
召回= TP / (TP +FN)
- F1 比分
当数据不平衡时,F1 分数有助于我们评估模型的准确性和效率。它实际上是精确度和回忆分数的调和平均值。
F1 = 2(召回率*精度)/(召回率+精度)*
现在让我们通过一个例子来实现混淆矩阵的概念,如下一节所示。
在这个例子中,我们传递了一个预测值和实际值的列表来构建混淆矩阵。为了使用混淆矩阵函数,我们需要导入 sklearn 库。
代表已经被正确和错误识别的一组值。此外,代表每个类别的输入的度量值,即“T”和“F”。
输出:
到此,我们就结束了这个话题。如果你遇到任何问题,欢迎在下面评论。
在那之前,学习愉快!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/47998.html