xflr6 / concepts Goto Github PK
View Code? Open in Web Editor NEWFormal Concept Analysis with Python
Home Page: https://concepts.readthedocs.io
License: MIT License
Formal Concept Analysis with Python
Home Page: https://concepts.readthedocs.io
License: MIT License
Hi,
I found quite counter-intuitive (for me) API naming.
In case of _common.Concept
we have
@property
def objects(self) -> typing.Tuple[str]:
"""The objects subsumed by the concept."""
return self.extent.members()
In case of lattice_members.Concept
we have
@property
def extent(self) -> typing.Tuple[str, ...]:
"""The objects subsumed by the concept.
Example:
>>> import concepts
>>> lattice = concepts.Context.fromstring(concepts.EXAMPLE).lattice
>>> lattice['+1',].extent
('1sg', '1pl')
"""
return self._extent.members()
and Concept.objects works differently.
I would prefer to have same API, that is, Vector
extent can be hidden in concept._extent
property, public list of members names can be concept.extent
or concept.objects
and original concept.objects
can be renamed.
To recreate the error try making a context with only one object.
The issue also arises when there is only one feature.
Is there a scalable way to deserialize lattice objects to disk? Especially when concept lattices are large, I want to avoid recomputing them. However, for large lattices the max recursion depth is hit quickly when pickling. Increasing the max recursion depth may help in border cases, but is not a scalable solution. I was thinking about printing the lattice information to disk print(lattice, file=lattice.txt)
, but I do not know how I could possibly reconstruct a lattice object from that information.
Is a feature like this available?
Don't know is this bug or a feature... but when drawing the lattice the labels at middle layers are missing !!!
Not like here : https://concepts.readthedocs.io/en/stable/_images/relations.svg
here is the csv..
,does_carry_transport,has_wheels,does_drive_is_driven,has_a_seat_seats,made_of_metal
bus0,X,X,X,,
bus1,,X,X,X,
bus2,X,X,X,,
bus3,X,,X,X,
bus4,,X,X,X,
bus5,X,,X,X,
bus6,,X,,X,X
bus7,,X,X,,X
bus8,,X,X,,X
bus9,X,X,,,X
bus10,X,X,X,,
bus11,X,,,X,X
bus12,,X,,X,X
bus13,X,X,X,,
bus14,X,X,,X,
bus15,,X,X,X,
bus16,X,X,,,X
bus17,,X,X,X,
bus18,X,X,,,X
bus19,X,X,,X,
It seems that currently, context's concepts are accessible only through the lattice representation, through the (implicitly protected) attribute _concepts
.
Accessing the Concept
instances is necessary for various reasons, including the mapping of a concept with its node in the lattice representation.
Hack: use _concepts
even if it's not public API.
Hello!
I'm trying to improve my FCA libraries performance benchmark (https://github.com/EgorDudyrev/FCApy/tree/feature/benchmarking/notebooks/Performance_Benchmark). But I have some problems saving concepts
lattice visualization to a file.
I use the function context.lattice.graphviz('concepts', render=True, )
to save a visualization into a file 'concepts.pdf'. It works for a small context (like 'animal_movement'). But when applied to 'Bob Ross elements-by-episode' dataset it results in a very wide and totally white pdf file.
What is the proper way to save (big) lattice visualization to a file? Can it be png file instead of pdf?
The code to reproduce the error:
import concepts import pandas as pd fname = 'bob_ross.csv' !wget -O {fname} -q https://raw.githubusercontent.com/fivethirtyeight/data/master/bob-ross/elements-by-episode.csv df = pd.read_csv(fname) df['EPISODE_TITLE'] = df['EPISODE']+' '+df['TITLE'] df = df.drop(['EPISODE','TITLE'],1).set_index('EPISODE_TITLE').astype(bool) context = concepts.Context(df.index, df.columns, df.values) context.lattice.graphviz('concepts', render=True, );
When working with larger contexts, the labels in the diagrams become hard to read. For first insights it would be sufficient to see the number of objects belonging to each concept (i.e. count of the full concept extent , or count of the irreducible objects in this concept).
This visualization was used in Toscana, Cernato and ConExp (if you're familiar with either of these tools), e.g. here
you can see a concept lattice in Cernato that has some object/extent labels closed (count only), and some open (list of objects).
How difficult would it be to add this? Do you think it's a valuable contribution?
Edit: For displaying the content count of irreducible objects the following works fine
....lattice.graphviz(make_object_label=lambda x: str(len(list(x))))
So maybe it's just about providing the full extent to the render function?
Hello,
Have you consider to allow the creation of a formal context based on a pandas DataFrame, which could be a sparse matrix (with empty cells and cells filled with 'X' or 1) or a binary matrix (filled with 0/1) ?
In my current work, I use a pandas dataframe filled with 'X' and blank cells, as needed by the package, but I have to export the file in a csv file before re-opening it with the concepts.Context.fromfile() method, which is not practical.
Thanks.
Many thanks for your work on this! After playing around with this for a while I inevitably wound up with some messy lattices, so I was wondering whether you have any plans to include simple lattice reduction techniques based on stability, support and the like in concepts
.
I came across this repository with an MIT-licensed Python implementation of lattice reduction, and if it's of interest I could try to integrate that in this library.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.