Skip to main content

Fast, easy-to-use causal discovery analysis tools

Project description

fastcausal

Fast, easy-to-use causal discovery analysis tools for Python.

PyPI version Python 3.11+ License: MIT

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

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

License

MIT

Citation

If you use fastcausal in your research, please cite the relevant algorithm papers and this package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastcausal-0.1.1.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastcausal-0.1.1-py3-none-any.whl (40.9 kB view details)

Uploaded Python 3

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

Hashes for fastcausal-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c26da2f66c7f1bc8204103933033394547ef0a3b83cc5f40dc4db9b5a28d9062
MD5 34686e13816715c2df7958dd59eb9ab3
BLAKE2b-256 b65e98d35d823dc47045dccf5dd879a5d1dc9f948386f7074ddb2649147a3b37

See more details on using hashes here.

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

Hashes for fastcausal-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 418499311b7b8b9c0f3c32063984fa64d3542dba333103c40c573560faf74460
MD5 81a4b24d1bcd4d84f72e2c6878abb398
BLAKE2b-256 2c1062125e0bb65705e4c7deaf2f5800cb68935e6c540fd61958e46af95a0629

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page