Young87

当前位置:首页 >个人收藏

这份数据清洗checklist,让开发过程更加高效

今日锦囊

特征锦囊:这份数据清洗Checklist,让开发过程更加高效

当我们拿到一批原始数据的时候,有一些我们是必须要执行的套路,也就是一些典型的数据初步分析工作流程,如果有这么一份Checklist,就好像飞机员要起飞前的各项设备检查一样,按照每个关键环节来设计这个备忘录????,让我们在开发过程中更加得心应手!

后台回复“数据清洗”获取高清PDF

01-启动阶段

import os
import pandas as pd
import numpy as np

# 显示当前工作路径
os.getcwd()

# 罗列当前路径下的所有文件
os.listdir()

# 改变工作目录
os.chdir("/PATH/TO/SAMSHARE")

# 初始化基础目录
data_path = './02_data/'
save_path = './03_model/'
output_path = './04_output/'

02-导入数据

# 读取CSV文件
data = pd.read_csv(data_path+'data.csv’, encoding='utf8') #有时候用gbk

# 读取TXT文件
data = pd.read_csv(data_path+'data.txt’, seq='\t', encoding='utf8') #有时候用gbk

# 读取excel文件
data = pd.read_excel(data_path+'data.xlsx')

03-数据结构初探

# 查看DataFrame每个字段的空值情况,数据类型
df.info()

# 查看DataFrame的形状
df.shape

# 查看DataFrame的列名
df.columns

# 查看字段的枚举值数量
df["type"].nunique()

# 查看字段的枚举值
df["type"].unique()

# 查看字段的枚举值统计
df["species"].value_counts()

04-数据空值处理

# 查看空值占比
df.isnull().sum()*100/len(df)

## 丢弃与空值相关的数据 ##
#######################
# 删除所有包含空值的行
df.dropna()

# 删除所有包含空值的列
df.dropna(axis=1)

# 删除全部为空值的列
df.dropna(axis=1, how='all')


## 特殊值替代空值 ##
##################
# 空值全部填充为0
df.fillna(0)

# 修改指定位置的值
df.at[1, "sepal_length"]= 9999

# 用字符串替代空值
df.fillna("data missing")

# 用均值填充
df.fillna(df.mean())

# 用指定列的均值来填充指定列
df["sepal_length"].fillna(df["sepal_length"].mean())

05-基础列操作

# 通过列名选择指定“单列”
df["sepal_length"]

# 通过列名选择指定“多列”
df[["sepal_length", "sepal_width", "petal_length", "spp"]]

# 通过数字选择指定列(需要连续)
df.iloc[:, 2:4]

# 通过数字选择指定列(不需要连续)
df.iloc[:, [1,3,4]]

# 丢弃某列
df.drop("sepal_length", axis=1)

# 添加新列
df['new'] = df["sepal_length"]*2

# 条件判断生成新列
df['newcol'] = ["short" if i<3 else "long" for i in df["sepal_width"]] 

# 枚举值映射转换
df.replace({"Species":{"setosa":1, "versicolor":2, "virginica":3}})

# 计算指定两列的均值
df[["sepal_length", "sepal_width"]].mean()

# 同时计算指定两列的加总和均值
df[["sepal_length", "sepal_width"]].agg([np.sum, np.mean])

# 转置DataFrame
df.T

# 把列名转成List
df.columns.tolist()

# 排序
df.sort_values(by = "sepal_width", ascending = True)

# 改列名
df.rename(columns={"old_name": "new_name"})

06-基础行操作

# 选取指定行的数据
df.iloc[3:10,]

# 通过索引选取指定行的数据
df.loc["index1", "index2"]

# 检索包含 "关键字" 的行
df[df["species"].isin(["setosa"])]

# 根据条件筛选行
df.query('sepal_length>=5') # 方法1
df[df.sepal_length>= 5] # 方法2

# 根据指定内容筛选出符合要求的行
df[df["petal_length"].isin([0.2, 0.3])]

# 多条件筛选符合要求的行
df[(df.sepal_length>1) & (df.species=="setosa") | (df.sepal_width<3)]

# 丢弃某行
df.drop(df.index[1]) 

07-分组操作

# 返回根据字段"species"分组的对象
df.groupby("species")

# 根据"species"分组,返回"sepal_length"的均值
df["sepal_length"].groupby(df["species"]).mean()

# 所有列根据字段"species"分组, 返回sum、mean和std的值 
df.groupby("species").agg([np.sum, np.mean, np.std])

08-关联操作

## merge ##
###########
data = pd.merge(df1,df2,on='key',how='left') # right outer

## concat ##
############
# 上下合并
data = pd.concat([df1,df2])
# 左右合并
data = pd.concat([df1,df2],axis=1)

## join ##
##########
data = df1.join(df2, how='left', lsuffix='_1', rsuffix='_2')

如果你想要获得高清版的PDF,可以通过在公众号《SAMshare》后台回复 数据清洗,即可下载《数据清洗checklist_v1.0.pdf》。

往 期 锦 囊

特征锦囊:特征无量纲化的常见操作方法

特征锦囊:怎么进行多项式or对数的数据变换?

特征锦囊:常用的统计图在Python里怎么画?

特征锦囊:怎么去除DataFrame里的缺失值?

特征锦囊:怎么把被错误填充的缺失值还原?

特征锦囊:怎么定义一个方法去填充分类变量的空值?

特征锦囊:怎么定义一个方法去填充数值变量的空值?

特征锦囊:怎么把几个图表一起在同一张图上显示?

特征锦囊:怎么把画出堆积图来看占比关系?

特征锦囊:怎么对满足某种条件的变量修改其变量值?

特征锦囊:怎么通过正则提取字符串里的指定内容?

特征锦囊:如何利用字典批量修改变量值?

特征锦囊:如何对类别变量进行独热编码?

特征锦囊:如何把“年龄”字段按照我们的阈值分段?

特征锦囊:如何使用sklearn的多项式来衍生更多的变量?

特征锦囊:如何根据变量相关性画出热力图?

特征锦囊:如何把分布修正为类正态分布?

特征锦囊:怎么找出数据集中有数据倾斜的特征?

特征锦囊:怎么尽可能地修正数据倾斜的特征?

特征锦囊:怎么简单使用PCA来划分数据且可视化呢?

特征锦囊:怎么简单使用LDA来划分数据且可视化呢?

特征锦囊:怎么来管理我们的建模项目文件?

特征锦囊:怎么批量把特征中的离群点给“安排一下”?

特征锦囊:彻底了解一下WOE和IV

特征锦囊:一文介绍特征工程里的卡方分箱,附代码实现

特征锦囊:今天一起搞懂机器学习里的L1与L2正则化

特征锦囊:金融风控里的WOE前的分箱一定要单调吗?

特征锦囊:如何在Python中处理不平衡数据

 ???? GitHub传送门 

https://github.com/Pysamlam/Tips-of-Feature-engineering

原创不易,如果觉得这种学习方式有用,希望可以帮忙随手转发or点下“在看”,这是对我的极大鼓励!阿里嘎多!????

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 性能调优,影响cpu,gpu的因素

下一篇: 用SQL进行集合运算

精华推荐