专栏首页Data Analysis & Viz手把手教你完成一个数据科学小项目(7):经纬度获取与BDP可视化

手把手教你完成一个数据科学小项目(7):经纬度获取与BDP可视化

前言

请先阅读“中国年轻人正带领国家走向危机”,这锅背是不背? 一文,以对“手把手教你完成一个数据科学小项目”系列有个全局性的了解。

本系列代码统一开源在GitHub:DesertsX/gulius-projects ,感兴趣的朋友可以先行 star 哈。

截至目前我们已经完成了数据爬取数据提取与IP查询数据异常与清洗评论数变化情况分析省份提取与可视化城市提取与可视化,本文将调用百度地图 API 获取地理位置的经纬度,并使用 BDP 绘制动态热力图。

读取数据

之前系列文章和代码的最后末尾均可自行保存每次操作后的数据,比如新创建的那些列等等。

import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')
df.head(2)

百度地图

创建应用

本回使用百度地图开放平台的 API 获取经纬度数据,读者也可以试下用高德地图、谷歌地图等等实现。首先在百度地图开放平台(需登录操作)的“控制台”处点击“创建应用”;可以随意填写“应用名称”,比如:地图经纬度;在“IP白名单”处可按照提示填写 0.0.0.0/0,方便在不同的电脑上操作,然后点击“提交”即可创建成功。应用列表里生成了应用,而访问应用(AK)就是后面调用 API 时所需的参数。

获取经纬度

Web服务API中找到所需的服务,本次是根据地理信息获取经纬度,于是正/逆地理编码,按照服务文档的说明,调用API。注意调用次数的限制。 正/逆地理编码 - 百度地图Web服务API

import requests
def area2coor(area):
    ak = '换成你的ak' # 应用列表里访问应用(AK)的一串字符
    try:
        # http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
        address = area
        url = 'http://api.map.baidu.com/geocoder/v2/?address=' + address  + '&output=json&ak=' + ak
        json_data = requests.get(url = url).json()    
        coor_loc = json_data['result']['location']
        return coor_loc
    except:
        return "nocoor" # 不换ak多半都是 'nocoor'
    
print(df.loc[0,'area'])    
area2coor(df.loc[0,'area'])

经纬度

上面先测试下,能拿到经纬度后,创建经纬度列:

%%time
df['coor_loc'] = df.area.apply(area2coor)
df.coor_loc

拆分经度纬度

选出非'nocoor'的数据,再分别拿到经度和纬度,然后就可以导出数据,以便后面在BDP里操作。

df_coor = df[df['coor_loc'] != 'nocoor']
df_coor['lng'] = df_coor['coor_loc'].apply(lambda x: x['lng']) # 经度
df_coor['lat'] = df_coor['coor_loc'].apply(lambda x: x['lat']) # 纬度
df_coor[['lng','lat']]

保存数据

df_coor.to_csv('Sina_Finance_Comments_All_20180811_toBDP.csv', encoding='utf-8', line_terminator='\r\n')

动态热力图

古柳以前也用过 BDP,所以这回拿到数据后,就想着间隔近一年的时间后重新绘制动态热力图,虽则早已生疏了,但以前机智的写过一篇“使用手册”:(送福利)BDP绘制微博转发动态热力图,于是按照文中步骤很快就重新捡回并制作出来了。

具体步骤就不截图演示了,更详细的步骤请参考上面给出的文章,内含爬取的微博转发数据集,可供把玩(用Gephi一则热门微博的14层转发网络图谱:《Gephi绘制微博转发图谱:以“@老婆孩子在天堂”为例》):

此处仅记录大致操作步骤如下:

  • 网上搜索:BDP个人版,注册账号以便使用;
  • 点击“数据源”,点击“立即添加”,点击“CSV上传”,按照跳出的页面,上传本地对应的CSV文件,“逗号”分割,确定后,等待上传成功后,就能看到数据,此处将相应的时间列,设定为日期,否则后面动态展示时可能会出错。点击下一步,改不改文件名,目录,随意,之后下一步,完成数据上传;
  • 点击菜单栏右上角“新建图表”,选择“经纬度地图”后确定;
  • 经度选择上传的CSV数据里的“lng”列,纬度选择“lat”列,坐标系选择为百度地图;
  • 将工作表中文件拖曳到图层里,就能在地图上加载出数据,非常简单地拿到了地图;

更改设置参数,以便录制 GIF 时展示效果更佳:

  • 热力半径:8像素
  • 时间粒度:按时
  • 时间间隔:2小时 / 1小时
  • 自定义速度:FPS:8 / 12

可根据数据量、数据展示的效果、以及自身的要求自行修改。最后就拿到了文章评论的动态热力图,还是蛮酷的。

本系列代码统一开源在GitHub:DesertsX/gulius-projects ,感兴趣的朋友可以先行 star 哈。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手教你完成一个数据科学小项目(3):数据异常与清洗

    本系列将全面涉及本项目从爬虫、数据提取与准备、数据异常发现与清洗、分析与可视化等细节,并将代码统一开源在GitHub:DesertsX/gulius-proje...

    古柳_DesertsX
  • Gephi绘制微博转发图谱:以“@老婆孩子在天堂”为例

    以前看过一篇提取《釜山行》剧本中人物,并用Gephi绘制关系图谱的文章,因此想用Gephi绘制下微博转发情况,借此来换个角度看看微博内容是怎么扩散的。其中爬取转...

    古柳_DesertsX
  • 乱炖数据之2700余篇“简书交友”专题文章数据的花式玩法

    简书上有个“简书交友”专题,经常会有人写些自己的情况、贴贴自己的照片然后投稿到这一专题,有介绍的比较详细的比如下图所示(侵删),较为规整和全面;

    古柳_DesertsX
  • CSS常用布局实现02-垂直居中

    css2.1本身没有提供垂直居中的属性,都是通过一些巧妙的方法来实现,当然,都会有或多或少的缺点。所以,还是那句话,如果不考虑兼容到特定的浏览器,建议使用fle...

    love丁酥酥
  • Jekyll-Admin-Mac-列表

    接下来我们需要就是做出这个列表数据,我们可以使用 NSTableView来做出这个效果。

    君赏
  • 如何成为一名优秀的Docker代码贡献者

    但是,从一个新的基准代码(codebase)入手绝对是一件恐怖的事情。目前,Docker已经有相当多的代码了,哪怕是修复一个小问题,都需要阅读大量的代码,并理解...

    华章科技
  • netty源码解析 ServerBootstrap.bind(port)

    在ServerBootstrap内,从bind方法一路跟进到private ChannelFuture doBind(final SocketAddress l...

    平凡的学生族
  • Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a native-sq

    Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a nati...

    小柒2012
  • 彻底搞懂ArrayList

    同样是空的数组对象,和EMPTY_ELEMENTDATA区别在于,无参构造函数的空数组会用DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值...

    每天学Java
  • 熊掌号来了!百度内容“双引擎”战略对互联网有何影响?

    今天,百度世界大会上,百度高级副总裁、百度搜索公司总裁向海龙正式对外发布熊掌号,成为今年百度世界大会上继百度AI智能音箱后的另一个重量级新品,百度官方对熊掌号的...

    罗超频道

扫码关注云+社区

领取腾讯云代金券