免费二级网站,房地产最新消息新政策,品牌建设与管理,公司网站的服务费做哪个科目一、缺失值处理
1、如何处理nan 两种思路#xff1a; #xff08;1#xff09;如果样本量很大#xff0c;可以删除含有缺失值的样本 #xff08;2#xff09;如果要珍惜每一个样本#xff0c;可以替换/插补#xff08;计算平均值或中位数#xff09;
2、判断数据是否…一、缺失值处理
1、如何处理nan 两种思路 1如果样本量很大可以删除含有缺失值的样本 2如果要珍惜每一个样本可以替换/插补计算平均值或中位数
2、判断数据是否为nan 1pd.isnull(df) 返回一堆布尔值False不是缺失值True是缺失值
2pd.notnull(df) 返回一堆布尔值True不是缺失值False是缺失值
3、缺失值处理方式 存在缺失值nan并且是np.nan 1dropna(axisrows, inplaceFalse) 删除存在缺失值 默认不替换原数据返回新数据inplaceTrue修改原数据
2fillna(value, inplaceTrue) 替换缺失值 说明 value替换成的值 inplace True会修改原数据 False不替换修改原数据生成新的对象
3缺失值不是nan是其他标记的 后面再说
二、缺失值处理实例
1、电影数据文件获取
import pandas as pdmovie pd.read_csv(./IMDB-Movie-Data.csv)movieimport numpy as np# 判断是否存在缺失值
np.any(pd.isnull(movie))np.all(pd.notnull(movie))# 用dataframe的any方法
pd.isnull(movie).any() # 返回每一个字段是否有缺失值# 用dataframe的all方法
pd.notnull(movie).all()# 用dataframe的isnull方法
movie.isnull().sum() 2、删除含有缺失值的样本
# 缺失值处理
# 删除含有缺失值的样本
data1 movie.dropna()data1.isnull().sum() 3、替换缺失值
# 含有缺失值的字段
# Revenue (Millions)
# Metascoremovie[Revenue (Millions)].fillna(movie[Revenue (Millions)].mean(), inplaceTrue)
movie[Metascore].fillna(movie[Metascore].mean(), inplaceTrue)movie.isnull().sum() 4、不是缺失值nan是其他标记的 比如是?
思路 1进行替换将?替换成np.nan 2处理np.nan缺失值的步骤来 3replace(to_replace, value) 说明 to_replace替换前的值 value替换后的值
# 不是缺失值nan是其他标记的
name [Sample code number, Clump Thickness, Uniformity of Cell Size, Uniformity of Cell Shape,Marginal Adhesion, Single Epithelial Cell Size, Bare Nuclei, Bland Chromatin,Normal Nucleoli, Mitoses, Class]
data pd.read_csv(./breast-cancer-wisconsin.data, namesname)datadata_new data.replace(to_replace?, valuenp.nan)data_newdata_new.dropna(inplaceTrue)data_new.isnull().sum() 三、数据离散化
1、什么是数据离散化 我们用数值表示类别计算机它只知道数值会认为数值大的有什么优势
连续属性的离散化就是将连续属性的值域上将值域划分为若干个离散的区间最后用不同的符号或整数、值代表落在每个子区间中的属性值避免了由于数值差异导致类别的平衡
例子1 男 女 年龄 A 1 0 23 B 0 1 30 C 1 0 18
例子2 原始的升高数据165、174、160、180、159、163、192、184、 假设按照身高分几个区间段(150,165](166,180](180,195] 这样我们将数据分到了三个区间段我们可以对应的标记为矮、中、高三个类别最终要处理成一个“哑变量”矩阵
我们把这种数据编码称为one-hot编码也叫哑变量
2、为什么要数据离散化 连续属性离散化的目的是为了简化数据结构数据离散化技术可以用来减少给定连续属性值的个数离散化方法经常作为数据挖掘的工具
3、如何实现数据离散化 流程 1对数据进行分组 2对分好组的数据求哑变量
4、对数据分组方法 pd.qcut(data, bins) 自动分组 说明 data要分组的数据 bins要分的组数 返回值分好组的Series
pd.cut(data, bins) 自定义分组 说明 data要分组的数据 bins自定义的区间以列表的形式[]传进来 返回值分好组的Series
series.value_counts() 统计分组次数 对数据进行分组一般会与value_counts搭配使用统计每组的个数
5、对分好组的数据求哑变量one-hot编码 pd.get_dummies(data, prefixNone) 说明 dataarray-like、Series、DataFrame prefix分组名字
6、小案例
# 数据的离散化
# 准备数据
data pd.Series([165,174,160,180,159,163,192,184], index[No1:165, No2:174,No3:160, No4:180, No5:159, No6:163, No7:192, No8:184])data# 自动分组
sr pd.qcut(data, 3)sr# 转换成one-hot编码
pd.get_dummies(sr, prefixheight)# 统计每个区间有多少样本
sr.value_counts()# 自定义分组
bins [150, 165, 180, 195]
cut pd.cut(data, bins)cutpd.get_dummies(cut, prefix身高)cut.value_counts() 7、one-hot编码占内存然后再用稀疏矩阵来减少内存。达到提取特征的目的
8、案例股票的涨跌幅离散化
# 股票涨跌幅离散化
# 1、读取股票的数据
stock pd.read_csv(./stock_day.csv)p_change stock[p_change]p_change# 自动分组
sr pd.qcut(p_change, 10)sr.value_counts()# 离散化
pd.get_dummies(sr, prefix涨跌幅)# 自定义分组
bins [-100, -7, -5, -3, 0, 3, 5, 7, 100]
sr pd.cut(p_change, bins)sr.value_counts()# 离散化
stock_change pd.get_dummies(sr, prefixrise)
stock_change