顺晟科技
2021-06-16 10:42:58
501
熊猫与虚拟变量矩阵的构建
在日常工作和学习中,我们经常会遇到一些固定类型的变量。对于这些变量,如果用一般的数据分析方法来组织和处理,就会显得多余或不足,于是就产生了因子类型(在计量学中更好地称为虚拟变量)。这种类型将数据组织成几种类型的集合,这极大地方便了数据的分析和处理。在本文中,边肖将与您讨论如何使用python来生成和组织虚拟变量。为了便于解释,本文以世界上更受欢迎的20部电影为例,展示了如何使用python中的熊猫库来处理虚拟变量。至于电影的数据集,可以从这里下载电影。首先大致看一下数据表的结构。有两种方式可以做到:直接打开Excel文件或者直接使用熊猫库导入数据,然后使用相关命令查看。
将numpy导入为np
将熊猫作为pd导入
movies=PD . read _ excel(' Top 20 _ movie . xlsx ')
movies.head(6)
20部更受欢迎的电影
这里的截图不是上面命令的结果。截图直接来自Excel文件。以上命令只显示Excel文件中的前六行记录。这个数据表主要包含了20部电影的片名、上映时间和类型。边肖下一步需要做的是虚拟化电影类型。这里,先解释一下这个概念。因为这20部影片有很多类型,边肖会构建一个类型矩阵,其中每一列代表一个影片类型,然后根据影片是否属于类型状态来分配0/1。具体操作步骤如下:
总结各类信息;
根据胶片号和胶片类型生成虚拟变量矩阵;
根据每部影片的相关类型信息,在虚拟变量矩阵中进行0/1赋值;
汇总矩阵和原始数据表信息。
下面先总结一下电影的类型,因为电影的类型信息存储在Excel表的type列,一部电影有多种类型。从表中可以看出,类型之间用逗号隔开,所以需要对每种类型进行排序。具体方法如下。
all _ type=[]
在电影里打字。型
all_types.extend(type.split(','))
type=PD . unique(all _ type)
行代码首先创建一个空列表,然后loop语句提取每部电影的类型并存储在前面创建的列表中,然后使用熊猫库下的unique函数获取所有类型。很明显,这些电影有16种类型,你可以使用“types.shape”来查看,所以这里没有列出。现在您已经得到了电影类型,是时候使用下面的命令创建一个虚拟矩阵了。
zero_matrix=np.zeros([len(电影),len(类型)]
假人=pd。数据帧(零矩阵,列=类型)
假人.头部(10)
零阵列数据帧
需要根据胶片类型重新分配虚拟矩阵,如下命令所示。
对于ii,键入enumerate(电影)。类型):
indexs=Dummies . columns . get _ indexer(type . split(','))
Dummies.iloc[ii,indexs]=1
赋值后的虚拟矩阵
现在是将虚拟矩阵与原始数据表合并的时候了,这可以通过使用join函数来实现。
movies _ amend=movies . join(Dummies)
Movies_amend.to_excel('修订前20名电影信息表。xlsx ',索引=False)
修订电影信息表
这样生成的虚拟矩阵和原始数据表就合并在一起了,很容易看到各种类型下每部影片的具体赋值。虽然这个操作从一开始就可以在原始表中完成,但边肖强烈建议更好将数据处理过程单独放在一起,并将处理后的结果与原始表合并,这样就不会因为临时操作不当而丢失原始数据。
一起写
虽然上面的分析用的代码不多,但还是在这里整合一下,让大家系统的看一下。
# _*_ coding:utf-8 _*_
'''
@author:刘仆
@date: 2018-8-5
@ filename : python 2 dummies . py
目的:利用python快速生成虚拟矩阵
工具:win7 python3.6熊猫
数据集:Top20_movie.xlsx
'''
# 导入相关的分析库
将数组导入为铭牌
将熊猫作为螺纹中径导入
# 读取文件
电影=PD。read _ excel(' 20强_电影。xlsx ')#注意把当前目录调整到文件所在目录下
movies.head() #大致看一下数据表信息
# 汇总影片类型
all _ type=[]#生成空列表存放影片类型
在电影里打字。型
all _ type。extend(类型。拆分(',')#统计每种影片的类型并将其放到影片列表中
type=PD。(所有类型)#绘制所有不重复的影片类型
# 生成虚拟矩阵并赋值
zero_matrix=np.zeros([len(电影),len(类型)]
假人=pd .数据帧(零矩阵,列=类型)
对于二、键入枚举(电影)。类型):
指数=假人。列。get _ indexer(类型。拆分(','))
Dummies.iloc[ii,indexs]=1
# 合并表格并导出表格
movies _ amend=movies。加入(假人)
movies_amend.to_excel('修正后前20名影片信息表. xlsx ',索引=False)
06
2024-03
05
2024-03
04
2024-03
01
2023-08
04
2023-07
23
2023-06