Python中创建虚拟变量

2025年1月5日 | 阅读 5 分钟

数据分析师和研究人员经常处理各种数据集,其中一些可能包含分类数据。通过应用 get_dummies() 函数可以帮助处理这些分类值。本文旨在阐明在 Python 中创建虚拟变量的过程,使数据更具吸引力和可理解性。

定义虚拟变量

虚拟变量是一种使用二元值(0 或 1)的变量。这些变量用于回归模型,以表示包含二元值(可观察或不可观察)的因子。虚拟变量用于数据操作,它修改数据列以更有效地进行分析。

虚拟变量的实用性

虚拟变量的适应性扩展到各种应用:

它们提供了一种方法来确定影响任何给定数据点的特定属性或分类值。例如,在一个数据集中,可以通过创建虚拟变量来定义性别,将其表示为 1 或 0。

虚拟变量用于定义与变量相关的属性的性质。例如,考虑一个包含公寓详细信息的数据集,其中可以使用虚拟变量来定义公寓中不同类型的房间。每种属性类型都汇总在单独的列中,并通过二元值区分。

虚拟变量是二元变量,表示数据点的“是”或“否”属性。它们描绘了有序分类数据中的值,显示了子类别和子组。它们是统计分析和机器学习模型(尤其是回归问题)的宝贵工具。通过将数据划分为子组,分析师可以识别模式和见解。为子类别分配 0 或 1 的值使研究人员能够以更有条理的方式分析数据。

一个理解虚拟变量的例子。

我们有一个泰坦尼克号海难幸存者的数据集。该数据集包含人们的详细信息,包括姓名、年龄、舱位、性别、居住区域类型等。舱位和性别等数据列具有子类别。性别列有两种类别:女性和男性。在这里,我们可以为性别列“女性”和“男性”创建两个虚拟变量,它们包含二元形式(0 或 1)的数据值。如果性别是男性,则值为 0;否则,值为 1。舱位数据列也有不同的类别,如上等、下等和中等。我们可以为每个舱位创建虚拟变量,并相应地添加二元值。

如何在 Python 中创建虚拟变量?

Python 中的 Pandas 模块提供了一个 get_dummies() 函数来创建虚拟变量,这有助于处理分类值。它为数据集中的分类值创建虚拟变量。

get_dummies() 函数的语法

  • data 是我们要为其创建虚拟变量的分类数据。它包含 pandas 数据框。
  • prefix 是一个字符串或字符串字典,用于附加到列名。默认情况下,它设置为 None。
  • pre_separator 用于使用分隔符附加前缀。

作为输出,它会提供包含分类数据的虚拟变量,以及原始数据列。我们可以使用 drop() 函数删除分类列。

在 Python 中实现 get_dummies()

在 Python 中实现 get_dummies() 函数的要求

  1. 需要 Pandas 库来使用 get_dummies() 函数。
  2. 我们必须有分类数据才能创建虚拟变量。

现在,我们将使用 Python 中的 get_dummies() 函数创建虚拟变量。

创建虚拟变量的方法

  • 我们将首先导入 Python 中所需的库。
  • 我们将创建一个分类数据的数据框。
  • 分析后,我们将使用 get_dummies() 函数创建分类数据点的虚拟变量。

我们将使用不同的示例和数据类型创建虚拟变量。

示例 1

输出

    class  gender
0   upper    male
1  middle  female
2   lower  others

在这里,我们导入了 pandas 和 numpy 库。然后,我们创建了一个包含不同值的 class 和 gender 数据列的数据框。

输出

   class_lower  class_middle  class_upper  gender_female  gender_male  
0            0             0            1              0            1   
1            0             1            0              1            0   
2            1             0            0              0            0   

   gender_others  
0              0  
1              0  
2              1

现在,使用 get_dummies() 函数,我们创建了数据集的虚拟变量。结果是,它返回了数据框中每个值单独的列。列名以 '_' 分隔(原始列名_值)。

示例 2

输出

	PassengerId	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked
0	1	0	3	Braund, Mr. Owen Harris	male	22.0	1	0	A/5 21171	7.2500	NaN	S
1	2	1	1	Cumings, Mrs. John Bradley (Florence Briggs Th...	female	38.0	1	0	PC 17599	71.2833	C85	C
2	3	1	3	Heikkinen, Miss. Laina	female	26.0	0	0	STON/O2. 3101282	7.9250	NaN	S
3	4	1	1	Futrelle, Mrs. Jacques Heath (Lily May Peel)	female	35.0	1	0	113803	53.1000	C123	S
4	5	0	3	Allen, Mr. William Henry	male	35.0	0	0	373450	8.0500	NaN	S

在这里,我们使用了泰坦尼克号的生存数据集,其中包含不同乘客的详细信息,包括乘客 ID、姓名、性别、登船地点等。我们已经看到 Sex 和 Embarked 列具有分类值,我们需要为它们创建虚拟变量以便更好地进行分析。

现在,我们已经使用 get_dummies() 函数为 Sex 和 Embarked 列创建了虚拟变量。

输出

     female  male
0         0     1
1         1     0
2         1     0
3         1     0
4         0     1
..     ...  ...
886       0     1
887       1     0
888       1     0
889       0     1
890       0     1

[891 rows x 2 columns]
     C  Q  S
0    0  0  1
1    1  0  0
2    0  0  1
3    0  0  1
4    0  0  1
.. ......
886  0  0  1
887  0  0  1
888  0  0  1
889  1  0  0
890  0  1  0

[891 rows x 3 columns]

我们已经打印了 sex 和 embarked 列的虚拟变量。