Formal Concept Analysis with Python
Project description
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.
Links
Documentation: https://concepts.readthedocs.io
Changelog: https://concepts.readthedocs.io/en/latest/changelog.html
Issue Tracker: https://github.com/xflr6/concepts/issues
Download: https://pypi.org/project/concepts/#files
Installation
This package runs under Python 2.7 and 3.5+, use pip to install:
$ pip install concepts
This will also install the bitsets and graphviz packages from PyPI as required dependencies.
Rendering lattice graphs depends on the Graphviz software. Make sure its dot executable is on your systems’ path.
Quickstart
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...>
Further reading
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
See also
The implementation is based on these Python packages:
The following package is build on top of concepts:
features – Feature set algebra for linguistics
If you want to apply FCA to bigger data sets, you might want to consider other implementations based on more sophisticated algorithms like In-Close or Fcbo.
License
Concepts is distributed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file concepts-0.9.2.zip
.
File metadata
- Download URL: concepts-0.9.2.zip
- Upload date:
- Size: 240.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8bbfa9ffdf89cc6e13c79a902474086797500b31d043604aa1d63bfe5faada2c |
|
MD5 | 89c3f4f1cafb623f2f1781c49d004cf8 |
|
BLAKE2b-256 | 3110c6324c005e0eecacc806f142f3e4a64c42edebe879e3842d2a19be7033b7 |
File details
Details for the file concepts-0.9.2-py2.py3-none-any.whl
.
File metadata
- Download URL: concepts-0.9.2-py2.py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4acfb679124f9c58216febf9345c4dbd682f93d8e48f43ce35070c9a8e78db2d |
|
MD5 | f4127c2f8d5946fbf4725ea7e6814738 |
|
BLAKE2b-256 | 3cde1a2bf3f0f0da48d9e9cc746e550fd7169507fba205184b1af7e940163623 |