Fast, easy-to-use causal discovery analysis tools
Project description
fastcausal
Fast, easy-to-use causal discovery analysis tools for Python.
Overview
fastcausal provides a unified Python interface for causal discovery analysis, combining the functionality of several earlier packages into one pip-installable tool. It supports both interactive Jupyter notebook workflows and config-driven batch processing of large datasets.
Key features:
- No Java dependency — uses tetrad-port (C++ port of Tetrad algorithms) instead of Java
- Three causal discovery algorithms — PC, FGES, GFCI
- Prior knowledge support — temporal tiers, forbidden/required edges
- Bootstrapped stability analysis — edge frequency selection across subsampled runs
- SEM fitting — automatic structural equation modeling via semopy
- Flexible graph visualization — node styling with fnmatch patterns, multi-graph comparison with shared layouts
- Batch pipeline — config-driven processing of hundreds of cases via CLI
- Report generation — automated Word document reports with embedded graphs
Installation
pip install fastcausal # core package
pip install fastcausal[sem] # + SEM fitting (semopy)
pip install fastcausal[jupyter] # + Jupyter/matplotlib/seaborn
pip install fastcausal[batch] # + Word report generation
pip install fastcausal[all] # everything
Quick Start
from fastcausal import FastCausal
fc = FastCausal()
# Load data
df = fc.load_sample("boston")
# Run causal discovery
results, graph = fc.run_search(df, algorithm="gfci", alpha=0.05)
# View the graph
fc.show_graph(graph)
# Save to file
fc.save_graph(graph, "my_result", plot_format="png")
Interactive Workflow
from fastcausal import FastCausal
fc = FastCausal()
df = fc.load_csv("my_data.csv")
# Add lagged columns for time-series analysis
df = fc.add_lag_columns(df)
df = fc.standardize(df)
# Create temporal prior knowledge
knowledge = fc.create_lag_knowledge(df.columns)
# Run stability analysis (bootstrapped)
results, graph = fc.run_stability(
df,
algorithm="gfci",
knowledge=knowledge,
runs=100,
min_fraction=0.75,
)
# Visualize with custom node styles
fc.show_graph(graph, node_styles=[
{"pattern": "*_lag", "shape": "box", "fillcolor": "lightyellow"},
{"pattern": "PANAS_*", "fillcolor": "lightblue"},
])
CLI Usage
fastcausal provides a command-line interface for batch processing:
# Data preparation
fastcausal parse --config proj/config.yaml
# Batch causal discovery across cases
fastcausal run --config proj/config.yaml
fastcausal run --config proj/config.yaml --start 0 --end 50
fastcausal run --config proj/config.yaml --list
# Effect size analysis and heatmaps
fastcausal paths --config proj/config.yaml
# Generate Word report
fastcausal report --config proj/config.yaml --mode 2wide
# Quick single-file analysis
fastcausal analyze data.csv --algorithm gfci --output results/
Supported Algorithms
| Algorithm | Description | Key Parameters |
|---|---|---|
| PC | Constraint-based, uses conditional independence tests | alpha |
| FGES | Score-based, greedy search with BIC scoring | penalty_discount |
| GFCI | Hybrid constraint + score-based | alpha, penalty_discount |
Architecture
fastcausal consolidates four earlier codebases into a layered architecture:
pip install fastcausal
|
fastcausal (API + CLI + viz + SEM + batch)
/ \
tetrad-port dgraph_flex
(C++ algorithms) (graph rendering)
- tetrad-port — C++ port of CMU Tetrad algorithms, exposed via nanobind
- dgraph_flex — Graphviz-based directed graph rendering
Project Structure
fastcausal/
├── core.py # FastCausal class (main API)
├── search.py # Algorithm wrapper (PC, FGES, GFCI)
├── sem.py # SEM fitting via semopy
├── transform.py # Lag columns, standardization, subsampling
├── knowledge.py # Prior knowledge handling
├── edges.py # Edge parsing, selection, deduplication
├── cli.py # Click-based CLI
├── viz/
│ ├── styling.py # fnmatch-based node styling
│ ├── graphs.py # Graph display and save (single + multi)
│ └── plots.py # Heatmaps and effect size plots
├── pipeline/
│ ├── config.py # YAML config parsing (v4.0 + v5.0)
│ ├── parse.py # Data preparation engine
│ ├── batch.py # Batch causal discovery
│ ├── paths.py # Effect size analysis
│ ├── report.py # Word document generation
│ └── metrics.py # Graph metrics (centrality, ancestors)
└── io/
├── data.py # CSV loading, sample datasets
└── wearables.py # Fitbit/Garmin integration (planned)
Documentation
- Consolidation Plan — Implementation plan and phase status
- Consolidation Recommendation — Architecture decision record
- Project Conventions — Development guidelines and conventions
Config File Format
fastcausal uses YAML config files for batch processing. Version 5.0 is the current format; version 4.0 (from cda_tools2) is accepted with a deprecation warning.
GLOBAL:
version: 5.0
name: my_project
title: "My Causal Analysis"
CAUSAL:
algorithm: gfci
alpha: 0.05
penalty_discount: 1.0
knowledge: prior.txt
standardize_cols: true
Requirements
- Python >= 3.11
- tetrad-port >= 0.1.0
- dgraph_flex >= 0.1.11
- Graphviz (system install for graph rendering)
License
MIT
Citation
If you use fastcausal in your research, please cite the relevant algorithm papers and this package.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastcausal-0.1.1.tar.gz.
File metadata
- Download URL: fastcausal-0.1.1.tar.gz
- Upload date:
- Size: 44.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c26da2f66c7f1bc8204103933033394547ef0a3b83cc5f40dc4db9b5a28d9062
|
|
| MD5 |
34686e13816715c2df7958dd59eb9ab3
|
|
| BLAKE2b-256 |
b65e98d35d823dc47045dccf5dd879a5d1dc9f948386f7074ddb2649147a3b37
|
File details
Details for the file fastcausal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: fastcausal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
418499311b7b8b9c0f3c32063984fa64d3542dba333103c40c573560faf74460
|
|
| MD5 |
81a4b24d1bcd4d84f72e2c6878abb398
|
|
| BLAKE2b-256 |
2c1062125e0bb65705e4c7deaf2f5800cb68935e6c540fd61958e46af95a0629
|