教你如何获取IP地址侦测用户来源可视化分析
作者:沈浩
假设一家商业网站开发了软件产品,他们希望知道都是来自哪里的用户下载或更新我们的软件,并进行可视化分析。
需要解决的问题是: 36大数据(http://www.36dsj.com/)
- 是否有一个IP地址库,能够表征一个geoIP地址的具体位置(至少到国家或具有服务器ISP位置)
- Weblog记录了用户下载或更新软件的IP地址
- 能够将下载用户的IP地址匹配到geoIP地址数据库
- 在地图上可视化呈现用户来源
下面我们通过案例来说明实现上述想法的软件操作和挖掘算法。
首先我们了解到有一家网站提供了IP地址的开源数据库(收费数据库更精细和更新更快) http://www.maxmind.com
GeoIP2 Precision Insights服务提供IP地址所在地点Maxmind所掌握的最准确信息,可以将其精确定位到邮政编码层面。它包括地理定位数据的置信因数,描述ISP/机构,并显示某个IP背后的用户类型。 36大数据(http://www.36dsj.com/)
GeoIP2 Precision Insights 现在可以提供人均收入(美元)以及每平方公里的人口数量(仅限美国)。借助平均收入,精调广告定向和优惠券发放;加入人口密度数据,作为渠道分析和评估市场需求的一项因素。
从上面描述我们可以看到几点应用:
- 一个IP地址库具有什么信息
- 一个IP地址的可信度或安全性如何评估
- 一个IP地址的来源访问如何侦测和风险是电子商务或在线支付的验证手段
- 可以通过GeoIP的API接口通过Python进行访问验证和其他应用REST
另:该网站提供了一个免费的GeoIP数据库 36大数据(http://www.36dsj.com/)
下面我们通过编辑一个SQLite的下载路径文件 36大数据(http://www.36dsj.com/)
通过执行这个流可以在分钟级别下载到200万的geoIP数据库(可以永久保存在本地)
我们可以将GeoIP数据库保持下来,以后就不用每次运行再下载了,当然这个库如果付费的话每天都在更新,也就可以保证实时运行最新数据库了。
从数据库中我们可以看到有ip_start和ip_end数据值区间范围内的分配ip数量和这个范围ip地址所属国家、地区、城市,以及ISP的经纬度坐标。
接下来我们假设该某家网站Apache的weblog能够记录下载和更新软件的用户浏览log数据(假设有1万个请求weblog)
我们先用正则表达或Like匹配抽取或者过滤所以的下载download或更新updata的用户请求地址Url
$Request$ LIKE “GET /knime_downloads/*” => TRUE
$Request$ LIKE “GET /update/*/org.knime.features.base_*” => TRUE
接下来需要将IP地址的四位地址段整合为一个整数值,以便实现IP地址的匹配。
首先将IP地址的四分地址段拆分成四列字段,然后在合并成IP对于数据戳。在运算前需要进行IP地址的汇总,因为可能有多个访问来自同一个IP地址。
IP值=($IP_Arr[0]$ * 16777216) + ($IP_Arr[1]$ * 65536) + ($IP_Arr[2]$ * 256) + $IP_Arr[3]$
下面进行字段匹配,也就是需要将IP-number与IP_start和IP_end进行匹配,由此获得每个IP地址的所属位置(国家、经纬度坐标)
这里通过标注行ID,利用Binner模块进行RowID进行匹配 36大数据(http://www.36dsj.com/)
匹配结果如下:
匹配完成后就是基本统计和地图可视化了。
通过统计IP地址数量,排序、下载量大小的size、颜色、形状等特征后可以采用地理信息可视化方法,这里用了OSM(open street map)
这样我们就可以知道下载或更新我们软件的用户都来自哪个国家地区城市和数量。
接下来主要是可视化技术了,我们可以用更丰富的地理信息可视化进行展现或实时分析。
后续,我们可以通过Python进行实时分析和流分析纳入用户分析系统。 36大数据(http://www.36dsj.com/)
End.