关于 NobodyNamed
NobodyNamed 展示基于美国社会保障局(SSA)记录的婴儿姓名流行度数据,涵盖 1880 年以来的趋势。它面向希望探索姓名变化的人,也提供下载、汇总和分析数据的 Node.js 脚本。
主要功能
- 01按姓名查看年度人数和占比
- 02按年份及频率筛选姓名
- 03计算峰值、局部峰值和标准化值
- 04导出 JSON、CSV 等格式
- 05分析姓名首音素的年度占比
适用场景
- 01追踪某个姓名的流行度变化
- 02按年份或出现频次缩小数据集
- 03将姓名数据导出供其他分析使用
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://nobodynamed.com/mcpclaude mcp add --transport http michaelcolenso-nobodynamed https://nobodynamed.com/mcp{"mcpServers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}在 Cursor 中打开{"servers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"michaelcolenso-nobodynamed":{"type":"http","url":"https://nobodynamed.com/mcp"}}}{"mcpServers":{"michaelcolenso-nobodynamed":{"serverUrl":"https://nobodynamed.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
12| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 是 | 要搜索的名称前缀(例如 "Jen"、"The") |
详细介绍
nobodynamed
你的名字正逐渐消失吗?nobodynamed 基于美国社会保障局的数据,展示自 1880 年以来任何美国名字的流行度、趋势和存续状态。
技术栈
| 层 | 服务 |
|---|---|
| 前端 + API | Cloudflare Pages + Pages Functions |
| 数据库 | Cloudflare D1(SQLite) |
| 年度数据刷新 | Cloudflare Worker(Cron Trigger + Queues) |
| 归档存储 | Cloudflare R2 |
仓库结构
apps/
web/ Cloudflare Pages: static HTML/CSS/JS + Functions
public/ Served as static assets
functions/ Pages Functions (API routes + SSR /name/:name)
ingest-worker/ Cron-triggered Worker: SSA download → D1
packages/
shared/ Types, classification logic, HTML renderer — shared by all packages
migrations/ D1 SQL migrations (applied via wrangler d1 migrations apply)
scripts/
seed-from-shards.ts One-shot initial D1 seeding from legacy JSON shards
verify-parity.ts Pre-cutover parity checks vs legacy data
viz/ Legacy static site (GitHub Pages) — kept until DNS cutover
首次设置
1. 配置 Cloudflare 资源
# D1 database
wrangler d1 create name-vitals
# Copy the database_id into both wrangler.toml files:
# apps/web/wrangler.toml
# apps/ingest-worker/wrangler.toml
# Queue (fan-out ingest)
wrangler queues create name-ingest
wrangler queues create name-ingest-dlq
# R2 bucket (SSA zip cache)
wrangler r2 bucket create name-vitals-ingest
2. 应用架构
wrangler d1 migrations apply name-vitals --remote
3. 填充初始数据
读取现有的 viz/name-vitals/data/ JSON 分片并填充到 D1,无需从 SSA 拉取数据:
npm run seed
# Apply each generated SQL file:
ls migrations/seed/*.sql | sort | xargs -I{} wrangler d1 execute name-vitals --file={} --remote
4. 部署
npm run deploy:web # deploy Cloudflare Pages
npm run deploy:ingest # deploy the cron Worker
5. 验证一致性
tsx scripts/verify-parity.ts --base=https://<preview>.pages.dev
本地开发
# Pages + Functions with local D1
npm run dev:web
# Trigger the ingest cron locally
npm run dev:ingest # starts wrangler dev
# then: curl http://localhost:8787/run
数据刷新
数据导入 Worker 每周运行一次(由 ETag 控制;如果 SSA zip 未变化,则立即退出)。SSA 每年发布一次新数据,通常在 5 月。手动触发:
wrangler dev --test-scheduled # local
# or POST to the /run endpoint of the deployed Worker
GitHub Actions 密钥
CI/CD 工作流 .github/workflows/ 所需:
| 密钥 | 值 |
|---|---|
CLOUDFLARE_API_TOKEN | 具有 Workers、Pages 和 D1 写入权限的令牌 |
CLOUDFLARE_ACCOUNT_ID | 你的 Cloudflare 账户 ID |
从 GitHub Pages 切换 DNS
在 Pages 预览 URL 上验证一致性后:
- 在 Cloudflare 控制面板中为 Pages 项目添加自定义域名。
- 将 DNS CNAME 从 GitHub Pages 地址切换到 Cloudflare Pages CNAME。
- 在旧 GitHub Pages 的
index.html中添加 301 重定向,将/babynames/viz/name-vitals/*重定向到新主机。 - 监控至少 1 周后,删除
viz/、dicts/、extra/以及任何剩余的旧文件。
许可证
源数据采用 CC0 许可(美国社会保障局)。代码采用 MIT 许可。
##设置
这是一个 Node.js 脚本,因此建议你在尝试运行之前下载 Node。
下载仓库只需克隆即可:
git clone https://github.com/TimeMagazine/babynames.git
cd babynames
然后安装依赖:
npm install
##数据
首先,你需要从美国社会保障局获取原始数据。运行以下命令即可由此脚本为你下载并解压数据:
./index.js download
###每年出生的婴儿总数
此外,还有一个名为 extra/totals.json 的文件,其中包含每年出生的婴儿总数(或者至少是获得 SSN 的婴儿),数据来自 SSA。此数据很有用,因为总数高于姓名文件中各姓名数量的总和;姓名文件不包含出现次数少于 5 次的姓名。
如果你想重新下载数据——也许是新的一年,或者你怀疑数据已修订——只需运行 ./scripts/total_births.js,它会抓取 SSA 网站上的页面并覆盖仓库中的文件。
###婴儿姓名
美国社会保障局以不太方便的方式整理婴儿姓名数据:按年份划分为名为 yob[year].txt 的文本文件。上述命令会将这些文件提取到名为 data/ 的本地目录,然后删除下载的 zip 文件。如果你想保留该 zip 文件,只需在命令中添加 --cache。
完成后,你可以按姓名汇总数据,并以多种格式存储:
./index.js store --format=json
首先,脚本会读取每个文件,并按名称将数据存储在内存中。对于每个名称,它会记录某一年中该名称对应的婴儿人数,以及该名称在同一性别所有婴儿中的占比。计算时的分母是 SSA.gov 报告的按性别划分的婴儿总人数,而不是计算得出的所有婴儿姓名频次之和(由于数据只统计出现至少 5 次的姓名,这个总和会低于美国实际出生的儿童人数)。年份作为对象中的键存储,以便快速检索:
{
"_id": "Lothar-M",
"name": "Lothar",
"gender": "M",
"values": {
"1927": 7,
"1928": 6,
"1929": 10,
"1931": 6,
"1932": 8,
"1935": 8,
"1956": 7,
"1959": 5,
"1964": 6,
"1968": 5
},
"percents": {
"1927": 0.0000062135232896167586,
"1928": 0.000005418551494752584,
"1929": 0.000009301278646775573,
"1931": 0.000005775539435383265,
"1932": 0.000007664935030094451,
"1935": 0.00000768623999707923,
"1956": 0.0000033120134297413128,
"1959": 0.0000023436460007087187,
"1964": 0.000003010349581862443,
"1968": 0.0000028754074452349896
}
}
###格式
可选项如下:
json:每个名称单独存储为一个 JSON 文件,位于/flat/individual/目录中。jsonp:每个名称单独存储为一个 JSON-P 文件,位于/flat/individual/目录中。默认情况下,文件会封装在名为ticallback的回调函数中,你可以使用opts.callback覆盖它。csvs:每个名称单独存储为一个 CSV 文件,位于/flat/individual/目录中。csv:将所有名称打包到一个 CSV 文件中,并存储在/flat/names.csv/。如果不包含限制规格(见下文),该文件会有 30MB。这个预处理文件已包含在此仓库中。mongodb:将所有名称插入 MongoDB 实例。你需要自行在localhost:27017运行 Mongo 服务器,或更新源代码以指向你的实例。*注意:*此选项是可选的,因此 mongodb Node 模块未列为依赖项,你需要自行安装。
##缩减数据量 截至 2013 年,有 102,691 个名称在至少一年中出现过至少 5 次。许多用户并不需要这么大量的数据。你可以通过命令行选项以多种方式缩小范围。
###限制年份
start:不获取早于此年份的数据。例如:--start=1950。默认值为1880,即数据中的第一年。end:不获取晚于此年份的数据。例如:--end=2000。默认值为当前年份。
###排除不常见的名称
min:不包含在至少一年中出现次数未达到此数量的名称。例如:--min=25。默认值为0。cutoff:不包含出现年份少于此数量的名称。例如:--cutoff=50。默认值为0。
##分析
脚本提供了多个用于基础分析的选项:
normalize:为每个名称添加第三个属性,表示百分比数值的归一化值,使峰值百分比对应的年份为 1。peaks:查找原始数值和百分比各自的峰值及对应年份。maxima:识别所有局部最大值——即前后各 5 年的所有数值都更低的点。仅统计至少达到峰值 25% 的最大值。pronunications:检查该名称是否列在 CMU Pronouncing Dictionary 中。需要手动运行npm install cmudict。dense:如果某个名称在start和end指定的范围内某一年没有出现,则在数据中将该年份列为0。否则,该年份会完全省略(即“稀疏”格式)。
##类型
对于 csv 输出,你可以选择将数据以每年某个名字对应的新生儿数量原始值(--type=values,默认值)或百分比(--type=values)的形式获取。JSON 格式会同时返回百分比和数量值。
##音素
你还可以传入特殊类型 --type=phonemes,获取一份包含所有名字每年音素百分比的 JSON 文档。默认情况下,脚本会检查每个名字的第一个音素。你可以使用 --N==TK,按名字中第 TK 个音素进行汇总。使用负值可从末尾开始计数。
##附加内容 我们现在收录了可追溯至 1996 年的英国婴儿名字数据,于 2016 年 10 月 5 日从英国 国家统计局获取。活产总数从同一来源此处下载。
##许可
此脚本由 Time 按 MIT 许可证免费开源提供。如果你使用此脚本,我们诚挚地建议你注明 Time 并链接到此页面。
字典文件 dict/2of12.txt 来自 12 Dicts 项目,该项目属于公有领域。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。