机器学习数据预处理方法(基本信息探索)##1

基于Kaggle电信用户流失案例数据(可在官网进行下载)

数据解读与数据预处理

建议使用jupyter lab进行运行

import numpy as np
import pandas as pd

tcc = pd.read_csv('WA_Fn-UseC_-Telco-Customer-Churn.csv')
pd.set_option('max_colwidth',200)
# 查看前五条数据
tcc.head(5)

在这里插入图片描述

# 查看数据集信息(字段解释)
tcc.info()

在这里插入图片描述

字段 解释
customerID 用户ID
gender 性别
SeniorCitizen 是否是老年人(1代表是)
Partner 是否有配偶(Yes or No)
Dependents 是否经济独立(Yes or No)
tenure 用户入网时间
PhoneService 是否开通电话业务(Yes or No)
MultipleLines 是否开通多条电话业务(Yes 、 No or No phoneservice)
InternetService 是否开通互联网服务(No、DSL数字网络或filber potic光线网络)
OnlineSecurity 是否开通网络安全服务(Yes、No or No internetservice)
OnlineBackup 是否开通在线备份服务(Yes、No or No internetservice)
DeviceProtection 是否开通设备保护服务(Yes、No or No internetservice)
TechSupport 是否开通技术支持业务(Yes、No or No internetservice)
StreamingTV 是否开通网络电视(Yes、No or No internetservice)
StreamingMovies 是否开通网络电影(Yes、No or No internetservice)
Contract 合同签订方式(按月、按年或者两年)
PaperlessBilling 是否开通电子账单(Yes or No)
PaymentMethod 付款方式(bank transfer、credit card、electronic check、mailed check)
MonthlyCharges 月度费用
TotalCharges 总费用
Churn 是否流失(Yes or No)

数据质量探索

  • 数据集正确性校验

首先是数据集正确性校验。一般来说数据集正确性校验分为两种,其一是检验数据集字段是否和数据字典中的字段一致,其二则是检验数据集中ID列有无重复。由于该数据集并为提供数据字典,因此此处主要校验数据集ID有无重复:

#查看ID列是否有重复列
tcc['customerID'].nunique() == tcc.shape[0]
#或
tcc.duplicated().sum()    # 返回值为0时说明没有重复行
  • 数据缺失值检验
# 定义缺失值查看函数
def missing (df):
    """
    计算每一列的缺失值及占比
    """
    missing_number = df.isnull().sum().sort_values(ascending=False)              # 每一列的缺失值求和后降序排序                  
    missing_percent = (df.isnull().sum()/df.isnull().count()).sort_values(ascending=False)          # 每一列缺失值占比
    missing_values = pd.concat([missing_number, missing_percent], axis=1, keys=['Missing_Number', 'Missing_Percent'])      # 合并为一个DataFrame
    return missing_values

missing(tcc)

在这里插入图片描述
从上述结果看出数据集中不存在缺失值。

  • 时序字段处理
tcc['tenure'].nunique( )
# 运行结果为73

该字段总共有73个不同的取值,结合此前所说,数据集是第三季度的用户数据,因此我们推断该字段应该是经过字典排序后的离散型字段。所谓字典排序,其本质是一种离散变量的转化方式,有时我们也可以将时序数据进行字典排序,该过程我们可以通过如下示例进行说明:
在这里插入图片描述
也就是说,在第三季度中,这些用户的行为发生在某73天内,因此入网时间字段有73个取值。不过由于该字段是经过字典排序后的结果,因此已经损失了原始信息,即每位用户实际的入网时间。而在实际的分析过程中,我们可以转化后的入网时间字段看成是离散变量,当然也可以将其视作连续变量来进行分析,具体选择需要依据模型来决定。此处我们先将其视作离散变量,后续根据情况来进行调整。

  • 连续/离散型变量标注

接下来,我们来标注每一列的数据类型,我们可以通过不同列表来存储不同类型字段的名称:

# 离散字段
category_cols = ['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents', 'tenure', 
                'PhoneServ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值