Skip to main content

Python PyPI Version GitHub Repo stars License Forks Open Issues Project Status Downloads Downloads Docs Medium GitHub repo size Donate Colab

bnlearn is Python package for causal discovery by learning the graphical structure of Bayesian networks, parameter learning, inference, and sampling methods. Because probabilistic graphical models can be difficult to use, Bnlearn contains the most-wanted pipelines. Navigate to API documentations for more detailed information. ⭐️ Star it if you like it ⭐️


Key Features

Feature Description Medium Gumroad/Podcast
Causal Discovery - Overview and Starters Guide Learn the basics of causal modelling. link ---
Structure Learning Learn the model structure from data or with expert knowledge. link Podcast
Causal Predictions Learn to make causal predictions. link ---
Parameter Learning Estimate model parameters (e.g., conditional probability distributions) from observed data. link Podcast
Causal Inference Compute interventional and counterfactual distributions using do-calculus. link Podcast
Generate Synthetic Data Generate synthetic data. link Podcast
Discretize Data Discretize continuous datasets. --- ---
Data Types Discrete, continuous and mixed datasets. --- ---
Comparisons Comparison with other causal libraries. link Podcast


The following functions are available after installation:

Feature Description
Key Pipelines
Structure learning bn.structure_learning.fit()
Parameter learning bn.parameter_learning.fit()
Inference bn.inference.fit()
Make predictions bn.predict()
Generate Synthetic Data bn.sampling()
Compute Edge Strength bn.independence_test()
Key Functions
Imputations bn.knn_imputer()
Discretizing bn.discretize()
Check Model Parameters bn.check_model()
Create DAG bn.make_DAG()
Get Node Properties bn.get_node_properties()
Get Edge Properties bn.get_edge_properties()
Get Parents From Edges bn.get_parents()
Generate Default CPT per Node bn.generate_cpt()
Generate Default CPTs for All Edges bn.build_cpts_from_structure()
Make Plots
Plotting bn.plot()
Plot Graphviz bn.plot_graphviz()
Compare 2 Networks bn.compare_networks()
Load DAG (bif files) bn.import_DAG()
Load Examples bn.import_example()
Transformation Functions
Convert DAG to Undirected bn.to_undirected()
Convert to one-hot bn.df2onehot()
Convert Adjacency Matrix to Vector bn.adjmat2vec()
Convert Adjacency Matrix to Dictionary bn.adjmat2dict()
Convert Vector to Adjacency Matrix bn.vec2adjmat()
Convert DAG to Adjacency Matrix bn.dag2adjmat()
Convert DataFrame to Onehot bn.df2onehot()
Convert Query to DataFrame bn.query2df()
Convert Vector to DataFrame bn.vec2df()
Metrics
Compute Topological Ordering bn.topological_sort()
Compute Structure Scores bn.structure_scores()
General
Save Model bn.save()
Load Model bn.load()
Print CPTs bn.print_CPD()

Installation

Python 3.10 or newer is required.

Installation: uv-pypi
uv venv
.venv\Scripts\activate
uv pip install bnlearn
Installation: uv-local
uv venv
.venv\Scripts\activate
git clone https://github.com/erdogant/bnlearn.git
cd bnlearn
uv pip install -U -e .
Installation: conda-pypi
conda create -n env_bnlearn python=3.12
conda activate env_bnlearn
pip install bnlearn
Installation: GitHub source
pip install git+https://github.com/erdogant/bnlearn
uv pip install git+https://github.com/erdogant/bnlearn
Run tests (uv)
uv pip install -e ".[dev]"
uv run pytest
Run tests (pip)
pip install -e ".[dev]"
pytest -v

Installation of bnlearn skills

Installation of bnlearn skills for various harnesses. Default is .claude

Install skill (default claude)
bnlearn install skill 
Install skill: harnass options {claude, opencode agents or any other name}
bnlearn install skill --harness opencode

Load library

# Import library
import bnlearn as bn

Code Examples

    import bnlearn as bn
    # Example dataframe sprinkler_data.csv can be loaded with: 
    df = bn.import_example()
    # df = pd.read_csv('sprinkler_data.csv')

Cloudy  Sprinkler  Rain  Wet_Grass
0         0          1     0          1
1         1          1     1          1
2         1          0     1          1
3         0          0     1          1
4         1          0     1          1
..      ...        ...   ...        ...
995       0          0     0          0
996       1          0     0          0
997       0          0     1          0
998       1          1     0          1
999       1          0     1          1


    model = bn.structure_learning.fit(df)
    # Compute edge strength with the chi-square test statistic
    model = bn.independence_test(model, df)
    G = bn.plot(model)

# Example: Structure Learning

    model_hc_bic  = bn.structure_learning.fit(df, methodtype='hc', scoretype='bic')
    model_hc_k2   = bn.structure_learning.fit(df, methodtype='hc', scoretype='k2')
    model_hc_bdeu = bn.structure_learning.fit(df, methodtype='hc', scoretype='bdeu')
    model_ex_bic  = bn.structure_learning.fit(df, methodtype='ex', scoretype='bic')
    model_ex_k2   = bn.structure_learning.fit(df, methodtype='ex', scoretype='k2')
    model_ex_bdeu = bn.structure_learning.fit(df, methodtype='ex', scoretype='bdeu')
    model_cl      = bn.structure_learning.fit(df, methodtype='cl', root_node='Wet_Grass')
    model_tan     = bn.structure_learning.fit(df, methodtype='tan', root_node='Wet_Grass', class_node='Rain')

# Example: Parameter Learning

    import bnlearn as bn
    # Import dataframe
    df = bn.import_example()
    # As an example we set the CPD at False which returns an "empty" DAG
    model = bn.import_DAG('sprinkler', CPD=False)
    # Now we learn the parameters of the DAG using the df
    model_update = bn.parameter_learning.fit(model, df)
    # Make plot
    G = bn.plot(model_update)

# Example: Inference

    import bnlearn as bn
    model = bn.import_DAG('sprinkler')
    query = bn.inference.fit(model, variables=['Rain'], evidence={'Cloudy':1,'Sprinkler':0, 'Wet_Grass':1})
    print(query)
    print(query.df)
    
    # Lets try another inference
    query = bn.inference.fit(model, variables=['Rain'], evidence={'Cloudy':1})
    print(query)
    print(query.df)

Star history

Star History Chart

Contributors

Thank the contributors!

Maintainer

  • Erdogan Taskesen, github: erdogant
  • Contributions are welcome.
  • Yes! This library is entirely free but it runs on coffee! :) Feel free to support with a Coffee.

Buy me a coffee

Metadata

Release files for bnlearn 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bnlearn 1.1.0
File Size Uploaded Provenance Actions
bnlearn-1.1.0.tar.gz 193.0 kB With provenance Details for bnlearn-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bnlearn 1.1.0
File Interpreter ABI Platform Actions
bnlearn-1.1.0-py3-none-any.whl Python 3 none any Details for bnlearn-1.1.0-py3-none-any.whl

Total release size: 402.9 kB

Release files / bnlearn-1.1.0.tar.gz

Download URL bnlearn-1.1.0.tar.gz
Size 193.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c8e7fa7b8878232b95f0240a6332e2466f7c5933db9008bddf5fd8acc9d22812
BLAKE2b-256 checksum
How to use checksums
7c78d06d9b76ac0cb070c566e7077392de4e61d3a479a9c9064035657f26b9fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / bnlearn-1.1.0-py3-none-any.whl

Download URL bnlearn-1.1.0-py3-none-any.whl
Size 209.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c1f1965c4a27ee819218b9bdae24f2004bb8b9394c8932c4b2d8479e9a00e22
BLAKE2b-256 checksum
How to use checksums
0ad30ef755f57482bb63e604959e342566c74c8f306e508d3d84feed569bfe23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Security for bnlearn 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for bnlearn-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page