如今,,大數(shù)據(jù)的重要性不言而喻,讓數(shù)據(jù)說話已經(jīng)滲透到各個(gè)行業(yè),,我們的數(shù)據(jù)分析師們也從單一的數(shù)據(jù)分析轉(zhuǎn)化為更加重視用戶的體驗(yàn),,比如通過數(shù)據(jù)可視化,將一大堆密密麻麻的數(shù)字轉(zhuǎn)成圖表形式,。這樣可以更直觀地向用戶展示數(shù)據(jù)之間的聯(lián)系和變化情況,,減少用戶的閱讀和思考時(shí)間,以便很好地做出決策,。 作者 | 王大偉 編輯 | 數(shù)小妹 如何讓數(shù)據(jù)化繁為簡,,直觀體現(xiàn)?今天就來和大家一起用Python 百度API 畫出美美噠熱力地圖,。 數(shù)據(jù)準(zhǔn)備 在國家統(tǒng)計(jì)局網(wǎng)站copy到2015年各城市的房地產(chǎn)開發(fā)投資額數(shù)據(jù): 把數(shù)據(jù)保存在本地,,存成csv格式 百度API免費(fèi)申請(qǐng) 打開網(wǎng)址:http://lbsyun.baidu.com/ 注冊(cè)好,按照下圖操作: 點(diǎn)擊 功能與服務(wù)----地圖 點(diǎn)擊創(chuàng)建應(yīng)用: 然后自己取個(gè)名字,,選擇瀏覽器端,,白名單輸入星號(hào): 點(diǎn)擊提交 你就有了一個(gè)應(yīng)用了 城市轉(zhuǎn)換為經(jīng)緯度 我們打開百度地圖的開放平臺(tái) http://developer.baidu.com/map/jsdemo.htm#c1_15 在左側(cè)找到添加熱力圖-----點(diǎn)擊運(yùn)行-----點(diǎn)擊顯示熱力圖-----就能看到熱力圖啦~ 這是百度API所能提供的熱力圖類型 我們注意到所給的這段代碼: 我們將您的密鑰換成剛才我們申請(qǐng)得到的那串?dāng)?shù)字 也就是: 然后在本地新建一個(gè).html文件(可以通過創(chuàng)建文本文件,然后將后綴改為.html達(dá)到,,如果你的文本文件不顯示后綴,,請(qǐng)百度解決~) 我們將加入了自己申請(qǐng)的密鑰的網(wǎng)頁代碼全部復(fù)制下,粘貼到本地創(chuàng)建的 .html 文件中 復(fù)制的代碼中的示例熱力圖的位置不是我們想要的 我們想要的是我們的數(shù)據(jù)生成熱力圖 打開Python import json from urllib.request import urlopen, quote import requests,csv import pandas as pd #導(dǎo)入這些庫后邊都要用到 def getlnglat(address): url = 'http://api.map.baidu.com/geocoder/v2/' output = 'json' ak = '替換成你申請(qǐng)的密鑰??!' add = quote(address) #由于本文城市變量!為中文,,為防止亂碼,,先用quote進(jìn)行編碼 uri = url '?' 'address=' add '&output=' output '&ak=' ak req = urlopen(uri) res = req.read().decode() #將其他編碼的字符串解碼成unicode temp = json.loads(res) #對(duì)json數(shù)據(jù)進(jìn)行解析 return temp file = open(r'E:\房地產(chǎn)開發(fā)投資額2015.json','w') #建立json數(shù)據(jù)文件 with open(r'E:\房地產(chǎn)開發(fā)投資額2015.csv', 'r') as csvfile: #打開csv reader = csv.reader(csvfile) for line in reader: #讀取csv里的數(shù)據(jù) # 忽略第一行 if reader.line_num == 1: #由于第一行為變量名稱,故忽略掉 continue # line是個(gè)list,,取得所有需要的值 b = line[0].strip() #將第一列city讀取出來并清除不需要字符 c = line[1].strip()#將第二列price讀取出來并清除不需要字符 lng = getlnglat(b)['result']['location']['lng'] #采用構(gòu)造的函數(shù)來獲取經(jīng)度 lat = getlnglat(b)['result']['location']['lat'] #獲取緯度 str_temp = '{'lat':' str(lat) ','lng':' str(lng) ','count':' str(c) '},' #print(str_temp) #也可以通過打印出來,,把數(shù)據(jù)copy到百度熱力地圖api的相應(yīng)位置上 file.write(str_temp) #寫入文檔 file.close() #保存 參考文獻(xiàn): https://www.jianshu.com/p/773ff5f08a2c 運(yùn)行完成之后,本地會(huì)出現(xiàn)一個(gè)json文件 打開可以看到: 是一長串json數(shù)據(jù),,我們?nèi)x這些數(shù)據(jù),,復(fù)制替換掉本地的html文件中的var經(jīng)緯度部分 原本是這樣的: 替換完成后是這樣的: (我是用notepad 以編輯的方式打開的本地html文件) 保存之后,以網(wǎng)頁瀏覽的方式打開本地的html 使用鼠標(biāo)滾輪放大縮小到可以看見全國視野,,然后點(diǎn)擊左下角顯示熱力圖即可看到~ 你出現(xiàn)的圖是這樣的: 因?yàn)樵紨?shù)據(jù)默認(rèn)為20和100,,只要超過100的值顯示都一樣,,而且沒有漸變輻射的效果 可以修改熱力點(diǎn)輻射半徑(輻射范圍大小)和最大值 我們數(shù)據(jù)的price最大是北京的4177,,所以我設(shè)置為4000,,保存 再次打開操作就能看到美美噠熱力圖啦~ 你可以拿這個(gè)方法去做其他熱力圖啦~比如房價(jià)熱力圖,GDP熱力圖等等~ |
|