前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >许嵩粉丝地域分布热力图,看看你的爱豆受到哪些地方的人喜欢

许嵩粉丝地域分布热力图,看看你的爱豆受到哪些地方的人喜欢

作者头像
HuangWeiAI
发布2019-12-17 17:16:44
9530
发布2019-12-17 17:16:44
举报
文章被收录于专栏:浊酒清味浊酒清味

这次我们想绘制一个歌手许嵩的粉丝地域分布的热力图。我们通过对网易云音乐网站爬虫,获取了所有粉丝的信息,包括所在地区。然后将这些地区按照关注人数通过热力图的形式,画在百度地图上。就让我们看看许嵩的粉丝都是来自哪里吧。

PS:看完这篇文章,你也可以自己动手查看自己爱豆的粉丝地域分布图。

我们绘制地域分布热力图分成两个步骤:

  1. 获取粉丝的信息,包括地域信息
  2. 将地域信息转换成真实地图上的热力图

这篇文章的代码可以直接去这位大神的主页下载

https://github.com/zyingzhou/music163-spiders

由于实际操作中会遇到各种各样的问题,具体需要自己动手改动或者操作的部分,请跟随我的讲解。

获取粉丝信息

我们第一步需要在网易云音乐网页找到歌手的粉丝页面:

通过这个网页,我们可以获取歌手的id

比如这里许嵩的id是31265745,我们只需要把代码中歌手id替换成许嵩的id即可:

代码语言:javascript
复制
# 歌手id
aid = '31265745'

运行代码后,我们可以获取粉丝的信息:

经过一天一夜的爬虫,获得了四万多个粉丝信息。

一共三个属性信息,包括昵称(nickname),位置(location),以及性别(gender)。我们只关注位置信息。

值得注意的是,Python3的编码方式和Python2并不一样,所以在原代码的95行,97行,我们需要做一些改动:

代码语言:javascript
复制
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
# 加密后得到的是bytes类型的数据
encryptedbytes = cipher.encrypt(msg.encode('utf-8'))

制作地域热力图

在粉丝信息提取的信息中,位置信息为城市编码。

我们分三步走:

  1. 我们先将城市编码转换成中文的位置信息
  2. 然后通过百度API将中文位置转换成经纬度
  3. 根据每个地区的人数在地图经纬度上标注热力点

在第2步中,我们需要申请百度地图的服务密钥。

申请网页:

http://lbsyun.baidu.com/apiconsole/key

我的申请信息如下:

将申请到的ak填入到原代码的第75行即可。

还有一处代码需要进行改动,因为你如果在获得ak后跑程序,会发生报错:

代码语言:javascript
复制
{"status":240,"message":"APP 服务被禁用"}

具体解决办法我是参考这个帖子发现的:

https://blog.csdn.net/qq_42567801/article/details/97374835

由于服务升级,更新之后请求的URL体发生了改变:

代码语言:javascript
复制
# 旧:
http://api.map.baidu.com/geocoder/v2/?location=34.35555,107.32518&output=json&ak=你的AK&pois=1
# 新:
http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的AK&output=json&coordtype=wgs84ll&location=31.225696,121.49884

从这段代码看,是版本从v2升级成了v3。如果你将代码按照v3改过来,发现还是会报错。

经过我的仔细思考,发现新的版本将的是如果逆地理编码,而我们需要的是“正”地理编码,于是我尝试将reverse_geocoding中的reverse去掉,没想到竟然通过了!真是机智。

这部分代码为(在原代码72行开始):

代码语言:javascript
复制
url = "http://api.map.baidu.com/geocoding/v3/"
output = 'json'
# 密钥需要到百度开发者平台申请
ak = 'bwLDdZXZNcrGCLVdsRPVESQv1GjtwOW8'
addr = quote(address)
uri = url + '?' + 'ak=' + ak  + '&output=' + output + '&address=' + addr

最后是绘制地图,经过多次尝试后,之前申请的百度地图服务应用类别不是服务器,于是我又申请一个浏览器端的ak:

在定位地区的时候,有一个一直报错,就是“淮北市”,于是我将它在字典里面删除了:

代码语言:javascript
复制
loc_counts.pop('淮北市')

最终效果图

好了,经过一段时间和代码死怼,终于获得热力图:

可以看出来许嵩的粉丝主要集中在安徽江苏上海等地,另外广东北京地区也非常之多。

放大一下看:

合肥地区粉丝多,可能的原因是许嵩就是安徽合肥人。

好了,快去亲自动手看看你喜欢的歌手的粉丝都是哪里人吧。

·END·

关注我们

Python·机器学习·数据分析

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与机器学习之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档