From: Nate E TeBlunthuis Date: Sat, 15 May 2021 02:10:36 +0000 (-0700) Subject: script for picking the best clustering given constraints X-Git-Url: https://code.communitydata.science/cdsc_reddit.git/commitdiff_plain/87ffaa6858919bd830694d60dd4fc7b1857b462a?ds=sidebyside;hp=-c script for picking the best clustering given constraints --- 87ffaa6858919bd830694d60dd4fc7b1857b462a diff --git a/clustering/pick_best_clustering.py b/clustering/pick_best_clustering.py new file mode 100644 index 0000000..91c443e --- /dev/null +++ b/clustering/pick_best_clustering.py @@ -0,0 +1,29 @@ +import fire +import pandas as pd +from pathlib import Path +import shutil + +selection_data="/gscratch/comdata/output/reddit_clustering/subreddit_comment_authors-tf_10k_LSI/affinity/selection_data.csv" + +outpath = 'test_best.feather' + +# pick the best clustering according to silhouette score subject to contraints +def pick_best_clustering(selection_data, output, min_clusters, max_isolates): + df = pd.read_csv(selection_data,index_col=0) + df = df.sort_values("silhouette_score") + + # not sure I fixed the bug underlying this fully or not. + df['n_isolates_str'] = df.n_isolates.str.strip("[]") + df['n_isolates_0'] = df['n_isolates_str'].apply(lambda l: len(l) == 0) + df.loc[df.n_isolates_0,'n_isolates'] = 0 + df.loc[~df.n_isolates_0,'n_isolates'] = df.loc[~df.n_isolates_0].n_isolates_str.apply(lambda l: int(l)) + + best_cluster = df[(df.n_isolates <= max_isolates)&(df.n_clusters >= min_clusters)].iloc[df.shape[1]] + + print(best_cluster.to_dict()) + best_path = Path(best_cluster.outpath) / (str(best_cluster['name']) + ".feather") + + shutil.copy(best_path,output) + +if __name__ == "__main__": + fire.Fire(pick_best_clustering)