1.1用圖表分析單變數數據

来源:https://www.cnblogs.com/yudanqu/archive/2018/09/30/9727257.html
-Advertisement-
Play Games

單變數:表達式、方程式、函數或者一元多項式等 數據:http://www.presidency.ucsb.edu/data/sourequests.php美國總統歷年在國情咨文中對國會提起的訴求數量 一、獲取數據 本次使用到的數據量並不多,不過還是按照常規思路,通過爬蟲獲取。 得到的數據: 二、繪製 ...


  單變數:表達式、方程式、函數或者一元多項式等

  數據:http://www.presidency.ucsb.edu/data/sourequests.php美國總統歷年在國情咨文中對國會提起的訴求數量

一、獲取數據

  本次使用到的數據量並不多,不過還是按照常規思路,通過爬蟲獲取。

 1 import urllib.request
 2 import re
 3 
 4 
 5 def crawler(url):
 6     headers = {
 7         "User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
 8     }
 9     req = urllib.request.Request(url, headers=headers)
10     response = urllib.request.urlopen(req)
11     
12     html = response.read().decode('utf-8')
13     print(type(html))
14     
15     pat = r'<tr align="center">(.*?)</tr>'
16     re_html = re.compile(pat, re.S) # re.S可以使匹配換行
17     trslist = re_html.findall(html) # 匹配出每條信息的數據
18     
19     x = []
20     y = []
21     for tr in trslist:
22         re_i = re.compile(r'<div align="center">(.*?)</div>', re.S)
23         i = re_i.findall(tr)
24         x.append(int(i[1].strip())) # 從每條數據中取出所需要的兩個數據年份和訴求數量
25         y.append(int(i[2].strip()) if i[2] != '' else 0) # 當匹配到空字元串時就是數據缺失部分,用0代替
26     print(x,y) # 查看結果發現第一組和第四組數據有誤,看源碼發現他們兩個的分類名不是使用的center標簽,為了簡便,手動添加這兩個數據
27     x[0] = 1946
28     y[0] = 41
29     x[3] = 1949
30     y[3] = 28
31     return x, y
32     
33 url = "http://www.presidency.ucsb.edu/data/sourequests.php"
34 x, y = crawler(url)

  得到的數據:

x:[41, 1947, 1948, 28, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 
1961, 1962, 1963, 1964,
1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975,
1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983,
1984, 1985, 1986, 1987, 1988, 1989, 1990,
1991, 1992, 1993, 1994, 1995, 1996, 1997]

y:[16, 23, 16, 17, 20, 11, 19, 14, 39, 32, 0, 14, 0, 16, 6, 25, 24, 18, 17, 38, 31, 27, 26,
17, 21, 20, 17, 23, 16,
13, 13, 21, 11, 13, 11, 8, 8, 14, 9, 7, 5, 5, 54, 34, 18, 20, 27,
30, 22, 25, 19, 26]

二、繪製圖形觀察趨勢

1 import numpy as np
2 import matplotlib.pyplot as plt
3 from matplotlib.pylab import frange
4 
5 plt.figure(1)
6 plt.title("All data")
7 plt.plot(x, y, 'ro')
8 plt.xlabel('year')
9 plt.ylabel('No Presedential Request')

  根據獲取到的數據繪製出散點圖,觀察其分佈情況,發現有一個極大的異常點,和兩個為零的異常點(獲取數據時的缺失值,預設填充為0).

三、計算百分位數

 1 # 使用numpy中的求分位數函數分別計算
 2 perc_25 = np.percentile(y, 25)
 3 perc_50 = np.percentile(y, 50)
 4 perc_75 = np.percentile(y, 75)
 5 print("25th Percentile = %.2f" % perc_25)
 6 print("50th Percentile = %.2f" % perc_50)
 7 print("75th Percentile = %.2f" % perc_75)
 8 
 9 '''
10 結果:
11 25th Percentile = 13.00
12 50th Percentile = 18.50
13 75th Percentile = 25.25
14 '''

  上面已經求得各分位數值,分別在圖中畫出來,為了在上面原始圖中畫出,要放在一起執行:

 1 # 在圖中畫出第25、50、75位的百分位水平線
 2 # ----------------------------------------
 3 plt.figure(1)
 4 plt.title("All data")
 5 plt.plot(x, y, 'ro')
 6 plt.xlabel('year')
 7 plt.ylabel('No Presedential Request')
 8 # ----------------------------------------
 9 plt.axhline(perc_25, label='25th perc', c='r')
10 plt.axhline(perc_50, label='50th perc', c='g')
11 plt.axhline(perc_75, label='75th perc', c='m')
12 plt.legend(loc='best')

四、檢查異常點

 1 # 檢查生成的圖形中是否有異常點,若有,使用mask函數將其刪除
 2 # 0是在起初獲取數據時候的缺失值的填充,根據圖像看到y=54的點遠遠高出其他,也按異常值處理
 3 y = np.array(y) # 起初發現y為0的點沒有被刪掉,考慮到他是對數組進行隱藏,而本來的y是個列表,因此又加了這一句,果然去掉了兩個零點
 4 y_masked = np.ma.masked_where(y==0, y)
 5 y_masked = np.ma.masked_where(y_masked==54, y_masked)
 6 print(type(y),type(y_masked))
 7 
 8 '''
 9 <class 'numpy.ndarray'> <class 'numpy.ma.core.MaskedArray'>
10 '''

重新繪製圖像:

 1 # 重新繪製圖像
 2 plt.figure(2)
 3 plt.title("Masked data")
 4 plt.plot(x, y_masked, 'ro')
 5 plt.xlabel('year')
 6 plt.ylabel('No Presedential Request')
 7 plt.ylim(0, 60)
 8 
 9 # 在圖中畫出第25、50、75位的百分位的水平線
10 plt.axhline(perc_25, label='25th perc', c='r')
11 plt.axhline(perc_50, label='50th perc', c='g')
12 plt.axhline(perc_75, label='75th perc', c='m')
13 plt.legend(loc='best')
14 plt.show()

 

  得到的最後的圖像,就是去除了0和54的三個異常點後的結果。

五、知識點

plot 

1 plt.close('all') # 關閉之前打開的所有圖形
2 plt.figure(1) # 給圖形編號,在繪製多個圖形的時候有用
3 plt.title('All data') # 設置標題
4 plt.plot(x, y, 'ro') # "ro" 表示使用紅色(r)的點(o)來繪圖

百分位數

  一組n個觀測值按數值大小排列。如,處於p%位置的值稱第p百分位數。p=50,等價於中位數;p=0,等價於最小值;p=100,等價於最大值。

plt.axhline()

  給定y的位置,從x的最小值一直畫到x的最大值
  label設置名稱
  c參數設置線條顏色
  eg:perc_25 = 13.00
    plt.axhline(perc_25, label='25th perc', c='r')

legend(loc) 

  plt.legend() 是將圖中一些標簽顯示出來
   loc參數讓pyplot決定最佳放置位置,以免影響讀圖

numpy-mask函數 

  刪除異常點
  y_masked = np.ma.masked_where(y==0, y)
  ma.masked_where函數接受兩個參數,他將數組中符合條件的點進行隱藏,而不需要刪除

 


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

-Advertisement-
Play Games
更多相關文章
  • 最近一個月,恍若隔世,天天加班,昨晚終於發版了,今天才喘一口氣。有時候,即便你工作效率再怎麼高,擼碼再怎麼快也無可避免的會加班。不信的話,可以先給你定一個交付時間,然後不斷的給你加需求,就讓你一個人做,偶爾再給你來幾下變更,看你怎麼死?本來做項目,需求、資源、時間就是一個鐵三角,一旦你強行要打破這個 ...
  • 我們在上一篇說到如何把 Vue 實例中的數據顯示到視圖中,就會需要用到我們的模版,我們只是簡單的使用了一些,模版其實還有很多其他的特性。今天我們就來看看模版的其他特性。 模版語法 Vue 中的模版是基於 HTML 的模版語法,所有的 Vue 模版都是合法的 HTML ,所以能被遵循規範的瀏覽器和 H ...
  • 實習生張大胖這是個代碼寫得很爛的電商系統,只要運行一段時間,伺服器就會出現Out Of Memory。別人都忙得四腳朝天,於是實習生張大胖被抓了壯丁去研究為什麼會出現OOM。剛入行的張大胖技術水平一般,“裝模作樣”地看代碼,研究日誌,請教老員工,一個星期過去了,還是一無所獲。周一例行的項目會議上, ...
  • HTTPS 站中的幾大難題 性能,包括: 其次,相容性及周邊,如: 如何解決 採用了統一接入層的架構,並配備管控平臺。這樣的設計解決了很多問題,比如證書分散且落地不安全、軟體版本難以維護、配置過多、難以標準和自動化、VIP 過多等; 以功能變數名稱收斂的方式減少建連; 採用 HSTS 技術去掉 80 到 4 ...
  • Python環境搭建首先到官網(www.python.org)下載相應的安裝版本。主要分為windows和Linux兩種: 一、windows環境 下載地址:https://www.python.org/downloads/windows/ 1、下載好版本後按照正常提示安裝。 2、設置環境變數 py ...
  • django下載Excel,使用django-excel插件 由於目前的資料多是使用pandas或xlwt庫實現的。其實沒有那麼的麻煩,因為django有相對應的插件django-excel。 該插件是依賴於pyexcel庫寫的。不過,不用專門安裝pyexcel庫,因為在安裝django-excel ...
  • 環境 一、websocket協議 1. 先建立連接 wss://broadcastlv.chat.bilibili.com/sub 2. 發送登錄包 { "uid": 0表示未登錄,否則為用戶ID, "roomid": 房間ID, "protover": 1, "platform": "web", ...
  • 下麵的程式會發生崩潰: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 include <stdio.h> include <iostream> using namespace std; int main(void) { int p; int i = ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...