2.1 特征工程 - 数据清理
案例1 转化数据类型
!git clone https://github.com/qiwsir/DataSet.git!ls DataSet
加载数据集
import pandas as pd
import numpy as npdf = pd.read_csv("./DataSet/sales-data/sales_data_types.csv")
df
df.info()
help(df.astype)
Cast a pandas object to a specified dtype
dtype
.
# column.astype
df['Customer Number'].astype(int)
help(pd.to_numeric)
Convert argument to a numeric type.
# pd.to_numeric
pd.to_numeric(df['Jan Units'], errors='coerce')
正则表达式
help(np.where)
Return elements, either form
x
ory
, depending oncondition
.
# 特征“Active”中的数据只有两种类型,按照要求用数字1和0来表示。
np.where(df[['Active']] == 'Y', 1, 0)
help(str.replace)
S.replace(old, new) -> str
Return a copy of S with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.
# str.replace
#特征“2016”和“2017”的数据表示的是资金额度,转化为字符串。
#但不能直接使用astype或者to_numeric,因为字符串中包含了非数字的字符“$”和“,”。
#为此,写一个函数专门来解决这个转化问题。def convert_money(value): new_value = value.replace("$","").replace(",","") return float(new_value)df['2016'].apply(convert_money)
lambda
conv_fun=lambda x: float(x.replace("%", "")) / 100
df['Percent Growth'].apply(conv_fun)
help(pd.to_datetime)
Covert argument to datatime.
# 将表示年月日的三个特征“Year”“Month”“Day”,合成时间类型
pd.to_datetime(df[['Year', 'Month', 'Day']])
封装函数
import pandas as pd
import numpy as npdef convert_money(value):new_value = value.replace(",","").replace("$","")return float(new_value)df2 = pd.read_csv("./DataSet/sales-data/sales_data_types.csv",dtype={'Customer Number': 'int'},converters={'2016':convert_money,'2017':convert_money,'Percent Growth': lambda x: float(x.replace("%", "")) / 100,'Jan Units': lambda x:pd.to_numeric(x, errors='coerce'),'Active':lambda x:np.where(x =='Y', 1, 0),})
df2['Date'] = pd.to_datetime(df[['Month','Day', 'Year']])
df2
案例2 处理缺失数据
将含有缺失数据的特征视为预测特征,找出规律,进行填补
检查缺失数据
help(df.isna)
Detect missing values.
df.isna().any()
help(df.dropna)
Remove missing values
train_df.dropna().any()
根据规律填补
RandomForestRegressor预测
help(RandomForestRegressor)
A random forest regressor.
如果将“Age”作为样本标签,那么利用哪些特征可以预测它的值呢?
此处姑且主观地选择Fare(船票价格)、Parch(父母孩子在船上的数量)、
SibSp(兄弟姐妹或配偶在船上数量)、Pclass(客舱等级)几个特征作为自变量。
df = train_df[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]
known_age = df[df['Age'].notnull()].values
unknown_age = df[df['Age'].isnull()].valuesy = known_age[:, 0] #'Age'
X = known_age[:, 1:] #'Fare', 'Parch', 'SibSp', 'Pclass'from sklearn.ensemble import RandomForestRegressor rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1) rfr.fit(X, y) pred_age = rfr.predict(unknown_age[:, 1:])
pred_age.mean()
将预测值填补到特征age中
train_df.loc[(train_df.Age.isnull()), 'Age'] = pred_age
train_df.isna().any()
查看Age数据分布
填补前数据分布
%matplotlib inline
import seaborn as sns
sns.distplot(y)
预测值填补后数据分布
sns.distplot(train_df['Age'])
用指定值填补
平均值
# 如果简单地用平均值填补,分布效果如下图
train_df = pd.read_csv("./DataSet/kaggle/titantic/train.csv")
df_mean = train_df['Age'].fillna(train_df['Age'].mean())
sns.distplot(df_mean)
help(SimpleImputer)
Imputation transformer for completing missing values.
| strategy : string, optional (default=“mean”)
| The imputation strategy.
|
| - If “mean”, then replace missing values using the mean along
| each column. Can only be used with numeric data.
| - If “median”, then replace missing values using the median along
| each column. Can only be used with numeric data.
| - If “most_frequent”, then replace missing using the most frequent
| value along each column. Can be used with strings or numeric data.
| - If “constant”, then replace missing values with fill_value. Can be
| used with strings or numeric data.
train_df = pd.read_csv("./DataSet/kaggle/titantic/train.csv")from sklearn.impute import SimpleImputer
si_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
df_mean = si_mean.fit_transform([train_df['Age'].values])sns.distplot(df_mean)
使用不同填充方式对比效果
train_df = pd.read_csv("./DataSet/kaggle/titantic/train.csv")
strategys = ['mean', 'median', 'most_frequent', 'constant']
for strategy in strategys:si_age = SimpleImputer(missing_values=np.nan, strategy=strategy).fit_transform([train_df['Age'].values])sns.distplot(si_age, label=strategy)plt.legend()
import matplotlib.pyplot as plt
fig = plt.figure()
i=0train_df = pd.read_csv("./DataSet/kaggle/titantic/train.csv")
strategys = ['mean', 'median', 'most_frequent', 'constant']
for strategy in strategys:si_age = SimpleImputer(missing_values=np.nan, strategy=strategy).fit_transform([train_df['Age'].values])i = i+1fig.add_subplot(2, 2, i)sns.distplot(si_age, label=strategy)plt.legend()
案例3 处理离群值
加载数据集
from sklearn.datasets import load_boston
import pandas as pdboston = load_boston()
x = boston.data
y = boston.target
columns = boston.feature_names# 将数据集转化为DataFrame类型(操作方便)
boston_df = pd.DataFrame(boston.data)
boston_df.columns = columns
箱线图法
定量化箱线图,剔除离群值
help(pd.DataFrame.quantile)
Return values at the given quantile over requested aixs, a al numpy.percentile.
IQR
percentlier = boston_df.quantile([0, 0.25, 0.5, 0.75, 1], # 0-4axis=0) # 计算四分位值
IQR = percentlier.iloc[3] - percentlier.iloc[1] # 四分位距 (0.75-0.25)
IQR
n < (Q1 - 1.5*IQR)
Q1 = percentlier.iloc[1] #第1四分位
Q3 = percentlier.iloc[3] #第3四分位
(boston_df < (Q1 - 1.5 * IQR)).any()
n > (Q3 + 1.5*IQR)
(boston_df > (Q3 + 1.5 * IQR)).any()
删除离群值
boston_df_out = boston_df[~((boston_df<(Q1-1.5*IQR)) |(boston_df>(Q3+1.5*IQR))).any(axis=1)]
print(boston_df.shape)
print(boston_df_out.shape)
正态分布法
依据正态分布统计理论,如果Z分数大于三个标准差,认为是离群值
help(stats.zscore)
Calculate the z score of each value in the sample, ralative to the sample mean and standard deviation.
计算Z分数
from scipy import stats #统计专用模块
import numpy as nprm = boston_df['RM']
z = np.abs(stats.zscore(rm))
z
计算标准差
st = boston_df['RM'].std()
st
输出大于3个标准差的值的索引
threshold = 3 * st
print(np.where(z > threshold))
利用索引,得到小于三个标准差的值
rm_in = rm[(z < threshold)] # 保留所有Z分数绝对值小于三个标准差的数据
print(rm.shape)
print(rm_in.shape)
2.1 特征工程 - 数据清理相关推荐
- ML之FE之FS:特征工程/数据预处理—特征选择之利用过滤式filter、包装式wrapper、嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)最全案例应用
ML之FE之FS:特征工程/数据预处理-特征选择之利用过滤式filter.包装式wrapper.嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)案例应用 利 ...
- ML之FE:特征工程/数据预处理中的数据异常值的概述、检测方法、处理方法技巧总结之详细攻略
ML之FE:特征工程/数据预处理中的数据异常值的概述.检测方法.处理方法技巧总结之详细攻略 目录 异常值 异常值的概述(简介/原因/影响) 异常值的检测方法
- 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)
数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...
- 大厂面试机器学习算法(0):特征工程 | 数据预处理
文章目录 数据分桶(分箱) 卡方分桶 等距分桶 等频分桶 聚类分桶 无量纲化 数据规范化 数据正则化 数据清洗 数据缺失 噪音数据 数据不一致 特征选择与特征提取 特征选择 特征提取 数据分桶(分箱) ...
- 特征工程—数据哑变量(独热编码)
哑变量=独热编码=稀疏矩阵 分类特征变量分为:名义变量,有序变量,有距变量 名义变量:如门A,B,C,指数据之间毫无关联性 有序变量:如小学,中学,大学,学历有高低,但不能相互计算 有距变量:如分数, ...
- ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略
ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析.特征工程.科学预测等)的简介.流程.案例应用执行详细攻略 目录 数据科学的任务(数据分析.特征工程.科学 ...
- 特征工程之数据预处理(上)
机器学习入门系列(2)–如何构建一个完整的机器学习项目,第三篇! 该系列的前两篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一) 机器学习数据集的获取和测试集的构建方法 分别介绍了 ...
- sklearn_数据预处理和特征工程
转载自:菜菜的sklearn课堂 文章目录 1 概述 1.1 数据预处理与特征工程 1.2 sklearn中的数据预处理和特征工程 2 数据预处理 Preprocessing & Impute ...
- 一文讲解特征工程 | 经典外文PPT及中文解析
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 "More data beats clever algorithms, bu ...
最新文章
- 刚开始学python,写的几个小脚本
- C++基础知识(二)--左值右值--逻辑表达式求值优化--逗号运算符与表示式--输入输出格式控制...
- 8、MySQL注释:单行注释和多行注释
- win10微软账户登录后以管理员都无法修改hosts文件解决办法
- 腾讯AI Lab推进医疗全流程覆盖:辅诊导诊精度再升级、布局三类病理AI研究
- 统一建模语言(UML) 版本 2.0
- CentOS 7 使用 ACL 设置文件权限
- sh.k7p.work/index.php,Laowang's Blogs
- jqgrid for asp.net 单页全选记录ID
- 8. wordpress源码解析-目录结构-文件调用关系(1)
- 现代通信原理14.2:M进制数字调制信号波形的向量表示
- ImportError: No module named rospy
- 《UNIX环境高级编程》随书代码的打开方式
- IL反汇编器(ILDASM)和IL汇编器(ILASM)Hello World小demo
- 相见恨晚的一款前端布局神器!
- 结构化数据与非结构化数据的区别
- 第十二章:(1)Fork/Join 分支合并框架
- 用Python绘制数学函数图像
- hankerrank 刷题二( Python 基础)
- 优化Facebook广告ROI的数据驱动方法:从投放到运营
热门文章
- 永嘉原*厂-VK1Q68D 是低功耗LED显示/数码管显示驱动IC,带键盘扫描电路,4~7 位,10~13 段 显示,QFN24 4*4MM超小体积封装
- 【观察】亚信科技:“三新”收入再翻番背后,是全栈数智化能力的释放
- UA PHYS515A 电磁理论IV 时变电磁场理论5 电磁场的角动量
- 工业镜头参数及选型参考
- C语言的数据类型详解及应用
- 软件测试教程编发中长发,真人教程︱短发、中发、长发的六款速成编发,手残党五分钟就能搞定!...
- ajax请求-IE缓存处理
- verycd 动态标题收藏
- sobol灵敏度分析matlab_sobol全局灵敏性分析
- .教你拿webshell的45种方法