Ejemplo n.º 1
0
def main(fname1, fname2):
    data = []
    ant = []

    # データの読み込み
    O_data = pd.read_csv(fname1)
    code_data = pd.read_csv(fname2)

    V_data = O_data.values
    V_code_data = code_data.values
    # np.random.shuffle(V_data) #ランダムに並び替え

    T_data = V_data.tolist()
    T_code_data = V_code_data.tolist()
    # データを0~1に標準化
    vmin = float(V_data.min())
    vmax = float(V_data.max())
    V_data = (V_data - vmin) / (vmax - vmin)

    data = V_data.tolist()  # 標準化されたデータのリスト
    X = []

    # ant.append(Ant.Ant([],0,0)) #root 根 サポート役
    for i in range(len(T_code_data)):  # アリ(データ)の初期化
        ant.append(Ant.d_Ant(data[i], i, 0, int(T_code_data[i][0])))
        X.append(T_data[i])  # cluster_Ant用
    # 木の構築
    count1 = 0  # 繰り返しの上限
    count2 = 0  # 接続済みアリのカウント
    while count1 < 1000 and count2 < len(data) - 1:
        count2 = 0
        for ai in ant[1:]:  # 0番目はサポート
            if ai.conect == False:
                a_pos = ant[ai.a_pos]
                build_organize(a_pos, ai, ant)
            else:
                count2 = count2 + 1
        count1 = count1 + 1

    # ----サポート(root)の子の中で一番類似するデータ----
    tmp = 0
    for i in ant[0].children:
        if Sim(ant[0], ant[i]) > tmp:
            tmp = Sim(ant[0], ant[i])
            ant[0].set_plus(i)
    # ---------------------------------------------------
    ant[0].set_parent(0)
    X = np.array(X)

    return ant, X, count1 - 1