DataWhale 动手学数据分析

2.1 缺失值观察与处理

2.1.1 任务一:缺失值观察

(1) 请查看每个特征缺失值个数
(2) 请查看Age, Cabin, Embarked列的数据 

#(1)
data2.isnull().sum()

#(2)
data2['Age'].isnull().sum()
data2['Cabin'].isnull().sum()
data2['Embarked'].isnull().sum()

2.1.2 任务二:对缺失值进行处理

(1)处理缺失值一般有几种思路

  • 处理缺失值可以从删除和填补两个角度考虑

(2) 请尝试对Age列的数据的缺失值进行处理

(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理

#(1)处理缺失值的一般思路:处理缺失值可以从删除和填补两个角度考虑
#提醒:可使用的函数有--->dropna函数与fillna函数

#(2)以均值填补Age列
m=data2['Age'].mean()
data2['Age'].fillna(m,inplace=True)


#(3)用不同的方法对整张表的缺失值进行处理

# 删除包含缺失值的行记录数据
data3=data2.dropna(axis=0,how='any',inplace=False)
data3.isnull().sum()

# 以前一个值来填充缺失值,并限定填充10个
data4=data2.fillna(method='ffill',limit=10)

data4.isnull().sum()

【思考1】dropna和fillna有哪些参数,分别如何使用呢?  
* DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数说明:
axis:axis=0: 删除包含缺失值的行   axis=1: 删除包含缺失值的列
how: 与axis配合使用
   how=‘any’ :只要有缺失值出现,就删除该行货列
   how=‘all’: 所有的值都缺失,才删除行或列
thresh:axis中至少有thresh个非缺失值,否则删除
比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
subset: list 在哪些列中查看是否有缺失值
inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值。

* DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
value: 它是一个用于填充空值的值, 或者是一个Series / dict / DataFrame  运用dict: 可以指定每一行或列用什么值填充
method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 一种用于填充重新索引的Series中的空值的方法
    ffill / pad: 使用前一个值来填充缺失值
    backfill / bfill :使用后一个值来填充缺失值
limit:填充的缺失值个数限制;它是一个整数值, 指定连续的前向/后向NaN值填充的最大数量
downcast:需要指定一个指定将Float64转换为int64的内容的字典

【思考】检索空缺值用np.nan,None以及.isnull()哪个更好,这是为什么?如果其中某个方式无法找到缺失值,原因又是为什么?

 #思考回答
1.np.nan()
需要明确:空值的产生只有np.nan()一种方法。
* np.nan不是一个“空”对象,用 i is None判断是False;
* 对某个值是否为空值进行判断,只能用np.isnan(i)函数,万万不可用 i == np.nan()来做,因为空值并不能用判断相等的“==”正确识别;
* np.nan非空对象,其类型为基本数据类型float

# np.nan()的一些奇妙性质:
np.nan == np.nan
>>> False
 
np.isnan(np.nan)
>>> True
 
np.nan is None
>>> False
 
type(np.nan)
>>> float

 # 2.np.isnan()和df.isnull()的使用
其实np.isnan()和pd.isnull()都可以对不论是DataFrame、Python list还是仅仅一个数值进行空值检测。
但一般在实际应用中,np.isnan()多用于单个值的检验,pd.isnull()用于对一个DataFrame或Series(整体)的检验。

2.2 重复值观察与处理 

# 方法一 :df.duplicated() 该方法返回的是数据集每一行的检验结果
# .duplicated()表示找出重复的行,默认是判断全部列,返回布尔类型的结果。对于完全没有重复的行,返回 False,对于有重复的行,第一次出现的那一行返回 False,其余的返回 True。
data2.duplicated() # 获得一个每行是否存在重复值的bool结果
data2[data2.duplicated()]

#方法二:  使用any函数,该函数表示的是在多个条件判断中,只有一个条件为True,则any函数的结果就为True
any(data2.duplicated()) # 返回一个bool值

指定某一列是否重复

  • examDf.duplicated('name') #判断name列是否有重复行,重复的显示为TRUE,
  • examDf.drop_duplicates('name') #去掉name列重复行

根据多列判断是否重复,防止误删数据

  • examDf.duplicated(['name','sex','birthday']) #判断name,sex,birthday列是否有重复行,重复的显示为TRUE,
  • examDf.drop_duplicates(['name','sex','birthday']) #去掉重复行

    2.2.2 任务二:对重复值进行处理

    (1)重复值有哪些处理方式呢?

  • 与.duplicated()对应的, .drop_duplicates()表示去重,即删除布尔类型为 True的所有行,默认是判断全部列。
  • (2)处理我们数据的重复值

    函数体:

    df.drop_duplicates(subset=['A','B'],keep='first',inplace=True)

    主要参数:

    subset: 输入要进行去重的列名 默认为None即对全部列进行判断,有重复的就删除,容易误删数据

    keep:可选参数有三个:‘first’、 ‘last’、 False, 默认值 ‘first’。

  • 其中,first表示: 保留第一次出现的重复行,删除后面的重复行。

  • last:删除重复项,保留最后一次出现的

  • False:不保留重复项

  • inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。

2.3 特征观察与处理 

2.3.1 任务一:对年龄进行分箱(离散化)处理

什么是分箱?

简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如水果 把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据 颜色就是条件

什么样式的数据要进行分箱

数据主要分为连续变量和分类变量,分箱的操作主要针对于连续变量。

为什么要对数据进行分箱操作

稳定性,时间复杂度,看的舒服,提高准确度 等等

分箱分为 有监督和无监督

  • 先说有监督,意思就是 个人确定范围区间

    例如,给了一堆年龄数据,你现在自己要把年龄分为[0-20,20-40,40-60-60-80,80-1000000]

这个是根据你个人意愿来划分区间

python 中主要使用cut方法

pandas.cut:

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

参数:

  • x,类array对象,且必须为一维,待切割的原形式
  • bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。
  • right,布尔值。是否是左开右闭区间
  • labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
  • retbins,布尔值。是否返回面元
  • precision,整数。返回面元的小数点几位
  • include_lowest,布尔值。第一个区间的左端点是否包含
  • 无监督 让代码自己划分组 -无监督 使用的是qcut方法 qcut() 方法第一个参数是数据,第二个参数定义区间的分割方法,比将数据按四分位数进行分割, 你也可以按照自己比例进行分割例如[0, 0.5, 1] 相遇55分,四分位还可写成这样 [0, 0.25, 0.5, 0.75, 1] ,也可以不是均分,比如 [0, 0.1, 0.2, 0.3, 1] ,这就就会按照 1:1:1:7 进行分布
  • cats = pd.qcut(s, 4) # 按四分位数进行切割
import numpy as np
import pandas as pd

df = pd.DataFrame(data = np.random.randint(0,150,size = (100,3)),
 columns=['Python','Tensorflow','Keras'])

# 1、等宽分箱
pd.cut(df.Python,bins = 3)

# 指定宽度分箱
pd.cut(df.Keras,#分箱数据
 bins = [0,60,90,120,150],#分箱断点
 right = False,# 左闭右开
 labels=['不及格','中等','良好','优秀'])# 分箱后分类

# 2、等频分箱
pd.qcut(df,q = 4,# 4等分
 labels=['差','中','良','优']) # 分箱后分类

(2) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示  

(3) 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示  

(4) 将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示

(5) 将上面的获得的数据分别进行保存,保存为csv格式

#(3)
data2['Agebin']=pd.cut(data2['Age'],bins=5,labels=['1','2','3','4','5'])
a=pd.value_counts(cuts) # 计算每个区段的样本数量
a

#(4)
data2['Agebin']=pd.cut(data2['Age'],bins=[0,5,15,30,50,80],right=False,labels=['1','2','3','4','5'])
a=pd.value_counts(cuts) # 计算每个区段的样本数量

#(5)
data2['Agebin']=pd.qcut(data2['Age'],q = [0,0.1,0.3,0.5,0.7,0.9],# 4等分
 labels=['1','2','3','4','5']) # 分箱后分类
data2.head(3)

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Datawhale数据分析课程是一门专门教授数据分析的课程。在这门课程中,生将习各种数据处理和分析的技巧,包括数据的载入、基本操作、可视化展示等。在第一章的习中,生主要习了如何载入数据以及如何查看数据的基本信息,例如平均值、标准差、最大最小值,还习了数据的相加和删减等基本操作,这些都为后面进行数据分析打下了基础。此外,数据可视化也是数据分析过程中非常重要的一部分。通过绘图展示数据,可以帮助人们更直观地理解数据,从而得出更准确的结论。良好的数据可视化往往需要一些技巧,比如可以使用matplotlib和seaborn等库来进行可视化操作。例如,在任务六中,使用seaborn库的kdeplot函数对泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况进行了可视化展示。此外,Pandas库中的stack()和unstack()方法也是数据分析中常用的工具,用于数据的重构、聚合与运算。通过使用这些方法,可以对数据进行更灵活的处理和分析。例如,在任务一中,通过习教材《Python for Data Analysis》和进行相关的搜索,可以了解到GroupBy机制在数据分析中的应用。总之,Datawhale数据分析课程提供了丰富的知识和技巧,帮助生掌握数据分析的基本原理和实践技能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Datawhale数据分析课程01](https://blog.csdn.net/m0_71038676/article/details/124809826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Datawhale数据分析课程第二章](https://blog.csdn.net/miaochangq/article/details/108077004)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值