This document discusses using Bayesian networks to model relationships in data. It introduces Bayesian networks as directed acyclic graphs that represent conditional dependencies between random variables. The document describes approaches for finding the optimal Bayesian network structure given data, including scoring functions and dealing with issues like cycles. It also introduces BNFinder, an open-source Python library for learning Bayesian networks from data that can handle both discrete and continuous variables efficiently in parallel. Examples are given demonstrating BNFinder's ability to learn predictive models from genomic and gene expression data.