作者: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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31545819/viewspace-2217084/