Package: fcapy
FCApyA python package to work with Formal Concept Analysis (FCA).InstallFCApy can be installed fromPyPI:pip install fcapyGentle Intro to Formal Concept AnalysisFormal Concept Analysis (FCA)is a mathematical framework aimed at simplifying the data analysis.To achieve so, FCA introduces aconcept lattice: a hierarchical representation of the dataset.
A concept lattice can be visualized in an appealing tree-like manner,
while keeping all the dependencies of the corresponding binary dataset.The following Figure compares the tabular, Formal Context-based data representation (on the left),
with the hierarchical, Concept Lattice-based data representation on the right. Both representations describe the same"Live in water"dataset.
But the right subfigure also unravels the dichotomy between the ones who "can move" (i.e. animals) and the ones who "needs chlorophyll" (i.e. plants).The right subfigure highlights 'the structure' of the data.
Yet, it still contains exactly the same dependencies as the tabular view on the left.
For example, the table says that a "fish leech" is something that "needs water to live", "lives in water", and "can move".
The same description can be derived from the diagram:
a "fish leech" "can move" and "needs water to live" as it derives from the respectively entitled nodes,
and a "fish leech" "lives in water" since its node is coloured blue.Formal Concept Analysis concentrates on analysing binary datasets.
However, there are many extensions to analyse more complex data:
e.g. Pattern Structures, Relational Concept Analysis, Fuzzy Concept Analysis, etc.
Also, in general, any kind of data can be binarized to some extent.
For example, decision tree algorithms intrinsically binarize the data all the time.Source code to generate FigureCurrent state of FCApyThe library implements the main artifacts from FCA theory:a formal context(contextsubpackage), anda concept lattice(latticesubpackage).There are also some additional subpackages:visualizerto visualize the lattices,mvcontextimplementing pattern structures and a many valued context,posetimplementing partially ordered sets, andmlto test FCA in supervised machine learning scenario.The following repositories complement the package:FCApy_tutorialsFCApy_benchmarksFormal contextNB:The following code suits the current GitHub version of the package.
If it does not run well on package installed from PyPi,
please consider the corresponding README available on PyPi.Thecontextsubpackage implements a formal context from FCA theory.Formal contextK = (G, M, I)is a triplet of set of objectsG, set of attributesM, and mappingI: G x Mbetween them.
A natural way to represent a formal context is a binary table.
The rows of such table represent objectsG, columns represent attributesMand crosses in the table are elements from the mappingI.FormalContextclass provides two main functions:extension( attributes )- return a maximal set of objects which shareattributesintention( objects )- return a maximal set of attributes shared byobjectsThese 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)importpandasaspdfromfcapy.contextimportFormalContexturl='https://raw.githubusercontent.com/EgorDudyrev/FCApy/main/data/animal_movement.csv'K=FormalContext.from_pandas(pd.read_csv(url,index_col=0))# Print the first five objects dataprint(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 bothflyandswim:print(K.extension(['fly','swim']))['duck', 'goose']and all the actions bothdoveandgoosecan perform:print(K.intention(['dove','goose']))['fly']So we state the following:the animals who can bothflyandswimare onlyduckandgoose;the only action bothdoveandgoosedo isfly.
At least, this is formally true in 'animal_movement' context.A detailed example is given inthis notebook.Concept latticeThelatticesubpackage implements the concept lattice from FCA theory.
The concept latticeLis a lattice of (formal) concepts.A formal concept is a pair(A, B)of objectsAand attributesB.
ObjectsAare all the objects sharing attributesB.
AttributesBare all the attributes describing objectsA.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.A2is a subset ofA1, or, equivalently,B1is a subset ofB2).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 contextimportpandasaspdfromfcapy.contextimportFormalContexturl='https://raw.githubusercontent.com/EgorDudyrev/FCApy/main/data/animal_movement.csv'K=FormalContext.from_pandas(pd.read_csv(url,index_col=0))# Create the concept latticefromfcapy.latticeimportConceptLatticeL=ConceptLattice.from_context(K)The lattice contains 8 concepts:print(len(L))8with the most general and the most specific concepts indexes:print(L.top,L.bottom)0, 7One can draw line diagram of the lattice byvisualizersubpackage:importmatplotlib.pyplotaspltfromfcapy.visualizerimportLineVizNxfig,ax=plt.subplots(figsize=(10,5))vsl=LineVizNx()vsl.draw_concept_lattice(L,ax=ax,flg_node_indices=True)ax.set_title('"Animal movement" concept lattice',fontsize=18)plt.tight_layout()plt.show()How to read the visualization:the concept #3 contains all the animals (objects) who canfly.
These aredove,gooseandduck. The latter two are taken from the more specific (smaller) concepts;the concept #4 represents all the animals who can bothrun(acc. to the more general concept #2) andhunt(acc. to the more general concept #1);etc.The other FCA artifactsYou can find tutorials inFCApy_tutorialsrepository.They include some info on the use of FCA framework applied to non-binary data (MVContext),
and supervised machine learning (DecisionLattice).