­

python數據可視化-matplotlib入門(7)-從網路載入數據及數據可視化的小總結

除了從文件載入數據,另一個數據源是互聯網,互聯網每天產生各種不同的數據,可以用各種各樣的方式從互聯網載入數據。

一、了解 Web API

Web 應用編程介面(API)自動請求網站的特定資訊,再對這些資訊進行可視化。每次運行,都會獲取最新的數據來生成可視化,因此即便網路上的數據瞬息萬變,它呈現的資訊也都是最新的。

Web API是網站的一部分,用於與使用非常具體的URL請求特定資訊的程式交互。這種請求稱為API調用。請求的數據將以易於處理的格式(如JSON或CSV)返回。 

 GitHub(//github.com/)上的項目都存儲在倉庫中,後者包含與項目相關聯的一切:程式碼、項目參與者的資訊、問題或bug報告等,編寫一個自動下載GitHub上的Python項目的相關資訊。

 在瀏覽器中打開: //api.github.com/search/repositories?q=language:python&sort=stars,可以看到如下內容,

此調用返回GitHub當前託管了total_count   8884066個Python項目,還有最受歡迎的Python倉庫的資訊。

其中第一部分( //api.github.com/ )將請求發送到GitHub網站中響應API調用的部分;

第二部分( search/repositories )讓API搜索GitHub上的所有倉庫。

repositories 後面的問號指出我們要傳遞一個實參。 q 表示查詢,而等號讓我們能夠開始指定
查詢( q= )。通過使用 language:python ,我們指出只想獲取主要語言為Python的倉庫的資訊。

最後一部分( &sort=stars )指定將項目按其獲得的星級進行排序。

但我們不能每次通過打開網頁的形式來獲取數據。但可以通過python中相關庫

二、安裝 requests

requests是一個很實用的Python HTTP客戶端庫,專門用於發送HTTP請求,方便編程,編寫爬蟲和測試伺服器響應數據時經常會用到,

Requests主要相關參數有:

r.status_code 響應狀態碼
r.heards 響應頭
r.cookies 響應cookies

r.text 響應文本
r. encoding 當前編碼
r. content 以位元組形式(二進位)返回

鑒於一直都使用的是anaconda3,可直接打開 anaconda prompt,然後輸入命令:pip install –user requests 安裝即可。

下面來編寫一個程式,執行API調用並處理結果,找出GitHub上星級最高的Python項目,程式碼如下:

import requests   # 導入模組requests

url='//api.github.com/search/repositories?q=language:python&sort=stars'#存儲API調用的URL
r = requests.get(url)  # 調用get()並將URL傳遞給它,響應對象存儲在變數 r中
print("Status code:",r.status_code) #包含一個名為status_code的屬性
response_dict = r.json()   # 使用方法json()將這些資訊轉換為一個Python字典
print(response_dict.keys())  #列印出字典的key

上述程式碼有兩行列印,運行結果如下:

Status code: 200
dict_keys(['total_count', 'incomplete_results', 'items'])

狀態碼為200,請求成功。響應字典包含三個鍵: ‘total_count’和 ‘incomplete_results’和 ‘items’ 

將API調用返回的資訊存儲到字典中,就可以利用前面了解的字典的鍵-值對來研究自己喜歡的資訊了。

三、整理字典中的資訊

上述程式碼response_dict = r.json()實際上已將請求資訊轉為字典,那查看一下字典里有些什麼內容。

從瀏覽器中打開的內容可以看到,返回的內容中是字典中包含字典

(items是作為最上那個大括弧中的key,對應的值,是由多個字典組成的字典列表,『id』,『node_id』,『name』等也是items列表中第一子字典的key,見紅色方框部分,列表字典等相互嵌套,好好分析一下)。

1)先看一下與 ‘total_count’關聯的值

print("Total repositories:", response_dict['total_count'])

2)items本身是一個字典,『id』,『node_id』,『name』等均是key,後面對應的都是值,可以查一下有多少個key

repo_dicts = response_dict['items'] #建一個變數字典repo_dicts,將items字典列表存儲在 repo_dicts 
print("Repositories returned:", len(repo_dicts))# 打 repo_dicts的長度,獲得item字典的長度資訊

3)查看第一個item的詳細資訊,並列印出所有key

repo_dict = repo_dicts[0]   #提取了repo_dicts中的第一個字典
print("\nKeys:", len(repo_dict))  #列印這個字典包含的鍵數
print("\n")
for key in repo_dict.keys():#列印這個字典的所有鍵
    print(key)

整體運行結果(下圖白色部分為瀏覽器打開):

思考一下,為什麼圖中的Total repositories一個是9037884,另一個為9145790,兩者不一致?

有了key,就很容易查詢到相關的值了(當然這裡都是字元串,如果是數字型的就能可視化)

 四,數字可視化

通過瀏覽器打開頁面,會發現”forks”: 32471,       “open_issues”: 305,       “watchers”: 177777等有相關數據,於是,可以通過對應的key,將相關數據整合成一個數據列表,然後顯示出來,比如可視化wathers 

count=0  
watchers, counts= [], []
for repo_dict in repo_dicts:
    watchers.append(repo_dict['watchers'])
    count += 1
    counts.append(count)

plt.bar(counts,watchers, label="watchers", color='#ff2204')
plt.legend()
plt.show()

運行結果:

五、數據可視化的小總結:

 matplotlib中數據可視化的方法主要就是調用pyplot介面,再直接調用對象的建立方法,在方法中對該對象進行相應的屬性設置,所以掌握這種方法的核心就在於掌握每種對象的建立方法和具體參數設置。Python數據可視化的難處在於掌握參數的設置,內置的參數雖然很多,但一般都用不上(可以留著慢慢鑽研),將用得上的參數和參數值幾何整理下來,做到這樣,對於Python的可視化學習暫時足矣。剩下的時間該去學習其他更為有用的!

簡而化之,

曲線圖   plt.plot(squares, linewidth=5)    只需要提供一組數據即可
散點圖   plt.scatter(x, y,c=’r’,edgecolor=’none’,s=100) ,x,y分別為x軸,y軸坐標位置,x,y對應
柱圖      plt.bar(x,y, label=”Test one”, color=’r’)                x為x軸位置,y為值,x如為數列,則y對應相同長度
柱圖      plt.hist(list, bins, histtype=’bar’, rwidth=0.8,color=’r’)   bins為柱圖劃分範圍,表現在x軸上,list為數列,顯示在y 軸
餅圖      plt.pie(slices) slices 為一數列
堆疊圖  plt.stackplot(days, times,labels=labellist,colors=colorlist)   days為一維數列,times為多維數列,每一維數列元素個數與days一樣。