Clustering Propagation Snapshots

import pandas as pd
import time
import os.path
import glob

import warnings
warnings.filterwarnings('ignore')
# install DenMune clustering algorithm using pip command from the offecial Python repository, PyPi
# from https://pypi.org/project/denmune/
!pip install denmune

# then import it
from denmune import DenMune
# clone datasets from our repository datasets
if not os.path.exists('datasets'):
  !git clone https://github.com/egy1st/datasets
Cloning into 'datasets'...
remote: Enumerating objects: 52, done.
remote: Counting objects: 100% (52/52), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 52 (delta 8), reused 49 (delta 8), pack-reused 0
Unpacking objects: 100% (52/52), done.
#@title  { run: "auto", vertical-output: true, form-width: "50%" }
dataset = "t7.10k" #@param ["t4.8k", "t5.8k", "t7.10k", "t8.8k"]
show_noize_checkbox = True #@param {type:"boolean"}
data_path = 'datasets/denmune/chameleon/'

# train file
data_file = data_path + dataset +'.csv'
X_train = pd.read_csv(data_file, sep=',', header=None)
from itertools import chain

# Denmune's Paramaters
knn = 39 # number of k-nearest neighbor, the only parameter required by the algorithm

# create list of differnt snapshots of the propagation
snapshots = chain([0], range(2,5), range(5,50,5), range(50, 100, 10), range(100,500,50), range(500,1000, 100), range(1000,3000, 250),range(3000,5500,500))

from IPython.display import clear_output
for snapshot in snapshots:
    print ("itration", snapshot )
    #clear_output(wait=True)
    dm = DenMune(train_data=X_train, k_nearest=knn, rgn_tsne=False, prop_step=snapshot)
    labels, validity = dm.fit_predict(show_analyzer=False, show_noise=False)
itration 0
../_images/output_5_1.png
itration 2
../_images/output_5_3.png
itration 3
../_images/output_5_5.png
itration 4
../_images/output_5_7.png
itration 5
../_images/output_5_9.png
itration 10
../_images/output_5_11.png
itration 15
../_images/output_5_13.png
itration 20
../_images/output_5_15.png
itration 25
../_images/output_5_17.png
itration 30
../_images/output_5_19.png
itration 35
../_images/output_5_21.png
itration 40
../_images/output_5_23.png
itration 45
../_images/output_5_25.png
itration 50
../_images/output_5_27.png
itration 60
../_images/output_5_29.png
itration 70
../_images/output_5_31.png
itration 80
../_images/output_5_33.png
itration 90
../_images/output_5_35.png
itration 100
../_images/output_5_37.png
itration 150
../_images/output_5_39.png
itration 200
../_images/output_5_41.png
itration 250
../_images/output_5_43.png
itration 300
../_images/output_5_45.png
itration 350
../_images/output_5_47.png
itration 400
../_images/output_5_49.png
itration 450
../_images/output_5_51.png
itration 500
../_images/output_5_53.png
itration 600
../_images/output_5_55.png
itration 700
../_images/output_5_57.png
itration 800
../_images/output_5_59.png
itration 900
../_images/output_5_61.png
itration 1000
../_images/output_5_63.png
itration 1250
../_images/output_5_65.png
itration 1500
../_images/output_5_67.png
itration 1750
../_images/output_5_69.png
itration 2000
../_images/output_5_71.png
itration 2250
../_images/output_5_73.png
itration 2500
../_images/output_5_75.png
itration 2750
../_images/output_5_77.png
itration 3000
../_images/output_5_79.png
itration 3500
../_images/output_5_81.png
itration 4000
../_images/output_5_83.png
itration 4500
../_images/output_5_85.png
itration 5000
../_images/output_5_87.png
from PIL import Image

# collect immages for each snapshot automatically by the algorithm in a folder named propagation
images = []
prop_folder = 'propagation'
img_files = os.listdir(prop_folder)
img_files = [os.path.join(prop_folder, f) for f in img_files]
sorted_files = sorted (img_files, key=os.path.getmtime)
for filename in sorted_files:
  im = Image.open(filename)
  images.append(im)

# create annimated gif to show evolution of the propagation
images[0].save('propagation.gif', save_all=True, append_images=images[1:], optimize=False, duration=800, loop=1)