# -*- coding: utf-8 -*-
#概念:虚拟变量,也叫哑变量和离散特征编码,可用来表示分类变量、非数量因素对分析可能产生的影响
#离散特征的取值之间有大小的意义。例如:尺寸(L、XL、XXL)
#离散特征的取值之间没有大小的意义。例如:颜色(Red,Blue,Green)、性别
#离散特征的取值之间有大小意义的处理函数:
#pandas.Series.map(dict)
#dict:映射的字典
#离散特征的取值之间没有大小意义的处理函数:
#pandas.get_dummies(data,prefix=None,prefix_sep="_",dummy_na=False,columns=None,drop_first=False)
#data:要处理的DataFrame
#prefix:列名的前缀,在多个列有相同的离散项时使用
#prefix_sep:前缀和离散值的分隔符,默认为下划线,默认即可
#dummy_na:是否把NA值(空值),作为一个离散值进行处理,默认不处理
#columns:要处理的列名,如果不指定该列,那么默认处理所有列
#drop_first:是否从备选项中删第一个,建模的时候为避免共线性(共轭性)使用
import pandas
data = pandas.read_csv("D:/workspaces/python/pythonStudy/23.csv",encoding="utf8")
#1. 根据学历处理数据:
#不同的学历之间有大小的意义,因此使用map进行处理
#从控制台看看数据源中的学历都有哪些取值:
#使用drop_duplicates查看学历这一列去重之后的情况:
data['Education Level'].drop_duplicates()
#整理如下:
"""
博士后 Post-Doc
博士 Doctorate
硕士 Master's Degree
学士 Bachelor's Degree
副学士 Associate's Degree
专业院校 Some College
职业学校 Trade School
高中 High School
小学 Grade School
"""
#定义字典:
educationLevelDict = {
'Post-Doc' : 9,
'Doctorate':8,
'Master\'s Degree':7,
'Bachelor\'s Degree':6,
'Associate\'s Degree':5,
'Some College':4,
'Trade School':3,
'High School':2,
'Grade School':1
}
data['Education Level Map'] = data['Education Level'].map(educationLevelDict)
#查看data对象的内容,可以看到已经新增了列Education Level Map(虚拟变量),该列的值是根据我们的字典来的
#2. 根据性别处理数据(ps:暂时不清楚这样处理的意义)
#性别没有大小的意义,因此使用get_dummies来处理
data['Gender'].drop_duplicates()
dummies = pandas.get_dummies(
data,
columns=['Gender'],
prefix=['Gender'],
prefix_sep="_",
dummy_na=False,
drop_first=False #保留所有的属性值
)
dummies['Gender'] = data['Gender']
|
|