案例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 or y, depending on condition.

# 特征“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 特征工程 - 数据清理相关推荐

  1. ML之FE之FS:特征工程/数据预处理—特征选择之利用过滤式filter、包装式wrapper、嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)最全案例应用

    ML之FE之FS:特征工程/数据预处理-特征选择之利用过滤式filter.包装式wrapper.嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)案例应用 利 ...

  2. ML之FE:特征工程/数据预处理中的数据异常值的概述、检测方法、处理方法技巧总结之详细攻略

    ML之FE:特征工程/数据预处理中的数据异常值的概述.检测方法.处理方法技巧总结之详细攻略 目录 异常值 异常值的概述(简介/原因/影响) 异常值的检测方法

  3. 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)

    数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...

  4. 大厂面试机器学习算法(0):特征工程 | 数据预处理

    文章目录 数据分桶(分箱) 卡方分桶 等距分桶 等频分桶 聚类分桶 无量纲化 数据规范化 数据正则化 数据清洗 数据缺失 噪音数据 数据不一致 特征选择与特征提取 特征选择 特征提取 数据分桶(分箱) ...

  5. 特征工程—数据哑变量(独热编码)

    哑变量=独热编码=稀疏矩阵 分类特征变量分为:名义变量,有序变量,有距变量 名义变量:如门A,B,C,指数据之间毫无关联性 有序变量:如小学,中学,大学,学历有高低,但不能相互计算 有距变量:如分数, ...

  6. ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略

    ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析.特征工程.科学预测等)的简介.流程.案例应用执行详细攻略 目录 数据科学的任务(数据分析.特征工程.科学 ...

  7. 特征工程之数据预处理(上)

    机器学习入门系列(2)–如何构建一个完整的机器学习项目,第三篇! 该系列的前两篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一) 机器学习数据集的获取和测试集的构建方法 分别介绍了 ...

  8. sklearn_数据预处理和特征工程

    转载自:菜菜的sklearn课堂 文章目录 1 概述 1.1 数据预处理与特征工程 1.2 sklearn中的数据预处理和特征工程 2 数据预处理 Preprocessing & Impute ...

  9. 一文讲解特征工程 | 经典外文PPT及中文解析

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 "More data beats clever algorithms, bu ...

最新文章

  1. 刚开始学python,写的几个小脚本
  2. C++基础知识(二)--左值右值--逻辑表达式求值优化--逗号运算符与表示式--输入输出格式控制...
  3. 8、MySQL注释:单行注释和多行注释
  4. win10微软账户登录后以管理员都无法修改hosts文件解决办法
  5. 腾讯AI Lab推进医疗全流程覆盖:辅诊导诊精度再升级、布局三类病理AI研究
  6. 统一建模语言(UML) 版本 2.0
  7. CentOS 7 使用 ACL 设置文件权限
  8. sh.k7p.work/index.php,Laowang's Blogs
  9. jqgrid for asp.net 单页全选记录ID
  10. 8. wordpress源码解析-目录结构-文件调用关系(1)
  11. 现代通信原理14.2:M进制数字调制信号波形的向量表示
  12. ImportError: No module named rospy
  13. 《UNIX环境高级编程》随书代码的打开方式
  14. IL反汇编器(ILDASM)和IL汇编器(ILASM)Hello World小demo
  15. 相见恨晚的一款前端布局神器!
  16. 结构化数据与非结构化数据的区别
  17. 第十二章:(1)Fork/Join 分支合并框架
  18. 用Python绘制数学函数图像
  19. hankerrank 刷题二( Python 基础)
  20. 优化Facebook广告ROI的数据驱动方法:从投放到运营

热门文章

  1. 永嘉原*厂-VK1Q68D 是低功耗LED显示/数码管显示驱动IC,带键盘扫描电路,4~7 位,10~13 段 显示,QFN24 4*4MM超小体积封装
  2. 【观察】亚信科技:“三新”收入再翻番背后,是全栈数智化能力的释放
  3. UA PHYS515A 电磁理论IV 时变电磁场理论5 电磁场的角动量
  4. 工业镜头参数及选型参考
  5. C语言的数据类型详解及应用
  6. 软件测试教程编发中长发,真人教程︱短发、中发、长发的六款速成编发,手残党五分钟就能搞定!...
  7. ajax请求-IE缓存处理
  8. verycd 动态标题收藏
  9. sobol灵敏度分析matlab_sobol全局灵敏性分析
  10. .教你拿webshell的45种方法