Formal Concept Analysis with Python
Concepts is a simple Python implementation of Formal Concept Analysis (FCA).
FCA provides a mathematical model for describing a set of objects (e.g. King Arthur, Sir Robin, and the holy grail) with a set of properties (e.g. human, knight, king, and mysterious) which each of the objects either has or not. A table called formal context defines which objects have a given property and vice versa which properties a given object has.
This package runs under Python 2.7 and 3.5+, use pip to install:
$ pip install concepts
Rendering lattice graphs depends on the Graphviz software. Make sure its dot executable is on your systems’ path.
Create a formal context defining which object has which property, e.g. from a simple ASCII-art style cross-table with object rows and property columns (alternatively load a CXT or CSV file):
>>> from concepts import Context >>> c = Context.fromstring(''' ... |human|knight|king |mysterious| ... King Arthur| X | X | X | | ... Sir Robin | X | X | | | ... holy grail | | | | X | ... ''') >>> c # doctest: +ELLIPSIS <Context object mapping 3 objects to 4 properties [dae7402a] at 0x...>
Query common properties of objects or common objects of properties (derivation):
>>> c.intension(['King Arthur', 'Sir Robin']) ('human', 'knight') >>> c.extension(['knight', 'mysterious']) ()
Get the closest matching objects-properties pair of objects or properties (formal concepts):
>>> c['Sir Robin', 'holy grail'] (('King Arthur', 'Sir Robin', 'holy grail'), ()) >>> c['king',] (('King Arthur',), ('human', 'knight', 'king'))
Iterate over the concept lattice of all objects-properties pairs:
>>> for extent, intent in c.lattice: ... print('%r %r' % (extent, intent)) () ('human', 'knight', 'king', 'mysterious') ('King Arthur',) ('human', 'knight', 'king') ('holy grail',) ('mysterious',) ('King Arthur', 'Sir Robin') ('human', 'knight') ('King Arthur', 'Sir Robin', 'holy grail') ()
Make a Graphviz visualization of the lattice (use .graphviz(view=True) to directly render it and display the resulting PDF):
>>> c.lattice.graphviz() # doctest: +ELLIPSIS <graphviz.dot.Digraph object at 0x...>
The generation of the concept lattice is based on the algorithm from C. Lindig. Fast Concept Analysis. In Gerhard Stumme, editors, Working with Conceptual Structures - Contributions to ICCS 2000, Shaker Verlag, Aachen, Germany, 2000.
The included example CXT files are taken from Uta Priss’ FCA homepage
The implementation is based on these Python packages:
The following package is build on top of concepts:
- features – Feature set algebra for linguistics
Concepts is distributed under the MIT license.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for concepts-0.9.2-py2.py3-none-any.whl