2021-06-17 第二章:数据清洗及特征处理

2.1缺失值观察与处理

2.1.1 任务一:缺失值观察
pandas里边查找NaN值的话,可以是.isna(),也可以是.isnull()

  • isna的意思是判断是不是 not a number,主要是数值字段;
  • isnull的意思是判断是否为空值
  • 1)
    df.isna().sum() 查看空值信息
    df.isnull().sum() 查看空值信息
    df.info() 查看数据信息
  • 2)
    df[['Age','Cabin','Embarked']]
    pd.DataFrame(df,columns=['Age','Cabin','Embarked'])
    df.loc[:,['Age','Cabin','Embarked']]
    df.iloc[:,[5,10,11]]
  • loc只能通过index和columns来取,不能用数字; iloc只能用数字索引,不能用索引名

2.1.2 任务二:对缺失值进行处理

  1. 处理缺失值的思路一般是用dropna函数与fillna函数
  2. 请尝试对Age列的数据的缺失值进行处理
  • age_nan=df[df['Age'].isnull()].index
    df.loc[age_nan,'Age']=0
    df
    处理age列的缺失值赋值为0
  • df[df['Age'].isnull()]=0
    df[df['Age'] == np.nan] = 0
    df[df['Age']==None]=0
    处理age列的缺失值整行赋值为0
  1. 直接对整张表的缺失值进行处理
  • df.dropna() 默认axis=0,表示删除包含缺失值的行
    axis=0 行,axis=1列
    how{‘any’, ‘all’},默认‘any’; 当我们至少有一个 NA 或所有 NA 时,确定是否从 DataFrame 中删除了行或列。
    ‘any’:如果存在任何 NA 值,则删除该行或列。
    ‘all’:如果所有值都是 NA,则删除该行或列。
    thresh: axis中至少有thresh个非缺失值,否则删除。
    subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除
    inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。默认是False,即创建新的对象进行修改;如果是true,执行操作并返回 None。
    指定删除某个分组(可以理解成哪几列或那几个标签)中的含有缺失值的行或列 df.dropna(subset=['Pclass','Parch','Embarked'])

  • df.fillna(0) 用数字0填充缺失值

    截屏2021-06-16 11.49.17.png

    df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 表示填充缺失值
    value: 需要用什么值去填充缺失值
    axis: 确定填充维度,从行开始或是从列开始
    method: 填充缺失值所用的方法。''ffill' 'backfill/bfil'
    limit: 确定填充的个数,如果limit=2,则只填充两个缺失值。

  • ffill:用缺失值前面的一个值代替缺失值

  • backfill/bfill:缺失值后面的一个值代替前面的缺失值


    截屏2021-06-16 12.22.26.png

参考:
https://zhuanlan.zhihu.com/p/109366433
https://zhuanlan.zhihu.com/p/109434512
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

2.2 重复值观察与处理

2.2.1 任务一:请查看数据中的重复值
df[df.duplicated()]

2.2.2 任务二:对重复值进行处理
(1) 重复值有哪些处理方式呢?

  • drop_duplicates函数用于删除Series、DataFrame中重复记录,并返回删除重复后的结果
    (2) 处理我们数据的重复值
  • df.drop_duplicates()

2.2.3 任务三:将前面清洗的数据保存为csv格式
df.to_csv('./titanic/train_clear.csv')

2.3 特征观察与处理

2.3.1 任务一:对年龄进行分箱(离散化)处理

  1. 数据分箱是一种将多个连续值分组为较少数量的“分箱”的方法,分箱的数据不一定必须是数字,可以是文字,也可以是像素;一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险;
    对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开
  • df['age_bin_1'] = pd.qcut(df['age'],3) #新增一列存储等频划分的分箱特征(每个区间的样本个数都是一样)
    df['age_bin_2'] = pd.cut(df['age'],3) #新增一列存储等距划分的分箱特征

将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

  • df['Age_bin_1'] = pd.cut(df['Age'],5,labels=['1','2','3','4','5'])

将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示

  • df['Age_bin_2'] = pd.cut(df['Age'],[0,5,15,30,50,80],right = False, include_lowest = True,labels=['1','2','3','4','5'])

将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示

  • df['Age_bin_3'] = pd.cut(df['Age'], [0.0,0.1,0.3,0.5,0.7,0.9], labels=['1','2','3','4','5'])

2.3.2 任务二:对文本变量进行转换
(1) 查看文本变量名及种类

  • value_counts()
  • unique()


    截屏2021-06-16 21.21.13.png

(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示

  • LabelEncoder是对不连续的数值或文本进行编码。
    fit(y) :fit可看做一本空字典,y可看作要塞到字典中的词。
    fit_transform(y):相当于先进行fit再进行transform,即把y塞到字典中去以后再进行transform得到索引值。
    inverse_transform(y):根据索引值y获得原始数据。
    transform(y) :将y转变成索引值。
    (版权声明:此处为CSDN博主「桂小林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/quintind/article/details/79850455)

截屏2021-06-17 14.04.37.png

参考:
https://blog.csdn.net/quintind/article/details/79850455

(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。除了整数的索引之外,它都是零值,它被标记为1。
one-hot编码表示分类结果,表示1,那就是[1, 0, 0, 0, 0],表示4,那就是[0, 0, 0, 1, 0]
参考:
https://zj-image-processing.readthedocs.io/zh_CN/latest/pytorch/one-hot%E7%BC%96%E7%A0%81/

2.3.3 任务三:从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)

  • 采用str.extract()函数可用正则从字符数据中抽取匹配的数据
  • [A-Za-z]代表任一字母(大写或小写)
  • 代表+号前的字符出现1次或多次
    ([A-Za-z]+). 是匹配 一个或多个字母并且以.结尾的所有字符串组合
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容