{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.listdir('../../scripts')\n", "import sys\n", "sys.path.append('../../Scripts')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from generate_signals import SignalGenerator\n", "from preprocess_daily import DailyPreprocessor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "inter_no = 175\n", "Node_id = 'i0'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstatephase_sumo
0178c301704418730118433gggggg0_g
1178c30170441873011844gggggg0_y
2178c30170441873022731gggggg1__r
0178c301704418730227334GGGGGG1_g
1178c30170441873022734GGGGGG1_y
.................................
2210u60170441929933741ggggggggr3__r
0210u601704419299337465ggggggggr3_g
1210u60170441929933744ggggggggr3_y
2210u60170441929944831ggggggggr4__r
237210u601704419299448319ggggggggr4_g
\n", "

684 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 178 c30 1704418730 1 1 8 4 33 \n", "1 178 c30 1704418730 1 1 8 4 4 \n", "2 178 c30 1704418730 2 2 7 3 1 \n", "0 178 c30 1704418730 2 2 7 3 34 \n", "1 178 c30 1704418730 2 2 7 3 4 \n", ".. ... ... ... ... ... ... ... ... \n", "2 210 u60 1704419299 3 3 7 4 1 \n", "0 210 u60 1704419299 3 3 7 4 65 \n", "1 210 u60 1704419299 3 3 7 4 4 \n", "2 210 u60 1704419299 4 4 8 3 1 \n", "237 210 u60 1704419299 4 4 8 3 19 \n", "\n", " state phase_sumo \n", "0 gggggg 0_g \n", "1 gggggg 0_y \n", "2 gggggg 1__r \n", "0 GGGGGG 1_g \n", "1 GGGGGG 1_y \n", ".. ... ... \n", "2 ggggggggr 3__r \n", "0 ggggggggr 3_g \n", "1 ggggggggr 3_y \n", "2 ggggggggr 4__r \n", "237 ggggggggr 4_g \n", "\n", "[684 rows x 10 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# desired result\n", "self = SignalGenerator()\n", "self.prepare_data()\n", "self.process_history()\n", "self.process_movement()\n", "self.make_histids()\n", "self.set_timepoints()\n", "self.assign_red_yellow()\n", "self.self.self.self.self.self.self.self.self.self.self.self.self.self.SIGTABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLE" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n" ] } ], "source": [ "self = SignalGenerator()\n", "self.prepare_data()\n", "self.process_history()\n", "self.process_movement()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "self.merge_dfs()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# 4-2. histid\n", "self.histid = self.movedur.copy()\n", "self.histid['node_id'] = self.histid['inter_no'].map(self.inter2node)\n", "histid_start = self.present_time - 600\n", "self.histid = self.histid[self.histid.start_unix > histid_start]\n", "\n", "mapping_dict = self.matching.set_index(['node_id', 'move_no'])['state'].to_dict()\n", "\n", "for i, row in self.histid.iterrows():\n", " node_id = row.node_id\n", " move_A = row.move_A\n", " move_B = row.move_B\n", " \n", " # A링의 state 지정\n", " if (node_id, move_A) in mapping_dict:\n", " state_A = mapping_dict[(node_id, move_A)]\n", " else:\n", " state_A = ''.join(self.node2init[node_id])\n", " self.histid.at[i, 'state_A'] = state_A\n", "\n", " # B링의 state 지정\n", " if (node_id, move_B) in mapping_dict:\n", " state_B = mapping_dict[(node_id, move_B)]\n", " else:\n", " state_B = ''.join(self.node2init[node_id])\n", " self.histid.at[i, 'state_B'] = state_B " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_B
0175i01704418520118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
1175i01704418520227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
2175i01704418520336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
3175i01704418520346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
4175i01704418520445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
62175i01704418699118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
63175i01704418699227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
64175i01704418699336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
65175i01704418699346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
66175i01704418699445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
131175i01704418880118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
132175i01704418880227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
133175i01704418880336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
134175i01704418880346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
135175i01704418880445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
193175i01704419060118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
194175i01704419060227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
195175i01704419060336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
196175i01704419060346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
197175i01704419060445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
259175i01704419240118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
260175i01704419240227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
261175i01704419240336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
262175i01704419240346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
263175i01704419240445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
337175i01704419420118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
338175i01704419420227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
339175i01704419420336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
340175i01704419420346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
341175i01704419420445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
380175i01704419520118424grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
381175i01704419520227325grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
382175i01704419520336118grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
383175i01704419520346213grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
384175i01704419520445220grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 175 i0 1704418520 1 1 8 4 43 \n", "1 175 i0 1704418520 2 2 7 3 45 \n", "2 175 i0 1704418520 3 3 6 1 33 \n", "3 175 i0 1704418520 3 4 6 2 22 \n", "4 175 i0 1704418520 4 4 5 2 37 \n", "62 175 i0 1704418699 1 1 8 4 43 \n", "63 175 i0 1704418699 2 2 7 3 45 \n", "64 175 i0 1704418699 3 3 6 1 33 \n", "65 175 i0 1704418699 3 4 6 2 22 \n", "66 175 i0 1704418699 4 4 5 2 37 \n", "131 175 i0 1704418880 1 1 8 4 43 \n", "132 175 i0 1704418880 2 2 7 3 45 \n", "133 175 i0 1704418880 3 3 6 1 33 \n", "134 175 i0 1704418880 3 4 6 2 22 \n", "135 175 i0 1704418880 4 4 5 2 37 \n", "193 175 i0 1704419060 1 1 8 4 43 \n", "194 175 i0 1704419060 2 2 7 3 45 \n", "195 175 i0 1704419060 3 3 6 1 33 \n", "196 175 i0 1704419060 3 4 6 2 22 \n", "197 175 i0 1704419060 4 4 5 2 37 \n", "259 175 i0 1704419240 1 1 8 4 43 \n", "260 175 i0 1704419240 2 2 7 3 45 \n", "261 175 i0 1704419240 3 3 6 1 33 \n", "262 175 i0 1704419240 3 4 6 2 22 \n", "263 175 i0 1704419240 4 4 5 2 37 \n", "337 175 i0 1704419420 1 1 8 4 43 \n", "338 175 i0 1704419420 2 2 7 3 45 \n", "339 175 i0 1704419420 3 3 6 1 33 \n", "340 175 i0 1704419420 3 4 6 2 22 \n", "341 175 i0 1704419420 4 4 5 2 37 \n", "380 175 i0 1704419520 1 1 8 4 24 \n", "381 175 i0 1704419520 2 2 7 3 25 \n", "382 175 i0 1704419520 3 3 6 1 18 \n", "383 175 i0 1704419520 3 4 6 2 13 \n", "384 175 i0 1704419520 4 4 5 2 20 \n", "\n", " state_A state_B \n", "0 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "1 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "2 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "3 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "4 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "62 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "63 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "64 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "65 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "66 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "131 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "132 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "133 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "134 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "135 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "193 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "194 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "195 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "196 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "197 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "259 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "260 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "261 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "262 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "263 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "337 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "338 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "339 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "340 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "341 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "380 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "381 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "382 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "383 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "384 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 4-3. histids\n", "new_histids = []\n", "for parent_id in self.parent_ids:\n", " for child_id in self.pa2ch[parent_id]:\n", " new_histid = self.histid.copy()[self.histid.node_id==parent_id].drop(columns=['state_A', 'state_B'])\n", " # new_histid[['inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']] = np.nan\n", " for i, row in new_histid.iterrows():\n", " phas_A = row.phas_A\n", " phas_B = row.phas_B\n", " new_match = self.match6[self.match6.node_id==child_id]\n", " Arow = new_match[(new_match.phase_no==phas_A) & (new_match.ring_type=='A')]\n", "\n", " # A링의 state 지정\n", " state_A = Arow.iloc[0].state\n", " new_histid.at[i, 'state_A'] = state_A\n", "\n", " # B링의 state 지정\n", " Brow = new_match[(new_match.phase_no==phas_B) & (new_match.ring_type=='B')]\n", " state_B = Brow.iloc[0].state\n", " new_histid.at[i, 'state_B'] = state_B\n", "\n", " new_histid.at[i, 'node_id'] = child_id\n", " new_histids.append(new_histid)\n", "import pandas as pd\n", "new_histids = pd.concat(new_histids)\n", "self.histids = pd.concat([self.histid.copy(), new_histids])\n", "self.histids = self.histids.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n", "self.histids = self.histids[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'move_A', 'move_B', 'duration', 'state_A', 'state_B']]\n", "self.histids.query('node_id==@Node_id')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "self.set_timepoints()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_Bphase_sumo
0178c301704418730118438gggggggggggg0
1178c301704418730227339GGGggggggGGG1
2178c301704418730335243GGGggggggGGG2
3178c301704418730446122GGGggggggGGG3
4178c301704418900118438gggggggggggg0
....................................
233210u6017044192991161828ggggggggrggggggggr0
234210u601704419299126215ggggggggrggggggggr1
235210u601704419299225243ggggggggGggggggggr2
236210u601704419299337470ggggggggrggggggggr3
237210u601704419299448324ggggggggrggggggggr4
\n", "

238 rows × 11 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 178 c30 1704418730 1 1 8 4 38 \n", "1 178 c30 1704418730 2 2 7 3 39 \n", "2 178 c30 1704418730 3 3 5 2 43 \n", "3 178 c30 1704418730 4 4 6 1 22 \n", "4 178 c30 1704418900 1 1 8 4 38 \n", ".. ... ... ... ... ... ... ... ... \n", "233 210 u60 1704419299 1 1 6 18 28 \n", "234 210 u60 1704419299 1 2 6 2 15 \n", "235 210 u60 1704419299 2 2 5 2 43 \n", "236 210 u60 1704419299 3 3 7 4 70 \n", "237 210 u60 1704419299 4 4 8 3 24 \n", "\n", " state_A state_B phase_sumo \n", "0 gggggg gggggg 0 \n", "1 GGGggg gggGGG 1 \n", "2 GGGggg gggGGG 2 \n", "3 GGGggg gggGGG 3 \n", "4 gggggg gggggg 0 \n", ".. ... ... ... \n", "233 ggggggggr ggggggggr 0 \n", "234 ggggggggr ggggggggr 1 \n", "235 ggggggggG ggggggggr 2 \n", "236 ggggggggr ggggggggr 3 \n", "237 ggggggggr ggggggggr 4 \n", "\n", "[238 rows x 11 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.sigtable" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def get_red(pre_state:str, cur_state:str):\n", " assert len(pre_state) == len(cur_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n", " state_r = ''\n", " for c, n in zip(pre_state, cur_state):\n", " if c == n:\n", " state_r += c\n", " elif (c == 'r') and (n == 'G'):\n", " state_r += 'r'\n", " elif (c == 'G') and (n == 'r'):\n", " state_r += 'r'\n", " else:\n", " raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n", " return state_r\n", "\n", "def get_yellow(cur_state:str, nex_state:str):\n", " assert len(cur_state) == len(nex_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n", " state_y = ''\n", " for c, n in zip(cur_state, nex_state):\n", " if c == n:\n", " state_y += c\n", " elif (c == 'r') and (n == 'G'):\n", " state_y += 'r'\n", " elif (c == 'G') and (n == 'r'):\n", " state_y += 'y'\n", " else:\n", " raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n", " return state_y\n", "\n", "def cumulate(sig, alph):\n", " csig = [] # cumulated sig\n", " pre = pd.Series({f'phas_{alph}':None})\n", "\n", " start_time = 0\n", " elapsed = 0\n", " for i, cur in sig.iterrows():\n", " start_unix = cur.start_unix\n", " \n", " # pre, nex\n", " if i != 0:\n", " pre = sig.iloc[i-1]\n", " \n", " if i != len(sig) - 1:\n", " nex = sig.iloc[i+1]\n", " \n", " # duration\n", " if cur[f'phas_{alph}'] == nex[f'phas_{alph}']:\n", " continue\n", " if cur[f'phas_{alph}'] == pre[f'phas_{alph}']:\n", " duration = cur.duration + pre.duration\n", " else:\n", " duration = cur.duration\n", " start_times = []\n", " states = []\n", " phases = []\n", "\n", " # red\n", " if i != 0:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(get_red(pre[f'state_{alph}'], cur[f'state_{alph}']))\n", " phases.append(f'{cur[f\"phas_{alph}\"]}r')\n", "\n", " elapsed = cur[f'red_{alph}']\n", "\n", " # green\n", " if i == 0:\n", " start_time = 0\n", " else:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(cur[f'state_{alph}'])\n", " phases.append(f'{cur[f\"phas_{alph}\"]}g')\n", " if i == 0:\n", " elapsed = duration - cur[f'yellow_{alph}']\n", " else:\n", " elapsed = duration - cur[f'yellow_{alph}'] - cur[f'red_{alph}']\n", "\n", " # yellow\n", " if i != len(sig) - 1:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(get_yellow(cur[f'state_{alph}'], nex[f'state_{alph}']))\n", " phases.append(f'{cur[f\"phas_{alph}\"]}y')\n", " elapsed = cur[f'yellow_{alph}']\n", " sig_ = pd.DataFrame({'start_time':start_times, f'phas_{alph}':phases, f'state_{alph}':states})\n", " sig_['start_unix'] = start_unix\n", " csig.append(sig_)\n", " csig = pd.concat(csig).reset_index(drop=True)\n", " return csig" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node_idstart_unixphasedurationstate
0c3017044186991g_1g39gGGrgrrrgGGGGrgrr
1c3017044186991y_1y4gyyrgrrrgyyyyrgrr
2c3017044186992r_2r1grrrgrrrgrrrrrgrr
3c3017044186992g_2g40grrGgrrrgrrrrGgrr
4c3017044186992y_2y4grrygrrrgrrrrygrr
..................
33u6017044190602g_2g40grrGgrrrgrrrrGgrr
34u6017044190602y_2y4grrygrrrgrrrrygrr
35u6017044190603r_3r1grrrgGGrgrrrrrgrr
36u6017044190603g_3g28grrrgGGGgrrrrrgrr
37u6017044190603g_3y22grrrgGGygrrrrrgrr
\n", "

570 rows × 5 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 c30 1704418699 1g_1g 39 gGGrgrrrgGGGGrgrr\n", "1 c30 1704418699 1y_1y 4 gyyrgrrrgyyyyrgrr\n", "2 c30 1704418699 2r_2r 1 grrrgrrrgrrrrrgrr\n", "3 c30 1704418699 2g_2g 40 grrGgrrrgrrrrGgrr\n", "4 c30 1704418699 2y_2y 4 grrygrrrgrrrrygrr\n", ".. ... ... ... ... ...\n", "33 u60 1704419060 2g_2g 40 grrGgrrrgrrrrGgrr\n", "34 u60 1704419060 2y_2y 4 grrygrrrgrrrrygrr\n", "35 u60 1704419060 3r_3r 1 grrrgGGrgrrrrrgrr\n", "36 u60 1704419060 3g_3g 28 grrrgGGGgrrrrrgrr\n", "37 u60 1704419060 3g_3y 22 grrrgGGygrrrrrgrr\n", "\n", "[570 rows x 5 columns]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.SIGTABLE = []\n", "for node_id in self.sigtable.node_id.unique():\n", " sig = self.sigtable.query('node_id==@Node_id')\n", " for i, row in sig.iterrows():\n", " inter_no = row.inter_no\n", " phas_A = row.phas_A\n", " phas_B = row.phas_B\n", " start_unix = row.start_unix\n", " prow = self.load_prow(inter_no, start_unix)[1].iloc[0]\n", " red_A = prow[f'red_A{phas_A}']\n", " yellow_A = prow[f'yellow_A{phas_A}']\n", " red_B = prow[f'red_B{phas_B}']\n", " yellow_B = prow[f'yellow_B{phas_B}']\n", " sig.loc[i, ['red_A', 'red_B', 'yellow_A', 'yellow_B']] = red_A, red_B, yellow_A, yellow_B\n", " sig = sig.astype({'red_A': int, 'red_B': int, 'yellow_A': int, 'yellow_B': int,\n", " 'phas_A':str, 'phas_B':str})\n", " sig = sig.drop(['move_A','move_B'], axis=1)\n", "\n", " sig_A = sig[['start_unix', 'phas_A', 'duration', 'state_A', 'red_A', 'yellow_A']].reset_index(drop=True)\n", " sig_B = sig[['start_unix', 'phas_B', 'duration', 'state_B', 'red_B', 'yellow_B']].reset_index(drop=True)\n", "\n", " csig_A = cumulate(sig_A, 'A')\n", " csig_B = cumulate(sig_B, 'B')\n", "\n", " SIG = pd.merge(csig_A, csig_B, on=['start_time', 'start_unix'], how='outer')\n", " SIG = SIG.sort_values(by='start_time').reset_index(drop=True)\n", " SIG[['phas_A', 'state_A']] = SIG[['phas_A', 'state_A']].fillna(method='ffill')\n", " SIG[['phas_B', 'state_B']] = SIG[['phas_B', 'state_B']].fillna(method='ffill')\n", " SIG['phase'] = SIG['phas_A'] + \"_\" + SIG['phas_B']\n", " SIG['node_id'] = node_id\n", " SIG = SIG[['node_id', 'start_unix', 'start_time', 'phase', 'state_A', 'state_B']]\n", " SIG['duration'] = SIG['start_time'].shift(-1) - SIG['start_time']\n", " SIG = SIG[:-1]\n", " SIG['duration'] = SIG['duration'].astype(int)\n", " for row in SIG.itertuples():\n", " state = ''\n", " for a, b, in zip(row.state_A, row.state_B):\n", " if a == 'r':\n", " state += b\n", " elif b == 'r':\n", " state += a\n", " elif a == b:\n", " state += a\n", " else:\n", " raise ValueError(f\"예상되지 않은 조합 발생: a={a}, b={b}\")\n", " SIG.at[row.Index, 'state'] = state\n", " SIG = SIG.drop(columns=['start_time', 'state_A', 'state_B'])\n", " self.SIGTABLE.append(SIG)\n", "self.SIGTABLE = pd.concat(self.SIGTABLE)\n", "self.SIGTABLE" ] } ], "metadata": { "kernelspec": { "display_name": "sts", "language": "python", "name": "sts" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }