Wiki

Clone wiki

Lea / Welcome

Lea - Discrete probability distributions in Python

Welcome in Lea!

Lea2_logo.png


NEW: 17 March 2015 - Lea 2.1.1 is there!


What is Lea?

Lea is a Python package aiming at working with discrete probability distributions in an intuitive way. It allows you to model a broad range of random phenomenons, like dice throwing, coin tossing, gambling, weather, finance, etc. More generally, Lea may be used for any finite set of discrete values having known probability: numbers, booleans, date/times, symbols, … Each probability distribution is modeled as a plain object, which can be named, displayed, queried or processed to produce new probability distributions.

Lea can be used in any Python program or interactively, in the Python console. As a basic example, the statements below define and display the probability of a fair six-sided die :

#!python
>>> die = Lea.fromVals(1,2,3,4,5,6)
>>> die
1 : 1/6
2 : 1/6
3 : 1/6
4 : 1/6
5 : 1/6
6 : 1/6

and here is how you can model a biased coin, then make a random sample of 10 throws :

#!python
>>> flip = Lea.fromValFreqsDict({'head': 67, 'tail': 33})
>>> flip 
head : 67/100
tail : 33/100
>>> flip.random(10)
('head', 'head', 'tail', 'head', 'head', 'head', 'head', 'tail', 'head', 'head')

Lea allows you to compute new probability distributions from existing ones, by using different transformation means: arithmetic operators, logical operators, functions, conditions and cartesian product. For example, this is how you can count the probability distribution of number of 'heads' on 2 throws :

#!python
>>> flipCount = Lea.fromValFreqsDict({1: 67, 0: 33})
>>> flipCount
0 : 33/100
1 : 67/100
>>> flipCount2 = flipCount + flipCount.clone()
>>> flipCount2
0 : 1089/10000
1 : 4422/10000
2 : 4489/10000
then, on 4 throws :
#!python
>>> flipCount4 = flipCount.times(4)
0 :  1185921/100000000
1 :  9631116/100000000
2 : 29331126/100000000
3 : 39700716/100000000
4 : 20151121/100000000
>>> print (flipCount4.asFloat())
0 : 0.011859
1 : 0.096311
2 : 0.293311
3 : 0.397007
4 : 0.201511

Also, comparison operators can be used to derive boolean probability distributions:

#!python
>>> flipCount4 >= 3
False : 40148163/100000000
 True : 59851837/100000000
>>> (1 <= flipCount4) & (flipCount4 < 4)
False : 10668521/50000000
 True : 39331479/50000000

Lea provides a large set of operations that allow you to model complex stochastic processes. Advanced operations allow to handle conditional probabilities, including Bayesian networks and Markov chains.

Leapp : a probabilistic programming language

As of version 2, the Lea package includes a small probabilistic programming language (PPL) called Leapp. It provides concise syntax to make use of Lea as easy as possible, … especially for non-Python programmers! Here are some above Python statements revamped in Leapp (lea> is the prompt!):

[Leapp]

lea> die = ?(1,2,3,4,5,6)
lea> flip = ?{'head': 67%, 'tail': 33%}
lea> flip 
head : 67/100
tail : 33/100
lea> flip$(10)
('head', 'head', 'head', 'head', 'head', 'tail', 'head', 'head', 'tail', 'tail')
lea> flipCount = ?{1: 67%, 0: 33%}
lea> flipCount2 = flipCount + ?flipCount
lea> flipCount4 = ?[4]flipCount
lea> :. flipCount4 
0 : 0.011859
1 : 0.096311
2 : 0.293311
3 : 0.397007
4 : 0.201511

Do you notice the syntax leap compared to Python statements?

Note that Leapp is not a true programming language. It is just a thin "syntactic sugar" layer on top of Python / Lea. The good news is that you can use standard Python syntax and put Leapp expressions as needed (or the opposite!) ; your favorite Python modules can be used as usual.

Lea features

Here are the main features of Lea :

  • scope : finite discrete probability distributions
  • can assign probabilities on any hashable Python object
  • standard distribution indicators + information theory
  • probability stored as integers (no rounding errors)
  • probability distribution calculus based on arithmetic, comparison, boolean operators and functions
  • generation of random values
  • joint tables, marginalisation
  • conditional probabilities
  • Bayesian networks
  • Markov chains (basic)
  • Leapp, a light PPL (probabilistic programming language) ^(^*^)^
  • comprehensive tutorials (Wiki)
  • runs on Python 2 or 3
  • open-source project, LGPL license

^(^*^)^ The "probabilistic programming" nature of Lea/Leapp is advocated in the small apologia [LeappPPLHelloWorld P("Hello world!") = 0.28].

To learn more, read the [LeappTutorial Lea tutorial - Leapp flavor] or the [LeaPyTutorial Lea tutorial - Python flavor].

For installation instructions, see [Installation].


Please send your comments, critics, suggestions, bug reports, … in English or French by E-mail to: pie.denis@skynet.be. You are more than welcome / bienvenus !

You can also post issues in the present project site.

Project author, administrator : Pierre Denis (Louvain-la-Neuve, Belgium)

Updated