A python package to work with Formal Concept Analysis (FCA).
The package is written while working in ISSA laboratory of HSE Moscow.
FCApy can be installed from PyPI:
pip install fcapy
The library has no strict dependencies. However, one would better install it with all the additional packages:
pip install fcapy[all]
The library implements the main artifacts from FCA theory:
- a formal context (
context
subpackage), - and a concept lattice (
lattice
subpackage).
There are also some additional subpackages:
visualizer
to visualize the lattices,mvcontext
implementing pattern structures and a many valued context,poset
implementing partially ordered sets,- and
ml
to test FCA in supervised machine learning scenario.
The following repositories complement the package:
The context
subpackage implements a formal context from FCA theory.
Formal context K = (G, M, I)
is a triple of set of objects G
, set of attributes M
, and mapping I: G x M
between them. A natural way to represent a formal context is a binary table. The rows of such table represent objects G
, columns represent attributes M
and crosses in the table are elements from the mapping I
.
FormalContext
class provides two main functions:
extension( attributes )
- return a maximal set of objects which shareattributes
intention( objects )
- return a maximal set of attributes shared byobjects
These functions are also known as ''prime operations'' (denoted by '
) or ``arrow operations''.
For example, 'animal_movement' context shows the connection between animals (objects) and actions (attributes)
!wget -q https://raw.githubusercontent.com/EgorDudyrev/FCApy/main/data/animal_movement.csv
from fcapy.context import FormalContext
K = FormalContext.read_csv('animal_movement.csv')
# Print the first five objects data
print(K[:5])
> FormalContext (5 objects, 4 attributes, 7 connections)
> |fly|hunt|run|swim|
> dove | X| | | |
> hen | | | | |
> duck | X| | | X|
> goose| X| | | X|
> owl | X| X| | |
Now we can select all the animals who can both fly
and swim
:
print(K.extension( ['fly', 'swim'] ))
> ['duck', 'goose']
and all the actions both dove
and goose
can perform:
print(K.intention( ['dove', 'goose'] ))
> ['fly']
So we state the following:
- the animals who can both
fly
andswim
are onlyduck
andgoose
; - the only action both
dove
andgoose
do isfly
. At least, this is formally true in 'animal_movement' context.
A detailed example is given in this notebook.
The lattice
subpackage implements the concept lattice from FCA theory. The concept lattice L
is a lattice of (formal) concepts.
A formal concept is a pair (A, B)
of objects A
and attributes B
. Objects A
are all the objects sharing attributes B
. Attributes B
are all the attributes describing objects A
.
In other words:
A = extension(B)
B = intention(A)
A concept (A1, B1)
is bigger (more general) than a concept (A2, B2)
if it describes the bigger set of objects (i.e. A2
is a subset of A1
, or, equivalently, B1
is a subset of B2
).
A lattice is an ordered set with the biggest and the smallest element. Thus the concept lattice is an ordered set of (formal) concepts with the biggest (most genereal) concept and the smallest (least general) concept.
Applied to 'animal_movement' context we get this ConceptLattice:
# Load the formal context
!wget -q https://raw.githubusercontent.com/EgorDudyrev/FCApy/main/data/animal_movement.csv
from fcapy.context import FormalContext
K = FormalContext.read_csv('animal_movement.csv')
# Create the concept lattice
from fcapy.lattice import ConceptLattice
L = ConceptLattice.from_context(K)
The lattice contains 8 concepts:
print(len(L))
> 8
with the most general and the most specific concepts indexes:
print(L.top_concept_i, L.bottom_concept_i)
> 0, 7
One can draw Hasse diagram of the lattice by visualizer
subpackage:
import matplotlib.pyplot as plt
from fcapy.visualizer import ConceptLatticeVisualizer
plt.figure(figsize=(10, 5))
vsl = ConceptLatticeVisualizer(L)
vsl.draw_networkx(max_new_extent_count=5, flg_draw_node_indices=True)
plt.xlim(-0.7,0.7)
plt.axis(False)
plt.tight_layout()
plt.show()
How to read the visualization:
- the concept #3 contains all the animals (objects) who can
fly
. These aredove
,goose
andduck
. The latter two are taken from the more specific (smaller) concepts; - the concept #4 represents all the animals who can both
run
(acc. to the more general concept #2) andhunt
(acc. to the more general concept #1); - etc.
You can find more tutorials in FCApy_tutorials repository.
They include some info on the use of FCA framework applied to non-binary data (MVContext), and supervised machine learning (DecisionLattice).