← 返回 Tessera
Toy1,208 行 × 336 KB无缺失数据 2026-08-13

population_age_composition

151 个连续时间点、8 个有序年龄组和随时间变化的总量——百分比堆叠面积图与比例流图的确定性练习数据。

Tessera 确定性模拟(percentage_stacked recipe) · 收录于 2026-08-13

下载 CSV · 36 KB
数据预览6
TimeGroupValue
1,950<5365.4
1,951<5372.9
1,952<5380.3
1,953<5387.7
1,954<5395.0
1,955<5402.3
变量3
字符型1整数1双精度1
类型
#变量类型缺失统计
1Timekey1950–2100,仅作为连续时间轴整数min 1,950q1 中位 2,025均值 2,025q3 max 2,100
2Group8 个年龄组字符型不同值 8<5 · 5-14 · 15-24 · 25-34 · 35-44 · 45-54 · 55-64 · >65
3Value模拟数量,非真实人口或预测值双精度min 172.1q1 中位 791.3均值 812.5q3 max 1,542
载入已写好列类型
library(readr)

population_age_composition <- read_csv(
  "https://assets.evanzhou.org/tessera/csv/population_age_composition.csv",
  col_types = cols(
    Time  = col_integer(),
    Group = col_character(),
    Value = col_double()
  )
)
URLhttps://assets.evanzhou.org/tessera/csv/population_age_composition.csv

来源

这是一份由 Tessera recipe 固化的确定性模拟数据,不对应任何国家、调查或人口预测。每年包含同样的 8 个年龄组;年轻组的相对份额整体下降,年长组整体上升,同时加入轻微且可复现的周期起伏。

生成脚本保留每一步趋势、归一化和总量设定。CSV 冻结之后,recipe、Palette Lab 和下载页面读取的是同一份数据,不再各自现场生成一套近似结果。

适用图形

图形结构 用途
百分比堆叠面积图 在固定 0–100% 基线上比较各组份额随时间的变化
比例流图 强调长期构成的流动形态,不用于精确读数
普通堆叠面积图 同时保留模拟总量与内部构成
多折线图 分开检查各年龄组的绝对值趋势
生成脚本R · 38
years <- 1950:2100
age_levels <- c("<5", "5-14", "15-24", "25-34", "35-44", "45-54", "55-64", ">65")

population_age_composition <- expand.grid(
  Time = years,
  Group = age_levels,
  KEEP.OUT.ATTRS = FALSE,
  stringsAsFactors = FALSE
)

t <- (population_age_composition$Time - min(years)) / (max(years) - min(years))
group <- population_age_composition$Group
base <- ifelse(group == "<5", 0.14 - 0.05 * t,
  ifelse(group == "5-14", 0.20 - 0.06 * t,
    ifelse(group == "15-24", 0.17 - 0.03 * t,
      ifelse(group == "25-34", 0.14 - 0.01 * t,
        ifelse(group == "35-44", 0.12 + 0.01 * t,
          ifelse(group == "45-54", 0.10 + 0.03 * t,
            ifelse(group == "55-64", 0.07 + 0.04 * t, 0.06 + 0.07 * t)
          )
        )
      )
    )
  )
)

phase <- match(group, age_levels)
share_raw <- pmax(base + 0.01 * sin(t * 2 * pi + phase), 0.01)
share <- share_raw / ave(share_raw, population_age_composition$Time, FUN = sum)
total <- 2500 + 8000 * t

population_age_composition$Value <- total * share

write.csv(
  population_age_composition[c("Time", "Group", "Value")],
  "population_age_composition.csv",
  row.names = FALSE
)

表中统计由 scripts/profile_dataset.py 于 2026-08-13 数出。