note
文章目录
一、缺失值观察和处理
- 数据清洗:如缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的格式
# 查看df的总体情况
df.info()
# 查看每列的缺失值个数
df.isnull().sum()
# 对缺失值进行处理
# 1. 如将age年龄列的缺失值进行填充0
df[df['Age'] == None] = 0
df[df['Age'].isnull()] = 0
df[df['Age'] == np.nan] = 0
# 2. 直接除去缺失值
df.dropna()
df.fillna(0) # 对缺失值填充0
如果某个方法无法找到缺失值:数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan
。
二、重复值观察和处理
# 查看重复行
df[df.duplicated()]
# 除去重复行
df = df.drop_duplicates()
三、特征观察和处理
原数据有两大类特征:
- 数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
- 文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征
3.1 对年龄分箱处理(离散化)
#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
#将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
3.2 对文本变量转换
查看文本变量种类:
# 1. 查看文本变量种类(两种方法)
df['Sex'].value_counts()
df['Sex'].unique() # array(['male', 'female', 0], dtype=object)
df['Sex'].nunique() # 3
对文本变量进行编码的三种方式:
# 方法一: replace(将类别文本转换为12345)
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
# 方法二: map
df['Sex_num'] = df['Sex'].map({
'male': 1, 'female': 2})
# 方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:
lbl = LabelEncoder()
label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
df[feat + "_labelEncode"] = df[feat].map(label_dict)
df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))
# 方法四: onehotEncoder
for feat in ["Age", "Embarked"]:
# x = pd.get_dummies(df["Age"] // 6)
# x = pd.get_dummies(pd.cut(df['Age'],5))
x = pd.get_dummies(df[feat], prefix=feat)
df = pd.concat([df, x], axis=1)
#df[feat] = pd.get_dummies(df[feat], prefix=feat)
3.3 从纯文本Name特征里提取出Titles的特征
(所谓的Titles就是Mr,Miss,Mrs等)
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
时间安排
任务 | 任务内容 | 时间 | 完成情况 |
---|---|---|---|
- | 1月16日周一开始 | ||
Task01: | 数据加载及探索性数据分析(第一章第1,2,3节)(2天) | 16-17日周二 | 完成 |
Task02: | 数据清洗及特征处理(第二章第1节)(2天) | 18-19日周四 | 完成 |
Task03: | 数据重构(第二章第2,3节)(2天) | 20-21日周六 | |
Task04: | 数据可视化(第二章第4节)(2天) | 22-23日周一 | |
Task05: | 数据建模及模型评估(第三章第1,2节)(3天) | 24-26日周四 |
Reference
[1] https://github.com/datawhalechina/hands-on-data-analysis
[2] pandas常用操作详解——pandas的去重操作df.duplicated()与df.drop_duplicates()
[3] https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.qcut.html