Esempio n. 1
0
def get_behavior_df(date, cow_id, model1, model2):
    """ 個々の牛の1日分の行動分類を行う """
    print(sys._getframe().f_code.co_name, "実行中")
    print("行動分類を行います---:日付: ", date.strftime("%Y/%m/%d"), ", 個体番号: ", cow_id)
    filename = "behavior_classification/training_data/features.csv"
    existed = output_features.output_features(filename, date, cow_id)
    if (existed): # GPSデータが存在していれば
        ### 各特徴から行動を分類する ###
        df = pd.read_csv(filename, sep = ",", header = 0, usecols = [0,1,2,3,4,5,6,7,9], names=('Time', 'RCategory', 'WCategory', 'RTime', 'WTime', 'AccumulatedDis', 'Velocity', 'MVelocity', 'Distance')) # csv読み込み
        labels = []
        probs = []
        x1, x2, x3, x4, x5, x6, x7, x8 = df['RCategory'].tolist(), df['WCategory'].tolist(), df['RTime'].tolist(), df['WTime'].tolist(), df['AccumulatedDis'].tolist(), df['Velocity'].tolist(), df['MVelocity'].tolist(), df['Distance'].tolist()
        x = np.array((x1, x2, x3, x4, x5, x6, x7, x8)).T
        result1, prob1 = model1.predict(x), model1.predict_proba(x) # 休息セグメントの結果と確率
        result2, prob2 = model2.predict(x), model2.predict_proba(x) # 活動セグメントの結果と確率
        for a, b, c, d in zip(result1, result2, prob1, prob2):
            labels.append(a)
            labels.append(b)
            probs.append(np.insert(c, 2, 0.0))
            probs.append(d)
        # --- 復元 ---
        t_list = loading.make_time_list(date)
        zipped_t_list = regex.str_to_datetime(df['Time'].tolist())
        times, labels = postprocessing.decompress(t_list, zipped_t_list, labels)
        df = cut_used_time(times, labels, cow_id)
        return df
    else:
        t_list = loading.make_time_list(date)
        labels = [-1 for l in range(len(t_list))]
        df = cut_used_time(t_list, labels, cow_id)        
        return df
Esempio n. 2
0
            ), df['WTime'].tolist(), df['AccumulatedDis'].tolist(
            ), df['Velocity'].tolist(), df['MVelocity'].tolist(
            ), df['Distance'].tolist()
            x = np.array((x1, x2, x3, x4, x5, x6, x7, x8)).T
            result1 = model1.predict(x)
            result2 = model2.predict(x)
            prob1 = model1.predict_proba(x)
            prob2 = model2.predict_proba(x)
            print(result1)
            print(result2)
            for a, b, c, d in zip(result1, result2, prob1, prob2):
                if (c.max() >= 0.7 and a == 1):
                    labels.append(a)
                else:
                    labels.append(0)

            # --- 復元 ---
            zipped_t_list = regex.str_to_datetime(df['Time'].tolist())
            new_t_list, labels = postprocessing.decompress(
                t_list, zipped_t_list, labels)
            sum_rest = 0
            for i in labels:
                if (i == 0):
                    sum_rest += 5
            sum_rest_list.append(sum_rest)
        else:
            sum_rest_list.append(0)

    pd.DataFrame(date_list).to_csv("date.csv")
    pd.DataFrame(sum_rest_list).to_csv("testa.csv")