python人口普查数据数据分析_利用人口普查的收入数据来选一个好学校!
作者:Sayon Bhattacharjee
我小時候經(jīng)常搬家。出于這個原因,我的父母一直在考慮居住在適合的社區(qū)。有幾個因素影響了這個決定,但對于為我上學而擔心的父母來說有一個主導因素:那是就找到一所好學校。
弗雷澤研究所是一家加拿大研究和教育機構,每年發(fā)布加拿大學校的評級。這些評級基于安大略省標準化評估(EQAO)的平均表現(xiàn)。
https://www.fraserinstitute.org
在這個數(shù)據(jù)科學項目中,我們將根據(jù)收入、地點、學校董事會,以及學校是小學還是中學來分析多倫多的學校表現(xiàn)數(shù)據(jù)。在此之后,我們將看看是否可以通過這些函數(shù)預測2017年給予學校的評級。
獲取學校評級數(shù)據(jù)
為了獲得安大略學校的評級,我們可以下載弗雷澤研究所發(fā)布的PDF,然后將相關頁面復制并粘貼到文本文件中,這樣我們就可以使用python逐行掃描。小學和中學以單獨的PDF格式提供,因此我們最終得到兩個文本文件,其中共有3810所學校:
http://ontario.compareschoolrankings.org/elementary/SchoolsByRankLocationName.aspx
第一行顯示學校名稱,學校所在的城市以及測試的學生人數(shù)。與我們最相關的最后一行顯示了10分的學校評分。
我們可以將此信息與多倫多數(shù)據(jù)目錄中的學校位置數(shù)據(jù)庫相關聯(lián)。數(shù)據(jù)庫為我們提供了以下信息:
學校名稱
學校董事會(天主教、公立或私立)
位置(地址、緯度、經(jīng)度和市政)
政府特定標識符
使用Python,我們可以編寫一個腳本來解析這個文本文件,提取評級并將這些評級作為列添加到多倫多學校數(shù)據(jù)庫中。這樣做只是將正則表達式應用于正確的行。
我們首先查看文件,找到有方括號的行(唯一帶方括號的行是帶有學校名稱和城市信息的行)。接下來,我們檢查城市是否在多倫多,如果是,就存儲學校的名稱。在代碼的第二部分,我們檢查單詞"Overall"(僅出現(xiàn)在最后一行)并提取評分。使用我們從文本文件中記錄的學校名稱,我們使用"NAME"列將其與多倫多學校數(shù)據(jù)庫進行匹配。由于小學和中學存儲在兩個文本文件中,我們也可以將其添加為一個函數(shù)。最后,我們添加5列代表每年的評級。
獲取收入數(shù)據(jù)
可以從CensusMapper的API輕松下載分類的人口普查數(shù)據(jù),告訴我們一個地區(qū)的家庭收入中位數(shù)。但是,人口普查位置數(shù)據(jù)按傳播區(qū)域(DA)排序。要將傳播區(qū)域(DA)轉換為地理位置,我們可以下載StatsCan提供的文件,該文件告訴我們加拿大每個傳播區(qū)域的中心緯度和經(jīng)度。
在將兩個文件與pandas合并并在多倫多收集傳播區(qū)域(DA)之后,我們現(xiàn)在有一個3676個傳播區(qū)域的表格,它們按緯度和經(jīng)度的位置以及它們的家庭收入中位數(shù)。
為了將收入信息與評級信息聯(lián)系起來,我們可以找到與每所學校距離最小的傳播區(qū)域(DA),并假設這是該社區(qū)的中位數(shù)收入。
為此,我們可以使用庫GeoPy(pip install geopy)來查找vincenty距離(球體表面上兩點之間的距離)。
將這些收入添加到學校位置數(shù)據(jù)框后,我們現(xiàn)在擁有完整的數(shù)據(jù)。
數(shù)據(jù)可視化
首先,我們可以使用庫gmplot(pip install gmplot)制作一個包含每所學校位置的散點圖。
該圖表顯示,多倫多中部和東北部的學校評級較高(較淺的點數(shù)較高)。通過查閱CensusMapper提供的收入熱圖,我們可以看到它可能存在相關性。 https://censusmapper.ca/maps/838?index=3#11/43.7193/-79.3797
讓我們來看看多倫多給出的評級分布。
數(shù)據(jù)大致呈正態(tài)分布,平均值為6.35,標準差為1.73。 由于我們有小學和中學數(shù)據(jù),讓我們看看兩種類型之間的區(qū)別。
在這里,我們看到小學通常被評為高于中學。
同樣,也可以繪制每個學校董事會的評級方框圖。
每個城市的評級似乎都相似,我們可以測試這種差異后來是否具有統(tǒng)計學意義。
為了正確地將學校評級設想為社區(qū)年薪中位數(shù)的函數(shù),我們應該將收入每2萬美元放入間隔中。
制作數(shù)據(jù)的方框圖:
該圖顯示,社區(qū)的收入中位數(shù)與離該社區(qū)最近的學校的評級之間存在某種相關性
統(tǒng)計學意義
即使我們在視覺上看到上面的方框圖中的差異,但這還不足以證明這種差異不僅僅是偶然的。我們必須證明這種差異具有統(tǒng)計意義。為了找到統(tǒng)計學顯著性,我們可以進行單向ANOVA。通過ANOVA,我們陳述了零假設,即來自類別的樣本來自具有相同均值的群體。例如,對于學校董事會專欄,我們假設μ_catholic=μ_public=μ_private。另一種假設是樣本來自具有不同手段的群體,因此受其所屬群體的影響。
每列的ANOVA給出的p值遠低于0.05,因此我們可以說這些差異具有統(tǒng)計學意義。我們拒絕每個列的零假設,即群體的群體具有相同的均值。
特征工程
我們可以使用回歸技術來查看是否可以使用我們創(chuàng)建的功能預測學校的評級。但是,在我們將特征放入模型之前,必須填充缺失值,并且所有特征必須是熱編碼的。為了處理缺失值,我們將所有缺失值替換為已收集的評級的平均值。我們應該確保不包括2017年的評級,因為這是我們試圖預測的價值。我們可以在循環(huán)前面的文本文件時填充缺失的值。
此函數(shù)采用5個等級的列表,并將所有'n / a'的等級轉換為np.nan,以便我們可以應用np.nanmean()來查找均值。然后我們檢查前4個評級是否缺失,如果它們是,那么我們返回缺少值的列表(我們將稍后刪除這些行,因為它們很少)。最后,我們找到2013-2016年之間的平均評級,并返回一個沒有缺失值的新評級列表。
對每個分類值進行熱編碼,我們可以使用pd.get_dummies()將每個分類值轉換為多個列。每列的值可能為0或1,具體取決于數(shù)據(jù)點是否屬于該類別的一部分。
具有重命名列的新數(shù)據(jù)框如下所示。
既然已經(jīng)填充了所有缺失值并且分類列是一個熱編碼的,現(xiàn)在讓我們繪制Pearson相關矩陣以找到我們應該使用的特征。
對相關矩陣進行排序,并且顏色對稱地繪制為0,因此我們可以看到0.19的相關性與-0.19一樣重要。正如所假設的那樣,每年的學校評級與其他年份的評級密切相關,而收入和私立學校的評級與評級有些相關。
預測
首先,我們必須建立指標來評估我們的模型是否有效。當我們測量回歸性能時,我們將使用平均絕對誤差和均方根誤差。為了衡量我們的機器學習模型是否值得付出努力,我們將創(chuàng)建一個基線。例如,如果我們每次都預測平均值,并且實現(xiàn)比任何機器學習模型更低的均方誤差/平均絕對誤差,那么我們的模型實際上將是無用的。如果我們每次只預測平均評分(6.35),這里有指標。
現(xiàn)在我們可以設置我們用來預測2017年給出的評級的模型!要查看2017年評級是否可以預測,如果沒有前幾年的信息,我們將使用學校類型、學校董事會、市政和收入功能。下面是隨機森林、梯度增強、線性回歸和支持向量機的設置代碼,其中省略了一個交叉驗證。
我們可以看到線性回歸良好,平均絕對誤差為1.22,均方根誤差為1.5255。這并不是糟糕的表現(xiàn),因為這意味著我們的預測平均在真實值的1.22點內(nèi),比我們每次預測平均值時的0.16點或12%更好。
為了獲得更多信息,讓我們看看前幾年的信息有哪些錯誤。
這次SVM和線性回歸效果最好,平均絕對誤差為0.72,比我們每次預測平均值時的0.76點或48%要好!
結論
在本文中,我們匯總了多倫多的數(shù)據(jù)目錄,StatsCan和Fraser Institute的數(shù)據(jù)。在將數(shù)據(jù)轉換為可用形式之后,它被用于可視化學校評級中的10分與各種特征(如學校董事會)和中位數(shù)社區(qū)收入之間的相關性。結果發(fā)現(xiàn)存在相關性,并且可以使用此信息預測學校的平均評分為±1.22分。
這些數(shù)據(jù)可以定性眾所周知的事實:貧困可以預測許多特征,而教育是非常重要的。
后續(xù)步驟可能涉及:
將其他城市納入數(shù)據(jù)
使用學校雇用的教師的信息
獲取收入以外的家庭人口統(tǒng)計數(shù)據(jù),了解它如何影響學校的表現(xiàn)
總結
以上是生活随笔為你收集整理的python人口普查数据数据分析_利用人口普查的收入数据来选一个好学校!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 培养自信,笑赢未来
- 下一篇: 关于javafx支持IOS、androi