README.md

February 21, 2026 · View on GitHub

Python PyPI Version GitHub Repo stars License Forks Open Issues Project Status Downloads Downloads DOI 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

FeatureDescriptionMediumGumroad/Podcast
Causal Discovery - Overview and Starters GuideLearn the basics of causal modelling.link---
Structure LearningLearn the model structure from data or with expert knowledge.link---
Causal PredictionsLearn to make causal predictions.link---
Parameter LearningEstimate model parameters (e.g., conditional probability distributions) from observed data.link---
Causal InferenceCompute interventional and counterfactual distributions using do-calculus.link---
Generate Synthetic DataGenerate synthetic data.link---
Discretize DataDiscretize continuous datasets.------
ComparisonsComparison with other causal libraries.link---


The following functions are available after installation:

FeatureDescription
Key Pipelines
Structure learningbn.structure_learning.fit()
Parameter learningbn.parameter_learning.fit()
Inferencebn.inference.fit()
Make predictionsbn.predict()
Generate Synthetic Databn.sampling()
Compute Edge Strengthbn.independence_test()
Key Functions
Imputationsbn.knn_imputer()
Discretizingbn.discretize()
Check Model Parametersbn.check_model()
Create DAGbn.make_DAG()
Get Node Propertiesbn.get_node_properties()
Get Edge Propertiesbn.get_edge_properties()
Get Parents From Edgesbn.get_parents()
Generate Default CPT per Nodebn.generate_cpt()
Generate Default CPTs for All Edgesbn.build_cpts_from_structure()
Make Plots
Plottingbn.plot()
Plot Graphvizbn.plot_graphviz()
Compare 2 Networksbn.compare_networks()
Load DAG (bif files)bn.import_DAG()
Load Examplesbn.import_example()
Transformation Functions
Convert DAG to Undirectedbn.to_undirected()
Convert to one-hotbn.df2onehot()
Convert Adjacency Matrix to Vectorbn.adjmat2vec()
Convert Adjacency Matrix to Dictionarybn.adjmat2dict()
Convert Vector to Adjacency Matrixbn.vec2adjmat()
Convert DAG to Adjacency Matrixbn.dag2adjmat()
Convert DataFrame to Onehotbn.df2onehot()
Convert Query to DataFramebn.query2df()
Convert Vector to DataFramebn.vec2df()
Metrics
Compute Topological Orderingbn.topological_sort()
Compute Structure Scoresbn.structure_scores()
General
Save Modelbn.save()
Load Modelbn.load()
Print CPTsbn.print_CPD()

Installation

Install bnlearn from PyPI
pip install bnlearn
Install bnlearn from github source
pip install git+https://github.com/erdogant/bnlearn
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