-
缺失值填充:关于年龄特征
2018-11-04 17:40:49缺失值填充这回事我们第一能想到的就是使用0进行填充,但是如果是年龄的话直接使用0进行填充就有点不太靠谱了,那么怎么办呢? 情况一:全样本均值填充 如果整个样本群体的年龄方差不大,比如整个样本来源于初中生,...不妥之处,欢迎评论指出。
缺失值填充这回事我们第一能想到的就是使用0进行填充,但是如果是年龄的话直接使用0进行填充就有点不太靠谱了,那么怎么办呢?
情况一:全样本均值填充
如果整个样本群体的年龄方差不大,比如整个样本来源于初中生,年龄在13-15岁之间,那么直接使用全样本的均值填充即可。
情况二:分类样本均值填充
但是真实情况往往不会这么美好,哪怕是初中生也会有急着早读书的学生和可怜巴巴的留级生,再加上各个地区的入学年龄并不统一,那么年龄区间一下子就会被拉大到11-16,这时候全体均值就不是那么管用了。
为了消除地区的影响,我们可以分地区进行均值计算,然后使用与样本同地区的均值进行填充。在入学的场景中我们需要考虑的地区粒度是城市,那么如果是生活习惯类的场景,我们可以考虑省份,又或者是大区(华东、华南之类的)。
同理在其他的分析场景中,我们还可以考虑分性别、分职业等等…
还可以考虑使用多个因素叠加分类之后再计算均值进行填充。条条大路通罗马,管用就行。
-
python输出有缺失值的行_python缺失值处理案例分析:泰坦尼克数据
2020-12-15 14:15:00缺失值处理真实数据往往某些变量会有缺失值。首先,我们用 info( ) 语句操作,看到整份数据的大概情况:从这份数据我们可以发现,这里一共有 891 行数据,所以...登船码头的缺失值比较少,后面可以不用处理。这些...缺失值处理
真实数据往往某些变量会有缺失值。
首先,我们用 info( ) 语句操作,看到整份数据的大概情况:
从这份数据我们可以发现,这里一共有 891 行数据,所以在中间那一列数据中看到的不是 891 个数据的,都是有缺失值的。比如年龄Age这一列,有714个非空数值,就有 891-714=177 个缺失值。又比如船舱号码 cabin,缺失值就更多了。登船码头的缺失值比较少,后面可以不用处理。
这些缺失值是怎么处理的呢?一般是三种处理方法:不处理/丢弃/填充。
这里,cabin有超过70%以上的缺失值,我们可以考虑直接丢掉这个变量。 -- 删除某一列数据
像Age这样的重要变量,有20%左右的缺失值,我们可以考虑用中位值来填补。-- 填补缺失值
我们一般不提倡去掉带有缺失值的行,因为其他非缺失的变量可能提供有用的信息。-- 删除带缺失值的行删除带缺失值的行(一般不建议):df.dropna( )
删除某一列:df.drop('column_name', axis=1, inplace=True)
填充缺失值:df.column_name.fillna( )
axis=1,代表删除的是一列的数据,也就是 column_name 这一列。inplace=True,表示在 df 这个原始数据上面进行修改。
其实我们这节课重点的是最后一个:填充缺失值。fill 是填充,na 是缺失值的代称。
我们在 info( ) 这个运行中可以看到 Age 的缺失值不少,下面将使用中位数来填充 缺失值。
填补年龄数据中的缺失值
直接使用所有人年龄的中位数来填补
为了方便后面的比较,我们首先用 describe 统计数据。
查看Age列的统计值
这份数据照样是可以看到,非缺失值 count 是有 714,平均值 mean 是 29.6岁,标准差 std 是 14.5,这时可以注意一下 50% 那个数据:28。
中位数
为了防止数据有改动,我们在开始之前需要重新载入数据。
正确的中位数可以使用 median 的方法获取,得到的数和上面的 50% 的数是一样的。
填充年龄缺失值
把中位数赋值给 age_median1,这个操作体现在第二行代码。我的理解是,要是这里不重新赋值的话,后面需要用到这个中位数的时候,就需要完整码出 titanic_df.Age.median( ) 这一句,重新赋值就可以直接使用 age_median1 来代替稍微长一点的句子了。
titanic_df.Age.fillna(age_median1,inplace=True) 中,因为使用到Age这列数据,然后用 fillna 来实现填充,所以语句用 titanic_df.Age.fillna( ) 来表达,括号里面需要填的参数就是需要填充的值,也就是里面的缺失值都是由刚刚赋值的 age_median1 来代替。逗号后面再加上inplace=True,表示在原来的 df 数据中进行修改了,如果不加上这个参数,就需要把填充后的值重新赋值给 Age 这一列,所以 inplace 这个动作是为了简单起见。
再来看我们得到的结果,这个时候的非空缺失值已经变成了891,平均值也从原本的29.7降到了29.4,因为我们刚刚填充的中位数是28,比原来的平均值小,所以会有所新的平均值也会有所下降。
上面讲的是所有人的年龄中位数,现在我们进一步来思考:性别因素,会怎么影响结果呢?
考虑性别因素,分别用男女乘客各自年龄的中位数来填补
由于上面的操作已经对原始数据进行修改了,所以要是我们需要重新分类,那就要重新载入原始数据,不然后面的操作都会以上一步填充了所有年龄缺失值的基础上操作的哦!这个亏我吃过。。。
性别的中位数
我们得到的女性中位数是 27,男性的是 29,还是有差距的吧!我们后面需要用到的是,用得出的中位数来填充男女的缺失值。
接下来的步骤,按照以前,通常的思路是用布尔型索引取到女性中缺失值的数据,然后用 27 重新赋值;同理可求男性的操作。
但是我们这节课学了fillna 这个新的方法啊!
不过刚刚我们使用 fillna 的时候,填充的只是一个数值,这里不止一个数值,就需要根据不同的情况来填充。此时可以用到 Pandas 中里的一个小技巧,Pandas 的值在运算的过程中,会根据索引的值来进行自动的匹配。在这里我们可以看到这里的索引是 female 和 male 两个值,如果原始数据也可以用性别来进行索引的话,就可以用 fillna 自动匹配相应的索引形式进行填充了。
fillna 进行性别分类索引
所以这里要对原来的数值重新设置索引,一开始是 0 1 2 这样的数值,现在要把它设置成性别这一列数据。用 set_index 语句,用 Sex 来进行索引,同时加入参数 inplace=True,表示在原来的数据上进行修改。
inplace=True的含义应该讲了第三遍了,其实我觉得要是不是很明白这个语句的用法时,你可以先不加上这一句,跟着打代码,然后到后面运行的哪一步你发现和老师的代码不一样的时候,你就知道这个语句的重要性了。
我们可以看到这里的运行结果 列索引变成了 Sex,列首索引是 male 和 female ,在行首 Sex 已经不存在了。
填充性别分类的缺失值
我们将这里分类中位数赋值为 age_median2。填充的套路和上面也是一样一样的,根据 Pandas 的自动匹配,填充的时候会根据索引来匹配不同的值了。因为后续需要用到 Sex 这一列,所以这里也需要重置索引,将索引变成它的列。这里使用 reset_index。
非空值是 891 时就说明缺失值全部填充完毕了,这时候的均值是29.4。
所以到这里,我们把性别分类的缺失值也用各自的中位数填充完毕了。下一步要考虑的是,同时两个因素的影响:
同时考虑性别和舱位因素
那我们首先来看一下,在不同年龄和不同舱位的中位数,有什么变化呢?
groupby 分组的对象分别是 Pclass 舱位 和 Sex 性别,由于这里需要考量的有两个因素:性别和舱位,所以这里需要使用到中括号,后面加上用 Age.median 就可以得到分组的中位数了。
不同舱位男女年龄的中位数
这里就有两个索引,分别是舱位和性别,我们可以看到,随着舱位的下降,它的年龄也是在下降的。用我们的话理解就是,年轻人普遍比年长的穷啊,年龄大一点的人积累的财富也多一点。
那接下来我们就用得出的中位数来各自重新赋值给舱位和性别。这时还是可以用 fillna 的,但是需要设置二重索引。
舱位和年龄的分类
套路还是一样的,把这里得出的中位数赋值为 age_median3,然后对索引进行重新的赋值,同样的,这里有两个因素,也是使用中括号,用 set_index 的方法。
然后来看一下重置索引后的数据。看输出我们是可以看到二重索引的,第一列的组合内容一共有 3*2=6 种情况。在列上面,已经没有 Pclass 和 Sex 两列数据了,因为此刻它们已经在索引上了。
现在按同样的方法 fillna ,用索引值来匹配不同的中位数。
额。。。这两张看起来和上面的一毛一样啊,是我哪里错了吗。。。?
为了还原这样的索引,这里用 reset来重置
分类填充结果
这里的输出可以看到非空数值已经是891了,表示已经填满缺失值了。平均值下降到了29.1岁,因为三等舱的人数比较多,而且年龄比较小,所以拉低了平均值。
我们总结一下,这里使用的 fillna 的方法,可以对总体的中位数进行操作,或者分类之后对中位数进行操作。分组之后由于有索引,所以同时也需要对原始数据进行索引,对于相同索引值,可以用匹配来进行填充。
-
缺失值处理
2013-09-23 09:38:53如果在表格中,某一个数据采集时无法获得,就会出现缺失值,例如在上表中“张三”的性别和“赵六”的年龄就出现了缺失。 缺失值的处理一般有两种方式,一是删除对应的记录,例如在上例中,如果张三的性别没有记录...缺失值是指在数据采集与整理过程中丢失的内容。
一般情况下,数据都是以关系型表的方式采集的,如下表是某次调查中一些受访者的基本情况见本文最后的表格。
如果在表格中,某一个数据采集时无法获得,就会出现缺失值,例如在上表中“张三”的性别和“赵六”的年龄就出现了缺失。
缺失值的处理一般有两种方式,一是删除对应的记录,例如在上例中,如果张三的性别没有记录,出现缺失,则将张三的所有信息全部从数据库中删掉。这种方式在数据缺失非常少的情况下是可行的,但如果各个项目中都有少数的数据缺失存在,对所有缺失的记录都进行删除可能就会使总样本量变得非常小,从而损失许多有用信息。缺失值处理的第二种方式是进行插值处理,所谓插值,是指人为地用一个数值去替代缺失的数值。
插值处理根据插值的不同,有如下一些方法:
1.随机插值
根据缺失值的各种可能情况,等概率地进行插值。
例如在上例中,“张三”的性别有两种可能性,一是“男”,二是“女”,可以简单地掷一枚硬币,如果正面朝上,则赋值为“男”,如果反面朝上,则赋值为“女”。
2.依概率插值
随机插值是假定各种一个变量取各种值的可能性是相等的,但有些情况下,我们可以事先知道一个变量取各种值的概率,例如,我们知道在上述的单位中,女性占的比例是75%,男性的比例是25%,则在对“张三”的性别进行赋值时,不是按50%概率赋为“女”,而是按75%概率赋为“女”。
3.就近插值
就近插值是指根据缺失记录附近的其他记录的情况对缺失值进行插值,例如在上例中,“张三”的性别出现缺失,此时可以用其邻近的“李四”的性别数据替代“张三”的性别数据,由于“李四”的性别为“女”,所以将“张三”的性别也赋为“女”。
就近插值是依概率插值的一种简化处理,设想在整个单位的职工中,女性占的比例是75%,则在一般情况下,与张三邻近的记录性别为“女”的概率也应当为75%,就近插值实际上就是依概率插值。
使用就近插值时,需要对抽样过程进行必要的了解,如果抽样时性别有交叉的情况,例如经常是调查完一名男性后就调查一名女性,则使用就近插值就会出现较多的错误。
4.分类插值
依概率插值是将记录置于总体的背景上进行插值,没有充分利用记录的其他信息。如果在记录的其他信息中有某些项目与缺失项目存在相关性,则可以根据这些辅助信息对总体进行分类,在每一类内部进行插值处理。
例如在上例中,“张三”的职业是“护士”,假定该单位中95%的“护士”性别为“女”,则在进行插值是,就不是使用全单位的女性比例75%,而是使用“护士”中的女性比例95%对“张三”的性别进行赋值。 -
python 平均值代替缺失值_Pyspark数据帧估算——根据指定条件用列平均值替换未知值和缺失值...
2020-12-24 14:36:48给定一个Spark数据帧,我想根据该列的非缺失值和非未知值计算一个列的平均值。然后,我想采用这个平均值,并用它替换列缺少的未知值。例如,假设我使用的是:名为df的数据帧,其中每条记录代表一个单独的记录,所有...给定一个Spark数据帧,我想根据该列的非缺失值和非未知值计算一个列的平均值。然后,我想采用这个平均值,并用它替换列缺少的未知值。
例如,假设我使用的是:名为df的数据帧,其中每条记录代表一个单独的记录,所有列都是整数或数字
名为age的列(每条记录的age)
名为missing_age的列(如果该个人没有年龄,则等于1,否则为0)
名为unknown_age的列(如果该个人的年龄未知,则等于1,否则为0)
然后我可以计算这个平均值,如下所示。calc_mean = df.where((col("unknown_age") == 0) & (col("missing_age") == 0))
.agg(avg(col("age")))
或者通过SQL和windows函数mean_compute = hiveContext.sql("select avg(age) over() as mean from df
where missing_age = 0 and unknown_age = 0")
如果可以的话,我不想使用SQL/windows函数。我的挑战是采用这种方法,并使用非SQL方法替换未知/缺少的值。
我试过使用when()、where()、replace()、with column、udf和组合。。。不管我做什么,我要么会犯错,要么结果不是我所期望的。这里有一个例子,我试过的很多事情中有一个没有用。imputed = df.when((col("unknown_age") == 1) | (col("missing_age") == 1),
calc_mean).otherwise("age")
我在网上搜索过,但还没有发现类似的归责类型的问题,所以非常感谢任何帮助。可能是我错过了一些很简单的事情。
附带说明——我正在尝试将此代码应用于Spark数据帧中的所有列,这些列的名称中没有未知或缺少。我可以将与Spark相关的代码包装成Python的“for loop”并遍历所有适用的列来完成这项工作吗?
更新:
还知道了如何遍历列。。。这里有一个例子。for x in df.columns:
if 'unknown_' not in x and 'missing_' not in x:
avg_compute = df.where(df['missing_' + x] != 1).agg(avg(x)).first()[0]
df = df.withColumn(x + 'mean_miss_imp', when((df['missing_' + x] == 1),
avg_compute).otherwise(df[x]))
-
聊聊机器学习中特征的缺失值填补法
2019-09-27 17:20:15应用机器学习算法,必不可少的就是数据集。然而,通常情况下,收集到的数据集中或多或少会包含一些缺失值,比如年龄,性别,所在地等等。目前,研究者们已经研究出多种缺失值填补的方... -
sklearn 数据填补缺失值
2020-01-17 00:32:44很多特征,对于分析和建模来说意义非凡,但对于实 际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因 此,数据预处理中非常重要的一项就是处理缺失值。 从... -
python 计算缺失值个数以及缺失率
2019-10-13 22:51:39import os import pandas as pd os.chdir(r"D:\pycharm程序文件\练习1") data = pd.read_excel("data.xlsx") # 计算表格行列数 ...# 查看某 一/多 列的缺失值isnull() print(data['被保险人年龄... -
07-20 缺失值处理二+ 异常值处理
2020-07-21 17:01:01缺失值处理二 一: 删除法 对于缺失值,一般不会直接进行删除,因为删除过多影响数据分析,所以会对其进行第二中操作,补齐 二: 填补法( 一般适用于 元素 为 float 或者 int的数据) 1. 均值或 中位数 补齐法: df.... -
eviews如何处理缺失数据填补_python缺失值处理案例分析:泰坦尼克数据
2020-12-28 09:41:14首先,我们用 info( ) 语句操作,看到整份数据的大概情况: http://titanic_df.info()从这份数据我们可以发现,这里一共有 891 行数据,所以在中间那一列数据中看到的不是 891 个数据的,都是有缺失值的。... -
python缺失值处理案例分析:泰坦尼克数据
2018-08-06 16:19:00缺失值处理 真实数据往往某些变量会有缺失值。 首先,我们用 info( ) 语句操作,看到整份数据的大概情况: ...比如年龄Age这一列,有714个非空数值,就有 891-714=177 个缺失值。又比如船舱号码 cabin,缺失值... -
pandas对数据中缺失值进行处理
2019-04-19 17:15:58pandas对数据中缺失值进行处理 如图首先利用pd.isnull(age)函数找出age数组中年龄为空的数据,如果年龄的数据为空值,则函数返回结果为True,否则为False。并将返回的数组age_is_null中的True值当作索引来输出年龄... -
数据清洗-缺失值处理
2018-07-30 11:21:27为什么需要清洗数据?... 经常遇见比如人物属性字段值:性别,姓名,年龄,学历等,有缺失情况。一条记录,常常不是缺胳膊就是少腿,你还不能直接把它枪毙掉。 数据有重复 所有字段的值都相... -
seaborn和pandas-missingno 的数据可视化--使用画图--缺失值分析
2019-01-01 01:20:08目录 0、seaborn包基本使用 1 pandas打印报表(推荐使用) ...1,热度图seaborn--满足条件的数据的个数如年龄段为2的女生有多少人 2、柱状图(查看其中一个特征的每一个种类有多少--比如男性有多少,... -
数据挖掘学习笔记——(二)数据清洗(缺失值)
2020-02-27 16:39:06剔除掉 当缺失值的数量过多,可以考虑直接剔除掉这列数据。 平均值填充进阶 以年龄为例。 可以根据姓名列的称呼求取平均值。 新建一列称呼列(call),如Miss,Mr,Mrs等,将人数较多的单独归类,人数较少的结合起来... -
数据分析之Pandas(七)高级处理-缺失值处理
2019-03-18 13:50:11缺失值是怎么来的? 调查问卷:女性的美容方面的问题 name: age: 不愿意透露年龄(收集不到,空值) phone: 不愿意透露年龄 xx: yy: 它对数据分析有什么影响? 影响分析准确性 如何处理nan 对于NaN的数据,在... -
R语言处理缺失值的高级方法 ---后面有一些python画图的语句
2016-07-20 20:37:12df[['年龄','税后收入']].boxplot() dfdf['1'].value_counts() dfdf.plot(kind="line", x="1", y="2") dfdf.plot(kind=...税后年薪 的异常值 删除 >200万的 88+55(大于2000的)1% 的人的收入 >200万 x2.plo -
将numpy二维数组中的np.nan值替换为指定的值
2019-10-19 09:59:28(1)np.nan表示该值不是一个数,比如数据中收入、年龄的缺失值;np.inf表示无穷大 (2)np.nan == np.nan 的结果为False (3)nan与任何数的操作结果均为nan,例如sum((np.nan,4)) 的结果为nan (4)一个ndarray... -
UCI银行营销数据集--缺失值处理方法
2018-12-19 16:20:53数据集基本情况 ...年龄,工作类型,婚姻状况,受教育背景,信用情况,房贷,个人贷款,联系电话是手机还是固定电话,最后联系月份,最后联系日,通话持续时间,本次活动中联系的次数,最后一次接... -
缺失数据处理
2017-12-19 12:07:33对于缺失的数据最简单的处理方法就是删除这两行数据,但是这样的话可能会遗失重要的信息,所以要采取一个更好的方法,最常用的方法就是,取这一列的平均值,或者是最常见的值来对缺失的数据进行补充。 我们用工具来... -
Pandas第6章:处理缺失数据
2020-06-23 21:59:35并选出C为缺失值的行b)现需要将A中的部分单元转为缺失值,单元格中的最小转换概率为25%,且概率大小与所在行B列单元的值成正比。【练习二】 现有一份缺失的数据集,记录了36个人来自的地区、身高、体重、年龄和工资... -
《Statistical Analysis with Missing Data》学习笔记——1. 缺失数据介绍
2018-09-05 21:21:42这些缺失值可能是各种原因引起的,例如我们调查各个年龄段人群的收入情况,有些人会拒绝回答这类型的隐私问题;亦或者可能由于由于机器故障从而导致实验结果缺失等等。很多时候我们在处理缺失值数据时,都是简单粗暴... -
评分卡模型开发(二)--用户数据异常值处理
2018-11-23 10:31:30用户数据缺失值处理见上篇: https://cloud.tencent.com/developer/article/1016341 ...异常值是指明显偏离大多数抽样数据的数值,比如个人客户的年龄大于100时,通常认为该值为异常值。找出样本总体中的... -
python可视化数据分析交互作用_Python-数据可视化案例分析之泰坦尼克号(二)...
2021-01-29 15:53:04注意:本章中年龄的缺失值为案例分析(一)中用年龄和舱位的中位数的值填充。提出问题:什么因素会影响乘客的生还率?影响乘客生还率的因素很多,这里只讨论乘客的性别、年龄以及舱位是否对生还率产生影... -
天池-IJCAI2018-比赛总结
2018-06-13 15:59:121 数据预处理有10几个重复的数据样本,去重Id、性别、年龄的缺失值填充的是-1,可以填充为nan(树模型可以处理)对时间戳做处理,得到日期和时间2 特征工程2.1 基础特征基础特征简要介绍下,主要获取用户、商品、店铺的... -
评分卡模型开发-用户数据异常值处理
2017-08-02 23:09:32缺失值处理完毕后,我们还需要进行异常值处理。异常值是指明显偏离大多数抽样数据的数值,比如...由于本文采用的样本总体GermanCredit已经进行了数据预处理,即已经做了缺失值和异常值处理,因此,我们以随机产生的样 -
python实现将文件内容按照某一列内容的大小值重新排序_Python数据分析入门教程(四):数值操作...
2021-01-24 09:14:17一、数值替换 数值替换就是将数值A替换成B,可以用在异常值替换处理、缺失值填充处理中。主要有一对一替换、多对一替换、多对多替换三种替换方法。1、一对一替换一对一替换是将某一块区域中的一个值全部替换成另一个... -
数据处理之异常值分析、处理
2018-07-30 21:52:41最常用的是最大值和最小值,如年龄的最大值199,则存在异常。 2、3σ原则 针对服从正态分布的数据, 3、箱形图分析(R语言) 首先,读取数据集,用sum(),mean()函数来分别获取缺失样本数、缺失比例。 ... -
R语言笔记四:因子、缺失数据、字符串、时间序列
2020-07-13 14:57:521.变量分类 ...这些分类变量的可能值称为一个水平(level),例如good、better、best,都称为一个level。有这些水平值构成的向量就称为因子。 table函数进行频数统计,如: mtcars$cyl &nb -
R语言|数据预处理--5异常值分析及处理
2016-10-04 15:40:47《3缺失值离群点处理》中2 1、异常值分析及处理 #获取月收入的异常值 out boxplot(traindata$x5) # which(traindata$x5%in% out) # traindata1 #boxplot(traindata1$x5) #首先对于x2变量,即客户的年龄,我们... -
highcharts 显示平均值数值_数据分析实践入门(三):数值操作
2020-11-28 21:49:49一、数值替换数值替换就是将数值A替换成B,可以用在异常值替换处理、缺失值填充处理中。主要有一对一替换、多对一替换、多对多替换三种替换方法。1、一对一替换一对一替换是将某一块区域中的一个值全部替换成另一个...
-
MySQL你该了解的那些事【服务端篇】
-
下血本买的!从不一样的角度描述Android事件传递,终获offer
-
全网最全原理讲解!2021Android高级面试题总结,成功定级腾讯T3-2
-
龙芯生态应用开发基础:C语言精要
-
移动电源硬件设计PDF原理图+PADS9.3 PCB文件.zip
-
linux文件系统.docx
-
从入门到精通!面试字节跳动Android工程师该怎么准备?移动架构师成长路线
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
项目管理工具与方法
-
Liunx 优化思路与实操步骤
-
定时提醒软件.zip
-
工程制图 AutoCAD 2012 从二维到三维
-
FastDFS 分布式文件系统部署
-
vue2 动态添加全局组件
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
ELF视频教程
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
硬件/操作系统/网络(十一):网络相关知识扫盲
-
2021年 系统分析师 系列课
-
03.通过事件往子组件发送信息-----------------VUE重温学习