【Python】实训9:家用热水器用户行为分析与事件识别(所谓的神经网络,BP)

实训1清洗运营商客户数据

1.训练要点
(1)掌握去重的原理与方法。
(2)掌握缺失值与异常值的识别与处理。
2.需求说明
某运营商提供了不同用户3个月的使用信息,共900000条数据,共34个特征列、1个标签列,其中存在- -定的重复值、缺失值与异常值。其字段说明如表9-17所示。

在这里插入图片描述
在这里插入图片描述
3.实现步骤
(1)识别与处理数据中的重复值。
(2)识别与处理数据中的缺失值。
(3)识别与处理数据中的异常值。

实训2筛选客户运营商数据

1.训练要点
(1)掌握类别型特征内部类别合并的方法。
(2)掌握哑变量处理方法。
2.需求说明
在原始的数据中,每个用户有3行的数据,对应着同一个ID的3个月信息。原始数据的特征有35个,其中与用户手机情况相关的数据均为类别型,例如手机品牌有633种,手机型号有5973种,操作系统描述有47种。
3.实现思路及步骤
(1)将数据处理为一个用户一条记录,保留每位用户每月的费用、通话时长等信息,并求出对应特征3个月的方差、中位数。
(2)合并用户的手机品牌与操作系统特征内部数据,删除手机型号特征。
(3)对手机型号与操作系统特征做哑变量处理。

实训3构建 神经网络预测模型

1.训练要点
(1)掌握数据集划分方法。
(2)掌握数据标准化方法。
(3)掌握神经网络算法的使用。
2.需求说明
使用神经网络模型,构建客户流失模型,能够分析用户的历史数据和当前数据,提取辅助决策的关键性数据,并从中发现隐藏关系和模式,进而预测未来可能发生的行为。
3.实现思路及步骤
(1)标准差标准化数据。
(2)构建神经网络模型。
(3)评价神经网络模型。

吐槽

抱着做事情有始有终的原则,我写了这篇博客。

当然,寒假的学习效率,且没有对应课程督促下的状态,大家应该都是比较清楚的😂

可毕竟在草稿箱里待了一个月了,随便写写,发表得了…

代码

完整代码?不存在的。
而且就我查找资料的经验而言,真正意义上的参考代码,网上应该还是没有的

以下是实训1部分的所谓参考代码

#第九章实训
import pandas as pd
import numpy as np
detail = pd.read_csv('./第九章 实验数据/实训数据/USER_INFO_M.csv',
    index_col=0,encoding = 'gbk')
#(1)识别与处理数据中的重复值。
print('进行去重操作前订单详情表的形状为:',detail.shape)
detail.drop_duplicates(inplace = True)
print('进行去重操作后订单详情表的形状为:',detail.shape)

#(2)识别与处理数据中的缺失值。
#print('参看数据具体信息:',detail.info())
naRate = (detail.isnull().sum()/detail.shape[0]*100).astype('str')+'%'
print('detail每个特征缺失的率为:\n',naRate)
#删除手机品牌类有缺失的两个数据
#(在90万数据面前删除两个影响不明显,当然这里也可以随便给这两个用户写个手机品牌,处理方法不唯一)
detail.dropna(axis = 0,how = 'any',subset=['MANU_NAME'],inplace = True)
#此时可以考虑直接删除其他有缺失的项目(这时的特征缺失率足够大,可以直接删除了)
detail.dropna(axis = 1,how = 'any',inplace = True)
print('处理完缺失值后订单详情表的形状为:',detail.shape)

#(3)识别与处理数据中的异常值。
##定义异常值识别与处理函数
print("处理前:")
print('INNET_MONTH最小值为:', detail['INNET_MONTH'].min())
print('INNET_MONTH最大值为:', detail['INNET_MONTH'].max())
def outRange(Ser1):
    QL = Ser1.quantile(0.25)
    QU = Ser1.quantile(0.75)
    IQR = QU-QL
    Ser1.loc[Ser1>(QU+1.5*IQR)] = QU
    Ser1.loc[Ser1<(QL-1.5*IQR)] = QL
    return Ser1
## 处理销售量和售价的异常值
detail['INNET_MONTH'] = outRange(detail['INNET_MONTH'])

##查看处理后的销售量和售价的最小值,最大值
print("处理后:")
print('INNET_MONTH最小值为:', detail['INNET_MONTH'].min())
print('INNET_MONTH最大值为:', detail['INNET_MONTH'].max())

当时写代码时候,正值期末,做这种细致活颇无耐心,本想假期有空再来补充,怎想寒假的自己,毫无兴致呀~

诺,结果

进行去重操作前订单详情表的形状为: (900000, 34)
进行去重操作后订单详情表的形状为: (899904, 34)
detail每个特征缺失的率为:
USER_ID 0.0%
INNET_MONTH 0.0%
IS_AGREE 0.0%
AGREE_EXP_DATE 48.96066691558211%
CREDIT_LEVEL 0.0%
VIP_LVL 34.58268882014082%
ACCT_FEE 0.0%
CALL_DURA 0.0%
NO_ROAM_LOCAL_CALL_DURA 0.0%
NO_ROAM_GN_LONG_CALL_DURA 0.0%
GN_ROAM_CALL_DURA 0.0%
CDR_NUM 0.0%
NO_ROAM_CDR_NUM 0.0%
NO_ROAM_LOCAL_CDR_NUM 0.0%
NO_ROAM_GN_LONG_CDR_NUM 0.0%
GN_ROAM_CDR_NUM 0.0%
P2P_SMS_CNT_UP 0.0%
TOTAL_FLUX 0.0%
LOCAL_FLUX 0.0%
GN_ROAM_FLUX 0.0%
CALL_DAYS 0.0%
CALLING_DAYS 0.0%
CALLED_DAYS 0.0%
CALL_RING 0.0%
CALLING_RING 0.0%
CALLED_RING 0.0%
CUST_SEX 3.810073074461276%
CERT_AGE 3.886081181992746%
CONSTELLATION_DESC 3.886081181992746%
MANU_NAME 0.00022224592845459073%
MODEL_NAME 0.0%
OS_DESC 4.243230389019273%
TERM_TYPE 0.0%
IS_LOST 66.63633009743262%
dtype: object
处理完缺失值后订单详情表的形状为: (899902, 27)
处理前:
INNET_MONTH最小值为: -251
INNET_MONTH最大值为: 249
处理后:
INNET_MONTH最小值为: 1.0
INNET_MONTH最大值为: 107.0


也不长篇大论吐槽些什么了,就是有这么一句话非常想放到这里:

人的记忆不可靠!

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值