Community detection in graphs but with my actual data.

Python code via.

import networkx as nx
import sqlite3
import re
DG = nx.DiGraph()
 
datey = re.compile('.*\d{4}-\d{2}-\d{2}.*')
def exclude_datey(itr, k):
    for x in itr:
        if datey.match(x[k]) is None:
            yield x
 
def dict_factory(cursor, row):
    "sqlite rows turn into dicts"
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d
 
 
conn = sqlite3.connect('/home/abrahms/.emacs.d/org-roam.db')
conn.row_factory = dict_factory
cursor = conn.cursor()
res = cursor.execute("select title from nodes;")
val = res.fetchall()
for e in exclude_datey(val, 'title'):
    DG.add_node(e['title'])
 
 
res = cursor.execute("""
select n1.title as 'source', n2.title as 'dest'
from links l
left join nodes n1
  on l.source=n1.id
left join nodes n2
  on l.dest = n2.id
where type = '"id"';
""")
 
for e in exclude_datey(exclude_datey(res, 'dest'), 'source'):
    if e['source'] is None or e['dest'] is None:
        print(e)
    DG.add_edge(e['source'], e['dest'])
 
# # communities_generator = nx.community.girvan_newman(DG)
# # communities = nx.community.greedy_modularity_communities(DG)
# # communities = nx.community.louvain_communities(DG, resolution=0.000001)
# # communities = nx.community.asyn_fluidc(DG, 20)
# # communities = nx.community.k_clique_communities(DG, 20)
# communities = nx.community.asyn_lpa_communities(DG)
# print("Communities:")
# # top_level = next(communities_generator)
# # next_level = next(communities_generator)
# # print("Next level communities:")
# for i in communities:
#     if len(i) == 1:
#         # boring
#         continue
#     print(f"- {i}\n\n")
 
import matplotlib.pyplot as plt
nx.draw_networkx_nodes(DG, pos=nx.spring_layout(DG))
nx.draw_networkx_labels(DG, pos=nx.spring_layout(DG))
plt.show()

Thus far, the above code hasn’t yielded particularly interesting clusters.