oracle pivot非空处理,缺失值处理和数据透视表

缺失值处理 pandas中的fillna()方法 必要时设置索引 填充时会自动根据索引填充

数据透视表 pandas中的pivot_table函数

describe函数查看的是 数值变量的 统计信息,并未包括 分类变量数据的信息

如果需要擦汗分类别量的数据,需要使用include参数

titanic_df.describe()#只显示数据类的统计

titanic_df[["Survived","Age", "SibSp", "Parch"]].describe()#只看部分数据的统计量 前面实际上筛选出了想观察的数据

titanic_df.describe(include=[np.object])#使用include参数 查看分类变量的统计信息

#分类变量的统计信息,

#count 表示非缺失值的个数

#unique 非重复值的个数

#top 最高频值

# 最高频值出现的的次数

缺失值处理

真实数据往往会存在缺失值

超过百分之六七十的缺失值 我们可以考虑直接丢掉这个变量 --删除某列数据

重要的数据 缺失百分之二三十,我们可以考虑用中位数或者平均值填补 --填补缺失值

我们一般不提倡去掉带缺失值的行,因为非缺失值的变量可能提供有用的信息 --删除带缺失值的行

使用info函数 查看数据总量 以及各个变量非空值的个数,以及变量的类型。大致了解缺失值情况

titanic_df.info()

在处理某一列之前,可以先查看该列的统计值 以便处理前后做个比较

titanic_df.Age.describe()

使用中位数填补年龄数据中的缺失值

计算中位数

age_median = titanic_df.Age.median()

使用fillna填充缺失值 inplace=True表示在原数据上直接修改 要对那一列填充na就点到那一列

titanic_df.Age.fillna(age_median2, inplace=True)

再查看下统计值

titanic_df.Age.describe()

实际情况中,如果考虑更多的分类因素,会更接近真实数据。比如 考虑性别因素

因为填充时要依据性别因素填充,因此 需要将这个性别这个属性作为索引

分别计算男女年龄的中位数

age_median2 = titanic_df.groupby('Sex').Age.median()

上面这行命令,依据sex分组,分组计算了年龄的中位数。得到的结果是个Series序列,索引是sex,值是不同性别的中位数。

在对源数据填充的时候,也要给源数据一个相同的索引,所以需要对源数据设置索引

titanic_df.set_index('Sex',inplace=True)

使用fillna填充数据时,会根据索引进行填充

titanic_df.Age.fillna(age_meida2,inplace=True)

填充过之后,要恢复成原来的样子,就要重置索引

titanic_df.reset_index(inplace=True)

查看下使用这种填充后统计量

titanic_df.Age.describe()

索引也可以是多重的,使用多重索引填充时,要保证索引的一致性。

比如分别计算不同舱位男女年龄的中位数

age_median3 = titanic_df.groupby(['Pclass', 'Sex']).Age.median()

计算的结果其实只有一个标量 那就是 age的中位数

而分类依据是作为索引出现的。age_median3是个series数据

因此在填充时,源数据的 这两个分类属性也要作为索引

重设索引时 记得使用inplace参数 保证数据在原数据上修改

# 设置索引

titanic_df.set_index(['Pclass','Sex'], inplace=True)

# 填充数据

titanic_df.Age.fillna(age_median3, inplace=True)

# 重置索引

titanic_df.reset_index(inplace=True)

数据透视表df.pivot_table()

数据透视表是就是 在整个数据中 找到需要的数据 然后对数据 做一层运算

因此有三个关键参数 value 要操作的数据 index 把那个分类属性作为索引(分组) aggfunc应用的计算

titanic_df.pivot_table(values='Survived', index='Pclass', aggfunc=np.mean)

# 可以根据多个筛选条件对多个数据实行多个运算

titanic_df.pivot_table(values=['Survived','Age'], index=['Pclass','Sex'], aggfunc=[np.mean,np.max])

pivot_table还有一个参数叫做columns 也是个分类变量,跟index一样,不同的是会影响结果的显示。

只不过我们将它列在列里而不是行里,这也是为什么这个变量称为columns

连续变量离散化

连续变量离散化是建模的一种常用方法

离散化指的是 将某个变量所在的区间 分隔成几个小区间 落在同一个区间的观察值用同一个符号表示

以年龄为例,最小值是0.42(婴儿),最大值是80,如果我们想产生一个五个级(levels),我们可使用cut或者qcut函数

cut函数将年龄的区间平均分隔为5份,qcut是让每个区间的观察值个数一样(5等分)

# 我们使用cut函数

# 我们可以看到每个区间的大小是固定的,大约是16岁

# 这个函数的第一个参数是 对谁切割,第二个参数是切割几份

titanic_df['AgeBand'] = pd.cut(titanic_df['Age'], 5)

value_counts函数的结果默认是排了序的,可以使用sort参数修改是否对结果排序

titanic_df.AgeBand.value_counts(sort=False)

# 同时绘制不同年龄组的生还概率图

# 参数row='AgeBand'表示将不同的年龄区间的图按行排列

# 参数aspect设置画布的长宽比

# 参数palette(调色板)设置hue分组的颜色

sns.FacetGrid(data = titanic_df, row='AgeBand', aspect=1.5) \

.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', hue_order=['male', 'female'], palette='deep', ci=None)

#palette 配色参考 https://seaborn.pydata.org/tutorial/color_palettes.html?highlight=palette

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值