%global _empty_manifest_terminate_build 0
Name: python-bnlearn
Version: 0.7.14
Release: 1
Summary: Python package for learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.
License: MIT License
URL: https://erdogant.github.io/bnlearn
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/15/ec/4bda7df6fb11131364b02e2f1dc3a8f7b13935a28ab2fd3af8b3bf98dd53/bnlearn-0.7.14.tar.gz
BuildArch: noarch
Requires: python3-pgmpy
Requires: python3-networkx
Requires: python3-matplotlib
Requires: python3-numpy
Requires: python3-pandas
Requires: python3-tqdm
Requires: python3-ismember
Requires: python3-scikit-learn
Requires: python3-funcsigs
Requires: python3-statsmodels
Requires: python3-louvain
Requires: python3-packaging
Requires: python3-df2onehot
Requires: python3-fsspec
Requires: python3-pypickle
Requires: python3-tabulate
Requires: python3-ipywidgets
Requires: python3-pyvis
Requires: python3-requests
%description
# bnlearn - Library for Bayesian network learning and inference
[![Python](https://img.shields.io/pypi/pyversions/bnlearn)](https://img.shields.io/pypi/pyversions/bnlearn)
[![PyPI Version](https://img.shields.io/pypi/v/bnlearn)](https://pypi.org/project/bnlearn/)
![GitHub Repo stars](https://img.shields.io/github/stars/erdogant/bnlearn)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/erdogant/bnlearn/blob/master/LICENSE)
[![Forks](https://img.shields.io/github/forks/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/network)
[![Open Issues](https://img.shields.io/github/issues/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/issues)
[![Project Status](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active)
[![Downloads](https://pepy.tech/badge/bnlearn/month)](https://pepy.tech/project/bnlearn/)
[![Downloads](https://pepy.tech/badge/bnlearn)](https://pepy.tech/project/bnlearn)
[![DOI](https://zenodo.org/badge/231263493.svg)](https://zenodo.org/badge/latestdoi/231263493)
[![Docs](https://img.shields.io/badge/Sphinx-Docs-Green)](https://erdogant.github.io/bnlearn/)
[![Medium](https://img.shields.io/badge/Medium-Blog-black)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#medium-blog)
![GitHub repo size](https://img.shields.io/github/repo-size/erdogant/bnlearn)
[![Donate](https://img.shields.io/badge/Support%20this%20project-grey.svg?logo=github%20sponsors)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#)
[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#colab-notebook)
###
``bnlearn`` is Python package for learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.
Because probabilistic graphical models can be difficult in usage, Bnlearn for python (this package) is build on the pgmpy package and contains the most-wanted pipelines. Navigate to [API documentations](https://erdogant.github.io/bnlearn/) for more detailed information.
#
**⭐️ Star this repo if you like it ⭐️**
#
### Blogs
Read the blogs to get a structured overview of bayesian methods and detailed usage of ``bnlearn``.
* [Step-by-step guide for structure learning.](https://towardsdatascience.com/a-step-by-step-guide-in-detecting-causal-relationships-using-bayesian-structure-learning-in-python-c20c6b31cee5)
* [Step-by-step guide for knowledge-driven models.](https://towardsdatascience.com/a-step-by-step-guide-in-designing-knowledge-driven-models-using-bayesian-theorem-7433f6fd64be)
#
### [Documentation pages](https://erdogant.github.io/bnlearn/)
On the [documentation pages](https://erdogant.github.io/bnlearn/) you can find detailed information about the working of the ``bnlearn`` with many examples.
#
### Installation
##### It is advisable to create a new environment (e.g. with Conda).
```bash
conda create -n env_bnlearn python=3.8
conda activate env_bnlearn
```
##### Install bnlearn from PyPI
```bash
pip install bnlearn
```
##### Install bnlearn from github source
```bash
pip install git+https://github.com/erdogant/bnlearn
```
##### The following functions are available after installation:
```python
# Import library
import bnlearn as bn
# Structure learning
bn.structure_learning.fit()
# Compute edge strength with the test statistic
bn.independence_test(model, df, test='chi_square', prune=True)
# Parameter learning
bn.parameter_learning.fit()
# Inference
bn.inference.fit()
# Make predictions
bn.predict()
# Based on a DAG, you can sample the number of samples you want.
bn.sampling()
# Load well known examples to play arround with or load your own .bif file.
bn.import_DAG()
# Load simple dataframe of sprinkler dataset.
bn.import_example()
# Compare 2 graphs
bn.compare_networks()
# Plot graph
bn.plot()
# To make the directed grapyh undirected
bn.to_undirected()
# Convert to one-hot datamatrix
bn.df2onehot()
# Derive the topological ordering of the (entire) graph
bn.topological_sort()
# See below for the exact working of the functions
```
##### The following methods are also included:
* inference
* sampling
* comparing two networks
* loading bif files
* conversion of directed to undirected graphs
#
### Method overview
Learning a Bayesian network can be split into the underneath problems which are all implemented in this package:
* **Structure learning**: Given the data: Estimate a DAG that captures the dependencies between the variables.
* There are multiple manners to perform structure learning.
* Exhaustivesearch
* Hillclimbsearch
* NaiveBayes
* TreeSearch
* Chow-liu
* Tree-augmented Naive Bayes (TAN)
* **Parameter learning**: Given the data and DAG: Estimate the (conditional) probability distributions of the individual variables.
* **Inference**: Given the learned model: Determine the exact probability values for your queries.
#
### Examples
A structured overview of all examples are now available on the [documentation pages](https://erdogant.github.io/bnlearn/).
##### Structure learning
* [Example: Learn structure on the Sprinkler dataset based on a simple dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-1)
* [Example: Comparison method and scoring types types for structure learning](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-2)
* [Example: Learn structure on more complex dataset (Asia)](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-3)
##### Parameter learning
* [Example: Parameter learning using a DAG and dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#parameter-learning)
##### Inferences
* [Example: Make predictions on a dataframe using inference](https://erdogant.github.io/bnlearn/pages/html/Predict.html)
##### Sampling
* [Example: Sampling to create datasets](https://erdogant.github.io/bnlearn/pages/html/Sampling%20and%20datasets.html)
##### Complete examples
* [Example: Create a Bayesian Network, learn its parameters from data and perform the inference](https://erdogant.github.io/bnlearn/pages/html/Examples.html#create-a-bayesian-network-learn-its-parameters-from-data-and-perform-the-inference)
* [Example: Use case in the medical domain](https://erdogant.github.io/bnlearn/pages/html/UseCases.html)
* [Example: Use case Titanic](https://erdogant.github.io/bnlearn/pages/html/UseCases.html#)
##### Plotting
* [Example: Interactive plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#)
* [Example: Static plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#static-plot)
* [Example: Comparison of two networks](https://erdogant.github.io/bnlearn/pages/html/Plot.html#comparison-of-two-networks)
##### Various
* [Example: Saving and loading of bnlearn models](https://erdogant.github.io/bnlearn/pages/html/saving%20and%20loading.html)
* [Example: Data conversions such as creating sparse datamatrix from source-target and weights](https://erdogant.github.io/bnlearn/pages/html/dataframe%20conversions.html?highlight=target#)
* [Example: Load DAG from BIF files](https://erdogant.github.io/bnlearn/pages/html/Examples.html?highlight=comparison#import-from-bif)
#
### Various basic examples
```python
import bnlearn as bn
# Example dataframe sprinkler_data.csv can be loaded with:
df = bn.import_example()
# df = pd.read_csv('sprinkler_data.csv')
```
##### df looks like this
```python
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
```
```python
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)
```
* Choosing various methodtypes and scoringtypes:
```python
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
```python
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
```python
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)
```
### References
* https://erdogant.github.io/bnlearn/
* http://pgmpy.org
* https://programtalk.com/python-examples/pgmpy.factors.discrete.TabularCPD/
* http://www.bnlearn.com/bnrepository/
### Contributors
Setting up and maintaining bnlearn has been possible thanks to users and contributors. Thanks to:
### Citation
Please cite ``bnlearn`` in your publications if this is useful for your research. See column right for citation information.
### Maintainer
* Erdogan Taskesen, github: [erdogant](https://github.com/erdogant)
* Contributions are welcome.
* If you wish to buy me a Coffee for this work, it is very appreciated :)
%package -n python3-bnlearn
Summary: Python package for learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.
Provides: python-bnlearn
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-bnlearn
# bnlearn - Library for Bayesian network learning and inference
[![Python](https://img.shields.io/pypi/pyversions/bnlearn)](https://img.shields.io/pypi/pyversions/bnlearn)
[![PyPI Version](https://img.shields.io/pypi/v/bnlearn)](https://pypi.org/project/bnlearn/)
![GitHub Repo stars](https://img.shields.io/github/stars/erdogant/bnlearn)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/erdogant/bnlearn/blob/master/LICENSE)
[![Forks](https://img.shields.io/github/forks/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/network)
[![Open Issues](https://img.shields.io/github/issues/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/issues)
[![Project Status](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active)
[![Downloads](https://pepy.tech/badge/bnlearn/month)](https://pepy.tech/project/bnlearn/)
[![Downloads](https://pepy.tech/badge/bnlearn)](https://pepy.tech/project/bnlearn)
[![DOI](https://zenodo.org/badge/231263493.svg)](https://zenodo.org/badge/latestdoi/231263493)
[![Docs](https://img.shields.io/badge/Sphinx-Docs-Green)](https://erdogant.github.io/bnlearn/)
[![Medium](https://img.shields.io/badge/Medium-Blog-black)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#medium-blog)
![GitHub repo size](https://img.shields.io/github/repo-size/erdogant/bnlearn)
[![Donate](https://img.shields.io/badge/Support%20this%20project-grey.svg?logo=github%20sponsors)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#)
[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#colab-notebook)
###
``bnlearn`` is Python package for learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.
Because probabilistic graphical models can be difficult in usage, Bnlearn for python (this package) is build on the pgmpy package and contains the most-wanted pipelines. Navigate to [API documentations](https://erdogant.github.io/bnlearn/) for more detailed information.
#
**⭐️ Star this repo if you like it ⭐️**
#
### Blogs
Read the blogs to get a structured overview of bayesian methods and detailed usage of ``bnlearn``.
* [Step-by-step guide for structure learning.](https://towardsdatascience.com/a-step-by-step-guide-in-detecting-causal-relationships-using-bayesian-structure-learning-in-python-c20c6b31cee5)
* [Step-by-step guide for knowledge-driven models.](https://towardsdatascience.com/a-step-by-step-guide-in-designing-knowledge-driven-models-using-bayesian-theorem-7433f6fd64be)
#
### [Documentation pages](https://erdogant.github.io/bnlearn/)
On the [documentation pages](https://erdogant.github.io/bnlearn/) you can find detailed information about the working of the ``bnlearn`` with many examples.
#
### Installation
##### It is advisable to create a new environment (e.g. with Conda).
```bash
conda create -n env_bnlearn python=3.8
conda activate env_bnlearn
```
##### Install bnlearn from PyPI
```bash
pip install bnlearn
```
##### Install bnlearn from github source
```bash
pip install git+https://github.com/erdogant/bnlearn
```
##### The following functions are available after installation:
```python
# Import library
import bnlearn as bn
# Structure learning
bn.structure_learning.fit()
# Compute edge strength with the test statistic
bn.independence_test(model, df, test='chi_square', prune=True)
# Parameter learning
bn.parameter_learning.fit()
# Inference
bn.inference.fit()
# Make predictions
bn.predict()
# Based on a DAG, you can sample the number of samples you want.
bn.sampling()
# Load well known examples to play arround with or load your own .bif file.
bn.import_DAG()
# Load simple dataframe of sprinkler dataset.
bn.import_example()
# Compare 2 graphs
bn.compare_networks()
# Plot graph
bn.plot()
# To make the directed grapyh undirected
bn.to_undirected()
# Convert to one-hot datamatrix
bn.df2onehot()
# Derive the topological ordering of the (entire) graph
bn.topological_sort()
# See below for the exact working of the functions
```
##### The following methods are also included:
* inference
* sampling
* comparing two networks
* loading bif files
* conversion of directed to undirected graphs
#
### Method overview
Learning a Bayesian network can be split into the underneath problems which are all implemented in this package:
* **Structure learning**: Given the data: Estimate a DAG that captures the dependencies between the variables.
* There are multiple manners to perform structure learning.
* Exhaustivesearch
* Hillclimbsearch
* NaiveBayes
* TreeSearch
* Chow-liu
* Tree-augmented Naive Bayes (TAN)
* **Parameter learning**: Given the data and DAG: Estimate the (conditional) probability distributions of the individual variables.
* **Inference**: Given the learned model: Determine the exact probability values for your queries.
#
### Examples
A structured overview of all examples are now available on the [documentation pages](https://erdogant.github.io/bnlearn/).
##### Structure learning
* [Example: Learn structure on the Sprinkler dataset based on a simple dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-1)
* [Example: Comparison method and scoring types types for structure learning](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-2)
* [Example: Learn structure on more complex dataset (Asia)](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-3)
##### Parameter learning
* [Example: Parameter learning using a DAG and dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#parameter-learning)
##### Inferences
* [Example: Make predictions on a dataframe using inference](https://erdogant.github.io/bnlearn/pages/html/Predict.html)
##### Sampling
* [Example: Sampling to create datasets](https://erdogant.github.io/bnlearn/pages/html/Sampling%20and%20datasets.html)
##### Complete examples
* [Example: Create a Bayesian Network, learn its parameters from data and perform the inference](https://erdogant.github.io/bnlearn/pages/html/Examples.html#create-a-bayesian-network-learn-its-parameters-from-data-and-perform-the-inference)
* [Example: Use case in the medical domain](https://erdogant.github.io/bnlearn/pages/html/UseCases.html)
* [Example: Use case Titanic](https://erdogant.github.io/bnlearn/pages/html/UseCases.html#)
##### Plotting
* [Example: Interactive plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#)
* [Example: Static plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#static-plot)
* [Example: Comparison of two networks](https://erdogant.github.io/bnlearn/pages/html/Plot.html#comparison-of-two-networks)
##### Various
* [Example: Saving and loading of bnlearn models](https://erdogant.github.io/bnlearn/pages/html/saving%20and%20loading.html)
* [Example: Data conversions such as creating sparse datamatrix from source-target and weights](https://erdogant.github.io/bnlearn/pages/html/dataframe%20conversions.html?highlight=target#)
* [Example: Load DAG from BIF files](https://erdogant.github.io/bnlearn/pages/html/Examples.html?highlight=comparison#import-from-bif)
#
### Various basic examples
```python
import bnlearn as bn
# Example dataframe sprinkler_data.csv can be loaded with:
df = bn.import_example()
# df = pd.read_csv('sprinkler_data.csv')
```
##### df looks like this
```python
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
```
```python
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)
```
* Choosing various methodtypes and scoringtypes:
```python
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
```python
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
```python
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)
```
### References
* https://erdogant.github.io/bnlearn/
* http://pgmpy.org
* https://programtalk.com/python-examples/pgmpy.factors.discrete.TabularCPD/
* http://www.bnlearn.com/bnrepository/
### Contributors
Setting up and maintaining bnlearn has been possible thanks to users and contributors. Thanks to:
### Citation
Please cite ``bnlearn`` in your publications if this is useful for your research. See column right for citation information.
### Maintainer
* Erdogan Taskesen, github: [erdogant](https://github.com/erdogant)
* Contributions are welcome.
* If you wish to buy me a Coffee for this work, it is very appreciated :)
%package help
Summary: Development documents and examples for bnlearn
Provides: python3-bnlearn-doc
%description help
# bnlearn - Library for Bayesian network learning and inference
[![Python](https://img.shields.io/pypi/pyversions/bnlearn)](https://img.shields.io/pypi/pyversions/bnlearn)
[![PyPI Version](https://img.shields.io/pypi/v/bnlearn)](https://pypi.org/project/bnlearn/)
![GitHub Repo stars](https://img.shields.io/github/stars/erdogant/bnlearn)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/erdogant/bnlearn/blob/master/LICENSE)
[![Forks](https://img.shields.io/github/forks/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/network)
[![Open Issues](https://img.shields.io/github/issues/erdogant/bnlearn.svg)](https://github.com/erdogant/bnlearn/issues)
[![Project Status](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active)
[![Downloads](https://pepy.tech/badge/bnlearn/month)](https://pepy.tech/project/bnlearn/)
[![Downloads](https://pepy.tech/badge/bnlearn)](https://pepy.tech/project/bnlearn)
[![DOI](https://zenodo.org/badge/231263493.svg)](https://zenodo.org/badge/latestdoi/231263493)
[![Docs](https://img.shields.io/badge/Sphinx-Docs-Green)](https://erdogant.github.io/bnlearn/)
[![Medium](https://img.shields.io/badge/Medium-Blog-black)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#medium-blog)
![GitHub repo size](https://img.shields.io/github/repo-size/erdogant/bnlearn)
[![Donate](https://img.shields.io/badge/Support%20this%20project-grey.svg?logo=github%20sponsors)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#)
[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://erdogant.github.io/bnlearn/pages/html/Documentation.html#colab-notebook)
###
``bnlearn`` is Python package for learning the graphical structure of Bayesian networks, parameter learning, inference and sampling methods.
Because probabilistic graphical models can be difficult in usage, Bnlearn for python (this package) is build on the pgmpy package and contains the most-wanted pipelines. Navigate to [API documentations](https://erdogant.github.io/bnlearn/) for more detailed information.
#
**⭐️ Star this repo if you like it ⭐️**
#
### Blogs
Read the blogs to get a structured overview of bayesian methods and detailed usage of ``bnlearn``.
* [Step-by-step guide for structure learning.](https://towardsdatascience.com/a-step-by-step-guide-in-detecting-causal-relationships-using-bayesian-structure-learning-in-python-c20c6b31cee5)
* [Step-by-step guide for knowledge-driven models.](https://towardsdatascience.com/a-step-by-step-guide-in-designing-knowledge-driven-models-using-bayesian-theorem-7433f6fd64be)
#
### [Documentation pages](https://erdogant.github.io/bnlearn/)
On the [documentation pages](https://erdogant.github.io/bnlearn/) you can find detailed information about the working of the ``bnlearn`` with many examples.
#
### Installation
##### It is advisable to create a new environment (e.g. with Conda).
```bash
conda create -n env_bnlearn python=3.8
conda activate env_bnlearn
```
##### Install bnlearn from PyPI
```bash
pip install bnlearn
```
##### Install bnlearn from github source
```bash
pip install git+https://github.com/erdogant/bnlearn
```
##### The following functions are available after installation:
```python
# Import library
import bnlearn as bn
# Structure learning
bn.structure_learning.fit()
# Compute edge strength with the test statistic
bn.independence_test(model, df, test='chi_square', prune=True)
# Parameter learning
bn.parameter_learning.fit()
# Inference
bn.inference.fit()
# Make predictions
bn.predict()
# Based on a DAG, you can sample the number of samples you want.
bn.sampling()
# Load well known examples to play arround with or load your own .bif file.
bn.import_DAG()
# Load simple dataframe of sprinkler dataset.
bn.import_example()
# Compare 2 graphs
bn.compare_networks()
# Plot graph
bn.plot()
# To make the directed grapyh undirected
bn.to_undirected()
# Convert to one-hot datamatrix
bn.df2onehot()
# Derive the topological ordering of the (entire) graph
bn.topological_sort()
# See below for the exact working of the functions
```
##### The following methods are also included:
* inference
* sampling
* comparing two networks
* loading bif files
* conversion of directed to undirected graphs
#
### Method overview
Learning a Bayesian network can be split into the underneath problems which are all implemented in this package:
* **Structure learning**: Given the data: Estimate a DAG that captures the dependencies between the variables.
* There are multiple manners to perform structure learning.
* Exhaustivesearch
* Hillclimbsearch
* NaiveBayes
* TreeSearch
* Chow-liu
* Tree-augmented Naive Bayes (TAN)
* **Parameter learning**: Given the data and DAG: Estimate the (conditional) probability distributions of the individual variables.
* **Inference**: Given the learned model: Determine the exact probability values for your queries.
#
### Examples
A structured overview of all examples are now available on the [documentation pages](https://erdogant.github.io/bnlearn/).
##### Structure learning
* [Example: Learn structure on the Sprinkler dataset based on a simple dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-1)
* [Example: Comparison method and scoring types types for structure learning](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-2)
* [Example: Learn structure on more complex dataset (Asia)](https://erdogant.github.io/bnlearn/pages/html/Examples.html#example-3)
##### Parameter learning
* [Example: Parameter learning using a DAG and dataframe](https://erdogant.github.io/bnlearn/pages/html/Examples.html#parameter-learning)
##### Inferences
* [Example: Make predictions on a dataframe using inference](https://erdogant.github.io/bnlearn/pages/html/Predict.html)
##### Sampling
* [Example: Sampling to create datasets](https://erdogant.github.io/bnlearn/pages/html/Sampling%20and%20datasets.html)
##### Complete examples
* [Example: Create a Bayesian Network, learn its parameters from data and perform the inference](https://erdogant.github.io/bnlearn/pages/html/Examples.html#create-a-bayesian-network-learn-its-parameters-from-data-and-perform-the-inference)
* [Example: Use case in the medical domain](https://erdogant.github.io/bnlearn/pages/html/UseCases.html)
* [Example: Use case Titanic](https://erdogant.github.io/bnlearn/pages/html/UseCases.html#)
##### Plotting
* [Example: Interactive plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#)
* [Example: Static plotting](https://erdogant.github.io/bnlearn/pages/html/Plot.html#static-plot)
* [Example: Comparison of two networks](https://erdogant.github.io/bnlearn/pages/html/Plot.html#comparison-of-two-networks)
##### Various
* [Example: Saving and loading of bnlearn models](https://erdogant.github.io/bnlearn/pages/html/saving%20and%20loading.html)
* [Example: Data conversions such as creating sparse datamatrix from source-target and weights](https://erdogant.github.io/bnlearn/pages/html/dataframe%20conversions.html?highlight=target#)
* [Example: Load DAG from BIF files](https://erdogant.github.io/bnlearn/pages/html/Examples.html?highlight=comparison#import-from-bif)
#
### Various basic examples
```python
import bnlearn as bn
# Example dataframe sprinkler_data.csv can be loaded with:
df = bn.import_example()
# df = pd.read_csv('sprinkler_data.csv')
```
##### df looks like this
```python
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
```
```python
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)
```
* Choosing various methodtypes and scoringtypes:
```python
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
```python
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
```python
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)
```
### References
* https://erdogant.github.io/bnlearn/
* http://pgmpy.org
* https://programtalk.com/python-examples/pgmpy.factors.discrete.TabularCPD/
* http://www.bnlearn.com/bnrepository/
### Contributors
Setting up and maintaining bnlearn has been possible thanks to users and contributors. Thanks to:
### Citation
Please cite ``bnlearn`` in your publications if this is useful for your research. See column right for citation information.
### Maintainer
* Erdogan Taskesen, github: [erdogant](https://github.com/erdogant)
* Contributions are welcome.
* If you wish to buy me a Coffee for this work, it is very appreciated :)
%prep
%autosetup -n bnlearn-0.7.14
%build
%py3_build
%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-bnlearn -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Tue Apr 25 2023 Python_Bot - 0.7.14-1
- Package Spec generated