【数据分析】(task2)数据清洗及特征处理
admin
2024-05-11 13:51:15
0

note

文章目录

  • note
  • 一、缺失值观察和处理
  • 二、重复值观察和处理
  • 三、特征观察和处理
    • 3.1 对年龄分箱处理(离散化)
    • 3.2 对文本变量转换
    • 3.3 从纯文本Name特征里提取出Titles的特征
  • 时间安排
  • Reference

一、缺失值观察和处理

  • 数据清洗:如缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的格式
# 查看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

相关内容

热门资讯

中国航天科技集团商业火箭公司增... 1月5日消息,天眼查工商信息显示,中国航天科技集团商业火箭有限公司近日发生工商变更,注册资本由10亿...
现货黄金日内涨幅扩大至2%,报... 1月5日消息,现货黄金日内涨幅扩大至2%,报4419.7美元/盎司。(科股宝播报)
日经225指数收涨2.97%,... 1月5日消息,日经225指数收涨2.97%,报51832.8点;韩国KOSPI指数收涨3.43%,报...
四川:力争通过3—5年努力,算... 1月5日消息,四川省人民政府办公厅印发《四川省国家数字经济创新发展试验区建设方案》,力争通过3—5年...
A股限售股解禁一览:415.3... 1月5日消息,Wind数据显示,周一(1月5日),共有12家公司限售股解禁,合计解禁量为27.03亿...
现货黄金上涨1%至每盎司437... 1月5日消息,现货黄金上涨1%至每盎司4372.81美元。(科股宝播报)
日经225指数涨幅扩大至超2% 1月5日消息,日经225指数涨幅扩大至超2%。(科股宝播报)
日本12月制造业PMI终值50... 1月5日消息,日本12月制造业PMI终值50,前值49.7。(广角观察)
现货铂金上涨逾5%至每盎司2,... 1月5日消息,现货铂金上涨逾5%至每盎司2,253.15美元。(科股宝播报)
自然资源部:发展复杂地区无人机... 1月4日消息,自然资源部办公厅发布《关于加强基础性地质调查工作的通知》。《通知》指出,加强探测技术与...