Buckets:
| #!/usr/bin/env python3 | |
| """build_unit_registry — 统一逐单元区登记表。 | |
| 输入(都在 /domains 内): | |
| steinmetz/units.parquet 24,029 单元,region 为 Allen 缩写 | |
| framework/allen_region_map.csv 73 个小鼠区 → Allen MBA id / UBERON 唯一性 | |
| framework/macaque_unit_region.csv 13,126 单元,PMd/M1/S1/DMFC | |
| 输出: | |
| framework/unit_region_registry.parquet / .csv | |
| 这是框架里唯一"每个单元都有真实解剖标签"的表,区级分析应当只用它。 | |
| """ | |
| from __future__ import annotations | |
| from pathlib import Path | |
| import pandas as pd | |
| ROOT = Path("/domains") | |
| OUT = ROOT / "framework" | |
| # ---------- 小鼠 | |
| u = pd.read_parquet(ROOT / "steinmetz/units.parquet") | |
| m = pd.read_csv(OUT / "allen_region_map.csv") | |
| mouse = u.merge(m[["acronym", "allen_mba", "uberon_id", "uberon_status"]], | |
| left_on="region", right_on="acronym", how="left") | |
| mouse = mouse.rename(columns={"allen_mba": "allen_mba_id", | |
| "uberon_id": "uberon_id_raw", | |
| "uberon_status": "region_uberon_status"}) | |
| mouse["uberon_id_unique"] = mouse.apply( | |
| lambda r: r.uberon_id_raw if r.region_uberon_status == "unique" else None, axis=1) | |
| mouse["member"] = "steinmetz" | |
| mouse["species"] = "mus_musculus" | |
| mouse["slice"] = mouse["session"].astype(str) | |
| mouse["region_label"] = mouse["region"] | |
| mouse["region_assignment"] = "per_unit" | |
| mouse["region_confidence"] = "anatomical" | |
| mouse["label_source"] = "allen_acronym" | |
| mouse["source_file"] = "steinmetz/units.parquet" | |
| # ---------- 猕猴 | |
| mac = pd.read_csv(OUT / "macaque_unit_region.csv") | |
| mac["member"] = "primate_macaque_nlb" | |
| mac["species"] = "macaca_mulatta" | |
| mac["slice"] = mac["file"].str.replace(".npz", "", regex=False) # 一个 session 可含多个片段 | |
| mac["region_label"] = mac["region_unit"] | |
| mac["allen_mba_id"] = None | |
| mac["uberon_id_unique"] = None | |
| mac["region_uberon_status"] = "not_applicable" | |
| mac["region_assignment"] = "per_unit" | |
| mac["region_confidence"] = "anatomical" | |
| mac["label_source"] = "dandi_000070_electrodes" | |
| mac["source_file"] = "primate/macaque_nlb/" + mac["file"] | |
| COLS = ["member", "species", "slice", "unit_idx", "region_label", | |
| "region_assignment", "region_confidence", "allen_mba_id", | |
| "region_uberon_status", "uberon_id_unique", "label_source", "source_file"] | |
| reg = pd.concat([mouse[COLS], mac[COLS]], ignore_index=True) | |
| reg["unit_idx"] = reg["unit_idx"].astype(int) | |
| reg = reg.sort_values(["member", "slice", "unit_idx"]).reset_index(drop=True) | |
| reg.to_parquet(OUT / "unit_region_registry.parquet", index=False) | |
| reg.to_csv(OUT / "unit_region_registry.csv", index=False) | |
| print(f"rows={len(reg)}") | |
| print(reg.groupby(["member", "region_label"]).size().to_string()) | |
| print(f"\n每单元唯一键检查: {not reg.duplicated(['member','slice','unit_idx']).any()}") | |
| print(f"region_label 空值: {int(reg.region_label.isna().sum())}") | |
| print(f"\n小鼠区数: {reg[reg.member=='steinmetz'].region_label.nunique()}," | |
| f"有 MBA id 的单元: {int(reg[reg.member=='steinmetz'].allen_mba_id.notna().sum())}") | |
Xet Storage Details
- Size:
- 3.1 kB
- Xet hash:
- 7115ddf134ddedcf1b6854e22ddd0f563d576379c2835cbd3874184e156d53b4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.