项目(一):微博数据热力图

Peking University summer school

Posted by AlbertWu on July 22, 2016

微博热力图的实现

拿到手上的数据是这样的:

原始数据: alt text

我只能说我最讨厌min的数据了,为了节省空间,让程序员自己格式化,手动白眼,还好sublime自带Pretty JSON可视化工具,配置过程->

然后就变成了漂亮的格式数据:

完成pretty Json处理后的数据: alt text

我们可以发现每个时间点的经纬度坐标都已经给出,然后我们就可以利用百度地图API实现热力图的绘制

有趣的是百度API有些直接提供了APIKEY直达->

根据热力图API示例,我们可以发现,其主要可以更改的数据在于

//可以更改points的值来实现自己数据的更新,count表示权重 
var points =[
    {"lng":116.418261,"lat":39.921984,"count":50},
    {"lng":116.423332,"lat":39.916532,"count":51},
    {"lng":116.419787,"lat":39.930658,"count":15}];

heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":20});
heatmapOverlay.setDataSet({data:points,max:100});//将数据和热力图点绑定
map.addOverlay(heatmapOverlay);//画热力图

倘若你的数据保存在json文件中,你又该如何将json文件导入js中呢?推荐使用d3的json函数。

 d3.json("Weibo_locations_all.json",function(data){
    var points = data;//成功从json文件中导入data
    if(!isSupportCanvas()){
        alert('热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~')
    }
     heatmapOverlay.setDataSet({data:points,max:100});
     openHeatmap();
    });

提示:调用d3函数读取json文件时程序会另外开辟一个分支,与主程序并行运算,所以倘若是对json文件中的数据进行操作,需要将该操作写在d3函数中而非主函数。

说到这里,不如来看看最终的成果以及我们的发现!

我们主要从地理位置,时间维度以及热词维度进行展示,成果戳这—>


Creative Commons License
This work is licensed under a CC A-S 4.0 International License.