案例自主开发客流监测平台打造大数据运营拳头产品.docx
《案例自主开发客流监测平台打造大数据运营拳头产品.docx》由会员分享,可在线阅读,更多相关《案例自主开发客流监测平台打造大数据运营拳头产品.docx(26页珍藏版)》请在冰豆网上搜索。
案例自主开发客流监测平台打造大数据运营拳头产品
自主开发客流监测平台,打造大数据
运营拳头产品
摘要
本课题融合2/3/4G无线话单、位置注册信令、家庭WIFI/AWIFI、VLR省内漫游等海量数据,通过位置挖掘算法,描绘用户轨迹。
通过建立的大数据海量特征库,将用户分类,为用户打上特征标签。
充分挖掘电信运维数据价值,对内支撑智慧运维,对外支撑精准营销。
客流大数据监测平台,前台采用Html5、ECharts等可视化技术,后台采用Hadoop、SQL等数据处理技术。
自主开发春节返乡客流监测平台,对内:
提供来源分布、用户统计、天趋势、时趋势、热力地图指导无线网络资源调配、扩容疏忙,提供年龄、性别、职业、爱好、终端类型、套餐类型、友商策反等用户标签,支持地市、行政区、支局、CSS网格四级位置钻取,直接输出营销清单,支撑一线;对外:
将春节返乡数据脱敏,进行数据统计维度分析,支撑公司与淮安各级政府达成合作协议,直接产品化输出大数据监测平台+分析报告,支撑前端创收30万,成为年度全省第一笔大数据收入。
相关产品在节后返城、马拉松、中秋节、商铺选址等客流监测场景下,迭代开发,快速复制,产生较好的经济效益与社会效益。
大数据客流监测系列产品,100%自主开发,从算法设计、数据挖掘、界面开发直至产品化包装,均由江苏电信“智慧无线”精英团队完成,全面提升无线团队自主开发能力,助力企业战略转型。
关键字:
大数据、无线、客流监测、可视化、自主开发
一、项目背景
“十三五”时期,我国将大力实施网络强国战略、国家大数据战略、“互联网+”行动计划,促进互联网和经济社会融合发展。
国务院正式印发《促进大数据发展行动纲要》,意味着大数据发展正式成为国家战略,国家将大数据上升到国家战略,高度重视大数据产业发展,制定了一系列大数据相关政策。
工业和信息化部正式印发《大数据产业发展规划(2016-2020年)》,全面部署“十三五”时期大数据产业发展工作,加快建设数据强国,为实现制造强国和网络强国提供强大的产业支撑。
为顺应“智能化”这一时代潮流和产业方向,中国电信提出了适应智能化时代、通过智能牵引转型升级的3.0战略,着重推进网络智能化、业务生态化、运营智慧化,做领先的综合智能信息服务运营商。
中国电信拥有海量的数据资源与处理能力,我们应充分利用优势,深度挖掘数据价值。
本项目立足无线,充分利用自身优势,融合2/3/4G无线话单、位置注册信令、家庭WIFI/AWIFI、VLR省内漫游等海量数据,通过位置挖掘算法,描绘用户轨迹,通过建立的大数据海量特征库和企信用户套餐数据,将用户分类,为用户打上特征标签。
深度挖掘电信运维数据价值,对内支撑智慧运维,对外支撑精准营销。
大数据客流监测系列产品,100%自主开发,从算法设计、数据挖掘、界面开发直至产品化包装,均由江苏电信“智慧无线”精英团队完成,产品化输出监测平台+分析报告。
相关技术在春节返乡、节后返城、马拉松、开学季、商铺选址等客流监测场景下,快速复制,迭代开发,产生较好的经济效益与社会效益。
全面提升无线团队自主开发能力,助力企业战略转型。
二、主要创新点
本项目立足无线专业,融合海量电信内部大数据源,自主开发,深挖数据价值,对内提供智慧运维支撑,对外提供精准营销支撑,拥有众多创新点:
创新点一:
基于2/3/4G无线话单数据,融合注册信令、家庭WIFI/AWIFI、VLR省内漫游等电信大数据,通过位置挖掘算法,精准描绘用户轨迹;
创新点二:
通过江苏电信用户标签库,融合企信数据,对目标用户进行精确画像与分类,输出用户标签和个性化营销策略;
创新点三:
基于MyEclipse开发环境,采用Java、Html5、ECharts等开源技术进行前台开发,界面友好,功能丰富,数据可视化呈现;
创新点四:
采用Hadoop+sqlserver进行后台数据处理,基于江苏电信自建集群强大处理能力,提取、分析、挖掘海量无线话单,创新进行经纬度纠偏;
创新点五:
100%自主开发,可视化平台+分析报告,产品化交付,开源能力提升,开源人才队伍建设,助力企业转型;
创新点六:
春节、端午、中秋、国庆、马拉松、开学季等各类客流监测场景下快速复制、迭代开发,一点响应,支撑发展。
三、技术方案
本章节从前台和算法两个部分,以春节返乡客流监测大数据平台为例,对客流监测类大数据平台进行介绍。
3.1前台部分
春节返乡客流监测大数据平台前台使用MyEclipse开发环境,基于Java、Html5、ECharts等Web开源技术进行前台界面开发,界面友好,功能丰富,将电信大数据可视化呈现,充分发挥数据价值。
3.1.1开发环境
本项目前台开发环境采用MyEclipse工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse),利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。
课题使用MyEclipse10.0软件版本,是一个十分优秀的用于开发Java、J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持。
MyEclipse可以支持JavaServlet、AJAX、JSP、JSF,Struts、Spring、Hibernate、EJB3、JDBC数据库链接工具等多项功能。
图3-1MyEclipse开发环境
ECharts,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器。
底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。
ECharts3.0中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化。
ECharts提供了常规的折线图,柱状图,散点图,饼图,K线图,用于统计的盒形图,用于地理数据可视化的地图,热力图,线图,用于关系数据可视化的关系图,treemap,多维数据可视化的平行坐标,还有用于BI的漏斗图,仪表盘,并且支持图与图之间的混搭。
本课题客流监测大数据平台界面主要通过ECharts图表对相关数据指标进行可视化呈现。
图3-2ECharts图表
3.1.2总体框架
平台界面整体布局分上、中、下三个部分,上部呈现标题、用户信息、区域选择,中部呈现具体功能模块,下部呈现滚动字幕信息。
其中,中间部分又分为左、中、右三个部分,每个部分又分割成上、下两个部分,页面布局通过
语句将页面进行分区(division),通过属性参数设置窗口大小、颜色、位置等。
平台通过中心矢量地图选择控制,支持地市、县区、乡镇、网格四级数据查询。
平台具备人数统计、来源分布、用户热力图、天趋势、时趋势、用户属性标签等功能,平台总体框架,如图3-3所示。
图3-3平台总体界面
3.1.3登录页面
平台设置用户登录,通过严格的账号权限,指定用户仅可查询分配区域春节返乡客流大数据。
为了提升浏览效果与兼容性,平台设置手机适配,同时支持密码修改,登录界面与流程图,如图3-4所示。
图3-4登录页面与流程图
登录页面,关键代码如下:
1)判断用户设备类型,提升移动设备兼容性:
functionmy_browser(type){
if(type=='手机'){
window.location.href="mobile/page_login.jsp";
}
else{
}
}
2)用户名/密码合法性校验:
if(username!
=null){
if(SafeUtils.isSQLInjection(username)||SafeUtils.isSQLInjection(pwd)){
errMsg="请勿输入非法字段";
}
session.setAttribute("username",username);
ArrayList>list_luyu=SQLServerUtils.GetList("select*FROM[返乡平台].[dbo].[账号]whereusername='"+username+"'andpwd='"+pwd+"'");
if(list_luyu.size()>0){
session.setMaxInactiveInterval(-1);
session.setAttribute("username",list_luyu.get(0).get("username"));
session.setAttribute("username_ch",list_luyu.get(0).get("姓名"));
session.setAttribute("dishi",list_luyu.get(0).get("地市"));
session.setAttribute("zhiju",list_luyu.get(0).get("支局"));
session.setAttribute("power",list_luyu.get(0).get("power"));
session.setAttribute("column_option1",list_luyu.get(0).get("column_option1"));
session.setAttribute("column_option2",list_luyu.get(0).get("column_option2"));
Stringpower=list_luyu.get(0).get("power");
SQLServerUtils.Update("insertinto用户动作values('"+username+"','"+list_luyu.get(0).get("姓名")+"','登陆系统,IP"+ip+"',getdate())");
response.sendRedirect("page_main.jsp");
return;
}
else{
errMsg="账号密码错误";
}
}
else{
errMsg="请输入账号密码";
}
3)密码修改:
if(old_pwd!
=null&&new_pwd!
=null&&new_pwd_confirm!
=null&&old_pwd.trim().length()>0&&new_pwd.trim().length()>0&&new_pwd_confirm.trim().length()>0){
if(SafeUtils.isSQLInjection(new_pwd_confirm)||SafeUtils.isSQLInjection(new_pwd)){
errMsg="请勿输入';,等非法字符";
}
else{
ArrayList>list_luyu=SQLServerUtils.GetList("select*FROM账号whereusername='"+username+"'andpwd='"+old_pwd+"'");
if(list_luyu.size()>0){
if(new_pwd.equals(new_pwd_confirm)){
SQLServerUtils.Update("update账号setpwd='"+new_pwd+"'whereusername='"+username+"'");
errMsg="修改成功";
}
else{
errMsg="两次新密码输入不一致";
}
}
else{
errMsg="旧密码错误";
}
}
}
else{
errMsg="请输入旧密码、新密码";
}
3.1.4春返人数统计
该模块能够实现对所选区域春返人数进行统计排名,春返人数为12月1日至今累加值,环比为与前1天数据比较,TO值为平台上线前(11月30日)数据。
可实现地市、县区、支局、CSS网格四级钻取,支局、CSS网格春返人员统计排名页面如图3-5所示。
图3-5春返人员统计模块(地市/县区/支局/CSS网格)
3.1.5区域点选功能
该模块可以实现对地市、县区以及下属支局、CSS网格进行多层级点选控制,可以查看对应区域返乡人数,用不同色标对人数进行区分,为前端部门重点营销提供依据,如图3-6所示,数据为12月1日至今累加值。
图3-6区域选择功能
3.1.6春返客流趋势
该模块能够显示所选区域春返人数变化趋势,活跃忙时为所选区域人数返乡最集中的时间段。
如图3-7所示,数据为12月1日至今累加值。
图3-7春返客流趋势
客流趋势关键代码如下:
1)天趋势
functionloadTianQushiLineChart(zongshu,xAxis,data1)
{
varvalidData=[];
for(vari=0;ivalidData.push(data1[i]);
}
vartitle="已经开始";
if(validData[validData.length-1]>zongshu*alertRate){
title="已经开始";
}
varoption={
tooltip:
{
trigger:
'axis'
},
title:
{text:
'春返大潮'+title,
textStyle:
{
color:
'#FF0000',
fontSize:
16},x:
'center'},
grid:
{
borderWidth:
0,
x:
60,
y:
30,
x2:
20,
y2:
30,
},
calculable:
true,
xAxis:
[
{
type:
'category',
boundaryGap:
false,
axisLabel:
{textStyle:
{color:
'#6E4455'}},
data:
xAxis
}
],
yAxis:
[
{
type:
'value',
splitNumber:
3,
axisLabel:
{textStyle:
{color:
'#6E4455'},
formatter:
function(data){
if(data>=10000){
return(data/10000)+"万";
}
elsereturndata;
}
},
splitLine:
{show:
false,lineStyle:
{width:
0,color:
'#A5B7BB'}},
splitArea:
{show:
true,areaStyle:
{color:
['#eeeeee','#f7f7f7']}},
}
],
series:
[
{
name:
'春返用户数',
type:
'line',
itemStyle:
{normal:
{color:
'#C33A37',lineStyle:
{color:
'#C23531',width:
1},areaStyle:
{type:
'default'}}},
data:
validData
}
]
};
tianQushiLineChart.setOption(option,true);
}
2)时趋势
functionloadXiaoshiQushiLineChart(data1)
{
varxxx=[];
varddd=[];
vartop1=7;
vartop2=7;
varmax1=0;
varmax2=0;
for(vari=7;i<20;i++){
if(data1[i]>0){
if(data1[i]>max1){
max2=max1;
top2=top1;
max1=data1[i];
top1=i;
}
}
}
vartophour="("+(top2+1)+"时、"+(top1+1)+"时)";
for(vari=0;iif(data1[i]>0){
xxx.push((i+1)+'');
ddd.push(data1[i]);
}
}
if(ddd.length==0){
xxx.push('无数据');
ddd.push('0');
}
varoption={
tooltip:
{
trigger:
'axis'
},
title:
{
text:
'摆摊时间推荐'+tophour,
textStyle:
{
color:
'#FF0000',
fontSize:
16
},
x:
'center'
},
grid:
{
borderWidth:
0,
x:
60,
y:
30,
x2:
20,
y2:
30,
},
xAxis:
[
{
type:
'category',
boundaryGap:
true,
axisLabel:
{
textStyle:
{color:
'#6E4455'}
},
data:
xxx
}
],
yAxis:
[
{
type:
'value',
splitNumber:
3,
axisLabel:
{textStyle:
{color:
'#6E4455'},
formatter:
function(data){
if(data>=10000){
return(data/10000)+"万";
}
elsereturndata;
}
},
splitLine:
{show:
false,lineStyle:
{color:
'#A5B7BB'}},
splitArea:
{show:
true,areaStyle:
{color:
['#eeeeee','#f7f7f7']}},
}
],
series:
[
{
name:
'春返用户数',
type:
'bar',
itemStyle:
{normal:
{color:
'#C33A37',lineStyle:
{width:
1},areaStyle:
{color:
'#C33A37',type:
'default'}}},
data:
ddd
}
]
};
xiaoshiQushiBarChart.setOption(option,true);
}
3.1.7返乡来源分布
该模块能够统计所选区域春节返乡客流省外、省内来源分布情况,能够显示来源省份和对应人数信息,主要ECharts工具地图实现。
如图3-8所示,数据为12月1日至今累加值。
图3-8返乡来源分布
3.1.8春返客流热力图
该模块能够显示所选区域春节返乡客流热力图分布,通过API调用XX地图实现,如图3-9所示,数据统计最近3天累加值。
图3-9热力图流程与界面
热力图关键代码如下:
functionheatmap(_map,heatData){
//计算热力图半径
console.log("热力图数量:
"+heatData.length);
varzoom=_map.getZoom();
varradius=zoom;
switch(zoom)
{
case10:
radius=10;break;
case11:
radius=10;break;
case12:
radius=10;break;
case13:
radius=20;break;
case14:
radius=20;break;
case15:
radius=50;break;
case16:
radius=80;break;
case17:
radius=100;break;
}
//radius=75;
varpadding=radius*2;
varcenter=_map.getCenter();
varlefttop=_map.pixelToPoint(newBMap.Pixel(0,0));
varlng_offset=Math.abs(lefttop.lng-center.lng)*2.5;
varlat_offset=Math.abs(lefttop.lat-center.lat)*2.5;
varbound=newBMap.Bounds(newBMap.Point(center.lng-lng_offset,center.lat-lat_offset),
newBMap.Point(center.lng+lng_offset,center.lat+lat_offset));
//转换成XX地图的点
varmax_x=0,min_x=0,max_y=0,min_y=0;
varmax_value=-1;
vardd=[];
//计算最大最小点
for(vari=0;i//将异常数据剔除....//
varpd=heatData[i];
varpoint=newBMap.Point(pd.lng,pd.lat);
if(!
bound.containsPoint(point))continue;
varpixel=_map.pointToPixel(point);
if(i==0){
max_x=pixel.x;
min_x=pixel.x;
max_y=pixel.y;
展开阅读全文