使用开放数据、ArcGIS 和 Sklearn 测量洛杉矶的城市相似性
城市规划人员希望找到具有相似城市结构(街道网络、建筑结构、土地使用类型、人口密度)和人口统计数据(收入、文化、年龄)的地方。在本文中,我将介绍我为量化邻里相似性而确定的方法和决策,并展示数据科学方法如何为我们的城市提供有用的见解。
测量邻里
要识别社区之间的相似之处,我们必须定义社区。人们知道什么是社区,但难以找到一致的定义。对于这个项目,我借用了城市规划中经常使用的 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、种族和年龄方面极为相似。当我们检查输出时,我们可以看到,按照设计,该工具对收入和种族的权重大于结构特征。将来,权重很可能由用户决定。但总的来说,它在寻找相似邻域方面似乎做得很好!
相关文章:
使用开放数据、ArcGIS 和 Sklearn 测量洛杉矶的城市相似性
城市规划人员希望找到具有相似城市结构(街道网络、建筑结构、土地使用类型、人口密度)和人口统计数据(收入、文化、年龄)的地方。在本文中,我将介绍我为量化邻里相似性而确定的方法和决策,并展示数据科学方…...
线上虚拟展厅有哪些应用场景?
虚拟展厅利用数字技术和三维建模技术创建一个虚拟的展览环境,使参观者可以通过计算机、智能手机、平板电脑等设备远程参观展览。其应用场景十分广泛,具体来说包括以下几个方面: 艺术展览: 通过线上虚拟展厅,人们可以…...
[MySQL初阶]MySQL(5)内置函数详解
标题:[MySQL初阶]MySQL(5)内置函数详解 水墨不写bug 文章目录 一、日期函数1. current_date()2. current_time()3. current_timestamp()4. date(datetime)5. date_add(date, interval expr unit)6. date_sub(date, interval expr unit)7. dat…...
EasyDSS视频推拉流/直播点播平台:Mysql数据库接口报错502处理方法
视频推拉流/视频直播点播EasyDSS互联网直播平台支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访…...
Ruoyi+uniapp+websocket点对点和广播通知消息
前端参考文章:https://zhuanlan.zhihu.com/p/677296938 后端参考文章:ruoyi-vue websocket实现聊天功能_若依聊天系统-CSDN博客...
Linux常用命令(详细解析)
一、文件操作命令 1. ls - 列出目录内容 功能:列出指定目录中的文件和子目录。 常用选项: -l:以长格式显示文件信息,包括文件类型、权限、所有者、大小和修改日期。 -a:显示包括隐藏文件(以点开头的文件…...
Flask项目框架
文章目录 引言一、Flask基本概念定义特点 二、Flask项目结构简单项目结构中型项目结构复杂项目结构 三、Flask常用组件路由和视图函数模板引擎扩展 四、Flask特性蓝图(Blueprints)中间件异步视图 五、Flask项目示例六、总结与建议 引言 Flask是一个轻量…...
.NET 10首个预览版发布:重大改进与新特性概览!
前言 .NET 团队于2025年2月25日发布博文,宣布推出 .NET 10 首个预览版更新,重点改进.NET Runtime、SDK、Libraries 、C#、ASP.NET Core、Blazor 和.NET MAUI 等。 .NET 10介绍 .NET 10 是 .NET 9 的后继版本,将作为长期支持维护 ÿ…...
git-filter-repo 清除大文件教程
git filter-repo 是一个用于过滤和清理 Git 仓库历史的工具,它可以高效地批量修改提交历史中的文件内容、删除文件、重命名文件以及进行其他历史重构操作。相较于 git filter-branch,它通常更快且更易于使用。 以下是一个基本示例,说明如何使…...
【python】gunicorn配置
起因:因为cpu利用率低导致我去缩容,虽然缩容之后cpu利用率上升维持在60%左右,但是程序响应耗时增加了。 解释:因为cpu干这件活本身不累,但在干这件活的时候不能去干其他事情,导致并发的请求不能及时响应&am…...
基于WebAssembly的云原生运行时:重新定义轻量化微服务架构
引言:颠覆性的运行时革命 Fastly边缘计算平台每天处理2000亿次Wasm请求,冷启动时间低于1ms。字节跳动采用Wasm实现广告算法热更新,发布耗时从分钟级降至秒级。CNCF 2024调研显示Wasm在边缘计算场景渗透率达42%,单实例内存开销仅为…...
25年社工考试报名时间⏰附报名全流程✅
目前,湖北、重庆、云南、天津、山西、内蒙、四川、北京八地已发布考务通知。 1、湖北:3月11日9:00—3月26日20:00 2、重庆:3月13日9:00—3月24日17:00 3️⃣云南:3月10日09:00—3月20日17:00 4、天津:3月10日0:00至…...
鸿蒙全栈开发 D2
课程目标 掌握ArkTS基础语法与核心概念理解声明式UI开发范式能独立开发简单鸿蒙应用组件建立规范的代码编写习惯 第一部分:初识ArkTS 1.1 语言全景认知 #mermaid-svg-V5mnjQN3DAHkfoBo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size…...
下载PyCharm 2024.3.4 (Community Edition)来开发测试python
1、下载PyCharm 2024.3.4 (Community Edition) 如果你使用的是联想电脑,可以直接在联想应用商店里下载,这样比较省事。 如果你使用的不是联想电脑,当然也可能是别的应用商店里下载。 也可以直接在官网下载: 下载 PyCharm&…...
C#调用Ni板卡进行实现采集任务(模拟量输入输出)示例2
C#调用Ni板卡进行实现采集任务(模拟量输入输出)示例2 本文介绍如何使用C#控制Ni的USB-6008板卡进行模拟量输入、模拟量输出、输出量输入、数字量输出。本例通过新建一个类USB_6008的类进行功能封装:即把模拟量的读取以及模拟量的输出进行了封装。代码详见: https://download…...
01-二分-查找(洛谷)
链接: P2249 【深基13.例1】查找 - 洛谷 题目 思路 没啥好说的,就是二分的模板要熟练掌握;详细参考代码随想录 本道题要注意的就是不能直接套模板,因为有重复元素,所以要单独处理一下边界。 代码 #include<bi…...
linux发送邮件结合cron
Linux发送邮件结合cron定时任务 配置邮件发送(以QQ邮箱为例,其他同理) 一、获取qq邮箱授权码 登录qq邮箱 进行手机验证或者令牌啥的会获取到一个授权码 二、使用mailx发邮件 安装软件 yum -y install mailx编辑配置文件 vim /etc/mail…...
C语言基础2
一、变量的作用域 局部变量的作用域是变量所在的局部范围,全局变量的作用域是整个工程。 int main() { { int a 10; printf("a %d\n", a); } printf("a %d\n", a); //报错位置 return 0; } 这里会发生报错: “a”: 未声明的…...
Linux系统上安装kafka
目录 1. 安装Java环境 2. 下载和解压Kafka 3. 配置Kafka 4. 启动ZooKeeper和Kafka 5. 测试Kafka 6. 停止服务 7.常见问题 1. 安装Java环境 Kafka依赖Java运行环境(JDK 8或更高版本): # 安装OpenJDK(推荐) yum…...
09 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(三)
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 文章目录 Tag组件实战应用与最佳实践1. 复杂场景应用1.1 标签筛选系统 2. 性能优化实践2.1 状态管理优化2.2 渲染性能优化 3. 实用功能扩展3.1 拖拽…...
【每日学点HarmonyOS Next知识】网页Scheme拉起应用、列表刷新、Web下载文件、根据子元素
1、HarmonyOS 目前 app 中是否支持网页Scheme拉起应用? 支持deeplink的,网页中添加按钮引导用户拉起应用。网页端直接提示打开应用按钮绑定点击事件window.open(tzptest://www.xxxxx.com?urlXXX)>,点击该按钮,打开网页web端收到的url为t…...
如何排查MySQL是否走索引
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
AF3 curry1函数解读
AlphaFold3 data_transforms 模块的 curry1 函数实现了一个经典的柯里化 (currying) 技术,具体是固定函数 f 的所有参数,除了第一个参数。换句话说,curry1 允许你在调用函数时,先提供除了第一个参数之外的所有参数,然后返回一个新的函数,这个新函数只等待第一个参数。 …...
摄像头应用编程(三):多平面视频采集
文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时,大致可以分为两类:Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture Multi…...
【GoTeams】-2:项目基础搭建(下)
本文目录 1. 回顾2. Zap日志3. 配置4. 引入gprc梳理gRPC思路优雅关闭gRPC 1. 回顾 上篇文章我们进行了路由搭建,引入了redis,现在来看看对应的效果。 首先先把前端跑起来,然后点击注册获取验证码。 再看看控制台输出和redis是否已经有记录&…...
02-双指针-A-B 数对
题目 链接:P1102 A-B 数对 - 洛谷 思路 问题场景想象 我们可以把这个问题想象成在一个排队的队伍里找符合特定身高差的人对。给定的数列里的每个数就好比队伍里每个人的身高,而差值 C 就是我们要找的身高差。我们的目标是找出队伍里所有身高差恰好是 …...
2025年Cursor最新安装使用教程
Cursor安装教程 一、Cursor下载二、Cursor安装三、Cursor编辑器快捷键(1) 基础编辑快捷键(2) 导航快捷键(3) 其他常用快捷键 一、Cursor下载 Cursor官方网站(https://www.cursor.com/ ) 根据自己电脑操作系统选择对应安装包 二、Cursor安装 下载完成后…...
Modbus TCP/IP 与 RS-485 接口的兼容性
Modbus TCP/IP 和 RS-485 接口的 直接兼容性 不存在,因为两者分属不同的网络层次(TCP/IP 基于以太网,RS-485 是物理层接口),但通过 协议转换和网络架构设计 可以实现互联互通。以下是详细的技术解析与实现方案: 一、协议差异对比 特性Modbus TCP/IPModbus RTU(RS-485)物…...
快速部署:在虚拟机上安装 CentOS 7 的详细步骤
CentOS是一个开源的基于Red Hat Enterprise Linux (RHEL) 的Linux发行版,它的主要目的是提供一个与RHEL相似的操作系统但不包含RHEL的商业支持和服务,完全免费。主要面向那些希望在企业环境中使用稳定、可靠的Linux系统但又不想支付RHEL许可证费用的用户…...
better-sqlite3之exec方法
在 better-sqlite3 中,.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比,这种方法性能较差且安全性较低,但有时它是必要的,特别是当你需要从外部文件(如 SQL 脚本)中执行多个 SQL 语句时。…...
