[ANN] JuliaTDA: an organization for doing Topological Data Analysis in Julia

I created this organization with the goal to unite some algorithms used in Topological Data Analysis:
JuliaTDA · GitHub .

The motivation for me doing this in Julia:

  1. I like the Mapper algorithm very much (for more info, see here), but all implementations of it I’ve seen are abandoned or incomplete. For example, as I understand, one of the most important analysis we can do with the mapper graph is to be able to analyse its nodes, even with respect to categorical variables (consider a dataset of medical measurements, and the interesting column is a categorical one of the type “sick” or “health”; I want to be able to color the nodes using this column). So I used the mapper implementation as a mean to study Julia and return to study topological data analysis.
  2. Implementing the Mapper in R in a performant way was tragic, and often involved using some libraries written in C to be fast, avoiding loops, and so on (I even had to use some tricks with dataframes to use tidyr). Even so, whenever I had to calculate a vector of distances from one point to all other points, it wouldn’t fit the RAM. In Julia in can do any loops I need without worrying about performance.

For now, I’ve sketched the packages:

  • GeometricDatasets.jl: to create and manipulate datasets (circles, torus, squares, etc), rotate, translate, and so on.
  • TDAmapper.jl: implementation of the Mapper and BallMapper algorithms. [Trivia: I studied under Facundo Mémoli (one of the authors of the original mapper paper) supervision].
  • ToMATo.jl: a topological-based clustering method that uses 0-d persistence to estimate a reasonable number of clusters; then, create a pseudo-gradient tree to define the clusters.

I am new to Julia, so some of the above packages may contain monstruosities. I am starting to write the documentation for them using Quarto.

The excellent Ripserer and PersistenceDiagrams packages were already written in Julia, for my relief, which greatly shorten the work needed to do TDA in Julia with respect to persistent homology.

I hope to find some more TDA entusiasts around here so we can do some magic together!

21 Likes

Nice, is there a roadmap or a todolist for this organization ?

1 Like

Not yet! I finished my PhD in TDA 3 years ago, and since then I’ve read just a few papers with the novelties of the area. So I don’t know what kinds of packages would be useful for research and/or applications today.

The short-term goals are finish and document completely (with lots of examples) the Mapper and ToMATo packages.

I know there are some statistical ways to estimate the best parameters for the Mapper, and maybe some ways to use it in union with machine learning methods (eg random forest), but I’m kind of lost about these topics.

The best way to create a useful roadmap is people opening issues or similar on the organization (or answering here!).

2 Likes

Hey, @vituri. I’m interested in learning TDA, and I’d love to contribute. I’m checking the book you are writing. Very nice. I have some experience with Julia, so perhaps I can help a bit.

1 Like

Hi, Davi!

That’s very good to hear! I will give a minicourse on TDA on July here in Brazil, so I guess there is a lot to do! I need to refine the book, keep writing it, find more examples for the presentation and so on. There is plenty of space to help (and learn TDA while doing so).

We can keep in touch at the slack channel:
https://app.slack.com/client/T68168MUP/C074SEGK71N

1 Like

Please prefer Zulip over Slack. These discussions are useful and helpful for future members of the community :pray:

1 Like

Sure thing!

I never used zulip, but here is a TDA channel:
https://julialang.zulipchat.com/#narrow/stream/439840-topological-data-analysis

3 Likes

Nice. I also prefer Julia. I’m rewatching a course I took on TDA. The course used ghuddi (python tda package). I’ll try to do the exercises in Julia.

1 Like

@vituri , do you know how to compute the Vietoris-Rips complexes for a given thickenning in Julia? I’m looking at the Ripserer.jl, but I was not able to figure out if it is possible to get the simplicial complex from it.

You want the simplicial complex itselt and not the barcodes, is that right? I think Ripserer uses several tricks to calculate the (co)homology fast, and maybe it does not have the complete VR-complex at some given time. I never dig into the algorithm, it is just a guess.

In any case, if you have the distance matrix some kind of checking can be done to create the union of simplexes.

Yeah, I was wondering if there is a simple algorithm I could implement for Rips, since it is supposed to be easier/less costly than the Chec.

Ok, so there is ComputationalHomology.jl, which is not actually a published package, but the has the code for a bunch of stuff, including the construction for the complex. I’m taking a look at the code to get a better understanding.

I see that this package is abandoned… Do you want to “steal” the useful parts and create a new package added to JuliaTDA (with the proper credits, of course)? I am willing to create a package to manipulate simplicial complexes and calculate some things, but I am not sure about the applications, since most persistent homology algorithms do not use the simplicial complex itself

I have a significant interest in a Julia implementation of Čech complex construction and would be interested in contributing.

Let’s start a package before our enthusiasm wades off! Join our slack channel so we can start writing the details. We should define an efficient way to store simplicial complexes and after that we can do some operations with it (like “take the rips complex out of this weigthed graph (ie. Metric space))”. I think this is a good starting point:

1 Like

I think this simplex tree structure has been implemented in Hodge.jl.

1 Like