利用人口普查的收入資料來選一個好學校!
作者:Sayon Bhattacharjee
我小時候經常搬家。出於這個原因,我的父母一直在考慮居住在適合的社群。有幾個因素影響了這個決定,但對於為我上學而擔心的父母來說有一個主導因素:那是就找到一所好學校。
弗雷澤研究所是一家加拿大研究和教育機構,每年釋出加拿大學校的評級。這些評級基於安大略省標準化評估(EQAO)的平均表現。
https://www.fraserinstitute.org
在這個資料科學專案中,我們將根據收入、地點、學校董事會,以及學校是小學還是中學來分析多倫多的學校表現資料。在此之後,我們將看看是否可以通過這些函式預測2017年給予學校的評級。
獲取學校評級資料
為了獲得安大略學校的評級,我們可以下載弗雷澤研究所釋出的PDF,然後將相關頁面複製並貼上到文字檔案中,這樣我們就可以使用python逐行掃描。小學和中學以單獨的PDF格式提供,因此我們最終得到兩個文字檔案,其中共有3810所學校:
http://ontario.compareschoolrankings.org/elementary/SchoolsByRankLocationName.aspx
第一行顯示學校名稱,學校所在的城市以及測試的學生人數。與我們最相關的最後一行顯示了10分的學校評分。
我們可以將此資訊與多倫多資料目錄中的學校位置資料庫相關聯。資料庫為我們提供了以下資訊:
-
學校名稱
-
學校董事會(天主教、公立或私立)
-
位置(地址、緯度、經度和市政)
-
政府特定識別符號
使用Python,我們可以編寫一個指令碼來解析這個文字檔案,提取評級並將這些評級作為列新增到多倫多學校資料庫中。這樣做只是將正規表示式應用於正確的行。
我們首先檢視檔案,找到有方括號的行(唯一帶方括號的行是帶有學校名稱和城市資訊的行)。接下來,我們檢查城市是否在多倫多,如果是,就儲存學校的名稱。在程式碼的第二部分,我們檢查單詞"Overall"(僅出現在最後一行)並提取評分。使用我們從文字檔案中記錄的學校名稱,我們使用"NAME"列將其與多倫多學校資料庫進行匹配。由於小學和中學儲存在兩個文字檔案中,我們也可以將其新增為一個函式。最後,我們新增5列代表每年的評級。
獲取收入資料
可以從CensusMapper的API輕鬆下載分類的人口普查資料,告訴我們一個地區的家庭收入中位數。但是,人口普查位置資料按傳播區域(DA)排序。要將傳播區域(DA)轉換為地理位置,我們可以下載StatsCan提供的檔案,該檔案告訴我們加拿大每個傳播區域的中心緯度和經度。
在將兩個檔案與pandas合併並在多倫多收集傳播區域(DA)之後,我們現在有一個3676個傳播區域的表格,它們按緯度和經度的位置以及它們的家庭收入中位數。
為了將收入資訊與評級資訊聯絡起來,我們可以找到與每所學校距離最小的傳播區域(DA),並假設這是該社群的中位數收入。
為此,我們可以使用庫GeoPy(pip install geopy)來查詢vincenty距離(球體表面上兩點之間的距離)。
將這些收入新增到學校位置資料框後,我們現在擁有完整的資料。
資料視覺化
首先,我們可以使用庫gmplot(pip install gmplot)製作一個包含每所學校位置的散點圖。
該圖表顯示,多倫多中部和東北部的學校評級較高(較淺的點數較高)。通過查閱CensusMapper提供的收入熱圖,我們可以看到它可能存在相關性。 https://censusmapper.ca/maps/838?index=3#11/43.7193/-79.3797
讓我們來看看多倫多給出的評級分佈。
資料大致呈正態分佈,平均值為6.35,標準差為1.73。 由於我們有小學和中學資料,讓我們看看兩種型別之間的區別。
在這裡,我們看到小學通常被評為高於中學。
同樣,也可以繪製每個學校董事會的評級方框圖。
每個城市的評級似乎都相似,我們可以測試這種差異後來是否具有統計學意義。
為了正確地將學校評級設想為社群年薪中位數的函式,我們應該將收入每2萬美元放入間隔中。
製作資料的方框圖:
該圖顯示,社群的收入中位數與離該社群最近的學校的評級之間存在某種相關性
統計學意義
即使我們在視覺上看到上面的方框圖中的差異,但這還不足以證明這種差異不僅僅是偶然的。我們必須證明這種差異具有統計意義。為了找到統計學顯著性,我們可以進行單向ANOVA。通過ANOVA,我們陳述了零假設,即來自類別的樣本來自具有相同均值的群體。例如,對於學校董事會專欄,我們假設μ_catholic=μ_public=μ_private。另一種假設是樣本來自具有不同手段的群體,因此受其所屬群體的影響。
每列的ANOVA給出的p值遠低於0.05,因此我們可以說這些差異具有統計學意義。我們拒絕每個列的零假設,即群體的群體具有相同的均值。
特徵工程
我們可以使用迴歸技術來檢視是否可以使用我們建立的功能預測學校的評級。但是,在我們將特徵放入模型之前,必須填充缺失值,並且所有特徵必須是熱編碼的。為了處理缺失值,我們將所有缺失值替換為已收集的評級的平均值。我們應該確保不包括2017年的評級,因為這是我們試圖預測的價值。我們可以在迴圈前面的文字檔案時填充缺失的值。
此函式採用5個等級的列表,並將所有'n / a'的等級轉換為np.nan,以便我們可以應用np.nanmean()來查詢均值。然後我們檢查前4個評級是否缺失,如果它們是,那麼我們返回缺少值的列表(我們將稍後刪除這些行,因為它們很少)。最後,我們找到2013-2016年之間的平均評級,並返回一個沒有缺失值的新評級列表。
對每個分類值進行熱編碼,我們可以使用pd.get_dummies()將每個分類值轉換為多個列。每列的值可能為0或1,具體取決於資料點是否屬於該類別的一部分。
具有重新命名列的新資料框如下所示。
既然已經填充了所有缺失值並且分類列是一個熱編碼的,現在讓我們繪製Pearson相關矩陣以找到我們應該使用的特徵。
對相關矩陣進行排序,並且顏色對稱地繪製為0,因此我們可以看到0.19的相關性與-0.19一樣重要。正如所假設的那樣,每年的學校評級與其他年份的評級密切相關,而收入和私立學校的評級與評級有些相關。
預測
首先,我們必須建立指標來評估我們的模型是否有效。當我們測量回歸效能時,我們將使用平均絕對誤差和均方根誤差。為了衡量我們的機器學習模型是否值得付出努力,我們將建立一個基線。例如,如果我們每次都預測平均值,並且實現比任何機器學習模型更低的均方誤差/平均絕對誤差,那麼我們的模型實際上將是無用的。如果我們每次只預測平均評分(6.35),這裡有指標。
現在我們可以設定我們用來預測2017年給出的評級的模型!要檢視2017年評級是否可以預測,如果沒有前幾年的資訊,我們將使用學校型別、學校董事會、市政和收入功能。下面是隨機森林、梯度增強、線性迴歸和支援向量機的設定程式碼,其中省略了一個交叉驗證。
我們可以看到線性迴歸良好,平均絕對誤差為1.22,均方根誤差為1.5255。這並不是糟糕的表現,因為這意味著我們的預測平均在真實值的1.22點內,比我們每次預測平均值時的0.16點或12%更好。
為了獲得更多資訊,讓我們看看前幾年的資訊有哪些錯誤。
這次SVM和線性迴歸效果最好,平均絕對誤差為0.72,比我們每次預測平均值時的0.76點或48%要好!
結論
在本文中,我們彙總了多倫多的資料目錄,StatsCan和Fraser Institute的資料。在將資料轉換為可用形式之後,它被用於視覺化學校評級中的10分與各種特徵(如學校董事會)和中位數社群收入之間的相關性。結果發現存在相關性,並且可以使用此資訊預測學校的平均評分為±1.22分。
這些資料可以定性眾所周知的事實:貧困可以預測許多特徵,而教育是非常重要的。
後續步驟可能涉及:
-
將其他城市納入資料
-
使用學校僱用的教師的資訊
-
獲取收入以外的家庭人口統計資料,瞭解它如何影響學校的表現
來自 “ Medium ”,原文連結:http://blog.itpub.net/31545819/viewspace-2217084/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 轉行學IT,Java、Python、大資料選擇學哪個發展好?JavaPython大資料
- 當查詢的資料來自多個資料來源,有哪些好的分頁策略?
- 送你一個Python 資料排序的好方法Python排序
- 怎樣設計一個好的資料庫資料庫
- 利用ConcurrentHashMap來實現一個ConcurrentHashSetHashMap
- 求全國中小學學校資料庫資料庫
- 學習Java是個好選擇嗎?Java
- 學習Java哪個好?選擇哪個版本Java
- 好未來集團 學而思網校 基礎架構部資料組招聘 PHP 高階工程師架構PHP工程師
- 一個篩選mongo存在某個欄位的資料的技巧Go
- 好未來 2021校招 測開崗
- 一個好的大資料分析軟體包含哪些功能大資料
- 一個學習Python的好連結Python
- 我們怎樣才能學好資料分析(一)
- laravel中ajax 非同步載入資料,選擇對應的學校對應的專業Laravel非同步
- 1個好方案,幫你實現複雜資料來源中小區資訊的準確歸一化
- 美國人口普查局:2020年人口普查資料 白人比例不足60%
- 學好資料結構的秘訣資料結構
- 華瑞IT學校:IT行業薪資穩居第一,現在學還來得及!行業
- 使用記憶體NewSQL資料平臺來處理實時資料流的三個好處記憶體SQL
- 學會利用時代所帶來的物資去幫助企業/個人牟利
- 五星好評--cookie儲存上一次點選的資料Cookie
- 如何利用員工個人資料監控來彌補安全漏洞
- 妙用設計模式來設計一個校驗器設計模式
- 利用Flutter寫一個跨平臺的果核APP(4)——資料儲存FlutterAPP
- 【Database】可選的資料來源配置項Database
- 一起來學大資料——走進Linux之門,學習大資料的重中之重大資料Linux
- 你可能不會 Provider,來一起學一學吧!(分享一個不錯的狀態資料組織方式)IDE
- 如果能重來,我選擇這樣學習資料科學……資料科學
- MySQL手動資料校驗+雲資料庫資料校驗MySql資料庫
- 利用transform實現一個純CSS彈出選單ORMCSS
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 【轉】一個小工具類,利用shareObject把資料快取Object快取
- 資料校驗
- 華瑞IT學校:選擇IT行業的優勢行業
- 記錄一個利用資料庫引擎格式化異常sql的思路資料庫SQL
- 大資料開發好還是大資料分析好?哪個薪資高?大資料
- 利用Jackson的JsonFilter來實現動態過濾資料列(資料列權JSONFilter