本文主要參考:http://www.reibang.com/p/773ff5f08a2c
年初琅轧,國家統(tǒng)計局公布了70個大中城市住宅銷售價格變動情況
其中有一項為價格指數(shù)表:
為了直觀顯示熱度分布,這里直接用了百度官網(wǎng)的API虏等,恰好里面有heatmap.js弄唧。
網(wǎng)址為:
http://developer.baidu.com/map/jsdemo.htm#c1_15
從中可以看出,數(shù)組points的規(guī)范為:
var points =[
{"lng":116.418261,"lat":39.921984,"count":50},
{"lng":116.423332,"lat":39.916532,"count":51},
......
];
因此博其,我們最終python程序要將數(shù)據(jù)規(guī)整為上面points的表現(xiàn)形式套才。
這里我們采用同比數(shù)據(jù),如下csv文件所示:
北京,127.0
天津,124.4
石家莊,118.9
太原,103.0
呼和浩特,101.0
沈陽,103.2
大連,102.5
長春,104.4
哈爾濱,102.1
上海,128.3
南京,137.3
杭州,127.6
寧波,111.2
合肥,144.2
福州,125.7
廈門,138.8
南昌,114.5
濟南,119.0
青島,113.2
鄭州,127.7
武漢,124.2
長沙,118.4
廣州,124.2
深圳,118.4
南寧,111.2
耗降口,106.5
重慶,107.7
成都,105.3
貴陽,105.3
昆明,104.2
西安,107.6
蘭州,103.2
西寧,102.3
銀川,102.4
烏魯木齊,99.1
唐山,103.2
秦皇島,107.0
包頭,100.2
丹東,99.8
錦州,97.7
吉林,102.6
牡丹江,99.3
無錫,134.4
揚州,110.3
徐州,109.6
溫州,104.4
金華,106.8
蚌埠,109.8
安慶,107.7
泉州,109.8
九江,112.2
贛州,114.0
煙臺,105.5
濟寧,102.0
洛陽,105.0
平頂山,103.5
宜昌,105.9
襄陽,103.2
岳陽,105.8
常德,103.3
惠州,124.7
湛江,109.3
韶關(guān),108.7
桂林,103.8
北海,104.5
三亞,106.3
瀘州,103.0
南充,102.0
遵義,102.0
大理,102.6
接下來我們便希望得到上述城市在地圖中對應的經(jīng)緯度,也就是points變量里面的lng沸毁、lat以及count信息峰髓。
在撰寫python程序之前需要去官網(wǎng)獲取ak碼,登陸http://lbsyun.baidu.com/息尺,在該網(wǎng)頁最下方即可申請密匙携兵。(ip可以寫成0.0.0.0/0)
對應的python程序如下:
# -*- coding: UTF-8 -*-
#import requests
#from lxml import etree
#import pandas as pd
import csv
import json
import urllib
import sys
reload(sys)
sys.setdefaultencoding('utf8')
def getlonlat(address):
ak = '你的百度api 的 key'
ori_url ='http://api.map.baidu.com/geocoder/v2/'
url = ori_url +'?address='+address+'&output=json'+'&ak='+ak
req = urllib.urlopen(url)
#urlopen返回 一個類文件對象(基礎網(wǎng)頁爬蟲知識啦)
res = req.read()
temp = json.loads(res)
# print req
# print res
# print temp
return temp
# add ='山西'
# getlonlat(add)
file=open('longlat.json','w')
#在本地生成爬取的經(jīng)緯度信息,以json格式保存
with open('price.csv','r') as csvfile:
#打開本地的price.csv文件
reader = csv.reader(csvfile)
for line in reader:
city = line[0].strip()
pricenum = line[1].strip()
# print city,pricenum
lon = getlonlat(city)['result']['location']['lng']
lat = getlonlat(city)['result']['location']['lat']
str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lon) + ',"count":' + str(pricenum) +'},'
print str_temp
#規(guī)整后的數(shù)據(jù)
# print '"city":'+str(city)+',"lat":' + str(lat) + ',"lng":' + str(lon) + ',"count":' + str(pricenum) +''
file.write(str_temp+'\n')
file.close()
最終得到數(shù)據(jù)如下:
{"lat":39.9299857781,"lng":116.395645038,"count":127.0},
{"lat":39.1439299033,"lng":117.210813092,"count":124.4},
{"lat":38.0489583146,"lng":114.522081844,"count":118.9},
{"lat":37.890277054,"lng":112.550863589,"count":103.0},
{"lat":40.8283188731,"lng":111.66035052,"count":101.0},
{"lat":41.8086447835,"lng":123.432790922,"count":103.2},
{"lat":38.9487099383,"lng":121.593477781,"count":102.5},
{"lat":43.8983376071,"lng":125.313642427,"count":104.4},
{"lat":45.7732246332,"lng":126.657716855,"count":102.1},
{"lat":31.24916171,"lng":121.487899486,"count":128.3},
{"lat":32.0572355018,"lng":118.778074408,"count":137.3},
{"lat":30.2592444615,"lng":120.219375416,"count":127.6},
{"lat":29.8852589659,"lng":121.579005973,"count":111.2},
{"lat":31.8669422607,"lng":117.282699092,"count":144.2},
{"lat":26.0471254966,"lng":119.330221107,"count":125.7},
{"lat":24.4892306125,"lng":118.103886046,"count":138.8},
{"lat":28.6895780001,"lng":115.893527546,"count":114.5},
{"lat":36.6827847272,"lng":117.024967066,"count":119.0},
{"lat":36.1052149013,"lng":120.384428184,"count":113.2},
{"lat":34.7566100641,"lng":113.64964385,"count":127.7},
{"lat":30.5810841269,"lng":114.316200103,"count":124.2},
{"lat":28.2134782309,"lng":112.979352788,"count":118.4},
{"lat":23.1200491021,"lng":113.307649675,"count":124.2},
{"lat":22.5460535462,"lng":114.025973657,"count":118.4},
{"lat":22.8064929356,"lng":108.297233556,"count":111.2},
{"lat":20.022071277,"lng":110.330801848,"count":106.5},
{"lat":29.5446061089,"lng":106.530635013,"count":107.7},
{"lat":30.6799428454,"lng":104.067923463,"count":105.3},
{"lat":26.6299067414,"lng":106.709177096,"count":105.3},
{"lat":25.0491531005,"lng":102.714601139,"count":104.2},
{"lat":42.9863649464,"lng":125.150148579,"count":107.6},
{"lat":36.064225525,"lng":103.823305441,"count":103.2},
{"lat":36.640738612,"lng":101.76792099,"count":102.3},
{"lat":38.5026210119,"lng":106.206478608,"count":102.4},
{"lat":43.8403803472,"lng":87.5649877411,"count":99.1},
{"lat":39.6505309225,"lng":118.183450598,"count":103.2},
{"lat":39.9454615659,"lng":119.604367616,"count":107.0},
{"lat":40.6471194257,"lng":109.846238532,"count":100.2},
{"lat":40.1290228266,"lng":124.338543115,"count":99.8},
{"lat":41.1308788759,"lng":121.147748738,"count":97.7},
{"lat":43.8719883344,"lng":126.564543989,"count":102.6},
{"lat":44.5885211528,"lng":129.608035396,"count":99.3},
{"lat":31.5700374519,"lng":120.305455901,"count":134.4},
{"lat":32.4085052546,"lng":119.427777551,"count":110.3},
{"lat":34.2715534311,"lng":117.188106623,"count":109.6},
{"lat":28.002837594,"lng":120.690634734,"count":104.4},
{"lat":29.1028991054,"lng":119.652575704,"count":106.8},
{"lat":32.9294989067,"lng":117.357079866,"count":109.8},
{"lat":30.5378978174,"lng":117.058738772,"count":107.7},
{"lat":24.901652384,"lng":118.600362343,"count":109.8},
{"lat":29.7196395261,"lng":115.999848022,"count":112.2},
{"lat":25.8452955363,"lng":114.935909079,"count":114.0},
{"lat":37.5365615629,"lng":121.30955503,"count":105.5},
{"lat":35.4021216643,"lng":116.600797625,"count":102.0},
{"lat":34.6573678177,"lng":112.447524769,"count":105.0},
{"lat":33.7453014565,"lng":113.300848978,"count":103.5},
{"lat":30.732757818,"lng":111.310981092,"count":105.9},
{"lat":32.2291685915,"lng":112.250092848,"count":103.2},
{"lat":29.3780070755,"lng":113.146195519,"count":105.8},
{"lat":29.0121488552,"lng":111.653718137,"count":103.3},
{"lat":23.1135398524,"lng":114.41065808,"count":124.7},
{"lat":21.2574631038,"lng":110.365067263,"count":109.3},
{"lat":24.8029603119,"lng":113.594461107,"count":108.7},
{"lat":25.262901246,"lng":110.260920147,"count":103.8},
{"lat":21.472718235,"lng":109.122627919,"count":104.5},
{"lat":18.2577759149,"lng":109.522771281,"count":106.3},
{"lat":28.8959298039,"lng":105.443970289,"count":103.0},
{"lat":30.8009651682,"lng":106.105553984,"count":102.0},
{"lat":27.6999613771,"lng":106.931260316,"count":102.0},
{"lat":25.6939666225,"lng":100.219208954,"count":102.6},
將以上數(shù)據(jù)填充在百度熱力圖編輯器里面的points變量里即可得到最終的房價漲幅熱力圖數(shù)據(jù):
關(guān)于heatmap.js
其中的參數(shù)可以自行調(diào)整搂誉。
backgroundColor 畫板的背景顏色設置徐紧,支持rgb(a),顏色名稱炭懊,但必須要用引號
gradient 設置熱點圖的光圈顏色并级,數(shù)值為[0,1],數(shù)值大的在光圈內(nèi)側(cè)侮腹,數(shù)值相等則靠下的生效嘲碧,數(shù)值設置不分大小順序,并可以同時設置很多顏色
radius 設置光圈的半徑大小父阻,值>=0,=0取得是默認值
opacity 光圈透明度設置[0,1]愈涩,如果值設置了,會重寫maxOpacity和minOpacity的值
很慚愧就做了一點微小的整理加矛!