手把手教你:基于Django的用户画像可视化系统
系列文章
- 第九章、手把手教你:个人信贷违约预测模型
- 第八章、手把手教你:基于LSTM的股票预测系统
- 第七章、手把手教你:基于深度残差网络(ResNet)的水果分类识别系统
目录
- 系列文章
- 一、项目简介
- 1.1 内容简介
- 1.2 电信运营商的三个典型数据集
- 二、可视化展示界面
- 1.搜索界面
- 2.用户画像展示界面
- 三、背景介绍
- 四、模型构建思路
- 1.用户画像主流分析方法
- 2.本项目分析方法
- 五、代码介绍
- 1.数据介绍
- 2.数据预处理
- 3.电话数据RFM数据制作
- 4.短信数据RFM数据制作
- 5.APP数据RFM数据制作
- 6.数据归一化,最终数据合并,生成标签
- 7.展示界面
- 六、代码下载地址
一、项目简介
1.1 内容简介
本文主要介绍如何使用python搭建一个:基于Django的用户画像可视化系统。
本项目分为2部分:
- 1、RFM模型构建,用户画像数据输出。
- 2、网站搭建,提供用户画像查阅功能。
1.2 电信运营商的三个典型数据集
1、通话数据
2、短信数据
3、手机上网数据
- 基于这三个数据集,结合RFM模型,构建用户标签体系
- 给每个用户打上标签,对用户进行画像
- 画像后的数据可以用于推荐、精准营销、客群分析等
博主也参考过机器学习模型的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个可视化系统即可。
也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。
如果您有以上想法,那就找对地方了!
不多废话,直接进入正题!
二、可视化展示界面
本项目最终展示界面是基于Django构建的网站,下面就介绍一下画像展示界面。
1.搜索界面
- 本项目需要对应的用户手机号搜索对应的移动用户画像,在搜索过程中也进行了校验如输入的文本格式不符合手机号,将直接提示错误。
- 输入错误提示:
2.用户画像展示界面
输入了正确手机号后,会根据搜索用户展示用户的画像
用户:19900000383
- 用户:19900035430
三、背景介绍
以客户为中心目标是了解不同客户群体的需求,并向他们提供满足其个性化需求的服务——提供了更多附加值,与此同时也获得高于平均的客户价值。随着电信业产品同质化的趋势越来越明显,企业成功不能再单纯依靠创新产品和产品价格取胜。倾听客户呼声和需求、对不断变化的客户期望迅速作出反应的以客户为中心运营能力——已经成为当今企业能否成功的关键。
市场环境、运营重心和管控模式的转变,要求客户运营更具灵敏性、高效性,以客户洞察为核心的客户经营中心系统实现了“客户-产品”的双向自动匹配,支撑CRM、电子渠道等精准营销策略和客户需求信息的实时信息推送,培养了业务人员客户洞察能力。
四、模型构建思路
1.用户画像主流分析方法
1、历史趋势分析,分析对应客户数的历史变化情况
2、构成分析,按照品牌、地市、VIP等级等维度,分析对应客户数的构成情况
3、关联分析,分析主体与不同标签之间的关联程度
4、对比分析,分析主体与不同标签之间的对比情况
2.本项目分析方法
- 本实验的第一个步骤:基于通话数据生成RFM模型数据,输出每个客户在每个标签上的RFM标签值,这是一个中间结果集,用于计算最终的标签。
R:最近一次通话时间与统计月末的距离天数
F:通话次数
M:通话时长
- 最终数据结果示例如下:
手机号码 | 标签 | R值 | F值 | M值 |
---|---|---|---|---|
138* | 旅游 | 1 | 0 | 0 |
138* | 美食 | 0 | 1 | 0 |
138* | 健身 | 1 | 1 | 0 |
131* | 旅游 | 1 | 0 | 1 |
131* | 美食 | 0 | 1 | 0 |
134* | 旅游 | 0 | 1 | 1 |
五、代码介绍
- 由于代码众多,博客中就不放入最终代码了,有需要的童鞋可以在【代码下载地址】下载所有代码。
1.数据介绍
- 我们的数据分为2部分,大概思路就是通过找到移动号码拨打的各行业的固定电话,最终收敛形成移动号码画像。重要申明:因电话信息涉及用户个人敏感信息,本文所述所有数据均经过脱敏处理!
1.固定电话清单以及其行业分类:
2.移动电话用户,及其呼叫清单:
2.数据预处理
- 需要将两种数据进行合并,合并成一个数据表后才能继续操作
data_tele = data_tele_tag.merge(data_tele_detail,left_on="desc_num",right_on='desc_num')
- 处理完后数据情况:
- 需要计算离月底最近的一次通话,所以需要进行日期的计算
data_tele["last_date"] = pd.to_datetime(data_tele.last_date,format='%Y-%m-%d')
data_tele["last_date_day"] = data_tele.last_date.dt.day
data_tele["diff_date"] = (31 - data_tele["last_date_day"]).astype('int')
- 完成数据预处理后数据情况:
3.电话数据RFM数据制作
- 分别计算不同电话、不同标签的最近一次通话、通话总次数以及通话总时长
def make_rfm(x):def get_format_rfm(xx):temp_date = xx.nsmallest(1,'diff_date')['diff_date'].iloc[0]temp_count = xx['count'].sum()temp_duration = xx["duration"].sum()tem_series = pd.Series([temp_date,temp_count,temp_duration],index=['last_date','count','duration'])return tem_seriesreturn x.groupby('tag').apply(get_format_rfm)
data_tele_rfm = data_tele.groupby("tele_num").apply(make_rfm)
data_tele_rfm = data_tele_rfm.reset_index()
# 保存
data_tele_rfm.to_csv("data/tele数据rfm数据表.csv",encoding='utf-8-sig',index=False)
4.短信数据RFM数据制作
- 具体制作流程和电话数据是一致的,只是需要加载不同的数据集
#不同sms不同电话标签的RFM值的提取
def make_rfm_sms(x):def get_format_rfm_sms(xx):temp_date = xx.nsmallest(1,'diff_date')['diff_date'].iloc[0]temp_count = xx['count'].sum()temp_duration = xx['count'].sum()tem_series = pd.Series([temp_date,temp_count,temp_duration],index=['last_date','count','duration'])return tem_seriesreturn x.groupby('tag').apply(get_format_rfm_sms)
data_sms_rfm = data_sms.groupby("tele_num").apply(make_rfm_sms)
data_sms_rfm = data_sms_rfm.reset_index()
# 保存
data_sms_rfm.to_csv("data/短信数据rfm数据表.csv",encoding='utf-8-sig',index=False)
5.APP数据RFM数据制作
- 具体制作流程和电话数据是一致的,只是需要加载不同的数据集
#不同app不同标签,的RFM值的提取
def make_rfm_app(x):def get_format_rfm_app(xx):temp_date = xx.nsmallest(1,'diff_date')['diff_date'].iloc[0]temp_count = xx['count'].sum()temp_duration = xx['count'].sum()tem_series = pd.Series([temp_date,temp_count,temp_duration],index=['last_date','count','duration'])return tem_seriesreturn x.groupby('tag').apply(get_format_rfm_app)
data_app_rfm = data_app.groupby("tele_num").apply(make_rfm_app)
data_app_rfm = data_app_rfm.reset_index()
# 保存
data_app_rfm.to_csv("data/app数据rfm数据表.csv",encoding='utf-8-sig',index=False)
# 此次运行耗时较长,可以直接执行加载数据集的方法,此数据集是上述代码执行的结果
6.数据归一化,最终数据合并,生成标签
- 最终要生成one-hot矩阵,进行标签确认的前提就是rfm值中超过两个存在,或者flag_duration这个值是1就贴上标签
#对合并后的表中每个用户在每个标签类别的RFM求和
data_numbers = data_total.groupby(["tele_num",'tag']).sum().reset_index()
#求和后大于0的标为1
columns_names = ['flag_days','flag_count','flag_duration']
for name in columns_names:data_numbers[name] = data_numbers[name].apply(lambda x: 1 if x>0 else 0)#通过2个条件过滤无价值用户,只保留RFM中3个值的和为2以上的以及M值为1的有价值用户
data_numbers['condition1'] = data_numbers['flag_days']+data_numbers['flag_count']+data_numbers['flag_duration']
data_numbers['condition2'] = data_numbers['flag_duration'].apply(lambda x:1 if x==0 else 0)
data_result_pre = data_numbers[(data_numbers['condition1']>1) | (data_numbers['condition2']==1)]#添加所有标签对应的列
tags = data_result_pre.tag.value_counts().index
for tag_ in tags:data_result_pre[tag_] = data_result_pre['tag'].apply(lambda x:1 if x==tag_ else 0)
#删除无用列
x=[2,3,4,5,6]
data_result_pre.drop(data_result_pre.columns[x], axis=1, inplace=True)
#合并每个用户的标签
data_numbers1 = data_result_pre.groupby(["tele_num"]).sum().reset_index()
data_numbers1.head(20)
- 最终数据效果如前文所展示的:
7.展示界面
- 完成上述用户画像模型构建后就是页面展示,本项目采用了Django进行展示。
- 用户验证与输入检测:
def get_ans(request):text = request.POST["input_text"]print("获取的号码:", text)if text is "":context = {"state": "1","text": "输入的内容为空,请重新输入想要查询的号码!"}return render(request, 'error.html', context)else:if is_number(text):context = user_get(int(text))if context == {}:context = {"state": "3","text": "查询的号码不存在,请输入正确的号码!"}return render(request, 'error.html', context)else:return render(request, 'user_class.html', context)else:context = {"state": "2","text": "输入的内容包含其他字符,请输入正确的号码!"}return render(request, 'error.html', context)# 输入检测
def is_number(s):try:float(s)return Trueexcept ValueError:passtry:import unicodedataunicodedata.numeric(s)return Trueexcept (TypeError, ValueError):passreturn False
六、代码下载地址
由于项目代码量和数据集较大,感兴趣的同学可以直接下载代码,使用过程中如遇到任何问题可以在评论区进行评论,我都会一一解答。
代码下载:
- 【代码分享】手把手教你:基于Django的用户画像可视化系统
手把手教你:基于Django的用户画像可视化系统相关推荐
- 思路+步骤+方法,三步教你如何快速构建用户画像?
思路+步骤+方法,三步教你如何快速构建用户画像? 2016-10-07 超哥 互联网er的早读课 互联网er的早读课 数十万互联网从业者的共同关注! 作者:超哥.作者授权早读课发表,转载请联系作者. ...
- 基于MRS-ClickHouse构建用户画像系统方案介绍
业务场景 用户画像是对用户信息的标签化.用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌.通过用户画像系统,可以对各个用户进行精准定位,从而将 ...
- 基于Spark的用户行为分析系统
基于Spark的用户行为分析系统源码下载 一.项目介绍 本项目主要用于互联网电商企业中使用Spark技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.购物行为.广告点击行为等)进行 ...
- 企业级360°全方位用户画像:标签系统[四]
絮叨两句: 博主是一名软件工程系的在校生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们 人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战 少年 ...
- 基于python 的电影票房可视化系统
一.介绍 电影票房可视化系统是一个实时分析电影票房的系统,应用Python爬虫.Flask框架.Echarts等技术实现. 二.系统运行图 首页 实时票房排名 票房排行top10 电影类型票房占有率 ...
- 实战案例,手把手教你构建电商用户画像 | 附代码
导读:本文以真实案例,手把手教你搭建电商系统的用户画像. 先来看该电商用户画像用到的标签. 数据内容包括user_id(用户身份).item_id(商品).IDbehavior_type(用户行为类型 ...
- 基于bitmap实现用户画像的标签圈人功能
用户画像系统中有一个很重要的功能点: 基于标签圈人.这里有个很核心的概念,什么是标签? 标签是简化用户表示的一种思维方式. 刻画用户的标签越多,用户画像就越立体. 比如: 90后,码农,宅男 3个标签 ...
- 基于K-means的用户画像聚类模型
一.概述 使用K-means进行用户聚类划分主要的目的是实现用户画像的电影推荐系统,该推荐包括两部分,第一部分通过协同过滤实现电影推荐 ,第二部分,构建用户画像实现电影推荐,实现通过静态属性实现:用户 ...
- 基于RFM的用户画像分析
背景 某一平台发现最近一年各类营销活动的效果不加,且总体销售额没有明显的增长,据了解以往开展的营销活动面向所有用户,而部分用户可能已经长时间未在此平台进行消费,可能已经流失,而又的用户无论有无营销活动 ...
最新文章
- LVS的NAT工作模型详解
- 杉德支付php代码实现_php实现小程序支付完整版
- Table还是CSS,请您说说您的见解
- IntelliJ IDEA 运行 Maven 项目
- 提高抗打击能力_孩子抗挫能力差,巧用4个小窍门,引导孩子将“危”化为“机”...
- Python的并发并行[3] - 进程[1] - 多进程的基本使用
- VB 共享软件防破解设计技术初探(二)
- 怎样做sns网站?哪里可下载这类程序?
- linux 查看安装软件
- ICP许可证的办理条件
- 人工智能帮你文字转为Logo | 机器学习
- 链家程序员删库跑路失败!被判 7 年
- Python ADF 单位根检验 结果理解
- codeforce 379C New Year Ratings Change 题解
- 乐视android用流量,乐视max2怎么使用手机用流量上网
- 一顿操作猛如虎,一看还是二百五
- Speedoffice(word)如何添加小方框和勾
- AWS 中文入门开发教学 35- MySQL@RDS - 建立MySQL数据库服务
- name norm is not defined
- kali mysql停止服务器_MySQL主从复制配置详解