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

**URL:** <https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245>\
**Category:** Package Announcements\
**Tags:** math\
**Created:** [August 27, 2023, 4:55am UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245 "2023-08-27T04:55:28Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [August 27, 2023, 4:55am UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/1 "2023-08-27T04:55:28Z")

</div>

I created this organization with the goal to unite some algorithms used in Topological Data Analysis:  
[JuliaTDA · GitHub](https://github.com/JuliaTDA) .

The motivation for me doing this in Julia:

1. I like the Mapper algorithm very much (for more info, see [here](https://juliatda.github.io/TDAmapper.jl/mapper.html)), 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](https://github.com/JuliaTDA/GeometricDatasets.jl): to create and manipulate datasets (circles, torus, squares, etc), rotate, translate, and so on.
- [TDAmapper.jl](https://github.com/JuliaTDA/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](https://github.com/JuliaTDA/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](https://github.com/mtsch/Ripserer.jl) and [PersistenceDiagrams](https://github.com/mtsch/PersistenceDiagrams.jl) 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!

---

<div class="post-metadata">

**Author:** ![pnavaro](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pnavaro/32/5008_2.png) [@pnavaro](https://discourse.julialang.org/u/pnavaro)\
**Post date:** [August 27, 2023, 3:18pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/2 "2023-08-27T15:18:00Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [August 27, 2023, 3:53pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/3 "2023-08-27T15:53:35Z")

</div>

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!).

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [May 29, 2024, 8:10pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/4 "2024-05-29T20:10:11Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [May 29, 2024, 8:35pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/5 "2024-05-29T20:35:28Z")

</div>

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](https://app.slack.com/client/T68168MUP/C074SEGK71N)

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [May 29, 2024, 8:41pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/6 "2024-05-29T20:41:56Z")

</div>

> [@vituri](#):
>
> We can keep in touch at the slack channel:  
> [Slack](https://app.slack.com/client/T68168MUP/C074SEGK71N)

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

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [May 29, 2024, 8:45pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/7 "2024-05-29T20:45:36Z")

</div>

Sure thing!

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

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [June 2, 2024, 12:28am UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/8 "2024-06-02T00:28:51Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [June 6, 2024, 7:44pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/9 "2024-06-06T19:44:04Z")

</div>

@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.

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [June 6, 2024, 7:52pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/10 "2024-06-06T19:52:15Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [June 6, 2024, 7:53pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/11 "2024-06-06T19:53:31Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [June 6, 2024, 8:06pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/12 "2024-06-06T20:06:27Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [June 6, 2024, 10:50pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/13 "2024-06-06T22:50:12Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![brainandforce](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/brainandforce/32/211054_2.png) [@brainandforce](https://discourse.julialang.org/u/brainandforce)\
**Post date:** [June 6, 2024, 11:24pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/14 "2024-06-06T23:24:54Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vituri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vituri/32/50422_2.png) [@vituri](https://discourse.julialang.org/u/vituri)\
**Post date:** [June 6, 2024, 11:49pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/15 "2024-06-06T23:49:28Z")

</div>

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:

> **[GitHub - peekxc/simplextree: R package for simplifying general computation on...](https://github.com/peekxc/simplextree)**
>
> R package for simplifying general computation on simplicial complexes - peekxc/simplextree

---

<div class="post-metadata">

**Author:** ![davibarreira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davibarreira/32/20270_2.png) [@davibarreira](https://discourse.julialang.org/u/davibarreira)\
**Post date:** [June 13, 2024, 7:10pm UTC](https://discourse.julialang.org/t/ann-juliatda-an-organization-for-doing-topological-data-analysis-in-julia/103245/16 "2024-06-13T19:10:25Z")

</div>

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