一、 基本介绍
1. 缘起
对设备/用户(以下不做区分,根据行文的方便,设备或用户均是同一概念)级别的分析一直是我之前在工作中考虑的一个方向,地理位置相关字段的引入,为研究用户的迁移提供了依据。
在2016年春节,我就考虑过利用数据进行城市人口迁移方面的分析,但是由于当时对采集到的数据性质尚未完全掌握,其中存在的系统性偏差也需要通过一系列工作进行纠正,再加上还有其他分析任务,这一工作被搁置了3年。
2019年春节后,由于工作的变化,我相对有了较为充裕的时间,加上此前两年对基础数据的梳理,从采集性质和字段校验上都已经做了准备,因此可以将这一工作进行下去。
2. 主要开发过程
城市迁移人群的分析主要分为两个步骤:数据准备,以及可视化实现。
首先我在时间和空间上确定了分析的对象,明确了设备的关联和匹配规则,从采集到的数据中提取出了可用于迁移分析和比较的设备群体。随后我将这些数据进行整理,配合其他的辅助数据,转化为可以用来进行可视化展示的输入。
在可视化实现阶段,之前了解过Processing这种可视化展现的工具,于是本次采用Processing进行原型开发,通过这个过程来学习。最终我获得了一个可以用于展示中国各地手机用户春节迁移状况的动态模型,并计算了6个指标用于说明各地方的人口流动效果。
3. 未来演进方向
作为一个探索性的项目,目前取得的成果还有巨大的提升空间。这一模型目前是离线状态,如果有机会能将它改造为线上项目,自然是很有意思的。这些数据本身也有很大的优化空间,比如设备定位上,目前依然是采用IP,未来可以依托GPS、通信基站和WiFi热点等信息的进行校验。最后,在具体的可视化形式上,限于时间和精力,仅仅是简单地实现了地图和仪表盘的开发,这些可视化效果也可以进行改进和提升。
二、 数据准备
1. Hive数据准备
基础数据中,目前对位置的判断来自IP,因此在选择时,需要依据一些已经识别的规则,对数据进行清洗。由于是对国内数据进行分析,因此我们首先排除了国外和未知区域的数据,其次由于运营商分配机制的原因,我们将4G网络环境下的移动数据也排除在分析范围之外。
对于分析对象的选择,还需要从时间和空间两个维度进行筛选。
由于分析的是春节期间的用户迁移,因此在时间上需要确定春节前、春节中和春节后3个时段。考虑到大多数人的过节习惯,并尽可能规避提前踏上旅途造成的影响,因此指定春节前为1月21日至27日,春节中为2月4日至6日,春节后为2月20日至26日。
空间维度的筛选上也需要进行优化。以往的分析中,发现过大量的用户由于出差、旅游、通勤等原因,在一段时间内出现在多个不同的区域。因此,我将时间段内该用户出现最多的城市确定为在该时间段内的常住地。
由于数据的采集频率有不确定性,我仅保留了同时出现在春节前、中、后3个时间段内的用户。
此外,考虑到存在刷机用户的可能,我结合之前积累的设备型号表,排除了不在该表范围内的设备,这样即使不能去除全部的刷机设备,也能够规避相当一部分。
通过对应的脚本,最终形成的结果表包括品牌、设备标识、城市和时间段4列。
由于我需要分析的是城市间的人群迁移,暂时不涉及具体用户个人的行为,所以将结果按照时间流向进行统计输出,即:节前城市、节中城市、节后城市和设备数的数据组合。
考虑到后续分析的时候,还单独计算了每个地区节后流入用户中的节前流入用户数量,以备使用。
2. R数据整理
作为探索性的项目,我采用R对数据进行再次处理,以获得更便于在可视化中作为输入的格式。全部的处理可以分为两个部分:处理流向数据,处理指标数据。
流向数据包括5列:流出地区、流入地区、设备数量、时间段,以及区域级别。其中区域级别分为地区、城市等级、省份和城市4类,对应4类不同的地域划分方式。
考虑到需要标记出流向数据的起点和终点,采用每个地区的实际地理坐标是比较合适的方式。这样既方便辨认,也方便进行结果阐述。由于已经获得了一部分设备的GPS坐标(经过终端用户许可),因此利用这些坐标的均值,获得了一份国内各城市的GPS坐标图。对城市的坐标再次求均值,就可以用来表示省份和地区的坐标。对于城市等级,由于本身并非行政区划,因此其展现方式采取环形分布的6个点的方式,与其他级别的数据不同。
对于指标数据,按照“指标设计”一节中的规则进行转换后,输出为8列:地区A、地区B、区域级别、指标名称、分子、分母、比值,以及调整值。具体的规则见下节。
3. 指标设计
为了衡量一个地区的人口迁移状况,需要设定若干指标。从评价地区人口流失的角度,设定了流失指数=节前流出用户数/节前常住用户数,其中节前流出用户数=节前为该地区,节中为其他地区的用户数之和,节前常住用户数=节前和节中都为该地区的用户数,余此类推。有流失,自然对应的就有流入,设立了吸引指数=节后流入用户数/节后常住用户数。有了流失和流入,就可以衡量两者间的关系,设立了发展指数=节后流入用户数/节前流出用户数。在衡量地区吸引力的层面,还设立了包容指数=节后流入用户中的节前流出数/节前流出用户数,这一指标反映了该地区吸引同一批用户的力度。以上4个指标都是衡量一个城市自己的吸引力。
为了比较不同城市间的吸引力强弱,还设立了两个指标。一个是反映两个地区间竞争关系的竞争指数= (节后从B流向A的用户数/节后B的常住用户数)/(节后从A流向B的用户数/节后A的常住用户数),另一个是反映两个地区间联系紧密程度的关联指数=(节后从B流向A的用户数/节后B的常住用户数)+(节后从A流向B的用户数/节后A的常住用户数)。两个指标各有不同的观察角度。
在后续的可视化过程中,发现直接利用以上公式计算出的指标存在一些问题。首先是难以比较不同地区的同一指标究竟是何种水平;其次是存在部分地区的常住用户数过低,因而计算出的指标值与其他地区偏离程度极大,难以反映实际的状况。因此有必要对上述指标进行转换。
对于衡量地区自身吸引力的4个指标,采用同一级别所有区域的指标均值作为底数,该地区该指标的调整值=比值/同级区域均值×100.对于竞争指数和包容指数,首先去除流动用户数过低的点,然后再按照同一方法进行调整。由于地区间两两组合数过大,因此对每个地区,只保留排名前十位的值。
三、 可视化实现
1. 可视化设计
作为探索性项目,需要对提取的流向数据和计算获得的指标数据进行展示。考虑到开发的快捷,选用德国马克斯·普朗克研究网络的一个可视化案例作为参考,效果上做了简化。
基本构思为左侧绘制流向图数据,采取绘制坐标点的方式表现相应的地区,坐标点的直径表示常住用户数,用箭头方式从该地区流出或向该地区流入的用户,箭头的粗细表示流出/流入用户的数量。
右侧为指标区,采用仪表盘的形式展现6个基本指标。此外还包括选择区域等级和时间段流向的选择框。对于具体地区的选择,采用绘制出流向图坐标点后,点击相应的坐标点的方式,以避免罗列过多的地区名称。
2. Processing开发
可视化操作的逻辑如下:
其中绘制和读取采用函数进行构建,选择按钮则是单独定义了一个结构体,包含选择和取消两个操作选项。