day04:数据清洗及特征处理
*观察缺失值
df.info()
df.isnull().sum()
*观察特定列的数值
df[['Age','Cabin','Embarked']].head(3)
*过滤缺失值
df.dropna().head()
df.dropna(thresh=2).head()
*补全缺失值
df.fillna(0).head()
df.fillna(method='ffill').head()
df['Age'].fillna(df['Age'].mean()).head()
*查看重复值
df[df.duplicated()]
*删除重复值
df.drop_duplicates().head()
*数值离散化处理
df['AgeBand'] = pd.cut(df['Age'], 5,labels = ['1','2','3','4','5'])
df.head()
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = ['1','2','3','4','5'])
df.head(3)
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()
*查看文本变量名和种类
df['Sex'].value_counts()
df['Sex'].unique()
*将文本类型的数据转变成数值型
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df.head()
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()
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))
df.head()
*将文本转变称为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)
df.head()
*从文本提取特征
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
df.head()
思考和问题:
1. 缺失值的处理方法
dropna | 根据每个标签的值是否缺失数据来筛选轴标签,并根据允许丢失的数据来确定阈值 |
fillna | 用某些值填充缺失的数据或使用插值的方法(‘ffill’,‘bfill’) |
isnull | 返回表明那些是确实值的布尔值 |
notnull | isnull的反函数## |
2. dropna和fillna有哪些参数,分别如何使用呢?
原文链接:https://blog.csdn.net/dss_dssssd/article/details/82814673
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
3. 检索空缺值用np.nan要比用None好,这是为什么?
np.nan,none,Nat三种缺失值都会被替换为统一的NA符号,且不改变数据类型.
np.nan是一个float类型的数据 None是一个NoneType类型
在ndarray中None显示为None 并且对象为object类型,如果进行计算 结果会报错
在用pandas和numpy处理数据阶段将None,NaN统一处理成NaN,以便支持更多的函数。
如果要判断Series,numpy.array整体的等值性,用专门的Series.equals,numpy.array函数去处理,不要自己用==判断 * 如果要将数据导入数据库,将NaN替换成None
原文连接:https://www.cnblogs.com/onemorepoint/p/8966791.html
问题答案链接,来自原文:https://blog.csdn.net/liyongo/article/details/108143076
4. 我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征。
数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。
5.分箱操作:
在建模中,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险。 无监督分箱
等宽分箱:将变量的取值范围分为k个等宽的区间,每个区间当作一个分箱。 每个等份里面的实例数量可能不等。
等频分箱:把观测值按照从小到大的顺序排列,根据观测的个数等分为k部分,每部分当作一个分箱,例如,数值最小的1/k比例的观测形成第一个分箱,等等。
基于k均值聚类的分箱:使用第五章将介绍的k均值聚类法将观测值聚为k类,但在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值,等等。
答案原文链接:https://blog.csdn.net/Rock_y/article/details/108154672
6. one-hot 编码是什么?
one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程。
详细解释:https://zhuanlan.zhihu.com/p/37471802
7.sklearn.preprocessing处理数据的详细方法
详细解释:https://blog.csdn.net/weixin_40807247/article/details/82793220
8.str.extract()用法
详细解释: http://www.360doc.com/content/19/0101/16/41651190_805842106.shtml
https://zhuanlan.zhihu.com/p/30604536
本次的学习基于datawhale学习打卡小组: