1 一、实验目的
2 二、实验内容
2.2 2、通过分析用户的套餐、通话、流量、行为、合约、关联购买、使用月数等情况。
2.3 3、对用户是否会流失进行分析,并预测一些用户的流失可能性。
2.4 4、后期可以根据用户所关联的情况,推出一些新的政策或活动进行挽留。
3 三、 实验流程
使用 python 建立逻辑回归分类模型,主要分为以下几个步骤完成:
3.1 1、加载数据,查看数据大小,数据形式
1. import pandas as pd 2. data=pd.read_excel("./data/实验3data.xlsx")# 加载数据 3. data.shape# 查看数据大小
data.head()# 查看数据形式
3.2 2、异常值处理(额外通话时长,额外流量)
1. data.额外通话时长[data.额外通话时长<=0]=0 2. data.额外流量[data.额外流量<=0]=0 3. print(data["额外流量"]) 4. print(data["额外通话时长"]) 5. data
3.3 3、删除用户 ID 列,查看数据是否存在 Null
1. data.drop('ID',axis=1,inplace=True) 2. data
3.4 4、查看数据类型
data.dtypes# 查看数据类型
3.5 5、查看数据基本信息
data.info() # 打印摘要
data.describe() # 描述性统计信息
data.values # 数据 <ndarray>
data.to_numpy() # 数据 <ndarray> (推荐)
data.shape # 形状 (行数, 列数)
data.columns # 列标签 <Index>
1. data.columns.values # 列标签 <ndarray> 2.
data.index # 行标签 <Index>
data.index.values # 行标签 <ndarray>
data.head(5) # 前n行
data.tail(5) # 尾n行
data.memory_usage() # 占用内存(字节B)
3.6 6、计算流失用户比例,并画饼图
1. User_info=data.groupby(by="流失用户")["流失用户"].count() 2. User_info=pd.DataFrame(User_info) 3. User_info
1. import pyecharts.options as opts 2. from pyecharts.charts import Pie 3. 4. x_data = [ "流失", "未流失"] 5. y_data = [3146,882] 6. 7. c=( 8. Pie(init_opts=opts.InitOpts(width="160px", height="100px")) 9. .add( 10. series_name="访问来源", 11. data_pair=[list(z) for z in zip(x_data, y_data)], 12. radius=["50%", "70%"], 13. label_opts=opts.LabelOpts(is_show=False, position="center"), 14. ) 15. .set_global_opts(legend_opts=opts.LegendOpts(pos_left="legft", orient="vertical")) 16. .set_series_opts( 17. tooltip_opts=opts.TooltipOpts( 18. trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" 19. ), 20. # label_opts=opts.LabelOpts(formatter="{b}: {c}") 21. ) 22. # .render("doughnut_chart.html") 23. 24. ) 25. c.render_notebook()
3.7 7、分类统计套餐金额、改变行为、服务合约、关联购买、集团用户、流失用户数量,并画条形图
In [23]:
1. Tc_info=data.groupby(by=["套餐金额","流失用户"])["流失用户"].count() 2. Tc_info=pd.DataFrame(Tc_info) 3. Tc_info
1. Change_info=data.groupby(by=["改变行为","流失用户"])["流失用户"].count() 2. Change_info=pd.DataFrame(Change_info) 3. Change_info
1. Server_info=data.groupby(by=["服务合约","流失用户"])["流失用户"].count() 2. Server_info=pd.DataFrame(Server_info) 3. Server_info
1. Relevance_info=data.groupby(by=["关联购买","流失用户"])["流失用户"].count() 2. Relevance_info=pd.DataFrame(Relevance_info) 3. Relevance_info
1. 2. import numpy as np 3. r=np.array(Relevance_info) 4. list_t=r[::2] 5. list_f=r[1::2] 6. list_t.tolist()
1. Group_info=data.groupby(by=["集团用户","流失用户"])["流失用户"].count() 2. Group_info=pd.DataFrame(Group_info) 3. Group_info 4. # Group_info["流失用户"]
3.8 8、画出套餐金额、改变行为、服务合约、关联购买、集团用户与流失用户对比关系条形图
1. from pyecharts.charts import Bar 2. from pyecharts.faker import Faker 3. from pyecharts.globals import ThemeType 4. 5. c = ( 6. Bar({"套餐金额与客户流失条形图": ThemeType.MACARONS}) 7. .add_xaxis(['套餐金额:1','套餐金额:2','套餐金额:3']) 8. .add_yaxis("流失", [3065,76,5]) 9. .add_yaxis("未流失",[756,106,20]) 10. .set_global_opts( 11. title_opts={"text": "套餐金额与客户流失条形图", "subtext": "各套餐中流失与未流失"} 12. ) 13. # .render("套餐金额与客户流失条形图.html") 14. ) 15. c.render_notebook()
后期补上建模评估,模型改进部分,感谢理解!