城市规划人员希望找到具有相似城市结构(街道网络、建筑结构、土地使用类型、人口密度)和人口统计数据(收入、文化、年龄)的地方。在本文中,我将介绍我为量化邻里相似性而确定的方法和决策,并展示数据科学方法如何为我们的城市提供有用的见解。
测量邻里
要识别社区之间的相似之处,我们必须定义社区。人们知道什么是社区,但难以找到一致的定义。对于这个项目,我借用了城市规划中经常使用的 10 分钟步行/1/2 英里半径,并创建了一个 1/2 SQMI 网格作为我的社区单位。它有些粗糙,但足够精细,可以得出一些有用的见解。
下一个要回答的问题是:两个社区应该具备哪些相似特征才算相似?我们是否关心两个地方是否有类似类型的餐馆?我们是否关心街道的布局,例如,是否是网格状?一个地方的政治情况如何?或者其他什么?在这种情况下,城市结构和人口统计是最重要的衡量特征。如果某个地方的结构和人口相似,那么它就足够相似,可以作为高质量的先例。如果你正在寻找房地产的相似性,例如,确定某人可能想买房的地方,那么重要的特征可能会有所不同。也许你会关心学校质量或公园空间。我不知道,如果你从事房地产工作,请告诉我!
在决定重点关注结构和人口统计学的相似性后,我开始收集所需的数据。为了保持工作量可控并避免潜在的数据不一致,我的工具只关注洛杉矶县。它是美国人口最多的县,拥有非常丰富的开放 GIS 数据目录;这是一个很好的起点。
城市结构数据
根据我在城市规划方面的经验,我选择了四个与城市结构相关的特征:人口密度、交叉口密度、地块密度和商业用地密度。如果这些特征中的任何一个存在显著差异,那么各个地方在结构上可能会感觉不同。人口密度与城市或乡村特征相关,交叉口密度与主动交通与汽车交通优先性相关,地块密度与城市规模相关,商业密度与当地功能相关。
为了设计结构特征,我将洛杉矶县 Geohub 中的人口普查和开放城市数据提取到 ArcGIS 中。人口密度是使用 ESRI 的丰富工具根据 2018 年美国社区调查 (ACS) 中的人口估计值得出的,地块密度是根据洛杉矶县税务评估员地块数据集创建的,交叉口密度是从洛杉矶县全县地址管理系统 (CAMS) 街道数据集中得出的,商业用地密度是从评估员地块数据集的一个子集中提取的。所有特征都在 1/2 SQMI 网格上进行了分析。
洛杉矶县半英里网格上的人口密度
人口统计数据
为了评估社区之间的人口相似性,我确定了四个特征,我认为这些特征可以体现社区之间的文化和体验相似性:家庭收入中位数 (MHHI)、平均年龄、当地人口中白人的百分比以及当地人口中西班牙裔的百分比。收入显著影响社区的行为方式;因此,控制 MHHI 对找到具有相似行为的社区非常重要。与 MHHI 一样,年龄可以决定社区的感觉;一个有很多 20 岁年轻人的社区与一个充满家庭或退休人员的社区感觉非常不同。最后,种族会影响社区的行为和文化。我包括了两个种族特征,因为社区文化受到不同人口规模以及每个人对社区的控制的影响。一个白人很多、少数族裔很少的社区与文化分布均衡的社区感觉不同,这两个社区与少数族裔占多数的社区感觉不同。这是一种非常复杂的关系,很难从数据中完全提炼出来,但对于社区相似性来说,它足够重要,值得纳入其中。
所有人口统计特征均从 ArcGIS 中的 ESRI 丰富工具中提取,并汇总到 1/2 SQMI 网格中。
洛杉矶县 1/2 平方英里网格上的平均年龄
量化相似性
既然已经为洛杉矶县网格中的每个 1/2 SQMI 社区选择并得出了结构和人口统计特征,现在是时候讨论如何量化相似性了。大体上,数据科学中有两种常用方法来理解样本之间的相似性:聚类算法可以智能地识别数据集中相似样本的组,以及量化样本之间多维距离的距离测量。如果我们想根据相似性对社区进行分组,那么聚类是最好的选择,而如果我们想要量化任何两个社区的相似性或不相似性,那么距离测量会更好。两者都有各自的优点,但对于我朋友的情况,我们想要找到 N 个最相似的社区,距离测量会更有效。
测量基于距离的相似度有两种常用方法:欧几里得距离和余弦距离。您可能在几何课上见过欧几里得距离。使用勾股定理,您可以测量点 A 到点 B 的距离;我们可以将同一概念扩展到多个维度。余弦距离是另一种数学方法。当特征的大小可能不重要时,它最有效。在我们的例子中,大小可能非常重要。MHHI 为 120,000 美元的社区与 MHHI 为 50,000 美元的社区非常不同,大小很重要。考虑到这一点,我们将使用欧几里得距离来测量相似度。
针对具有 k 个特征的数据的简化多维欧几里得距离公式。
构建工具
现在我们已经设计了我们的特征并确定了量化样本相似性的方法,我们可以开始构建工具本身了!为简单起见,我在 Jupyter Notebook 中构建了该工具,但我打算将来将其移到交互式 Dash/Plotly Web 应用程序中。
该工具的工作原理如下:
- 用户选择一个 1/2 SQMI 社区,并将其与其他社区进行比较,以便找到相似的社区。
- 该工具以列表和地图形式查找洛杉矶县内 N 个类似的 1/2 SQMI 街区。
首先,让我们看一下我们的数据和特征,以了解我们正在处理的内容。我将数据加载为 geopandas 数据框,然后为每个特征生成分布直方图。
四个结构特征的样本分布
看看我们的城市形态结构特征,我们可以立即发现,我们所有的结构数据都向右倾斜。这意味着小值比大值多得多。有趣的是,这往往适用于几乎所有的城市特征,也是城市唯一不变的规律之一。有关此现象的更多信息,请查看 Zipf 定律和 Geoffrey West 的书《Scale》。
四个人口统计特征的样本分布
查看我们的人口统计特征,我们注意到 MHHI 和年龄比结构特征更符合正态分布。这是有道理的,因为我们处理的是有关人类的数据,在生物学中,我们期望找到正态分布。然而,种族特征表现出我们在结构特征中观察到的一些偏斜,这可能表明种族分布具有结构性方面。所有特征都具有大量零实例。这可以通过没有常规人口的邻里区域来解释。洛杉矶县有几个社区是专门的工业区,如弗农和商业城,可能占零实例的一部分,而该县最北部的低密度地区可能占更多。我们将将它们保留在数据集中,尽管它们看起来像异常值,因为它们代表了真实的地面条件,并且此分析不需要正态性。
缩放和加权
在计算相似度之前,我们需要缩放数据。由于我们计划使用欧几里得距离来量化相似度,因此我们需要注意特征之间的尺度差异。让我们使用 pandas describe 方法快速了解我们的数据集在尺度上的差异。
通过检查每个特征的描述性统计数据,我们可以看到每个特征的范围彼此之间差异很大。这在使用欧几里得距离时会遇到问题,因为该公式假设所有维度的单位一致。为了说明这一点,我们假设我们只寻找具有人口密度和年龄值的 2D 点之间的相似性。样本 1 的人口密度为 7000,年龄为 60 岁,样本 2 的人口密度为 7500,年龄为 36 岁。使用前面描述的公式,欧几里得距离为 500.57。您会注意到,如果我们完全忽略年龄,我们会发现距离为 500。这两个数据如此相似的原因在于,尽管我们知道平均年龄为 60 岁的地方与平均年龄为 36 岁的地方会有很大不同,但人口密度特征的规模要大得多。它完全消除了年龄方面的重要差异。因此,我们必须缩放数据,以便所有维度都具有一致的单位。我们将使用 SKLearn Standard Scaler 方法来执行此操作。
您会注意到,我还为 MHHI 和种族添加了权重输入。这是因为,一旦您缩放了数据,您就可以控制每个变量对分析的影响。缩放后,每个特征对相似性的影响将与其他所有特征相同。这可能是您想要的,但有时,就像在我们的案例中一样,您需要确保重点考虑一些特征。在这种情况下,我觉得 MHHI 和种族在邻里行为方面的差异可能会压倒其他特征中存在的相似性。例如,两个商业和人口密度相似的地方只有在种族和 MHHI 也相似的情况下才会表现相似,如果它们在结构上相似,但种族和收入不同,我不会指望它们表现得那么相似。因此,为了解释这一点,我们可以选择将收入和种族的权重高于其他变量。目前,我赋予它们 5X 权重,这意味着其中一个单位的变化只能被未加权变量的至少五个单位的变化所抵消。
使用 lambda 表达式为缩放后的数据添加权重
计算相似性
一旦我们的输入被缩放和加权,我们就可以计算欧几里得距离相似度。首先,我们必须选择我们希望找到相似邻域的输入邻域。由于这是在 Jupyter Notebook 中构建的,我只需将感兴趣的邻域作为引用数据中选定邻域的对象 ID。
输入OID进行分析
然后,我们计算指定邻域与数据集中所有其他 1/2 SQMI 邻域之间的欧几里得距离。为此,我们使用 SKLearn paired_distances 方法。
编写代码来找出 100 个最相似的街区。
上述代码返回与所选街区最相似的 100 个街区。有了这些数据,我们只需几行代码就可以使用 geopandas 将它们绘制在地图上。
与选定社区最相似的 100 个区域的地图
在地图上,您可以快速查看与所选街区最相似的区域。您可以通过查看返回的数据框进一步查询结果。
查看相似性数据框,我们可以看到欧几里得距离相似性的效果如何。在图像的顶部,您可以看到我们输入邻域的特征值,下面是前 10 个最相似的邻域。第一个是选定的邻域,因此应该忽略它。但从第二个开始,我们可以看到我们的相似性数量"sim"如何与我们的结构和人口统计特征的相似性保持一致。最相似的邻域,欧几里得距离相似性为 2.68,OID:3228,密度稍低,但交叉密度相当相似,并且在 MHHI、种族和年龄方面极为相似。当我们检查输出时,我们可以看到,按照设计,该工具对收入和种族的权重大于结构特征。将来,权重很可能由用户决定。但总的来说,它在寻找相似邻域方面似乎做得很好!