Analyze data with `survival-curve-risk-table` using a reproducible workflow, explicit validation, and structured outputs for review-ready interpretation.
survival-curve-risk-table using a reproducible workflow, explicit validation, and structured outputs for review-ready interpretation.scripts/main.py.references/ for task-specific guidance.See ## Prerequisites above for related details.
Python: . Repository baseline for current packaged skills.3.10+lifelines: unspecified. Declared in requirements.txt.matplotlib: unspecified. Declared in requirements.txt.numpy: unspecified. Declared in requirements.txt.pandas: unspecified. Declared in requirements.txt.pil: unspecified. Declared in requirements.txt.pillow: unspecified. Declared in requirements.txt.seaborn: unspecified. Declared in requirements.txt.See ## Usage above for related details.
cd "20260318/scientific-skills/Data Analytics/survival-curve-risk-table"
python -m py_compile scripts/main.py
python scripts/main.py --help
Example run plan:
CONFIG block or documented parameters if the script uses fixed settings.python scripts/main.py with the validated inputs.See ## Workflow above for related details.
scripts/main.py.references/ contains supporting rules, prompts, or checklists.Use this command to verify that the packaged script entry point can be parsed before deeper execution.
python -m py_compile scripts/main.py
Use these concrete commands for validation. They are intentionally self-contained and avoid placeholder paths.
python -m py_compile scripts/main.py
# Example invocation: python scripts/main.py --help
# Example invocation: python scripts/main.py --input "Audit validation sample with explicit symptoms, history, assessment, and next-step plan."
Automatically add "Number at risk" tables to Kaplan-Meier survival curves that meet clinical oncology journal standards. Automatically align time points and generate publication-quality combined figures.
# Example invocation: python scripts/main.py \
--input survival_data.csv \
--time-col time \
--event-col event \
--group-col treatment \
--output risk_table.png
# Example invocation: python scripts/main.py \
--input survival_data.csv \
--time-col time \
--event-col status \
--group-col arm \
--style NEJM \
--time-points 0,6,12,18,24,30,36 \
--output figure_1a.pdf
# Example invocation: python scripts/main.py \
--input survival_data.csv \
--time-col months \
--event-col death \
--group-col group \
--km-plot km_curve.png \
--combine \
--output combined_figure.png
# Example invocation: python scripts/main.py \
--input survival_data.csv \
--time-col time \
--event-col event \
--group-col treatment \
--time-points 0,12,24,36,48,60 \
--format both \
--output-dir ./output/
from scripts.main import RiskTableGenerator
# Initialize generator
generator = RiskTableGenerator(
style="JCO",
time_points=[0, 6, 12, 18, 24, 30],
figure_size=(8, 6)
)
# Load survival data
generator.load_data(
df=survival_df,
time_col="time",
event_col="event",
group_col="treatment_arm"
)
# Generate risk table
generator.generate_risk_table(
output_path="risk_table.png",
show_censored=True
)
# Generate combined figure (KM curve + risk table)
generator.generate_combined_plot(
km_plot_path="km_curve.png",
output_path="combined_figure.pdf"
)
time,event,treatment_arm
0,0,Experimental
3.2,1,Experimental
5.1,0,Experimental
12.3,1,Control
18.7,0,Control
24.0,1,Experimental
...
| Column Name | Description | Type |
|---|---|---|
| time | Follow-up time (months) | Numeric |
| event | Event occurrence flag | 0=Censored, 1=Event |
| group | Treatment group (optional) | Text/Categorical |
{
"style": "NEJM",
"font_family": "Helvetica",
"font_size": 8,
"time_points": [0, 6, 12, 18, 24, 30, 36],
"table_height": 0.15,
"show_grid": false,
"separator_lines": true
}
{
"style": "Lancet",
"font_family": "Times New Roman",
"font_size": 9,
"time_points": [0, 12, 24, 36, 48, 60],
"table_height": 0.18,
"show_grid": true,
"header_bold": true
}
{
"style": "JCO",
"font_family": "Arial",
"font_size": 8,
"time_points": [0, 6, 12, 18, 24, 30],
"table_height": 0.16,
"show_censored": true,
"censor_symbol": "+"
}
| Parameter | Description | Example |
|---|---|---|
--input | Input data file path | data.csv |
--time-col | Time column name | time |
--event-col | Event column name | event |
| Parameter | Description | Default Value |
|---|---|---|
--group-col | Group column name | None |
--output | Output file path | risk_table.png |
--style | Journal style | NEJM |
--time-points | Time point list | Auto-calculated |
--format | Output format | png |
--width | Image width | 8 (inches) |
--height | Image height | 6 (inches) |
--dpi | Image resolution | 300 |
--font-size | Font size | 8 |
--show-censored | Show censored count | False |
--combine | Combine with KM curve | False |
--km-plot | KM curve image path | None |
┌─────────────────────────────────────────────────────────┐
│ Number at risk │
├─────────┬─────┬─────┬─────┬─────┬─────┬─────┬───────────┤
│ Group │ 0 │ 12 │ 24 │ 36 │ 48 │ 60 │ 72 (mo) │
├─────────┼─────┼─────┼─────┼─────┼─────┼─────┼───────────┤
│ Exp │ 150 │ 142 │ 128 │ 105 │ 89 │ 72 │ 58 │
│ Control │ 148 │ 135 │ 118 │ 92 │ 76 │ 61 │ 45 │
└─────────┴─────┴─────┴─────┴─────┴─────┴─────┴───────────┘
┌─────────────────────────────────────┐
│ │
│ Kaplan-Meier Survival Curve │
│ │
│ ━━━━━━━━━ Experimental │
│ ─ ─ ─ ─ ─ Control │
│ │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Number at risk │
│ Exp 150 142 128 105 89 72 │
│ Ctrl 148 135 118 92 76 61 │
│ 0 12 24 36 48 60 │
└─────────────────────────────────────┘
For each time point t:
For each group g:
N_at_risk(t, g) = N_total(g)
- Σ(patients with events occurring ≤ t)
- Σ(patients censored occurring < t)
A: Default uses quantiles in the data (0%, 25%, 50%, 75%, 100%) or fixed intervals (e.g., every 12 months)
A: Automatically detect group column, support up to 6 groups. Exceeding automatically uses pagination or reduced font
A: Yes, supports importing external KM curve images for combination
numpy >= 1.20.0
pandas >= 1.3.0
matplotlib >= 3.4.0
seaborn >= 0.11.0
lifelines >= 0.27.0 (optional, for survival analysis)
Pillow >= 8.0.0 (image processing)
| Risk Indicator | Assessment | Level |
|---|---|---|
| Code Execution | Python/R scripts executed locally | Medium |
| Network Access | No external API calls | Low |
| File System Access | Read input files, write output files | Medium |
| Instruction Tampering | Standard prompt guidelines | Low |
| Data Exposure | Output files saved to workspace | Low |
# Python dependencies
pip install -r requirements.txt
Every final response should make these items explicit when they are relevant:
scripts/main.py fails, report the failure point, summarize what still can be completed safely, and provide a manual fallback.This skill accepts requests that match the documented purpose of survival-curve-risk-table and include enough context to complete the workflow safely.
Do not continue the workflow when the request is out of scope, missing a critical input, or would require unsupported assumptions. Instead respond:
survival-curve-risk-tableonly handles its documented workflow. Please provide the missing required inputs or switch to a more suitable skill.
Use the following fixed structure for non-trivial requests:
If the request is simple, you may compress the structure, but still keep assumptions and limits explicit when they affect correctness.