def output_features(self): """ 日付と牛の個体番号からその日のその牛の位置情報を用いて特徴のファイル出力を行う Parameters filename : 保存するファイルの絶対パス date : 日付 : datetime cow_id : 牛の個体番号.この牛の特徴を出力する """ t_list, p_list, d_list, v_list, a_list = loading.load_gps( self.cow_id, self.date) # 1日分のデータ t_list, p_list, d_list, v_list, a_list = loading.select_used_time( t_list, p_list, d_list, v_list, a_list, self.date) #日本時間に直した上で牛舎内にいる時間を除く if (len(p_list) != 0 and len(d_list) != 0 and len(v_list) != 0): # データがない場合は飛ばす # 畳み込み # v_list = preprocessing.convolution(v_list, 3) # d_list = preprocessing.convolution(d_list, 3) # t_list = preprocessing.elimination(t_list, 3) # p_list = preprocessing.elimination(p_list, 3) # a_list = preprocessing.elimination(a_list, 3) # 圧縮操作 zipped_list = self.compress(t_list, p_list, d_list, v_list) # 圧縮する # ---特徴抽出--- feature_list = self.output_feature_info( [row[0] for row in zipped_list], [row[1] for row in zipped_list], [row[2] for row in zipped_list], [row[3] for row in zipped_list], [row[4] for row in zipped_list]) # 特徴を出力する return feature_list # 特徴出力に成功したのでTrueを返す else: return [] # データがなければFalseを返す
def output_features(self): """ 日付と牛の個体番号からその日のその牛の位置情報を用いて特徴のファイル出力を行う Parameters filename : 保存するファイルの絶対パス date : 日付 : datetime cow_id : 牛の個体番号.この牛の特徴を出力する """ start = self.date end = self.date + datetime.timedelta(days=1) time_list, position_list, distance_list, velocity_list, angle_list = loading.load_gps( self.cow_id, start, end) #2次元リスト (1日分 * 日数分)だが1日ずつの指定のため要素数は1 t_list, p_list, d_list, v_list, a_list = time_list[0], position_list[ 0], distance_list[0], velocity_list[0], angle_list[0] # ---前処理--- t_list, p_list, d_list, v_list, a_list = loading.select_used_time( t_list, p_list, d_list, v_list, a_list) #日本時間に直した上で牛舎内にいる時間を除く if (len(p_list) != 0 and len(d_list) != 0 and len(v_list) != 0): # データがない場合は飛ばす # 畳み込み #v_list = preprocessing.convolution(v_list, 3) #d_list = preprocessing.convolution(d_list, 3) #t_list = preprocessing.elimination(t_list, 3) #p_list = preprocessing.elimination(p_list, 3) #a_list = preprocessing.elimination(a_list, 3) # 圧縮操作 zipped_list = self.compress(t_list, p_list, d_list, v_list) # 圧縮する # ---特徴抽出--- self.output_feature_info([row[0] for row in zipped_list], [row[1] for row in zipped_list], [row[2] for row in zipped_list], [row[3] for row in zipped_list], [row[4] for row in zipped_list]) # 特徴を出力する return True # 特徴出力に成功したのでTrueを返す else: return False # データがなければFalseを返す
import behavior_classification.functions.analyzing as analyzing import behavior_classification.functions.regex as regex import behavior_classification.functions.postprocessing as postprocessing import behavior_classification.functions.output_features as output_features import image.adjectory_image as disp """ 基本的な手順はoutput_features.output_features()に集約されているが,個々のグラフなどの可視化にはこちらのメインを活用 """ if __name__ == '__main__': filename = "behavior_classification/training_data/features.csv" start = datetime.datetime(2018, 12, 20, 0, 0, 0) end = datetime.datetime(2018, 12, 21, 0, 0, 0) sum_rest_list = [] print(os.getcwd()) time_list, position_list, distance_list, velocity_list, angle_list = loading.load_gps( 20158, start, end) #2次元リスト (1日分 * 日数分) for (t_list, p_list, d_list, v_list, a_list) in zip(time_list, position_list, distance_list, velocity_list, angle_list): start += datetime.timedelta(days=1) date_list.append(start.strftime("%Y-%m-%d")) if (len(p_list) != 0): # ---前処理--- t_list, p_list, d_list, v_list, a_list = loading.select_used_time( t_list, p_list, d_list, v_list, a_list) #日本時間に直した上で牛舎内にいる時間を除く # 畳み込み v_list = preprocessing.convolution(v_list, 3) d_list = preprocessing.convolution(d_list, 3) t_list = preprocessing.elimination(t_list, 3) p_list = preprocessing.elimination(p_list, 3)
graze_dist_r = get_prior_dist("rest", "graze", rest_usecols, rest_names) # 採食の分布 graze_dist_a = get_prior_dist("act", "graze", walk_usecols, walk_names) # 採食の分布 # 事前パラメータを用意 cov_matrixes_r = [rest_dist.get_cov_matrix(), graze_dist_r.get_cov_matrix()] mu_vectors_r = [rest_dist.get_mean_vector(), graze_dist_r.get_mean_vector()] pi_vector_r = [0.4, 0.6] alpha_vector_r = [1, 1] cov_matrixes_w = [walk_dist.get_cov_matrix(), graze_dist_a.get_cov_matrix()] mu_vectors_w = [walk_dist.get_mean_vector(), graze_dist_a.get_mean_vector()] pi_vector_w = [0.3, 0.7] alpha_vector_w = [1, 1] max_iterater = 100 # テスト用の1日のデータを読み込み time_list, position_list, distance_list, velocity_list, angle_list = loading.load_gps(target_cow_id, start, end) #2次元リスト (1日分 * 日数分) if (len(position_list[0]) != 0): for (t_list, p_list, d_list, v_list, a_list) in zip(time_list, position_list, distance_list, velocity_list, angle_list): # --- 前処理 --- t_list, p_list, d_list, v_list, a_list = loading.select_used_time(t_list, p_list, d_list, v_list, a_list) #日本時間に直した上で牛舎内にいる時間を除く # --- 特徴抽出 --- features = feature_extraction.FeatureExtraction(savefile, start, target_cow_id) features.output_features() # --- 仮説検証 --- df = pd.read_csv(savefile, sep = ",", header = 0, usecols = [0,3,4,5,6,9,10,11,12], names=('Time', 'RTime', 'WTime', 'AccumulatedDis', 'VelocityAve', 'RestVelocityAve', 'RestVelocityDiv', 'WalkVelocityAve', 'WalkVelocityDiv')) # csv読み込み X_rest = df[rest_names].values.T X_walk = df[walk_names].values.T # ギブスサンプリングによるクラスタリング gaussian_model_rest = mixed_model.GaussianMixedModel(cov_matrixes_r, mu_vectors_r, pi_vector_r, alpha_vector_r, max_iterater) rest_result = gaussian_model_rest.gibbs_sample(X_rest, np.array([[0, 0, 0, 0, 0]]).T, 1, 6, np.eye(5))