研究生導師佈置的作業!利用Python和API收集與分析網路數據!

来源:https://www.cnblogs.com/Python1234/archive/2018/05/21/9069087.html
-Advertisement-
Play Games

猜猜看,下麵這一組調查對象是什麼? 為什麼會這樣呢? 因為我在佈置作業的時候,很貼心地給了一個樣例,是我之前寫的一篇教程《 如何用R和API免費獲取Web數據? 》。 於是,多組作業,都雷同。 講到這裡,他們一副不好意思的表情。 我卻發覺,這裡蘊藏著一個問題。 幾乎所有國內雲市場的 API 產品,都 ...


猜猜看,下麵這一組調查對象是什麼?

為什麼會這樣呢?

因為我在佈置作業的時候,很貼心地給了一個樣例,是我之前寫的一篇教程《 如何用R和API免費獲取Web數據? 》。

於是,多組作業,都雷同。

講到這裡,他們一副不好意思的表情。

我卻發覺,這裡蘊藏著一個問題。

幾乎所有國內雲市場的 API 產品,都有豐富的文檔。不少還乾脆給出了各種編程語言對應調用代碼。

這是一款收費 API ,100次調用的價格為1分錢。

作為作業練習,100次調用已經足夠了。

這價格,他們表示可以接受。

我自己走了一遍流程。

點擊“立即購買”按鈕。

你會被引領到付費頁面。如果你沒有登錄,可以根據提示用淘寶賬號登錄。

支付1分錢以後,你會看到如下的成功提示。

之後,系統會提示給你一些非常重要的信息。

如果你的操作系統裡面已經安裝了 curl (沒有安裝的話,可以點擊這個鏈接,尋找對應的操作系統版本下載安裝),嘗試把上圖中 curl 開頭的那一行代碼拷貝下來,複製到文本編輯器裡面。

就像這樣:

curl -i -k --get --include 'https://ali-weather.showapi.com/weatherhistory?area=%E4%B8%BD%E6%B1%9F&areaid=101291401&month=201601' -H 'Authorization:APPCODE 你自己的AppCode'

然後,一定要把其中的“你自己的AppCode”這個字元串,替換為你真實的 AppCode 。

把替換好的語句複製粘貼到終端視窗裡面運行。

運行結果,如下圖所示:

看見視窗下方包含中文的數據了嗎?

利用 API 獲取數據,就是這麼簡單。

上圖中,除了剛纔我們使用的 curl ,還包括以下語言訪問 API 介面的樣例說明:

  • Java

  • C#

  • PHP

  • Python

  • Object C

我們以 Python 作為例子,點開標簽頁看看。

你只需要把樣例代碼全部拷貝下來,用文本編輯器保存為“.py”為擴展名的 Python 腳本文件,例如 demo.py 。

為什麼許多學生做不出來結果呢?

我讓他們實際跑了一下,發現確實有的學生粗心大意,忘了替換自己的 AppCode 。

但是大部分同學,由於安裝最新版本的 Anaconda (Python 3.6版),都遇到了下麵的問題:

你可能會認為這是因為沒有正確安裝 urllib2 模塊,於是執行

pip install urllib2

你可能會看到下麵的報錯提示:

在他們看來,官方網站提供的樣例,就應該是可以運行的。報了錯,又不能通過自己的軟體包安裝“三板斧”來解決,就會慌亂和焦慮。

更進一步,他們也不太瞭解 JSON 格式。

雖然,JSON已是一種非常清晰的、人機皆可通讀的數據存儲方式了。

他們想瞭解的,是怎麼把問題遷移到自己能夠解決的範圍內。

環境

首先我們來看看代碼運行環境。

前面提到過,如果樣例代碼的運行環境,和你本地的運行 環境不一 ,計時代碼本身沒問題,也無法正常執行 。

這個界面來自 Jupyter Lab。

圖中左側分欄,是工作目錄下的全部文件。

右側打開的,是咱們要使用的ipynb文件。

根據我的講解,請你逐條執行,並仔細觀察運行結果。

本例中,我們主要會用到以下兩個新的軟體包。

首先是號稱“給人用”(for humans)的HTTP工具包requests。

代碼

首先,讀入HTTP工具包requests。

import requests

第二句裡面,有“Your AppCode here”字樣,請把它替換為你自己的AppCode,否則下麵運行會報錯。

appcode = 'Your AppCode here'

我們嘗試獲取麗江5月份的天氣信息。

在API信息頁面上,有城市和代碼對應的表格。

位置比較隱蔽,在公司簡介的上方。

看來我們需要在HTTP數據頭(header)中,加入 AppCode。

我們依次把這些信息都寫好。

url = 'https://ali-weather.showapi.com/weatherhistory'payload = {'areaid': areaid, 'month': month}headers = {'Authorization': 'APPCODE {}'.format(appcode)}

下麵,我們就該用 requests 包來工作了。

requests 的語法非常簡潔,只需要指定4樣內容:

  • 調用方法為“GET”

  • 訪問地址 url

既然調用成功,我們看看 API 介面返回的具體數據內容吧。

調用返回值的 content 屬性:

r.content

這一屏幕,密密麻麻的。

其中許多字元,甚至都不能正常顯示。這可怎麼好?

沒關係,從 API 信息頁上,我們得知返回的數據,是 JSON 格式。

返回的是一個列表。

因為列表裡面只有一個城市,所以我們只讓它返回第一項即可。

dfs[0]

這次顯示的,就是數據框了:

假設我們要綜合分析幾個城市的天氣信息,那麼就可以把這幾個數據框整合在一起。

用到的方法,是 Pandas 內置的 concat 函數。

它接收一個數據框列表,把其中每一個個數據框沿著縱軸(預設)連接在一起。

df = pd.concat(dfs)

看看此時的總數據框效果:

df

這是開頭部分:

這是結尾部分:

3個城市,4個多月的數據都正確讀取和整合了。

下麵我們嘗試做分析。

這次就對了,日期和 AQI 都分別變成了我們需要的類型。其他數據,暫時保持原樣。

有的是因為本來就該是字元串,例如城市名稱。

另一些,是因為我們暫時不會用到。

下麵我們繪製一個簡單的時間序列對比圖形。

讀入繪圖工具包 plotnine 。

註意我們同時讀入了 date_breaks ,用來指定圖形繪製時,時間標註的間隔。

我們指定橫軸為時間序列,縱軸為 AQI,用不同顏色的線來區分城市。

繪製時間的時候,以“2周”作為間隔周期,標註時間上的數據統計量信息。

我們修改橫軸的標記為中文的“日期”。

因為時間顯示起來比較長,如果按照預設樣式,會堆疊在一起,不好看,所以我們讓它旋轉45度角,這樣避免重疊,一目瞭然。

為了讓圖中的中文正常顯示,我們需要指定中文字體,這裡我們選擇的是開源的“文泉驛微米黑”。

數據可視化結果,如下圖所示。

怎麼樣,這張對比圖,繪製得還像模像樣吧?

從圖中,你可以分析出什麼結果呢?

反正我看完這張圖, 很想去麗江 。

當然,要是能給我的repo加一顆星,就更好了。

討論

你之前嘗試過用 Python 和 API 獲取數據嗎?你使用了哪些更好用的軟體包進行數據獲取、處理、分析與可視化呢?你還使用過哪些其他的數據產品市場?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。

轉載於:玉樹芝蘭”(nkwangshuyi) 。

歡迎關註我的博客:https://home.cnblogs.com/u/Python1234/

歡迎加入千人交流答疑群:125240963


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在類unix操作系統下,可以用 os.fork() 創建一個新的進程,windows系統不可以: 在執行了 os.fork() 這一句之後,會有兩個進程同時向下執行, 返回的 ret 分別是 0(子進程)的 和 大於0(父進程)的 , getpid() 是獲取當前進程的pid getppid() 是 ...
  • 一、項目目錄結構: 案例採用MVC三層模式開發: 二、源代碼: domain層:User .java dao層:UserDaoImpl .java RegisterForm.java:封裝並校驗註冊表單提交的數據 LoginServlet.java:處理登陸請求 LogoutServlet.java ...
  • 遠程代理模式-Remote Proxy 服務端通過rmi將對象註冊到遠程服務, 客戶端使用時, 只需要通過rmi協議獲取即可, 只要介面統一, 即可不需要知道內部具體實現, 直接調用使用. CompareHelper介面 這裡就是客戶端和服務端統一的介面, 只需要服務端根據這個介面實現相應的功能, ...
  • 如何合理地估算線程池大小? 這個問題雖然看起來很小,卻並不那麼容易回答。大家如果有更好的方法歡迎賜教,先來一個天真的估算方法:假設要求一個系統的TPS(Transaction Per Second或者Task Per Second)至少為20,然後假設每個Transaction由一個線程完成,繼續假 ...
  • 觀察者模式-Observer 當一個對象變化時,其它依賴該對象的對象都會收到通知, 並且會隨著變化!對象之間是一種一對多的關係。 換一種表達方式: 有很多觀察者們依賴於(觀察)同一個對象(主題), 當這個被依賴的對象(主題)變化時, 觀察者們也會隨之變化. 本文中的例子如下: 有一個進度生成器, 用 ...
  • from:從0開始,構建前後端分離應用 1. 一些基本概念 1.1 為什麼要進行單元測試?我自己的理解是 1、能夠快速發現問題。避免衍生BUG的出現 在對一些現有代碼進行修改時,或者修改現有BUG的時候。都有可能對已有的代碼產生影響,產生新的問題。那麼怎麼能避免新問題的產生呢?那就是執行回歸測試,但 ...
  • 回到 DirectX11 使用Windows SDK來進行開發: "http://www.cnblogs.com/X Jun/p/9028764.html" 由於個人覺得龍書裡面第4章提供的Direct3D 初始化項目封裝得比較好,而且DirectX SDK Samples裡面的初始化程式過於精簡, ...
  • 怎樣才能開始一個互動式解釋器的會話? 在Windows下可以通過點擊開始按鈕,選擇“程式”,點擊“Python”,然後選擇“Python(command line)”菜單選項來開始一個交互會話。 你應該在哪裡輸入系統命令行來啟動一個腳本文件? 在輸入系統命令行的地方,也就是你所在的平臺提供給作為系統 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...