前言
請先閱讀“中國年輕人正帶領國家走向危機”,這鍋背是不背? 一文,以對“手把手教你完成一個資料科學小專案”系列有個全域性性的瞭解。
本系列程式碼統一開源在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 哈。
本系列文章:
“中國年輕人正帶領國家走向危機”,這鍋背是不背?
手把手教你完成一個資料科學小專案(1):資料爬取
手把手教你完成一個資料科學小專案(2):資料提取、IP 查詢
手把手教你完成一個資料科學小專案(3):資料異常與清洗
手把手教你完成一個資料科學小專案(4):評論數變化情況
手把手教你完成一個資料科學小專案(5):省份提取與視覺化
手把手教你完成一個資料科學小專案(6):城市提取與視覺化
歡迎關注公眾號“牛衣古柳”哈!