# -*- coding: utf-8 -*-
"""

"""

from NYC.pylouvain import *
import NYC.variance as variance
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.cluster import SpectralClustering
from sklearn.cluster import AffinityPropagation

filename1 = "D:\\JetBrains\\PcharmWorkSpace\\Paper2\\NYC\\data\\relationMatrixNYCForCommunity.csv"
py1 = PyLouvain.from_file(filename1)
py2 = PyLouvain.from_file(filename1)

# 未改进算法
partition1, q1 = py1.apply_method(9.79, 1, 0)
print("原louvain算法Modularity1:", q1)
print("原louvain算法 Community num1:", len(partition1))
print("原louvain算法 模块度1：", py1.compute_modularity(partition1))
print("原louvain算法区域站点数量的方差为：", variance.get_areasize_variance(partition1))
distanceSum1, distance_variance1 = variance.get_distance_variance(partition1)
print("原louvain算法区域调度距离的方差为：", distance_variance1)
print("原louvain算法区域调度总距离为：", distanceSum1)

print("---------------------------------------------------------------------------")
print("---------------------------------------------------------------------------")
partition2, q2 = py2.apply_method(9.794629671307227, 1.0, 1)
print("改进后louvain算法Modularity:", q2)
print("改进后louvain算法Community num:", len(partition2))
print("改进后louvain算法模块度：", py2.compute_modularity(partition2))
print("改进后louvain算法区域站点数量的方差为：", variance.get_areasize_variance(partition2))
distanceSum2, distance_variance2 = variance.get_distance_variance(partition2)
print("改进后louvain算法区域调度距离的方差为：", distance_variance2)
print("改进后louvain算法区域调度总距离为：", distanceSum2)

# 聚类算法
filename2= "D:\\JetBrains\\PcharmWorkSpace\\Paper2\\NYC\\data\\relationMatrixNYCForCluster.csv"
rmatrix = pd.read_csv(filename2, header=None)
cluster_num = 6

# 聚类算法Kmeans
# sc = KMeans(n_clusters=cluster_num, random_state=0).fit(rmatrix)

# 聚类算法谱聚类
sc = SpectralClustering(affinity="precomputed", n_clusters=cluster_num, random_state=0).fit(rmatrix)
labels1 = pd.DataFrame(sc.labels_)

partition_kmeans = []
kmeans_cluster0 = []
kmeans_cluster1 = []
kmeans_cluster2 = []
kmeans_cluster3 = []
kmeans_cluster4 = []
kmeans_cluster5 = []

for index in range(327):
 i = labels1[0][index]
 if i == 0:
     kmeans_cluster0.append(index)
 elif i == 1:
     kmeans_cluster1.append(index)
 elif i == 2:
     kmeans_cluster2.append(index)
 elif i == 3:
     kmeans_cluster3.append(index)
 elif i == 4:
     kmeans_cluster4.append(index)
 elif i == 5:
     kmeans_cluster5.append(index)

 partition_kmeans.append(kmeans_cluster0)
 partition_kmeans.append(kmeans_cluster1)
 partition_kmeans.append(kmeans_cluster2)
 partition_kmeans.append(kmeans_cluster3)
 partition_kmeans.append(kmeans_cluster4)
 partition_kmeans.append(kmeans_cluster5)

print("---------------------------------------------------------------------------")
print("---------------------------------------------------------------------------")
print("K-means算法区域站点数量的方差为：", variance.get_areasize_variance(partition_kmeans))
distanceSum2, distance_variance2 = variance.get_distance_variance(partition_kmeans)
print("K-means算法区域调度距离的方差为：", distance_variance2)
print("K-means算法区域调度总距离为：", distanceSum2)




