其他分享
首页 > 其他分享> > 20210502_数据预处理及可视化(第二天)

20210502_数据预处理及可视化(第二天)

作者:互联网

二、数据预处理及可视化(第二天)

在这里插入图片描述

–real python

文章目录

来源


1 数据预处理及特征工程

1.1 缺失数据统计与处理

1.1 任务一:缺失值统计

(1) 请查看每个特征缺失值个数

df.isnull().sum()

在这里插入图片描述

df.isnull().mean()

在这里插入图片描述

(2) 请查看Age, Cabin, Embarked列的数据

#写入代码
df[['Age','Cabin','Embarked']].head(3)

在这里插入图片描述


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

df1 = df.dropna().head()
df1.reset_index(inplace=True)
df1

在这里插入图片描述

#0填充
df.fillna(0).head()

在这里插入图片描述


1.2 重复值统计及处理

1.2.1 重复值统计

df[df.duplicated()]

1.2.2 重复值处理

df.drop_duplicates().head()

在这里插入图片描述

1.3 特征工程

1.3.1 数据分桶

为什么要进行数据分桶?

  1. 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
  2. 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
  3. LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
  4. 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
  5. 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;
  6. 可以将缺失作为独立的一类带入模型;
  7. 将所有的变量变换到相似的尺度上。
#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = ['1','2','3','4','5'])
df.head()

在这里插入图片描述

#将连续变量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'])
df.head(3)

在这里插入图片描述

#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df = pd.read_csv('train.csv')
df['AgeBand'] = pd.qcut(df['Age'],
                [0,0.1,0.3,0.5,0.7,0.9],
                labels = ['1','2','3','4','5'])
df.head()

在这里插入图片描述

1.3.2 标签编码和独热编码

df = pd.read_csv('test_clear.csv')
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket','Sex']:
    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))

df.head()

在这里插入图片描述

#方法一: replace
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df.head()
#方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()

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)
    
df.head()

在这里插入图片描述

2 数据重构

2.1 数据合并

2.1.1 横向合并

result_up = pd.concat([text_left_up,text_right_up],axis=1)
result_down = pd.concat([text_left_down,text_right_down],axis=1)
resul_up = text_left_up.join(text_right_up)
result_down = text_left_down.join(text_right_down)
result_up = pd.merge(text_left_up,text_right_up,
             left_index=True,right_index=True)
result_down = pd.merge(text_left_down,text_right_down,
              left_index=True,right_index=True)

2.1.2 纵向合并

result = pd.concat([result_up,result_down])
result = result_up.append(result_down)

2.2 数据分组

text = pd.read_csv('result.csv')
text.head()
text.groupby('Sex')['Fare'].mean()

在这里插入图片描述


text.groupby('Sex')['Survived'].sum()

3.计算客舱不同等级的存活人数

text.groupby('Pclass')['Survived'].sum()
text.groupby(['Sex','Pclass'])['Survived'].agg({'Sex': [('sum_sex','sum')], 'Pclass': [('sum_pclass','sum')]})

在这里插入图片描述

小建议

  1. 第一节 2.3.1 任务一
    在这里插入图片描述
  2. 第二节 2.5.1

在这里插入图片描述3. 第二节2.5.1

在这里插入图片描述

  1. 第三节 2.4.4

在这里插入图片描述

标签:20210502,分桶,df,text,down,可视化,pd,feat,预处理
来源: https://blog.csdn.net/yuliuchenyin/article/details/116348722