技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
clean-data【数据与研究】Use when a clinical CSV/Excel dataset needs profiling and cleaning before analysis (missing values, outliers, duplicates, type mismatches). Profiles, flags and generates cleaning code in three stages, each gated on the researcher's approval. Never auto-cleans.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Profile, flag, and generate cleaning code for a clinical dataset in three stages, each ending at a user-approval gate. You generate code and reports; you do NOT auto-clean data. Every cleaning decision needs the researcher's explicit confirmation, because clinical cleaning calls need domain knowledge.
PHI first. If the dataset contains PHI or PII, run /deidentify before proceeding, and use
*_deidentified.* files when they exist in the working directory. Otherwise work from the data
dictionary / codebook alone, or in a local-only environment with no network access. The skill writes
code that runs on the data; it does not need to see the raw rows to write it.
Input: CSV/Excel file path OR data dictionary/codebook
${CLAUDE_SKILL_DIR}/references/profiling_template.py (pandas) to the dataset. It reports:
variable and row counts, data types; missing count and percentage per variable; unique counts for
categorical variables; min/max/mean/median/SD for numeric variables; histograms and bar charts.[VERIFY: variable_name] and ask the user to confirm it against the data dictionary.Gate: The user reviews the profile. Ask whether to proceed to Stage 2 (Flagging) and whether any variables should be excluded or focused on.
Read ${CLAUDE_SKILL_DIR}/references/cleaning_patterns.md for missing-data mechanisms, outlier
decision rules, duplicate detection, date handling, and clinical pitfalls (inequality-prefixed lab
values, mixed units, sentinel values). Flag issues in these categories:
references/implausible_value_rules.md §1. An
implausible value is a likely data-entry/unit/sentinel error (correct or set missing); a
statistical outlier (#2) is biologically possible (keep + sensitivity analysis). Check units before
calling a bound violation an error. Never auto-fix.
5b. Cross-field inconsistencies: logical contradictions per references/implausible_value_rules.md
§2 — temporal ordering (birth ≤ event ≤ death, admission ≤ discharge), derived-vs-source (recomputed
BMI/age; subset ≤ superset; total = sum of parts), sex-/state-specific fields, and min ≤ max /
diastolic < systolic pairs. Name the rule that fired; a hard contradiction is High severity.smoking_status == 'never' implies pack_years == 0; alcohol_use == 'never' implies
grams_per_week == 0), flag records that store the implied zero as NULL. This is a contradiction,
not a missing-data pattern: complete-case models silently drop those never-smokers and MICE imputes
them a non-zero dose, corrupting the exposure contrast. Suggested action: "Set dose = 0 where
category == reference level; impute only the residual missingness among the exposed." Detected by
scripts/check_structural_zero.py given the category↔dose mapping; pairs with /analyze-stats
"Covariate Pitfalls: Structural Zeros & Dose/Duration Variables".(min+max) - x before the scale total or
Cronbach's alpha is computed. An un-recoded reverse item correlates negatively with the rest and
collapses alpha, often to a negative value. A negative alpha is a reverse-coding bug, not
"multidimensional structure". Suggested action: "Recode reverse-worded items, then recompute
reliability." Detected by scripts/check_reverse_coding.py (negative item-rest correlation and
negative raw alpha, given the scale item columns); the recode itself is applied downstream by
/analyze-stats likert_summary.py --reverse-items.Present the flag report as a table:
| Variable | Issue Type | Count | Severity | Suggested Action |
|---|---|---|---|---|
| age | Outlier (IQR) | 3 | Medium | Review: values 150, 200, -5 |
| pack_years | Categorical-implied zero | 12421 | High | Set 0 where smoking_status=='never' (structural zero, not missing) |
Severity levels:
Gate: The user marks each row (A) Approve the suggested action, (R) Reject / keep as-is, or (M) Modify the action. Only approved actions generate cleaning code.
For ONLY user-approved actions, generate Python (or R if requested) code:
All generated code MUST include:
np.random.seed(42) and random.seed(42) where applicablecleaning_log.csvEnd the generated script with this notice:
"This code implements ONLY the cleaning rules you approved. Review the cleaning_log.csv output to verify all changes before proceeding to analysis."
Out of scope: free-text extraction from clinical notes, and image data or DICOM metadata. After
cleaning, hand off to /analyze-stats. Take any citation from /search-lit, never from memory.
Structure all reports using this template:
## Data Profiling Report
### Dataset Overview
- Rows: [N]
- Columns: [N]
- File size: [size]
- Date range: [if applicable]
### Variable Summary
| Variable | Type | Missing N (%) | Unique | Min | Max | Mean | SD |
|----------|------|---------------|--------|-----|-----|------|-----|
| ... | ... | ... | ... | ... | ... | ... | ... |
### Flags
| Variable | Issue | Count | Severity | Suggested Action |
|----------|-------|-------|----------|-----------------|
| ... | ... | ... | ... | ... |
### Cleaning Code
[Python/R script -- only for approved actions]
### Cleaning Log
[What was changed, how many rows affected, before/after counts]