数据分析Task2 数据清洗与特征工程

一 数据清洗

缺失值
缺失值的识别

主要依赖几个函数来进行清洗前的判断

  • info(), 详细列出非空值的个数
df.info()

在这里插入图片描述

  • df.isnull().sum(), 同上
df.isnull().sum()

在这里插入图片描述

  • df[[‘所需查询列一’,‘列二]], 以表格形式显示
df[['Age']].head(3)

在这里插入图片描述
如果没有[]是这样

df['Age'].head(3)

在这里插入图片描述

缺失值的处理

一般搜索none,np.NAN然后补为0,

  • df[df[‘Age’]==None] = 0
  • df[df[‘Age’].isnull()] = 0
    二班调用函数删去列,或者填充空值
  • dropna()
df.dropna().head(3)

在这里插入图片描述

  • fillna(0)
df.fillna(0).head(3)

在这里插入图片描述

关于NAN与None差别的思考

一般使用np.NAN更好些,毕竟pandas底层就是numpy。当空值表现为none时 ,某些函数下会报错,NAN则不会。

np.nansum([1,2,NaN])
3.0
try:
    np.nansum([1,2,None])
except Exception as e:
    print(type(e),e)
<class 'TypeError'> unsupported operand type(s) for +: 'int' and 'NoneType'

关于nan和none的数据类型,nan是float类,none则是单独的NoneType,这在统计某列信息时会带来不一样的结果。

np.array([1, None]).dtype
dtype('O')
np.array([1, NaN]).dtype
dtype('float64')
重复值
重复值的识别
  • df[df.duplicated()]
重复值的处理
  • df.drop_duplicates().head()

特征的观察与处理

特征一般有两类,数值类与文本类特征,在titanic数据集中按照这俩可以分出

数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征。

处理
数值型分箱(离散化)处理

分箱处理是一个把连续数据处理为离散特征的过程。就如同装箱这个操作一样,把类似的特征分为一类。

  • cut()按设定好的数值分组(默认等分)
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'])
  • qcut()按比例分组
#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = ['1','2','3','4','5'])
文本变量变量处理
  • value_counts(),unique()查看文本的具体数值
df['Sex'].value_counts()

在这里插入图片描述

df['Sex'].unique()

在这里插入图片描述

  • replace(),map()替换文本为数值
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
  • 使用sklearn.preprocessing的LabelEncoder
    没看懂,先咕了
  • Get_dummies()进行one-hot编码
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)

在这里插入图片描述

二 数据的重构

数据清洗之后,终于变成了一个相对好处理易识别的状态。
现在的数据重构仍然是数据处理的范围,帮助我们和算法更好理解处理这些数据。

数据的合并
横向合并(合并列,行数一样)
  • Concat()
  • Pandas.join()
纵向合并(增加数据行数)
  • Concat()
  • Pandas.append()
将dataframe转换为series观察数据
数据的条件查看,groupby()

善用groupby,用某行分类查看某行

mean(),分类查看某个分类的平均值
df  = text['Fare'].groupby(text['Sex'])
means = df.mean()
sum(),数某个分类的个数
survived_sex = text['Survived'].groupby(text['Sex']).sum()
实例

三 数据可视化,sklearn()

柱状图
显示单变量的统计信息
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()

在这里插入图片描述

显示双变量的统计信息
# 提示:计算男女中死亡人数 1表示生存,0表示死亡
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

在这里插入图片描述

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

在这里插入图片描述

折线图
facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值