{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"os.listdir('../../scripts')\n",
"import sys\n",
"sys.path.append('../../Scripts')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 33 | \n",
" gggggg | \n",
" 0_g | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 4 | \n",
" gggggg | \n",
" 0_y | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 1 | \n",
" gggggg | \n",
" 1__r | \n",
"
\n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 34 | \n",
" GGGGGG | \n",
" 1_g | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 4 | \n",
" GGGGGG | \n",
" 1_y | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 1 | \n",
" ggggggggr | \n",
" 3__r | \n",
"
\n",
" \n",
" 0 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 65 | \n",
" ggggggggr | \n",
" 3_g | \n",
"
\n",
" \n",
" 1 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 4 | \n",
" ggggggggr | \n",
" 3_y | \n",
"
\n",
" \n",
" 2 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 1 | \n",
" ggggggggr | \n",
" 4__r | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 19 | \n",
" ggggggggr | \n",
" 4_g | \n",
"
\n",
" \n",
"
\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 1704416690 1 1 8 4 33 \n",
"1 178 c30 1704416690 1 1 8 4 4 \n",
"2 178 c30 1704416690 2 2 7 3 1 \n",
"0 178 c30 1704416690 2 2 7 3 34 \n",
"1 178 c30 1704416690 2 2 7 3 4 \n",
".. ... ... ... ... ... ... ... ... \n",
"2 210 u60 1704417140 3 3 7 4 1 \n",
"0 210 u60 1704417140 3 3 7 4 65 \n",
"1 210 u60 1704417140 3 3 7 4 4 \n",
"2 210 u60 1704417140 4 4 8 3 1 \n",
"237 210 u60 1704417140 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.SIGTABLE"
]
},
{
"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",
" inter_no | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" node_id | \n",
" state_A | \n",
" state_B | \n",
"
\n",
" \n",
" \n",
" \n",
" 10 | \n",
" 175 | \n",
" 1704416540 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" i0 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 11 | \n",
" 175 | \n",
" 1704416540 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 46 | \n",
" i0 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 12 | \n",
" 175 | \n",
" 1704416540 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" i0 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 13 | \n",
" 175 | \n",
" 1704416540 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 23 | \n",
" i0 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 14 | \n",
" 175 | \n",
" 1704416540 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" i0 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 255 | \n",
" 201 | \n",
" 1704417410 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 3 | \n",
" 33 | \n",
" i8 | \n",
" grrrrrrrgGGrgrrr | \n",
" grrrrrrrgrrGgrrr | \n",
"
\n",
" \n",
" 256 | \n",
" 201 | \n",
" 1704417410 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 36 | \n",
" i8 | \n",
" grrrrrrrgrrrgrrG | \n",
" grrrrrrrgrrrgGGr | \n",
"
\n",
" \n",
" 257 | \n",
" 201 | \n",
" 1704417410 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 2 | \n",
" 25 | \n",
" i8 | \n",
" grrrGGGrgrrrgrrr | \n",
" grrrrrrrgrrrgGGr | \n",
"
\n",
" \n",
" 258 | \n",
" 201 | \n",
" 1704417410 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 58 | \n",
" i8 | \n",
" grrrGGGrgrrrgrrr | \n",
" grrrrrrGgrrrgrrr | \n",
"
\n",
" \n",
" 259 | \n",
" 201 | \n",
" 1704417410 | \n",
" 5 | \n",
" 5 | \n",
" 7 | \n",
" 4 | \n",
" 18 | \n",
" i8 | \n",
" grrGrrrrgrrrgrrr | \n",
" gGGrrrrrgrrrgrrr | \n",
"
\n",
" \n",
"
\n",
"
203 rows × 10 columns
\n",
"
"
],
"text/plain": [
" inter_no start_unix phas_A phas_B move_A move_B duration node_id \\\n",
"10 175 1704416540 1 1 8 4 43 i0 \n",
"11 175 1704416540 2 2 7 3 46 i0 \n",
"12 175 1704416540 3 3 6 1 33 i0 \n",
"13 175 1704416540 3 4 6 2 23 i0 \n",
"14 175 1704416540 4 4 5 2 37 i0 \n",
".. ... ... ... ... ... ... ... ... \n",
"255 201 1704417410 1 1 8 3 33 i8 \n",
"256 201 1704417410 2 2 5 2 36 i8 \n",
"257 201 1704417410 3 3 6 2 25 i8 \n",
"258 201 1704417410 4 4 6 1 58 i8 \n",
"259 201 1704417410 5 5 7 4 18 i8 \n",
"\n",
" state_A state_B \n",
"10 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"11 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"12 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"13 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"14 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
".. ... ... \n",
"255 grrrrrrrgGGrgrrr grrrrrrrgrrGgrrr \n",
"256 grrrrrrrgrrrgrrG grrrrrrrgrrrgGGr \n",
"257 grrrGGGrgrrrgrrr grrrrrrrgrrrgGGr \n",
"258 grrrGGGrgrrrgrrr grrrrrrGgrrrgrrr \n",
"259 grrGrrrrgrrrgrrr gGGrrrrrgrrrgrrr \n",
"\n",
"[203 rows x 10 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.histid"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
"
\n",
" \n",
" \n",
" \n",
" 44 | \n",
" 175 | \n",
" i0 | \n",
" 1704416540 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 45 | \n",
" 175 | \n",
" i0 | \n",
" 1704416540 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 46 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 46 | \n",
" 175 | \n",
" i0 | \n",
" 1704416540 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 47 | \n",
" 175 | \n",
" i0 | \n",
" 1704416540 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 23 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 48 | \n",
" 175 | \n",
" i0 | \n",
" 1704416540 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 109 | \n",
" 175 | \n",
" i0 | \n",
" 1704416720 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 110 | \n",
" 175 | \n",
" i0 | \n",
" 1704416720 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 111 | \n",
" 175 | \n",
" i0 | \n",
" 1704416720 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 112 | \n",
" 175 | \n",
" i0 | \n",
" 1704416720 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 113 | \n",
" 175 | \n",
" i0 | \n",
" 1704416720 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 173 | \n",
" 175 | \n",
" i0 | \n",
" 1704416900 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 174 | \n",
" 175 | \n",
" i0 | \n",
" 1704416900 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 175 | \n",
" 175 | \n",
" i0 | \n",
" 1704416900 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 176 | \n",
" 175 | \n",
" i0 | \n",
" 1704416900 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 177 | \n",
" 175 | \n",
" i0 | \n",
" 1704416900 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 244 | \n",
" 175 | \n",
" i0 | \n",
" 1704417080 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 245 | \n",
" 175 | \n",
" i0 | \n",
" 1704417080 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 246 | \n",
" 175 | \n",
" i0 | \n",
" 1704417080 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 247 | \n",
" 175 | \n",
" i0 | \n",
" 1704417080 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 248 | \n",
" 175 | \n",
" i0 | \n",
" 1704417080 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 306 | \n",
" 175 | \n",
" i0 | \n",
" 1704417260 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 307 | \n",
" 175 | \n",
" i0 | \n",
" 1704417260 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 308 | \n",
" 175 | \n",
" i0 | \n",
" 1704417260 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 309 | \n",
" 175 | \n",
" i0 | \n",
" 1704417260 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 310 | \n",
" 175 | \n",
" i0 | \n",
" 1704417260 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 357 | \n",
" 175 | \n",
" i0 | \n",
" 1704417420 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" grrrgrrrgGGGGrgrr | \n",
" gGGrgrrrgrrrrrgrr | \n",
"
\n",
" \n",
" 358 | \n",
" 175 | \n",
" i0 | \n",
" 1704417420 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 40 | \n",
" grrGgrrrgrrrrrgrr | \n",
" grrrgrrrgrrrrGgrr | \n",
"
\n",
" \n",
" 359 | \n",
" 175 | \n",
" i0 | \n",
" 1704417420 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 29 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrGgrrrrrgrr | \n",
"
\n",
" \n",
" 360 | \n",
" 175 | \n",
" i0 | \n",
" 1704417420 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 20 | \n",
" grrrgGGrgrrrrrgrr | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
" 361 | \n",
" 175 | \n",
" i0 | \n",
" 1704417420 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 33 | \n",
" grrrgrrrgrrrrrgrG | \n",
" grrrgrrrgrrrrrgGr | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"44 175 i0 1704416540 1 1 8 4 43 \n",
"45 175 i0 1704416540 2 2 7 3 46 \n",
"46 175 i0 1704416540 3 3 6 1 33 \n",
"47 175 i0 1704416540 3 4 6 2 23 \n",
"48 175 i0 1704416540 4 4 5 2 37 \n",
"109 175 i0 1704416720 1 1 8 4 43 \n",
"110 175 i0 1704416720 2 2 7 3 45 \n",
"111 175 i0 1704416720 3 3 6 1 33 \n",
"112 175 i0 1704416720 3 4 6 2 22 \n",
"113 175 i0 1704416720 4 4 5 2 37 \n",
"173 175 i0 1704416900 1 1 8 4 43 \n",
"174 175 i0 1704416900 2 2 7 3 45 \n",
"175 175 i0 1704416900 3 3 6 1 33 \n",
"176 175 i0 1704416900 3 4 6 2 22 \n",
"177 175 i0 1704416900 4 4 5 2 37 \n",
"244 175 i0 1704417080 1 1 8 4 43 \n",
"245 175 i0 1704417080 2 2 7 3 45 \n",
"246 175 i0 1704417080 3 3 6 1 33 \n",
"247 175 i0 1704417080 3 4 6 2 22 \n",
"248 175 i0 1704417080 4 4 5 2 37 \n",
"306 175 i0 1704417260 1 1 8 4 43 \n",
"307 175 i0 1704417260 2 2 7 3 45 \n",
"308 175 i0 1704417260 3 3 6 1 33 \n",
"309 175 i0 1704417260 3 4 6 2 22 \n",
"310 175 i0 1704417260 4 4 5 2 37 \n",
"357 175 i0 1704417420 1 1 8 4 38 \n",
"358 175 i0 1704417420 2 2 7 3 40 \n",
"359 175 i0 1704417420 3 3 6 1 29 \n",
"360 175 i0 1704417420 3 4 6 2 20 \n",
"361 175 i0 1704417420 4 4 5 2 33 \n",
"\n",
" state_A state_B \n",
"44 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"45 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"46 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"47 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"48 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
"109 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"110 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"111 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"112 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"113 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
"173 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"174 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"175 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"176 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"177 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
"244 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"245 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"246 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"247 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"248 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
"306 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"307 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"308 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"309 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"310 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
"357 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
"358 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
"359 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
"360 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
"361 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr "
]
},
"execution_count": 16,
"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",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704418730 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggg | \n",
" gggggg | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704418730 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" GGGggg | \n",
" gggGGG | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" c30 | \n",
" 1704418730 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" GGGggg | \n",
" gggGGG | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" c30 | \n",
" 1704418730 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" GGGggg | \n",
" gggGGG | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" c30 | \n",
" 1704418900 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggg | \n",
" gggggg | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704419299 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704419299 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704419299 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704419299 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704419299 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\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": 73,
"metadata": {},
"outputs": [],
"source": [
"# 5-2-1 helper function of 5-2\n",
"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",
"# 5-2-2 helper function of 5-2\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",
"# 5-2-3 helper function of 5-2\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": 89,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6227824687957764\n"
]
}
],
"source": [
"import time\n",
"now = time.time()\n",
"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\n",
"print(time.time() - now)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
"2. 중간산출물을 생성합니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:14<00:00, 1200.17it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2-1. 매칭 테이블들을 생성했습니다.\n",
"2-2. 비보호우회전(g)을 배정했습니다.\n",
"2-3. 직진 및 좌회전(G)을 배정했습니다.\n",
"2-2. node2num_cycles.json를 저장했습니다.\n",
"3. 이슈사항을 저장합니다.\n"
]
}
],
"source": [
"self = DailyPreprocessor()\n",
"self.main()"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:15<00:00, 1135.80it/s]\n"
]
}
],
"source": [
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 0%| | 0/17280 [00:00, ?it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:13<00:00, 1274.30it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2-1. 매칭 테이블들을 생성했습니다.\n"
]
}
],
"source": [
"self.get_matches()"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2-2. 비보호우회전(g)을 배정했습니다.\n"
]
}
],
"source": [
"self.initialize_state()"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g', 'g']"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n",
"self.node2init = {}\n",
"# 모든 노드들을 순회\n",
"for node in self.nodes:\n",
" node_id = node.getID()\n",
" # 모든 connection\n",
" conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
" conns = [c for c in conns if c[0] >= 0]\n",
" conns = sorted(conns, key=lambda x: x[0])\n",
" state = []\n",
" # i번째 connection : ci\n",
" for i, ci in conns:\n",
" if ci.getTLLinkIndex() < 0:\n",
" continue\n",
" are_foes = False\n",
" # j번째 connection : cj\n",
" # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n",
" # 그외의 경우에는 are_foes = False (g)\n",
" for j, cj in conns:\n",
" # ci, cj의 합류지점이 같으면 통과\n",
" if ci.getTo() == cj.getTo():\n",
" continue\n",
" # ci, cj가 상충되면 are_foes를 True로 지정.\n",
" if node.areFoes(i, j):\n",
" are_foes = True\n",
" break\n",
" state.append('r' if are_foes else 'g')\n",
" self.node2init[node_id] = state\n",
"\n",
"# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n",
"for _, row in self.matching.iterrows():\n",
" node_id = row.node_id\n",
" move_no = row.move_no\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" if move_no != 21:\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'\n",
"\n",
"# 연등교차로\n",
"for _, row in self.coord.iterrows():\n",
" node_id = row.node_id\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" if not (pd.isna(inc_edge) and pd.isna(out_edge)):\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'\n",
"\n",
"# 유턴교차로\n",
"for _, row in self.uturn.iterrows():\n",
" node_id = row.child_id\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" if not (pd.isna(inc_edge) and pd.isna(out_edge)):\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'\n",
"\n",
"self.node2init['u00']"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" parent_id | \n",
" child_id | \n",
" direction | \n",
" condition | \n",
" inc_edge | \n",
" out_edge | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" i0 | \n",
" u00 | \n",
" 북 | \n",
" 좌회전시 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
"
\n",
" \n",
" 1 | \n",
" i2 | \n",
" u20 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
"
\n",
" \n",
" 2 | \n",
" i3 | \n",
" u30 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
"
\n",
" \n",
" 3 | \n",
" i3 | \n",
" u31 | \n",
" 동 | \n",
" 보행신호시 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
"
\n",
" \n",
" 4 | \n",
" i3 | \n",
" u32 | \n",
" 서 | \n",
" 보행신호시 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
"
\n",
" \n",
" 5 | \n",
" i6 | \n",
" u60 | \n",
" 서 | \n",
" 좌회전시 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" parent_id child_id direction condition inc_edge out_edge\n",
"0 i0 u00 북 좌회전시 571500487_02 571500487_01.32\n",
"1 i2 u20 북 보행신호시 571542810_01.51 571542810_02\n",
"2 i3 u30 북 보행신호시 571556452_01 571556452_02\n",
"3 i3 u31 동 보행신호시 571500475_02 571500475_01.26\n",
"4 i3 u32 서 보행신호시 571540303_02 -571540303_02\n",
"5 i6 u60 서 좌회전시 571500535_02 -571500535_02"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.uturn"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'c30': ['g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'i0': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r'],\n",
" 'i1': ['g', 'r', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r'],\n",
" 'i2': ['r', 'r', 'g', 'r', 'r', 'r', 'r'],\n",
" 'i3': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i6': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i7': ['r', 'r', 'r', 'g', 'g', 'r', 'r'],\n",
" 'i8': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i9': ['r', 'r', 'r', 'r'],\n",
" 'u00': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g', 'g'],\n",
" 'u20': ['g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u30': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n",
" 'u31': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n",
" 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'r'],\n",
" 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'r']}"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.node2init"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n",
"\n",
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"self.uturn_ids = sorted(self.uturn.child_id.unique())\n",
"self.coord_ids = sorted(self.coord.child_id.unique())\n",
"\n",
"ch2pa = {} # child to parent\n",
"for child_id in self.child_ids:\n",
" parent_no = self.inter_node[self.inter_node.node_id==child_id].inter_no.iloc[0]\n",
" sub_inter_node = self.inter_node[self.inter_node.inter_no==parent_no]\n",
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" direction = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge\n",
" out_edge_id = row.out_edge\n",
" # match5에서 parent_id에 해당하는 행들을 가져옴\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
" # condition 별로 inc_dire, out_dire_A, out_dire_B를 정함\n",
" ind = directions.index(direction)\n",
" if condition == \"좌회전시\":\n",
" inc_dire = direction\n",
" out_dire_A = out_dire_B = directions[(ind + 2) % len(directions)]\n",
" elif condition == \"보행신호시\":\n",
" inc_dire = directions[(ind + 2) % len(directions)]\n",
" out_dire_A = directions[(ind - 2) % len(directions)]\n",
" out_dire_B = directions[(ind - 2) % len(directions)]\n",
"\n",
" # (inc_dire, out_dire_A, out_dire_B) 별로 inc_edge_id, out_edge_id를 정함\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" if condition == '보행신호시':\n",
" # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 유턴신호의 이동류번호를 19로 부여한다.\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), 'move_no'] = 19\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), 'move_no'] = 19\n",
" cmatches.append(cmatch)\n"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" c30 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" c30 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_01 | \n",
" -571542116_02.96 | \n",
" c30 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_02.96 | \n",
" 571542116_02.164 | \n",
" c30 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_01 | \n",
" -571542116_02.96 | \n",
" c30 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_02.96 | \n",
" 571542116_02.164 | \n",
" c30 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_01 | \n",
" -571542116_02.96 | \n",
" c30 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 20 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542116_02.96 | \n",
" 571542116_02.164 | \n",
" c30 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle \\\n",
"0 178 1 A 20 NaN NaN NaN \n",
"1 178 1 B 20 NaN NaN NaN \n",
"2 178 2 A 20 NaN NaN NaN \n",
"3 178 2 B 20 NaN NaN NaN \n",
"4 178 3 A 20 NaN NaN NaN \n",
"5 178 3 B 20 NaN NaN NaN \n",
"6 178 4 A 20 NaN NaN NaN \n",
"7 178 4 B 20 NaN NaN NaN \n",
"\n",
" out_angle inc_edge out_edge node_id \n",
"0 NaN NaN NaN c30 \n",
"1 NaN NaN NaN c30 \n",
"2 NaN 571542116_01 -571542116_02.96 c30 \n",
"3 NaN 571542116_02.96 571542116_02.164 c30 \n",
"4 NaN 571542116_01 -571542116_02.96 c30 \n",
"5 NaN 571542116_02.96 571542116_02.164 c30 \n",
"6 NaN 571542116_01 -571542116_02.96 c30 \n",
"7 NaN 571542116_02.96 571542116_02.164 c30 "
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"# 각 coordination node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"self.coord['inter_no'] = self.coord['parent_id'].map(self.node2inter)\n",
"self.coord = self.coord.rename(columns={'child_id':'node_id'})\n",
"self.coord[['inc_dir', 'out_dir', 'inc_angle','out_angle']] = np.nan\n",
"self.coord['move_no'] = 20\n",
"self.coord = self.coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dir', 'out_dir', 'inc_angle','out_angle', 'inc_edge', 'out_edge', 'node_id']]\n",
"self.coord"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"# display(coord)\n",
"cmatches = pd.concat(cmatches)\n",
"self.match6 = pd.concat([self.match5, cmatches, self.coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])\n",
"# self.match6.to_csv(os.path.join(self.path_intermediates, 'match6.csv'))\n"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'c30': ['g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'i0': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r'],\n",
" 'i1': ['g', 'r', 'r', 'g', 'g', 'g', 'r', 'g', 'r', 'r'],\n",
" 'i2': ['g', 'g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'i3': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i6': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i7': ['g', 'g', 'r', 'g', 'g', 'r', 'r'],\n",
" 'i8': ['g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r',\n",
" 'g',\n",
" 'r',\n",
" 'r',\n",
" 'r'],\n",
" 'i9': ['g', 'g', 'g', 'g'],\n",
" 'u00': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u20': ['g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u30': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u31': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n",
" 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g']}"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.node2init"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"self.node2init = {}\n",
"node_id = 'c30'\n",
"node = self.net.getNode(node_id)\n",
"\n",
"node_id = node.getID()\n",
"# 모든 connection\n",
"conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
"conns = [c for c in conns if c[0] >= 0]\n",
"conns = sorted(conns, key=lambda x: x[0])\n",
"state = []\n",
"# i번째 connection : ci\n",
"for i, ci in conns:\n",
" if ci.getTLLinkIndex() < 0:\n",
" continue\n",
" are_foes = False\n",
" # j번째 connection : cj\n",
" # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n",
" # 그외의 경우에는 are_foes = False (g)\n",
" for j, cj in conns:\n",
" # ci, cj의 합류지점이 같으면 통과\n",
" if ci.getTo() == cj.getTo():\n",
" continue\n",
" # ci, cj가 상충되면 are_foes를 True로 지정.\n",
" if node.areFoes(i, j):\n",
" are_foes = True\n",
" break\n",
" state.append('r' if are_foes else 'g')\n",
"self.node2init[node_id] = state"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'Series' object has no attribute 'inc_edge'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[96], line 34\u001b[0m\n\u001b[0;32m 32\u001b[0m node_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mnode_id\n\u001b[0;32m 33\u001b[0m move_no \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mmove_no\n\u001b[1;32m---> 34\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[43mrow\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minc_edge\u001b[49m\n\u001b[0;32m 35\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m move_no \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m21\u001b[39m:\n",
"File \u001b[1;32mc:\\Github\\sts\\sts\\lib\\site-packages\\pandas\\core\\generic.py:5989\u001b[0m, in \u001b[0;36mNDFrame.__getattr__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 5982\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[0;32m 5983\u001b[0m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_internal_names_set\n\u001b[0;32m 5984\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metadata\n\u001b[0;32m 5985\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_accessors\n\u001b[0;32m 5986\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_info_axis\u001b[38;5;241m.\u001b[39m_can_hold_identifiers_and_holds_name(name)\n\u001b[0;32m 5987\u001b[0m ):\n\u001b[0;32m 5988\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m[name]\n\u001b[1;32m-> 5989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mobject\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getattribute__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'Series' object has no attribute 'inc_edge'"
]
}
],
"source": [
"self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n",
"self.node2init = {}\n",
"# 모든 노드들을 순회\n",
"for node in self.nodes:\n",
" node_id = node.getID()\n",
" # 모든 connection\n",
" conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
" conns = [c for c in conns if c[0] >= 0]\n",
" conns = sorted(conns, key=lambda x: x[0])\n",
" state = []\n",
" # i번째 connection : ci\n",
" for i, ci in conns:\n",
" if ci.getTLLinkIndex() < 0:\n",
" continue\n",
" are_foes = False\n",
" # j번째 connection : cj\n",
" # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n",
" # 그외의 경우에는 are_foes = False (g)\n",
" for j, cj in conns:\n",
" # ci, cj의 합류지점이 같으면 통과\n",
" if ci.getTo() == cj.getTo():\n",
" continue\n",
" # ci, cj가 상충되면 are_foes를 True로 지정.\n",
" if node.areFoes(i, j):\n",
" are_foes = True\n",
" break\n",
" state.append('r' if are_foes else 'g')\n",
" self.node2init[node_id] = state\n",
"\n",
"# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n",
"for _, row in self.matching.iterrows():\n",
" node_id = row.node_id\n",
" move_no = row.move_no\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" if move_no != 21:\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'\n",
"\n",
"# 연등교차로에도 마찬가지로 신호가 부여되어 있는 경우에 r 부여\n",
"for _, row in self.coord.iterrows():\n",
" node_id = row.node_id\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'\n",
"\n",
"\n",
"# json 파일로 저장\n",
"with open(os.path.join(self.path_intermediates, 'node2init.json'), 'w') as file:\n",
" json.dump(self.node2init, file)\n"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'Pandas' object has no attribute 'inc_edge'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[48], line 9\u001b[0m\n\u001b[0;32m 7\u001b[0m node_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mnode_id\n\u001b[0;32m 8\u001b[0m move_no \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mmove_no\n\u001b[1;32m----> 9\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[43mrow\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minc_edge\u001b[49m\n\u001b[0;32m 10\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge\n\u001b[0;32m 11\u001b[0m state \u001b[38;5;241m=\u001b[39m copy\u001b[38;5;241m.\u001b[39mdeepcopy(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnode2init)[node_id]\n",
"\u001b[1;31mAttributeError\u001b[0m: 'Pandas' object has no attribute 'inc_edge'"
]
}
],
"source": [
"import copy\n",
"# assign signals on matching\n",
"self.matching['init_state'] = self.matching['node_id'].map(self.node2init)\n",
"self.matching['state'] = self.matching['init_state'].map(lambda x:''.join(x))\n",
"# matching의 각 행을 순회\n",
"for row in self.matching.itertuples(index=True):\n",
" node_id = row.node_id\n",
" move_no = row.move_no\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" state = copy.deepcopy(self.node2init)[node_id]\n",
"\n",
" if move_no != 21:\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" state[index] = 'G'\n",
" self.matching.at[row.Index, 'state'] = ''.join(state)\n",
"\n",
"self.matching = self.matching.dropna(subset='state')\n",
"self.matching = self.matching.reset_index(drop=True)\n",
"self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'state']]\n",
"\n",
"# assign signals on match6\n",
"\n",
"self.match6 = self.match6.reset_index(drop=True)\n",
"self.match6['init_state'] = self.match6['node_id'].map(self.node2init)\n",
"self.match6['state'] = self.match6['init_state'].map(lambda x:''.join(x))\n",
"\n",
"# match6의 각 행을 순회\n",
"for i, row in self.match6.iterrows():\n",
" node_id = row.node_id\n",
" move_no = row.move_no\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" state = copy.deepcopy(self.node2init)[node_id]\n",
" if (pd.isna(inc_edge)) or (pd.isna(out_edge)):\n",
" continue\n",
" if (move_no != 21):\n",
" # print(i, node_id, move_no, ''.join(state))\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" state[index] = 'G'\n",
" # print(i, node_id, move_no, index, ''.join(state))\n",
" self.match6.at[i, 'state'] = ''.join(state)\n",
"\n",
"self.match6 = self.match6.dropna(subset='state')\n",
"self.match6 = self.match6.reset_index(drop=True)\n",
"self.match6 = self.match6[['inter_no', 'node_id', 'phase_no', 'ring_type', 'move_no', 'state']]\n",
"self.match6"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['g', 'g', 'g', 'g', 'g', 'g', 'g']\n"
]
},
{
"ename": "KeyError",
"evalue": "'i0'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[146], line 41\u001b[0m\n\u001b[0;32m 39\u001b[0m index \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mgetTLLinkIndex()\n\u001b[0;32m 40\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m---> 41\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnode2init\u001b[49m\u001b[43m[\u001b[49m\u001b[43mnode_id\u001b[49m\u001b[43m]\u001b[49m[index] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 43\u001b[0m \u001b[38;5;66;03m# 연등교차로에도 마찬가지로 신호가 부여되어 있는 경우에 r 부여\u001b[39;00m\n\u001b[0;32m 44\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _, row \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcoord\u001b[38;5;241m.\u001b[39miterrows():\n",
"\u001b[1;31mKeyError\u001b[0m: 'i0'"
]
}
],
"source": [
"node_id = 'i2'\n",
"node = self.net.getNode(node_id)\n",
"self.node2init = {}\n",
"# 모든 connection\n",
"conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n",
"conns = [c for c in conns if c[0] >= 0]\n",
"conns = sorted(conns, key=lambda x: x[0])\n",
"state = []\n",
"# i번째 connection : ci\n",
"for i, ci in conns:\n",
" if ci.getTLLinkIndex() < 0:\n",
" continue\n",
" are_foes = False\n",
" # j번째 connection : cj\n",
" # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n",
" # 그외의 경우에는 are_foes = False (g)\n",
" for j, cj in conns:\n",
" # ci, cj의 합류지점이 같으면 통과\n",
" if ci.getTo() == cj.getTo():\n",
" continue\n",
" # ci, cj가 상충되면 are_foes를 True로 지정.\n",
" if node.areFoes(i, j):\n",
" are_foes = True\n",
" break\n",
" state.append('r' if are_foes else 'g')\n",
"self.node2init[node_id] = state\n",
"print(state)\n",
"\n",
"# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n",
"for _, row in self.matching.iterrows():\n",
" node_id = row.node_id\n",
" move_no = row.move_no\n",
" inc_edge = row.inc_edge\n",
" out_edge = row.out_edge\n",
" if move_no != 21:\n",
" inc_edge = self.net.getEdge(inc_edge)\n",
" out_edge = self.net.getEdge(out_edge)\n",
" for conn in inc_edge.getConnections(out_edge):\n",
" index = conn.getTLLinkIndex()\n",
" if index >= 0:\n",
" self.node2init[node_id][index] = 'r'"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
"
\n",
" \n",
" \n",
" \n",
" 14 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
"
\n",
" \n",
" 15 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 176 | \n",
"
\n",
" \n",
" 16 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
"
\n",
" \n",
" 17 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
"
\n",
" \n",
" 18 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 19 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 20 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
"
\n",
" \n",
" 21 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n",
"14 177 1 A 8 남 북 180 000\n",
"15 177 1 B 4 북 남 001 176\n",
"16 177 2 A 7 북 동 000 090\n",
"17 177 2 B 3 남 서 179 270\n",
"18 177 3 A 17 NaN NaN NaN NaN\n",
"19 177 3 B 18 NaN NaN NaN NaN\n",
"20 177 4 A 5 서 북 268 000\n",
"21 177 4 B 1 동 남 090 180"
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.match4[self.match4.inter_no==177]"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 14 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 15 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 176 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 16 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571542811_02 | \n",
" 571542107_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 17 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" -571542809_01 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 18 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
"
\n",
" \n",
" 19 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
"
\n",
" \n",
" 20 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 21 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" 571542107_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"14 177 1 A 8 남 북 180 000 \n",
"15 177 1 B 4 북 남 001 176 \n",
"16 177 2 A 7 북 동 000 090 \n",
"17 177 2 B 3 남 서 179 270 \n",
"18 177 3 A 17 NaN NaN NaN NaN \n",
"19 177 3 B 18 NaN NaN NaN NaN \n",
"20 177 4 A 5 서 북 268 000 \n",
"21 177 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"14 -571542809_01 571542811_01 i2 \n",
"15 571542811_02 571542809_01 i2 \n",
"16 571542811_02 571542107_01 i2 \n",
"17 -571542809_01 571542809_01 i2 \n",
"18 NaN NaN i2 \n",
"19 NaN NaN i2 \n",
"20 -571542809_01 571542811_01 i2 \n",
"21 571542107_02 571542809_01 i2 "
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"self.match5[self.match5.node_id=='i2']"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 14 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 15 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 176 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 16 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571542811_02 | \n",
" 571542107_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 17 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" -571542809_01 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 18 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
"
\n",
" \n",
" 19 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
"
\n",
" \n",
" 20 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 21 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" 571542107_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"14 177 1 A 8 남 북 180 000 \n",
"15 177 1 B 4 북 남 001 176 \n",
"16 177 2 A 7 북 동 000 090 \n",
"17 177 2 B 3 남 서 179 270 \n",
"18 177 3 A 17 NaN NaN NaN NaN \n",
"19 177 3 B 18 NaN NaN NaN NaN \n",
"20 177 4 A 5 서 북 268 000 \n",
"21 177 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"14 -571542809_01 571542811_01 i2 \n",
"15 571542811_02 571542809_01 i2 \n",
"16 571542811_02 571542107_01 i2 \n",
"17 -571542809_01 571542809_01 i2 \n",
"18 NaN NaN i2 \n",
"19 NaN NaN i2 \n",
"20 -571542809_01 571542811_01 i2 \n",
"21 571542107_02 571542809_01 i2 "
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.match5[self.match5.node_id=='i2']"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 19 | \n",
" 177 | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 571542107_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 20 | \n",
" 177 | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" -571542809_01 | \n",
" 571542107_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 21 | \n",
" 177 | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" -571542809_01 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 22 | \n",
" 177 | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 23 | \n",
" 177 | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 24 | \n",
" 177 | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 571542107_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 25 | \n",
" 177 | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 571542811_02 | \n",
" 571542107_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 26 | \n",
" 177 | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 27 | \n",
" 177 | \n",
" 21 | \n",
" 북 | \n",
" 서 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 28 | \n",
" 177 | \n",
" 21 | \n",
" 서 | \n",
" 남 | \n",
" -571542809_01 | \n",
" 571542809_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 29 | \n",
" 177 | \n",
" 21 | \n",
" 남 | \n",
" 동 | \n",
" -571542809_01 | \n",
" 571542107_01 | \n",
" i2 | \n",
"
\n",
" \n",
" 30 | \n",
" 177 | \n",
" 21 | \n",
" 동 | \n",
" 북 | \n",
" 571542107_02 | \n",
" 571542811_01 | \n",
" i2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n",
"19 177 1 동 남 571542107_02 571542809_01 i2\n",
"20 177 2 서 동 -571542809_01 571542107_01 i2\n",
"21 177 3 남 서 -571542809_01 571542809_01 i2\n",
"22 177 4 북 남 571542811_02 571542809_01 i2\n",
"23 177 5 서 북 -571542809_01 571542811_01 i2\n",
"24 177 6 동 서 571542107_02 571542809_01 i2\n",
"25 177 7 북 동 571542811_02 571542107_01 i2\n",
"26 177 8 남 북 -571542809_01 571542811_01 i2\n",
"27 177 21 북 서 571542811_02 571542809_01 i2\n",
"28 177 21 서 남 -571542809_01 571542809_01 i2\n",
"29 177 21 남 동 -571542809_01 571542107_01 i2\n",
"30 177 21 동 북 571542107_02 571542811_01 i2"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.matching[self.matching.node_id=='i2']"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:16<00:00, 1053.69it/s]\n"
]
}
],
"source": [
"self = DailyPreprocessor()\n",
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n",
"\n",
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"self.uturn_ids = sorted(self.uturn.child_id.unique())\n",
"self.coord_ids = sorted(self.coord.child_id.unique())\n",
"\n",
"ch2pa = {} # child to parent\n",
"for child_id in self.child_ids:\n",
" parent_no = self.inter_node[self.inter_node.node_id==child_id].inter_no.iloc[0]\n",
" sub_inter_node = self.inter_node[self.inter_node.inter_no==parent_no]\n",
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [],
"source": [
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"parent_id i0\n",
"child_id u00\n",
"direction 북\n",
"condition 좌회전시\n",
"inc_edge 571500487_02\n",
"out_edge 571500487_01.32\n",
"Name: 0, dtype: object\n"
]
}
],
"source": [
"row = self.uturn.iloc[0]\n",
"print(row)"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"u00 i0\n",
"북 좌회전시\n",
"571500487_02 571500487_01.32\n"
]
}
],
"source": [
"child_id = row.child_id\n",
"parent_id = row.parent_id\n",
"direction = row.direction\n",
"condition = row.condition\n",
"inc_edge_id = row.inc_edge\n",
"out_edge_id = row.out_edge\n",
"print(child_id, parent_id)\n",
"print(direction, condition)\n",
"print(inc_edge_id, out_edge_id)"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 175 1 A 8 남 북 179 004 \n",
"1 175 1 B 4 북 남 003 176 \n",
"2 175 2 A 7 북 동 001 095 \n",
"3 175 2 B 3 남 서 179 270 \n",
"4 175 3 A 6 동 서 090 270 \n",
"5 175 3 B 1 동 남 090 180 \n",
"6 175 4 A 5 서 북 268 000 \n",
"7 175 4 B 2 서 동 270 090 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u00 \n",
"1 NaN NaN u00 \n",
"2 NaN NaN u00 \n",
"3 NaN NaN u00 \n",
"4 NaN NaN u00 \n",
"5 NaN NaN u00 \n",
"6 NaN NaN u00 \n",
"7 NaN NaN u00 "
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# match5에서 parent_id에 해당하는 행들을 가져옴\n",
"cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
"cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
"cmatch['node_id'] = child_id\n",
"cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"cmatch"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"# condition 별로 inc_dire, out_dire를 정함\n",
"ind = directions.index(direction)\n",
"if condition == \"좌회전시\":\n",
" inc_dire = direction\n",
" out_dire = directions[(ind + 2) % len(directions)]\n",
"elif condition == \"보행신호시\":\n",
" inc_dire = directions[(ind + 2) % len(directions)]\n",
" out_dire = directions[(ind - 2) % len(directions)]"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"북 동\n"
]
}
],
"source": [
"print(inc_dire, out_dire)"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
" u00 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 175 1 A 8 남 북 179 004 \n",
"1 175 1 B 4 북 남 003 176 \n",
"2 175 2 A 19 북 동 001 095 \n",
"3 175 2 B 3 남 서 179 270 \n",
"4 175 3 A 6 동 서 090 270 \n",
"5 175 3 B 1 동 남 090 180 \n",
"6 175 4 A 5 서 북 268 000 \n",
"7 175 4 B 2 서 동 270 090 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u00 \n",
"1 NaN NaN u00 \n",
"2 571500487_02 571500487_01.32 u00 \n",
"3 NaN NaN u00 \n",
"4 NaN NaN u00 \n",
"5 NaN NaN u00 \n",
"6 NaN NaN u00 \n",
"7 NaN NaN u00 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# (inc_dire, out_dire) 별로 inc_edge_id, out_edge_id를 정함\n",
"cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
"if condition == '보행신호시':\n",
" # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
"# 유턴신호의 이동류번호를 19로 부여한다.\n",
"cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), 'move_no'] = 19\n",
"\n",
"display(cmatch)"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [],
"source": [
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" direction = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge\n",
" out_edge_id = row.out_edge\n",
" # match5에서 parent_id에 해당하는 행들을 가져옴\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
" # condition 별로 inc_dire, out_dire를 정함\n",
" ind = directions.index(direction)\n",
" if condition == \"좌회전시\":\n",
" inc_dire = direction\n",
" out_dire = directions[(ind + 2) % len(directions)]\n",
" elif condition == \"보행신호시\":\n",
" inc_dire = directions[(ind + 2) % len(directions)]\n",
" out_dire = directions[(ind - 2) % len(directions)]\n",
"\n",
" # (inc_dire, out_dire) 별로 inc_edge_id, out_edge_id를 정함\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" if condition == '보행신호시':\n",
" # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 유턴신호의 이동류번호를 19로 부여한다.\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), 'move_no'] = 19\n",
" cmatches.append(cmatch)"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
" u00 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 0 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 1 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 2 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 3 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 4 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
" u20 | \n",
"
\n",
" \n",
" 5 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 6 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 7 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 19 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
" u30 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 19 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
" u31 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 19 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
" u32 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 0 | \n",
" 210 | \n",
" 1 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 1 | \n",
" 210 | \n",
" 1 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 2 | \n",
" 210 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
" u60 | \n",
"
\n",
" \n",
" 3 | \n",
" 210 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 4 | \n",
" 210 | \n",
" 3 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 359 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 5 | \n",
" 210 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 6 | \n",
" 210 | \n",
" 4 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 7 | \n",
" 210 | \n",
" 4 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 175 1 A 8 남 북 179 004 \n",
"1 175 1 B 4 북 남 003 176 \n",
"2 175 2 A 19 북 동 001 095 \n",
"3 175 2 B 3 남 서 179 270 \n",
"4 175 3 A 6 동 서 090 270 \n",
"5 175 3 B 1 동 남 090 180 \n",
"6 175 4 A 5 서 북 268 000 \n",
"7 175 4 B 2 서 동 270 090 \n",
"0 177 1 A 8 남 북 180 000 \n",
"1 177 1 B 4 북 남 001 176 \n",
"2 177 2 A 7 북 동 000 090 \n",
"3 177 2 B 3 남 서 179 270 \n",
"4 177 3 A 17 NaN NaN NaN NaN \n",
"5 177 3 B 18 NaN NaN NaN NaN \n",
"6 177 4 A 5 서 북 268 000 \n",
"7 177 4 B 1 동 남 090 180 \n",
"0 178 1 A 8 남 북 180 000 \n",
"1 178 1 B 4 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 19 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"0 178 1 A 19 남 북 180 000 \n",
"1 178 1 B 4 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 6 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"0 178 1 A 8 남 북 180 000 \n",
"1 178 1 B 19 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 6 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"0 210 1 A 6 동 서 090 270 \n",
"1 210 1 B 18 NaN NaN NaN NaN \n",
"2 210 2 A 19 서 북 268 000 \n",
"3 210 2 B 2 서 동 270 090 \n",
"4 210 3 A 7 북 동 359 090 \n",
"5 210 3 B 4 북 남 000 180 \n",
"6 210 4 A 8 남 북 180 000 \n",
"7 210 4 B 3 남 서 180 270 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u00 \n",
"1 NaN NaN u00 \n",
"2 571500487_02 571500487_01.32 u00 \n",
"3 NaN NaN u00 \n",
"4 NaN NaN u00 \n",
"5 NaN NaN u00 \n",
"6 NaN NaN u00 \n",
"7 NaN NaN u00 \n",
"0 NaN NaN u20 \n",
"1 NaN NaN u20 \n",
"2 NaN NaN u20 \n",
"3 NaN NaN u20 \n",
"4 571542810_01.51 571542810_02 u20 \n",
"5 NaN NaN u20 \n",
"6 NaN NaN u20 \n",
"7 NaN NaN u20 \n",
"0 NaN NaN u30 \n",
"1 NaN NaN u30 \n",
"2 NaN NaN u30 \n",
"3 NaN NaN u30 \n",
"4 NaN NaN u30 \n",
"5 NaN NaN u30 \n",
"6 571556452_01 571556452_02 u30 \n",
"7 NaN NaN u30 \n",
"0 571500475_02 571500475_01.26 u31 \n",
"1 NaN NaN u31 \n",
"2 NaN NaN u31 \n",
"3 NaN NaN u31 \n",
"4 NaN NaN u31 \n",
"5 NaN NaN u31 \n",
"6 NaN NaN u31 \n",
"7 NaN NaN u31 \n",
"0 NaN NaN u32 \n",
"1 571540303_02 -571540303_02 u32 \n",
"2 NaN NaN u32 \n",
"3 NaN NaN u32 \n",
"4 NaN NaN u32 \n",
"5 NaN NaN u32 \n",
"6 NaN NaN u32 \n",
"7 NaN NaN u32 \n",
"0 NaN NaN u60 \n",
"1 NaN NaN u60 \n",
"2 571500535_02 -571500535_02 u60 \n",
"3 NaN NaN u60 \n",
"4 NaN NaN u60 \n",
"5 NaN NaN u60 \n",
"6 NaN NaN u60 \n",
"7 NaN NaN u60 "
]
},
"execution_count": 191,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(cmatches)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:16<00:00, 1071.54it/s]\n"
]
}
],
"source": [
"self = DailyPreprocessor()\n",
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"u00\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
" u00 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 175 1 A 8 남 북 179 004 \n",
"1 175 1 B 4 북 남 003 176 \n",
"2 175 2 A 19 북 동 001 095 \n",
"3 175 2 B 3 남 서 179 270 \n",
"4 175 3 A 6 동 서 090 270 \n",
"5 175 3 B 1 동 남 090 180 \n",
"6 175 4 A 5 서 북 268 000 \n",
"7 175 4 B 2 서 동 270 090 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u00 \n",
"1 NaN NaN u00 \n",
"2 571500487_02 571500487_01.32 u00 \n",
"3 NaN NaN u00 \n",
"4 NaN NaN u00 \n",
"5 NaN NaN u00 \n",
"6 NaN NaN u00 \n",
"7 NaN NaN u00 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"u20\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 1 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 2 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 3 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 4 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
" u20 | \n",
"
\n",
" \n",
" 5 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 6 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
" 7 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u20 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 177 1 A 8 남 북 180 000 \n",
"1 177 1 B 4 북 남 001 176 \n",
"2 177 2 A 7 북 동 000 090 \n",
"3 177 2 B 3 남 서 179 270 \n",
"4 177 3 A 17 NaN NaN NaN NaN \n",
"5 177 3 B 18 NaN NaN NaN NaN \n",
"6 177 4 A 5 서 북 268 000 \n",
"7 177 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u20 \n",
"1 NaN NaN u20 \n",
"2 NaN NaN u20 \n",
"3 NaN NaN u20 \n",
"4 571542810_01.51 571542810_02 u20 \n",
"5 NaN NaN u20 \n",
"6 NaN NaN u20 \n",
"7 NaN NaN u20 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"u30\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 19 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
" u30 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u30 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 178 1 A 8 남 북 180 000 \n",
"1 178 1 B 4 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 19 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u30 \n",
"1 NaN NaN u30 \n",
"2 NaN NaN u30 \n",
"3 NaN NaN u30 \n",
"4 NaN NaN u30 \n",
"5 NaN NaN u30 \n",
"6 571556452_01 571556452_02 u30 \n",
"7 NaN NaN u30 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"u31\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 19 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
" u31 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u31 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 178 1 A 19 남 북 180 000 \n",
"1 178 1 B 4 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 6 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 571500475_02 571500475_01.26 u31 \n",
"1 NaN NaN u31 \n",
"2 NaN NaN u31 \n",
"3 NaN NaN u31 \n",
"4 NaN NaN u31 \n",
"5 NaN NaN u31 \n",
"6 NaN NaN u31 \n",
"7 NaN NaN u31 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"u32\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 19 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
" u32 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 5 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 6 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
" 7 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u32 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 178 1 A 8 남 북 180 000 \n",
"1 178 1 B 19 북 남 000 180 \n",
"2 178 2 A 7 북 동 000 090 \n",
"3 178 2 B 3 남 서 180 270 \n",
"4 178 3 A 5 서 북 270 000 \n",
"5 178 3 B 2 서 동 270 090 \n",
"6 178 4 A 6 동 서 090 270 \n",
"7 178 4 B 1 동 남 090 180 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u32 \n",
"1 571540303_02 -571540303_02 u32 \n",
"2 NaN NaN u32 \n",
"3 NaN NaN u32 \n",
"4 NaN NaN u32 \n",
"5 NaN NaN u32 \n",
"6 NaN NaN u32 \n",
"7 NaN NaN u32 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"u60\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 210 | \n",
" 1 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 1 | \n",
" 210 | \n",
" 1 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 2 | \n",
" 210 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
" u60 | \n",
"
\n",
" \n",
" 3 | \n",
" 210 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 4 | \n",
" 210 | \n",
" 3 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 359 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 5 | \n",
" 210 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 6 | \n",
" 210 | \n",
" 4 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 7 | \n",
" 210 | \n",
" 4 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 210 1 A 6 동 서 090 270 \n",
"1 210 1 B 18 NaN NaN NaN NaN \n",
"2 210 2 A 19 서 북 268 000 \n",
"3 210 2 B 2 서 동 270 090 \n",
"4 210 3 A 7 북 동 359 090 \n",
"5 210 3 B 4 북 남 000 180 \n",
"6 210 4 A 8 남 북 180 000 \n",
"7 210 4 B 3 남 서 180 270 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u60 \n",
"1 NaN NaN u60 \n",
"2 571500535_02 -571500535_02 u60 \n",
"3 NaN NaN u60 \n",
"4 NaN NaN u60 \n",
"5 NaN NaN u60 \n",
"6 NaN NaN u60 \n",
"7 NaN NaN u60 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n",
"\n",
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"self.uturn_ids = sorted(self.uturn.child_id.unique())\n",
"self.coord_ids = sorted(self.coord.child_id.unique())\n",
"\n",
"ch2pa = {} # child to parent\n",
"for child_id in self.child_ids:\n",
" parent_no = self.inter_node[self.inter_node.node_id==child_id].inter_no.iloc[0]\n",
" sub_inter_node = self.inter_node[self.inter_node.inter_no==parent_no]\n",
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n",
"\n",
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" direction = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge\n",
" out_edge_id = row.out_edge\n",
" # match5에서 parent_id에 해당하는 행들을 가져옴\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
" # condition 별로 inc_dire, out_dire를 정함\n",
" ind = directions.index(direction)\n",
" if condition == \"좌회전시\":\n",
" inc_dire = direction\n",
" out_dire = directions[(ind + 2) % len(directions)]\n",
" elif condition == \"보행신호시\":\n",
" inc_dire = directions[(ind + 2) % len(directions)]\n",
" out_dire = directions[(ind - 2) % len(directions)]\n",
"\n",
" # (inc_dire, out_dire) 별로 inc_edge_id, out_edge_id를 정함\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" if condition == '보행신호시':\n",
" # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 유턴신호의 이동류번호를 19로 부여한다.\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), 'move_no'] = 19\n",
" print(child_id)\n",
" display(cmatch)\n",
" cmatches.append(cmatch)\n",
"\n",
"# 각 연등교차로(coordination node)에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"self.coord['inter_no'] = self.coord['parent_id'].map(self.node2inter)\n",
"self.coord = self.coord.rename(columns={'child_id':'node_id'})\n",
"self.coord[['inc_dir', 'out_dir', 'inc_angle','out_angle']] = np.nan\n",
"self.coord['move_no'] = 20\n",
"self.coord = self.coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dir', 'out_dir', 'inc_angle','out_angle', 'inc_edge', 'out_edge', 'node_id']]\n",
"\n",
"# display(coord)\n",
"cmatches = pd.concat(cmatches)\n",
"self.match6 = pd.concat([self.match5, cmatches, self.coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])\n",
"# self.match6.to_csv(os.path.join(self.path_intermediates, 'match6.csv'))\n"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inc | \n",
" out | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 105.0 | \n",
"
\n",
" \n",
" 1 | \n",
" 2.0 | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" NaN | \n",
" 5.0 | \n",
"
\n",
" \n",
" 3 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inc out\n",
"0 1.0 105.0\n",
"1 2.0 NaN\n",
"2 NaN 5.0\n",
"3 NaN NaN"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inc | \n",
" out | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" True | \n",
" True | \n",
"
\n",
" \n",
" 1 | \n",
" True | \n",
" False | \n",
"
\n",
" \n",
" 2 | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
" 3 | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inc out\n",
"0 True True\n",
"1 True False\n",
"2 False True\n",
"3 False False"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 True\n",
"1 False\n",
"2 False\n",
"3 False\n",
"dtype: bool\n",
"inc False\n",
"out False\n",
"dtype: bool\n"
]
}
],
"source": [
"bdf = pd.DataFrame({'inc':[1, 2, np.nan, np.nan], 'out':[105, np.nan, 5, np.nan]})\n",
"display(bdf)\n",
"display(bdf.notna())\n",
"print(bdf.notna().all(axis=1))\n",
"print(bdf.notna().all(axis=0))\n"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inc | \n",
" out | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2.0 | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" NaN | \n",
" 5.0 | \n",
"
\n",
" \n",
" 2 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inc out\n",
"0 2.0 NaN\n",
"1 NaN 5.0\n",
"2 NaN NaN"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" inc out\n",
"0 False True\n",
"1 True False\n",
"2 True True\n",
"0 True\n",
"1 True\n",
"2 True\n",
"dtype: bool\n",
"True\n"
]
}
],
"source": [
"bdf = pd.DataFrame({'inc':[2, np.nan, np.nan], 'out':[np.nan, 5, np.nan]})\n",
"display(bdf)\n",
"# print((bdf[['inc','out']].notna()))\n",
"# print((bdf[['inc','out']].notna()).all(axis=1))\n",
"# print((bdf[['inc','out']].notna()).all(axis=1).any())\n",
"print((bdf[['inc','out']].isna()))\n",
"print((bdf[['inc','out']].isna()).any(axis=1))\n",
"print(bdf[['inc','out']].isna().any(axis=1).all())"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" inc_edge out_edge\n",
"0 False False\n",
"1 False False\n",
"2 True True\n",
"3 False False\n",
"4 False False\n",
"5 False False\n",
"6 False False\n",
"7 False False\n",
"0 False\n",
"1 False\n",
"2 True\n",
"3 False\n",
"4 False\n",
"5 False\n",
"6 False\n",
"7 False\n",
"dtype: bool\n",
"True\n"
]
}
],
"source": [
"\n",
"print(cmatch[['inc_edge','out_edge']].notna())\n",
"print((cmatch[['inc_edge','out_edge']].notna()).all(axis=1))\n",
"print((cmatch[['inc_edge','out_edge']].notna()).all(axis=1).any())"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cmatch[['inc_edge','out_edge']].isna().any(axis=1).all()"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"서\n",
"북\n"
]
}
],
"source": [
"print(inc_dire)\n",
"print(out_dire)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 210 | \n",
" 1 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 1 | \n",
" 210 | \n",
" 1 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 2 | \n",
" 210 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
" u60 | \n",
"
\n",
" \n",
" 3 | \n",
" 210 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 4 | \n",
" 210 | \n",
" 3 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 359 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 5 | \n",
" 210 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 6 | \n",
" 210 | \n",
" 4 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
" 7 | \n",
" 210 | \n",
" 4 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 210 1 A 6 동 서 090 270 \n",
"1 210 1 B 18 NaN NaN NaN NaN \n",
"2 210 2 A 19 서 북 268 000 \n",
"3 210 2 B 2 서 동 270 090 \n",
"4 210 3 A 7 북 동 359 090 \n",
"5 210 3 B 4 북 남 000 180 \n",
"6 210 4 A 8 남 북 180 000 \n",
"7 210 4 B 3 남 서 180 270 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u60 \n",
"1 NaN NaN u60 \n",
"2 571500535_02 -571500535_02 u60 \n",
"3 NaN NaN u60 \n",
"4 NaN NaN u60 \n",
"5 NaN NaN u60 \n",
"6 NaN NaN u60 \n",
"7 NaN NaN u60 "
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cmatch"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"((cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire)).any()"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" 210 | \n",
" 2 | \n",
" A | \n",
" 19 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
" u60 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"2 210 2 A 19 서 북 268 000 \n",
"\n",
" inc_edge out_edge node_id \n",
"2 571500535_02 -571500535_02 u60 "
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire)]"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
]
}
],
"source": [
"self.load_data()\n",
"self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n",
"\n",
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"self.uturn_ids = sorted(self.uturn.child_id.unique())\n",
"self.coord_ids = sorted(self.coord.child_id.unique())\n",
"\n",
"ch2pa = {} # child to parent\n",
"for child_id in self.child_ids:\n",
" parent_no = self.inter_node[self.inter_node.node_id==child_id].inter_no.iloc[0]\n",
" sub_inter_node = self.inter_node[self.inter_node.inter_no==parent_no]\n",
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dir | \n",
" out_dir | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge | \n",
" out_edge | \n",
" node_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 004 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 003 | \n",
" 176 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 095 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
"0 175 1 A 8 남 북 179 004 \n",
"1 175 1 B 4 북 남 003 176 \n",
"2 175 2 A 7 북 동 001 095 \n",
"3 175 2 B 3 남 서 179 270 \n",
"4 175 3 A 6 동 서 090 270 \n",
"5 175 3 B 1 동 남 090 180 \n",
"6 175 4 A 5 서 북 268 000 \n",
"7 175 4 B 2 서 동 270 090 \n",
"\n",
" inc_edge out_edge node_id \n",
"0 NaN NaN u00 \n",
"1 NaN NaN u00 \n",
"2 NaN NaN u00 \n",
"3 NaN NaN u00 \n",
"4 NaN NaN u00 \n",
"5 NaN NaN u00 \n",
"6 NaN NaN u00 \n",
"7 NaN NaN u00 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"row = self.uturn.iloc[0]\n",
"\n",
"child_id = row.child_id\n",
"parent_id = row.parent_id\n",
"direction = row.direction\n",
"condition = row.condition\n",
"inc_edge_id = row.inc_edge\n",
"out_edge_id = row.out_edge\n",
"\n",
"# match5에서 parent_id에 해당하는 행들을 가져옴\n",
"cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
"cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
"cmatch['node_id'] = child_id\n",
"cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
"display(cmatch)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"ind = directions.index(direction)\n",
"inc_dire_right = direction\n",
"out_dire_right = directions[(ind + 2) % len(directions)]\n",
"inc_dire_pedes = directions[(ind + 2) % len(directions)]\n",
"out_dire_pedes = directions[(ind - 2) % len(directions)]\n",
"\n",
"if condition == \"좌회전시\":\n",
" inc_dire = inc_dire_right\n",
" out_dire = out_dire_right\n",
"elif condition == \"보행신호시\":\n",
" inc_dire = inc_dire_pedes\n",
" out_dire = out_dire_pedes\n",
"pedes_condition = ((cmatch.inc_dir==inc_dire_pedes) & (cmatch.out_dir==out_dire_pedes)).any()\n",
"right_condition = ((cmatch.inc_dir==inc_dire_right) & (cmatch.out_dir==out_dire_right)).any()\n"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" direction = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge\n",
" out_edge_id = row.out_edge\n",
" # match5에서 parent_id에 해당하는 행들을 가져옴\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
" # condition 별로 inc_dire, out_dire를 정함\n",
" ind = directions.index(direction)\n",
" if condition == \"좌회전시\":\n",
" inc_dire = direction\n",
" out_dire = directions[(ind + 2) % len(directions)]\n",
" elif condition == \"보행신호시\":\n",
" inc_dire = directions[(ind + 2) % len(directions)]\n",
" out_dire = directions[(ind - 2) % len(directions)]\n",
"\n",
" # (inc_dire, out_dire) 별로 inc_edge_id, out_edge_id를 정함\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" if condition == '보행신호시':\n",
" # 이동류번호가 17(보행신호이동류)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
"\n",
" # 만약 어떤 유턴신호도 배정되지 않았다면, 보행신호시 > 좌회전시 > 전적색이동류발생시 > 보행신호이동류발생시 순으로 유턴신호를 배정한다.\n",
" uturn_not_assigned = cmatch[['inc_edge','out_edge']].isna().any(axis=1).all()\n",
" if uturn_not_assigned:\n",
" # 보행신호시\n",
" inc_dire_pedes = directions[(ind + 2) % len(directions)]\n",
" out_dire_pedes = directions[(ind - 2) % len(directions)]\n",
" # 좌회전시\n",
" inc_dire_right = direction\n",
" out_dire_right = directions[(ind + 2) % len(directions)]\n",
"\n",
" # 보행신호시의 inc_dir, out_dir 존재\n",
" pedes_exists = ((cmatch.inc_dir==inc_dire_pedes) & (cmatch.out_dir==out_dire_pedes))\n",
" right_exists = ((cmatch.inc_dir==inc_dire_right) & (cmatch.out_dir==out_dire_right))\n",
" all_redsigns = cmatch.move_no == 18\n",
" crosswalk_on = cmatch.move_no == 17\n",
" \n",
" if pedes_exists.any():\n",
" cmatch.loc[pedes_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" elif right_exists.any():\n",
" cmatch.loc[right_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" elif all_redsigns.any():\n",
" cmatch.loc[all_redsigns, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" elif crosswalk_on.any():\n",
" cmatch.loc[crosswalk_on & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
"\n",
" # 유턴신호의 이동류번호를 19로 부여한다.\n",
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire), 'move_no'] = 19\n"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 68%|██████▊ | 11723/17280 [01:23<00:39, 140.43it/s] \n",
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:14<00:00, 1174.55it/s]\n"
]
}
],
"source": [
"self = DailyPreprocessor()\n",
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()\n",
"self.make_match6()"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" parent_id | \n",
" child_id | \n",
" direction | \n",
" condition | \n",
" inc_edge | \n",
" out_edge | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" i0 | \n",
" u00 | \n",
" 북 | \n",
" 좌회전시 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
"
\n",
" \n",
" 1 | \n",
" i2 | \n",
" u20 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
"
\n",
" \n",
" 2 | \n",
" i3 | \n",
" u30 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
"
\n",
" \n",
" 3 | \n",
" i3 | \n",
" u31 | \n",
" 동 | \n",
" 보행신호시 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
"
\n",
" \n",
" 4 | \n",
" i3 | \n",
" u32 | \n",
" 서 | \n",
" 보행신호시 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
"
\n",
" \n",
" 5 | \n",
" i6 | \n",
" u60 | \n",
" 서 | \n",
" 좌회전시 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" parent_id child_id direction condition inc_edge out_edge\n",
"0 i0 u00 북 좌회전시 571500487_02 571500487_01.32\n",
"1 i2 u20 북 보행신호시 571542810_01.51 571542810_02\n",
"2 i3 u30 북 보행신호시 571556452_01 571556452_02\n",
"3 i3 u31 동 보행신호시 571500475_02 571500475_01.26\n",
"4 i3 u32 서 보행신호시 571540303_02 -571540303_02\n",
"5 i6 u60 서 좌회전시 571500535_02 -571500535_02"
]
},
"execution_count": 166,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.uturn"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {},
"outputs": [],
"source": [
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" direction = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge\n",
" out_edge_id = row.out_edge\n",
"\n",
" # match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
"\n",
" # 보행신호시/좌회전시 진입/진출방향\n",
" ind = directions.index(direction)\n",
" inc_dire_pedes = directions[(ind + 2) % len(directions)]\n",
" out_dire_pedes = directions[(ind - 2) % len(directions)]\n",
" inc_dire_right = direction\n",
" out_dire_right = directions[(ind + 2) % len(directions)]\n",
"\n",
" # 보행신호시/좌회전시 조건\n",
" pedes_exists = (cmatch.inc_dir==inc_dire_pedes) & (cmatch.out_dir==out_dire_pedes)\n",
" right_exists = (cmatch.inc_dir==inc_dire_right) & (cmatch.out_dir==out_dire_right)\n",
"\n",
" # 보행신호시/좌회전시 진입/진출 엣지id 배정\n",
" ind = directions.index(direction)\n",
" if condition == \"보행신호시\":\n",
" cmatch.loc[pedes_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" elif condition == \"좌회전시\":\n",
" cmatch.loc[right_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
"\n",
" # 신호없음이동류발생시/보행신호이동류발생시 조건\n",
" all_redsigns = cmatch.move_no == 18\n",
" crosswalk_on = cmatch.move_no == 17\n",
"\n",
" # 만약 어떤 유턴신호도 배정되지 않았다면\n",
" # 신호없음이동류발생시 → 보행신호이동류발생시 → 보행신호시 → 좌회전시 순으로 진입/진출 엣지id 배정\n",
" uturn_not_assigned = cmatch[['inc_edge','out_edge']].isna().any(axis=1).all()\n",
" if uturn_not_assigned:\n",
" # 신호없음이동류(18) 발생시\n",
" if all_redsigns.any():\n",
" cmatch.loc[all_redsigns, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 보행신호이동류(17) 발생시\n",
" elif crosswalk_on.any():\n",
" cmatch.loc[crosswalk_on & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 보행신호시\n",
" elif pedes_exists.any():\n",
" cmatch.loc[pedes_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
" # 좌회전시\n",
" elif right_exists.any():\n",
" cmatch.loc[right_exists, ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 유턴신호 부여 로직\n",
"## 입력 1. `self.match5`\n",
"- 컬럼목록 : 노드id, 현시번호, 링타입, 이동류번호, 진입/진출방향, 진입/진출엣지id\n",
"- 설명 : 부모교차로에 대한 매칭정보\n",
"\n",
"## 입력 2. `self.uturn`\n",
"- 컬럼목록 : 부모노드id, 자식노드id, 진입방향, 조건, 진입/진출방향\n",
"- 설명 : 유턴에 대한 정보\n",
"- 여기에서 조건이란 \"좌회전시\" 또는 \"보행신호시\" 또는 \"\"(지정되지 않음) 중 하나임.\n",
"\n",
"## 출력 : `self.match6`\n",
"- 컬럼목록 : `self.match5와` 같음\n",
"- 설명 : 부모 및 자식교차로에 대한 매칭정보 (자식교차로 : 유턴교차로, 연등교차로)\n",
"\n",
"## 유턴신호 부여 알고리즘\n",
"\n",
"## 요약 :\n",
"각 유턴노드별로 `self.match5`에서 해당되는 행들을 가져오고 (이것을 `cmatch`라고 한다.)\n",
"조건별로 `cmatch`에서 해당되는 행에 진입/진출엣지id를 지정한다. \n",
"\n",
"## 상세:\n",
"각 유턴 노드에 대하여 `cmatch`를 다음과 같이 정한다.\n",
"\n",
"- (1) `cmatch`\n",
" - (1-1) 부모노드의 `self.match5`에 해당하는 데이터프레임(`cmatch`)을 가져온다.\n",
" - (1-2) `node_id`는 자식노드id로 부여하고, 진입/진출엣지id는 `np.nan`으로 초기화한다.\n",
"- (2) 조건이 \"좌회전시\", \"보행신호시\"이면\n",
" - (2-1) 그에 따라 진입/진출방향을 정한다. (8방위)\n",
" - (2-2) `cmatch`에서 진입/진출방향에 대응되는 행에 진입/진출엣지id를 지정한다.\n",
"- (3) 조건이 지정되지 않았거나,\n",
" 조건이 지정되었어도 진입/진출방향에 대응되는 행이 존재하지 않으면\n",
" 보행신호이동류발생시 → 전적색이동류발생시 → 보행신호시 → 좌회전시 순으로 유턴신호를 정한다.\n",
" - (3-1) 신호없음이동류발생시\n",
" \n",
" 이동류번호가 18(신호없음)인 행이 cmatch에 존재하면\n",
" 해당 행에 진입/진출엣지id를 지정한다.\n",
" - (3-2) 보행신호이동류발생시\n",
" \n",
" 3-1에 해당하지 않고, 이동류번호가 17(보행신호이동류)인 행이 `cmatch`에 존재하며\n",
" 유턴노드 방향으로 진출하는 신호가 없으면\n",
" 해당 행에 진입/진출엣지id를 지정한다.\n",
" - (3-3) 보행신호시\n",
" \n",
" 3-1, 3-2에 해당하지 않고\n",
" 보행신호에 대응되는 진입/진출방향에 대한 행이 `cmatch`에 존재하면\n",
" 해당 행에 진입/진출엣지id를 지정한다.\n",
" - (3-4) 좌회전시\n",
" \n",
" 3-1, 3-2, 3-3에 해당하지 않고\n",
" 좌회전에 대응되는 진입/진출방향에 대한 행이 `cmatch`에 존재하면\n",
" 해당 행에 진입/진출엣지id를 지정한다.\n",
" - (3-5) 3-1 ~ 3-4에 해당되지 않는다면 유턴신호가 지정되지 않는다.\n",
"\n",
"## 이후과정:\n",
"각 유턴노드에 대한 `cmatch`들을 리스트 형태로 저장한 후 `pd.concat`하여 합친다 (`cmatches`).\n",
"연동교차로에 대해서도 비슷한 종류의 테이블을 만들어둔다. (`self.coord`, 상세 생성과정 생략)\n",
"`self.match5`, `cmatches`, `self.coord를` `pd.concat`하여 `self.match6`를 만든다."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 준비합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"2. 신호이력 테이블을 변환합니다.\n",
"3. 이동류정보 테이블을 변환합니다.\n",
"4. 통합 테이블을 생성합니다.\n",
"5. 신호를 생성합니다.\n",
"6. 이슈사항을 저장합니다.\n",
"(1) 0:00:00.062696\n",
"(1-1) 0:00:00.011912\n",
"(1-2) 0:00:00.027038\n",
"(1-3) 0:00:00\n",
"(1-4) 0:00:00\n",
"(1-5) 0:00:00.023746\n",
"(2) 0:00:00.517846\n",
"(2-1) 0:00:00.083063\n",
"(2-2) 0:00:00.403649\n",
"(2-3) 0:00:00.031134\n",
"(3) 0:00:00.354969\n",
"(3-1) 0:00:00.327645\n",
"(3-2) 0:00:00.027324\n",
"(4) 0:00:00.209483\n",
"(4-1) 0:00:00.001956\n",
"(4-2) 0:00:00.015003\n",
"(4-2) 0:00:00.192524\n",
"(5) 0:00:00.814094\n",
"(5-1) 0:00:00.012088\n",
"(5-2) 0:00:00.795342\n",
"(5-3) 0:00:00.006664\n",
"(6) 0:00:00.000875\n",
"total time : 0:00:01.959963\n"
]
}
],
"source": [
"self = SignalGenerator()\n",
"self.main()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" c30 | \n",
" 1704416860 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\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 1704416690 1 1 8 4 38 \n",
"1 178 c30 1704416690 2 2 7 3 39 \n",
"2 178 c30 1704416690 3 3 5 2 43 \n",
"3 178 c30 1704416690 4 4 6 1 22 \n",
"4 178 c30 1704416860 1 1 8 4 38 \n",
".. ... ... ... ... ... ... ... ... \n",
"233 210 u60 1704417140 1 1 6 18 28 \n",
"234 210 u60 1704417140 1 2 6 2 15 \n",
"235 210 u60 1704417140 2 2 5 2 43 \n",
"236 210 u60 1704417140 3 3 7 4 70 \n",
"237 210 u60 1704417140 4 4 8 3 24 \n",
"\n",
" state_A state_B phase_sumo \n",
"0 rrrrrr rrrrrr 0 \n",
"1 GGGrrr rrrGGG 1 \n",
"2 GGGrrr rrrGGG 2 \n",
"3 GGGrrr rrrGGG 3 \n",
"4 rrrrrr rrrrrr 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": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.sigtable"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'SignalGenerator' object has no attribute 'unodes'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[13], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munodes\u001b[49m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'SignalGenerator' object has no attribute 'unodes'"
]
}
],
"source": [
"self.unodes"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" c30 | \n",
" 1704416690 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" c30 | \n",
" 1704416860 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\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 1704416690 1 1 8 4 38 \n",
"1 178 c30 1704416690 2 2 7 3 39 \n",
"2 178 c30 1704416690 3 3 5 2 43 \n",
"3 178 c30 1704416690 4 4 6 1 22 \n",
"4 178 c30 1704416860 1 1 8 4 38 \n",
".. ... ... ... ... ... ... ... ... \n",
"233 210 u60 1704417140 1 1 6 18 28 \n",
"234 210 u60 1704417140 1 2 6 2 15 \n",
"235 210 u60 1704417140 2 2 5 2 43 \n",
"236 210 u60 1704417140 3 3 7 4 70 \n",
"237 210 u60 1704417140 4 4 8 3 24 \n",
"\n",
" state_A state_B phase_sumo \n",
"0 rrrrrr rrrrrr 0 \n",
"1 GGGrrr rrrGGG 1 \n",
"2 GGGrrr rrrGGG 2 \n",
"3 GGGrrr rrrGGG 3 \n",
"4 rrrrrr rrrrrr 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": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.sigtable"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"self = DailyPreprocessor()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
"2. 중간산출물을 생성합니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:14<00:00, 1177.84it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2-1. 매칭 테이블들을 생성했습니다.\n",
"2-2. 비보호우회전(g)을 배정했습니다.\n",
"2-3. 직진 및 좌회전(G)을 배정했습니다.\n",
"2-2. node2num_cycles.json를 저장했습니다.\n",
"3. 이슈사항을 저장합니다.\n"
]
}
],
"source": [
"self.main()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['u00', 'u20', 'u30', 'u31', 'u32', 'u60']"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.uturn_ids"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"uid2uindex = {}\n",
"for uid in self.uturn_ids:\n",
" states = self.match6[self.match6.node_id==uid].state.unique()\n",
" for state in states:\n",
" if 'G' in state:\n",
" index = state.index('G')\n",
" uid2uindex[uid] = index\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'u00': 4, 'u20': 2, 'u30': 4, 'u31': 4, 'u32': 7, 'u60': 8}"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"uid2uindex"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" state | \n",
"
\n",
" \n",
" \n",
" \n",
" 62 | \n",
" 178 | \n",
" u31 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" ggggGggg | \n",
"
\n",
" \n",
" 63 | \n",
" 178 | \n",
" u31 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 64 | \n",
" 178 | \n",
" u31 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 65 | \n",
" 178 | \n",
" u31 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 66 | \n",
" 178 | \n",
" u31 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 67 | \n",
" 178 | \n",
" u31 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 68 | \n",
" 178 | \n",
" u31 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" ggggrggg | \n",
"
\n",
" \n",
" 69 | \n",
" 178 | \n",
" u31 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" ggggrggg | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id phase_no ring_type move_no state\n",
"62 178 u31 1 A 8 ggggGggg\n",
"63 178 u31 1 B 4 ggggrggg\n",
"64 178 u31 2 A 7 ggggrggg\n",
"65 178 u31 2 B 3 ggggrggg\n",
"66 178 u31 3 A 5 ggggrggg\n",
"67 178 u31 3 B 2 ggggrggg\n",
"68 178 u31 4 A 6 ggggrggg\n",
"69 178 u31 4 B 1 ggggrggg"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"self.match6[self.match6.node_id=='u31']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"self.match6"
]
},
{
"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",
"4. 통합 테이블을 생성합니다.\n",
"5. 신호를 생성합니다.\n",
"6. 이슈사항을 저장합니다.\n",
"(1) 0:00:00.063416\n",
"(1-1) 0:00:00.011400\n",
"(1-2) 0:00:00.028645\n",
"(1-3) 0:00:00\n",
"(1-4) 0:00:00\n",
"(1-5) 0:00:00.023371\n",
"(2) 0:00:00.327466\n",
"(2-1) 0:00:00.079160\n",
"(2-2) 0:00:00.229118\n",
"(2-3) 0:00:00.019188\n",
"(3) 0:00:00.271045\n",
"(3-1) 0:00:00.252066\n",
"(3-2) 0:00:00.018979\n",
"(4) 0:00:00.176595\n",
"(4-1) 0:00:00\n",
"(4-2) 0:00:00.019843\n",
"(4-2) 0:00:00.156752\n",
"(5) 0:00:00.649060\n",
"(5-1) 0:00:00.010529\n",
"(5-2) 0:00:00.634530\n",
"(5-3) 0:00:00.004001\n",
"(6) 0:00:00.000928\n",
"total time : 0:00:01.488510\n"
]
}
],
"source": [
"self = SignalGenerator()\n",
"self.main()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 178 | \n",
" c30 | \n",
" 1704419070 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 178 | \n",
" c30 | \n",
" 1704419070 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 178 | \n",
" c30 | \n",
" 1704419070 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" c30 | \n",
" 1704419070 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" GGGrrr | \n",
" rrrGGG | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" 178 | \n",
" c30 | \n",
" 1704419240 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" rrrrrr | \n",
" rrrrrr | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\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 1704419070 1 1 8 4 38 \n",
"1 178 c30 1704419070 2 2 7 3 39 \n",
"2 178 c30 1704419070 3 3 5 2 43 \n",
"3 178 c30 1704419070 4 4 6 1 22 \n",
"4 178 c30 1704419240 1 1 8 4 38 \n",
".. ... ... ... ... ... ... ... ... \n",
"233 210 u60 1704419480 1 1 6 18 28 \n",
"234 210 u60 1704419480 1 2 6 2 15 \n",
"235 210 u60 1704419480 2 2 5 2 43 \n",
"236 210 u60 1704419480 3 3 7 4 70 \n",
"237 210 u60 1704419480 4 4 8 3 24 \n",
"\n",
" state_A state_B phase_sumo \n",
"0 rrrrrr rrrrrr 0 \n",
"1 GGGrrr rrrGGG 1 \n",
"2 GGGrrr rrrGGG 2 \n",
"3 GGGrrr rrrGGG 3 \n",
"4 rrrrrr rrrrrr 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": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.sigtable"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 139 | \n",
" 175 | \n",
" u00 | \n",
" 1704419060 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 0 | \n",
"
\n",
" \n",
" 140 | \n",
" 175 | \n",
" u00 | \n",
" 1704419060 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" ggggGgggg | \n",
" ggggrgggg | \n",
" 1 | \n",
"
\n",
" \n",
" 141 | \n",
" 175 | \n",
" u00 | \n",
" 1704419060 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 2 | \n",
"
\n",
" \n",
" 142 | \n",
" 175 | \n",
" u00 | \n",
" 1704419060 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 3 | \n",
"
\n",
" \n",
" 143 | \n",
" 175 | \n",
" u00 | \n",
" 1704419060 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 4 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704419480 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
99 rows × 11 columns
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"139 175 u00 1704419060 1 1 8 4 43 \n",
"140 175 u00 1704419060 2 2 7 3 45 \n",
"141 175 u00 1704419060 3 3 6 1 33 \n",
"142 175 u00 1704419060 3 4 6 2 22 \n",
"143 175 u00 1704419060 4 4 5 2 37 \n",
".. ... ... ... ... ... ... ... ... \n",
"233 210 u60 1704419480 1 1 6 18 28 \n",
"234 210 u60 1704419480 1 2 6 2 15 \n",
"235 210 u60 1704419480 2 2 5 2 43 \n",
"236 210 u60 1704419480 3 3 7 4 70 \n",
"237 210 u60 1704419480 4 4 8 3 24 \n",
"\n",
" state_A state_B phase_sumo \n",
"139 ggggrgggg ggggrgggg 0 \n",
"140 ggggGgggg ggggrgggg 1 \n",
"141 ggggrgggg ggggrgggg 2 \n",
"142 ggggrgggg ggggrgggg 3 \n",
"143 ggggrgggg ggggrgggg 4 \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",
"[99 rows x 11 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.sigtable[self.sigtable.node_id.isin(self.uturn_ids)]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 1\n",
"xbcd\n",
"1 2\n",
"axcd\n",
"2 3\n",
"abxd\n",
"3 4\n",
"abcx\n"
]
}
],
"source": [
"A = 'abcd'\n",
"for i in range(len(A)):\n",
" print(i, i+1)\n",
" print(A[:i] + 'x' + A[i+1:])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"self = SignalGenerator()\n",
"self.main()\n",
"import numpy as np\n"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 139 | \n",
" 175 | \n",
" u00 | \n",
" 1704416900 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 0 | \n",
"
\n",
" \n",
" 140 | \n",
" 175 | \n",
" u00 | \n",
" 1704416900 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" ggggGgggg | \n",
" ggggrgggg | \n",
" 1 | \n",
"
\n",
" \n",
" 141 | \n",
" 175 | \n",
" u00 | \n",
" 1704416900 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 2 | \n",
"
\n",
" \n",
" 142 | \n",
" 175 | \n",
" u00 | \n",
" 1704416900 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 3 | \n",
"
\n",
" \n",
" 143 | \n",
" 175 | \n",
" u00 | \n",
" 1704416900 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 4 | \n",
"
\n",
" \n",
" 144 | \n",
" 175 | \n",
" u00 | \n",
" 1704417080 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 0 | \n",
"
\n",
" \n",
" 145 | \n",
" 175 | \n",
" u00 | \n",
" 1704417080 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" ggggGgggg | \n",
" ggggrgggg | \n",
" 1 | \n",
"
\n",
" \n",
" 146 | \n",
" 175 | \n",
" u00 | \n",
" 1704417080 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 2 | \n",
"
\n",
" \n",
" 147 | \n",
" 175 | \n",
" u00 | \n",
" 1704417080 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 3 | \n",
"
\n",
" \n",
" 148 | \n",
" 175 | \n",
" u00 | \n",
" 1704417080 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 4 | \n",
"
\n",
" \n",
" 149 | \n",
" 175 | \n",
" u00 | \n",
" 1704417260 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 0 | \n",
"
\n",
" \n",
" 150 | \n",
" 175 | \n",
" u00 | \n",
" 1704417260 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 45 | \n",
" ggggGgggg | \n",
" ggggrgggg | \n",
" 1 | \n",
"
\n",
" \n",
" 151 | \n",
" 175 | \n",
" u00 | \n",
" 1704417260 | \n",
" 3 | \n",
" 3 | \n",
" 6 | \n",
" 1 | \n",
" 33 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 2 | \n",
"
\n",
" \n",
" 152 | \n",
" 175 | \n",
" u00 | \n",
" 1704417260 | \n",
" 3 | \n",
" 4 | \n",
" 6 | \n",
" 2 | \n",
" 22 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 3 | \n",
"
\n",
" \n",
" 153 | \n",
" 175 | \n",
" u00 | \n",
" 1704417260 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 2 | \n",
" 37 | \n",
" ggggrgggg | \n",
" ggggrgggg | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"139 175 u00 1704416900 1 1 8 4 43 \n",
"140 175 u00 1704416900 2 2 7 3 45 \n",
"141 175 u00 1704416900 3 3 6 1 33 \n",
"142 175 u00 1704416900 3 4 6 2 22 \n",
"143 175 u00 1704416900 4 4 5 2 37 \n",
"144 175 u00 1704417080 1 1 8 4 43 \n",
"145 175 u00 1704417080 2 2 7 3 45 \n",
"146 175 u00 1704417080 3 3 6 1 33 \n",
"147 175 u00 1704417080 3 4 6 2 22 \n",
"148 175 u00 1704417080 4 4 5 2 37 \n",
"149 175 u00 1704417260 1 1 8 4 43 \n",
"150 175 u00 1704417260 2 2 7 3 45 \n",
"151 175 u00 1704417260 3 3 6 1 33 \n",
"152 175 u00 1704417260 3 4 6 2 22 \n",
"153 175 u00 1704417260 4 4 5 2 37 \n",
"\n",
" state_A state_B phase_sumo \n",
"139 ggggrgggg ggggrgggg 0 \n",
"140 ggggGgggg ggggrgggg 1 \n",
"141 ggggrgggg ggggrgggg 2 \n",
"142 ggggrgggg ggggrgggg 3 \n",
"143 ggggrgggg ggggrgggg 4 \n",
"144 ggggrgggg ggggrgggg 0 \n",
"145 ggggGgggg ggggrgggg 1 \n",
"146 ggggrgggg ggggrgggg 2 \n",
"147 ggggrgggg ggggrgggg 3 \n",
"148 ggggrgggg ggggrgggg 4 \n",
"149 ggggrgggg ggggrgggg 0 \n",
"150 ggggGgggg ggggrgggg 1 \n",
"151 ggggrgggg ggggrgggg 2 \n",
"152 ggggrgggg ggggrgggg 3 \n",
"153 ggggrgggg ggggrgggg 4 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 154 | \n",
" 177 | \n",
" u20 | \n",
" 1704416880 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 155 | \n",
" 177 | \n",
" u20 | \n",
" 1704416880 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 27 | \n",
" ggGggg | \n",
" ggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 156 | \n",
" 177 | \n",
" u20 | \n",
" 1704416880 | \n",
" 3 | \n",
" 3 | \n",
" 17 | \n",
" 18 | \n",
" 70 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 157 | \n",
" 177 | \n",
" u20 | \n",
" 1704416880 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 1 | \n",
" 40 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 158 | \n",
" 177 | \n",
" u20 | \n",
" 1704417060 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 159 | \n",
" 177 | \n",
" u20 | \n",
" 1704417060 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 27 | \n",
" ggGggg | \n",
" ggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 160 | \n",
" 177 | \n",
" u20 | \n",
" 1704417060 | \n",
" 3 | \n",
" 3 | \n",
" 17 | \n",
" 18 | \n",
" 70 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 161 | \n",
" 177 | \n",
" u20 | \n",
" 1704417060 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 1 | \n",
" 40 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 162 | \n",
" 177 | \n",
" u20 | \n",
" 1704417240 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 163 | \n",
" 177 | \n",
" u20 | \n",
" 1704417240 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 27 | \n",
" ggGggg | \n",
" ggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 164 | \n",
" 177 | \n",
" u20 | \n",
" 1704417240 | \n",
" 3 | \n",
" 3 | \n",
" 17 | \n",
" 18 | \n",
" 70 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 165 | \n",
" 177 | \n",
" u20 | \n",
" 1704417240 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 1 | \n",
" 40 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 166 | \n",
" 177 | \n",
" u20 | \n",
" 1704417420 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 43 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 167 | \n",
" 177 | \n",
" u20 | \n",
" 1704417420 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 27 | \n",
" ggGggg | \n",
" ggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 168 | \n",
" 177 | \n",
" u20 | \n",
" 1704417420 | \n",
" 3 | \n",
" 3 | \n",
" 17 | \n",
" 18 | \n",
" 70 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 169 | \n",
" 177 | \n",
" u20 | \n",
" 1704417420 | \n",
" 4 | \n",
" 4 | \n",
" 5 | \n",
" 1 | \n",
" 40 | \n",
" ggrggg | \n",
" ggrggg | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"154 177 u20 1704416880 1 1 8 4 43 \n",
"155 177 u20 1704416880 2 2 7 3 27 \n",
"156 177 u20 1704416880 3 3 17 18 70 \n",
"157 177 u20 1704416880 4 4 5 1 40 \n",
"158 177 u20 1704417060 1 1 8 4 43 \n",
"159 177 u20 1704417060 2 2 7 3 27 \n",
"160 177 u20 1704417060 3 3 17 18 70 \n",
"161 177 u20 1704417060 4 4 5 1 40 \n",
"162 177 u20 1704417240 1 1 8 4 43 \n",
"163 177 u20 1704417240 2 2 7 3 27 \n",
"164 177 u20 1704417240 3 3 17 18 70 \n",
"165 177 u20 1704417240 4 4 5 1 40 \n",
"166 177 u20 1704417420 1 1 8 4 43 \n",
"167 177 u20 1704417420 2 2 7 3 27 \n",
"168 177 u20 1704417420 3 3 17 18 70 \n",
"169 177 u20 1704417420 4 4 5 1 40 \n",
"\n",
" state_A state_B phase_sumo \n",
"154 ggrggg ggrggg 0 \n",
"155 ggGggg ggrggg 1 \n",
"156 ggrggg ggrggg 2 \n",
"157 ggrggg ggrggg 3 \n",
"158 ggrggg ggrggg 0 \n",
"159 ggGggg ggrggg 1 \n",
"160 ggrggg ggrggg 2 \n",
"161 ggrggg ggrggg 3 \n",
"162 ggrggg ggrggg 0 \n",
"163 ggGggg ggrggg 1 \n",
"164 ggrggg ggrggg 2 \n",
"165 ggrggg ggrggg 3 \n",
"166 ggrggg ggrggg 0 \n",
"167 ggGggg ggrggg 1 \n",
"168 ggrggg ggrggg 2 \n",
"169 ggrggg ggrggg 3 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 170 | \n",
" 178 | \n",
" u30 | \n",
" 1704416860 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 171 | \n",
" 178 | \n",
" u30 | \n",
" 1704416860 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 172 | \n",
" 178 | \n",
" u30 | \n",
" 1704416860 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 173 | \n",
" 178 | \n",
" u30 | \n",
" 1704416860 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 174 | \n",
" 178 | \n",
" u30 | \n",
" 1704417029 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 175 | \n",
" 178 | \n",
" u30 | \n",
" 1704417029 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 176 | \n",
" 178 | \n",
" u30 | \n",
" 1704417029 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 177 | \n",
" 178 | \n",
" u30 | \n",
" 1704417029 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 178 | \n",
" 178 | \n",
" u30 | \n",
" 1704417199 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 179 | \n",
" 178 | \n",
" u30 | \n",
" 1704417199 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 180 | \n",
" 178 | \n",
" u30 | \n",
" 1704417199 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 181 | \n",
" 178 | \n",
" u30 | \n",
" 1704417199 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 182 | \n",
" 178 | \n",
" u30 | \n",
" 1704417369 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 183 | \n",
" 178 | \n",
" u30 | \n",
" 1704417369 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 184 | \n",
" 178 | \n",
" u30 | \n",
" 1704417369 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 185 | \n",
" 178 | \n",
" u30 | \n",
" 1704417369 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"170 178 u30 1704416860 1 1 8 4 38 \n",
"171 178 u30 1704416860 2 2 7 3 39 \n",
"172 178 u30 1704416860 3 3 5 2 43 \n",
"173 178 u30 1704416860 4 4 6 1 22 \n",
"174 178 u30 1704417029 1 1 8 4 38 \n",
"175 178 u30 1704417029 2 2 7 3 39 \n",
"176 178 u30 1704417029 3 3 5 2 43 \n",
"177 178 u30 1704417029 4 4 6 1 22 \n",
"178 178 u30 1704417199 1 1 8 4 38 \n",
"179 178 u30 1704417199 2 2 7 3 39 \n",
"180 178 u30 1704417199 3 3 5 2 43 \n",
"181 178 u30 1704417199 4 4 6 1 22 \n",
"182 178 u30 1704417369 1 1 8 4 38 \n",
"183 178 u30 1704417369 2 2 7 3 39 \n",
"184 178 u30 1704417369 3 3 5 2 43 \n",
"185 178 u30 1704417369 4 4 6 1 22 \n",
"\n",
" state_A state_B phase_sumo \n",
"170 ggggrggg ggggrggg 0 \n",
"171 ggggrggg ggggrggg 1 \n",
"172 ggggrggg ggggrggg 2 \n",
"173 ggggGggg ggggrggg 3 \n",
"174 ggggrggg ggggrggg 0 \n",
"175 ggggrggg ggggrggg 1 \n",
"176 ggggrggg ggggrggg 2 \n",
"177 ggggGggg ggggrggg 3 \n",
"178 ggggrggg ggggrggg 0 \n",
"179 ggggrggg ggggrggg 1 \n",
"180 ggggrggg ggggrggg 2 \n",
"181 ggggGggg ggggrggg 3 \n",
"182 ggggrggg ggggrggg 0 \n",
"183 ggggrggg ggggrggg 1 \n",
"184 ggggrggg ggggrggg 2 \n",
"185 ggggGggg ggggrggg 3 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 186 | \n",
" 178 | \n",
" u31 | \n",
" 1704416860 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 187 | \n",
" 178 | \n",
" u31 | \n",
" 1704416860 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 188 | \n",
" 178 | \n",
" u31 | \n",
" 1704416860 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 189 | \n",
" 178 | \n",
" u31 | \n",
" 1704416860 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 190 | \n",
" 178 | \n",
" u31 | \n",
" 1704417029 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 191 | \n",
" 178 | \n",
" u31 | \n",
" 1704417029 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 192 | \n",
" 178 | \n",
" u31 | \n",
" 1704417029 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 193 | \n",
" 178 | \n",
" u31 | \n",
" 1704417029 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 194 | \n",
" 178 | \n",
" u31 | \n",
" 1704417199 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 195 | \n",
" 178 | \n",
" u31 | \n",
" 1704417199 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 196 | \n",
" 178 | \n",
" u31 | \n",
" 1704417199 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 197 | \n",
" 178 | \n",
" u31 | \n",
" 1704417199 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
" 198 | \n",
" 178 | \n",
" u31 | \n",
" 1704417369 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" ggggGggg | \n",
" ggggrggg | \n",
" 0 | \n",
"
\n",
" \n",
" 199 | \n",
" 178 | \n",
" u31 | \n",
" 1704417369 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 1 | \n",
"
\n",
" \n",
" 200 | \n",
" 178 | \n",
" u31 | \n",
" 1704417369 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 2 | \n",
"
\n",
" \n",
" 201 | \n",
" 178 | \n",
" u31 | \n",
" 1704417369 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" ggggrggg | \n",
" ggggrggg | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"186 178 u31 1704416860 1 1 8 4 38 \n",
"187 178 u31 1704416860 2 2 7 3 39 \n",
"188 178 u31 1704416860 3 3 5 2 43 \n",
"189 178 u31 1704416860 4 4 6 1 22 \n",
"190 178 u31 1704417029 1 1 8 4 38 \n",
"191 178 u31 1704417029 2 2 7 3 39 \n",
"192 178 u31 1704417029 3 3 5 2 43 \n",
"193 178 u31 1704417029 4 4 6 1 22 \n",
"194 178 u31 1704417199 1 1 8 4 38 \n",
"195 178 u31 1704417199 2 2 7 3 39 \n",
"196 178 u31 1704417199 3 3 5 2 43 \n",
"197 178 u31 1704417199 4 4 6 1 22 \n",
"198 178 u31 1704417369 1 1 8 4 38 \n",
"199 178 u31 1704417369 2 2 7 3 39 \n",
"200 178 u31 1704417369 3 3 5 2 43 \n",
"201 178 u31 1704417369 4 4 6 1 22 \n",
"\n",
" state_A state_B phase_sumo \n",
"186 ggggGggg ggggrggg 0 \n",
"187 ggggrggg ggggrggg 1 \n",
"188 ggggrggg ggggrggg 2 \n",
"189 ggggrggg ggggrggg 3 \n",
"190 ggggGggg ggggrggg 0 \n",
"191 ggggrggg ggggrggg 1 \n",
"192 ggggrggg ggggrggg 2 \n",
"193 ggggrggg ggggrggg 3 \n",
"194 ggggGggg ggggrggg 0 \n",
"195 ggggrggg ggggrggg 1 \n",
"196 ggggrggg ggggrggg 2 \n",
"197 ggggrggg ggggrggg 3 \n",
"198 ggggGggg ggggrggg 0 \n",
"199 ggggrggg ggggrggg 1 \n",
"200 ggggrggg ggggrggg 2 \n",
"201 ggggrggg ggggrggg 3 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 202 | \n",
" 178 | \n",
" u32 | \n",
" 1704416860 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggggr | \n",
" gggggggG | \n",
" 0 | \n",
"
\n",
" \n",
" 203 | \n",
" 178 | \n",
" u32 | \n",
" 1704416860 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 204 | \n",
" 178 | \n",
" u32 | \n",
" 1704416860 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 205 | \n",
" 178 | \n",
" u32 | \n",
" 1704416860 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 206 | \n",
" 178 | \n",
" u32 | \n",
" 1704417029 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggggr | \n",
" gggggggG | \n",
" 0 | \n",
"
\n",
" \n",
" 207 | \n",
" 178 | \n",
" u32 | \n",
" 1704417029 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 208 | \n",
" 178 | \n",
" u32 | \n",
" 1704417029 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 209 | \n",
" 178 | \n",
" u32 | \n",
" 1704417029 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 210 | \n",
" 178 | \n",
" u32 | \n",
" 1704417199 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggggr | \n",
" gggggggG | \n",
" 0 | \n",
"
\n",
" \n",
" 211 | \n",
" 178 | \n",
" u32 | \n",
" 1704417199 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 212 | \n",
" 178 | \n",
" u32 | \n",
" 1704417199 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 213 | \n",
" 178 | \n",
" u32 | \n",
" 1704417199 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 214 | \n",
" 178 | \n",
" u32 | \n",
" 1704417369 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
" 38 | \n",
" gggggggr | \n",
" gggggggG | \n",
" 0 | \n",
"
\n",
" \n",
" 215 | \n",
" 178 | \n",
" u32 | \n",
" 1704417369 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
" 39 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 216 | \n",
" 178 | \n",
" u32 | \n",
" 1704417369 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 217 | \n",
" 178 | \n",
" u32 | \n",
" 1704417369 | \n",
" 4 | \n",
" 4 | \n",
" 6 | \n",
" 1 | \n",
" 22 | \n",
" gggggggr | \n",
" gggggggr | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"202 178 u32 1704416860 1 1 8 4 38 \n",
"203 178 u32 1704416860 2 2 7 3 39 \n",
"204 178 u32 1704416860 3 3 5 2 43 \n",
"205 178 u32 1704416860 4 4 6 1 22 \n",
"206 178 u32 1704417029 1 1 8 4 38 \n",
"207 178 u32 1704417029 2 2 7 3 39 \n",
"208 178 u32 1704417029 3 3 5 2 43 \n",
"209 178 u32 1704417029 4 4 6 1 22 \n",
"210 178 u32 1704417199 1 1 8 4 38 \n",
"211 178 u32 1704417199 2 2 7 3 39 \n",
"212 178 u32 1704417199 3 3 5 2 43 \n",
"213 178 u32 1704417199 4 4 6 1 22 \n",
"214 178 u32 1704417369 1 1 8 4 38 \n",
"215 178 u32 1704417369 2 2 7 3 39 \n",
"216 178 u32 1704417369 3 3 5 2 43 \n",
"217 178 u32 1704417369 4 4 6 1 22 \n",
"\n",
" state_A state_B phase_sumo \n",
"202 gggggggr gggggggG 0 \n",
"203 gggggggr gggggggr 1 \n",
"204 gggggggr gggggggr 2 \n",
"205 gggggggr gggggggr 3 \n",
"206 gggggggr gggggggG 0 \n",
"207 gggggggr gggggggr 1 \n",
"208 gggggggr gggggggr 2 \n",
"209 gggggggr gggggggr 3 \n",
"210 gggggggr gggggggG 0 \n",
"211 gggggggr gggggggr 1 \n",
"212 gggggggr gggggggr 2 \n",
"213 gggggggr gggggggr 3 \n",
"214 gggggggr gggggggG 0 \n",
"215 gggggggr gggggggr 1 \n",
"216 gggggggr gggggggr 2 \n",
"217 gggggggr gggggggr 3 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" start_unix | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
" duration | \n",
" state_A | \n",
" state_B | \n",
" phase_sumo | \n",
"
\n",
" \n",
" \n",
" \n",
" 218 | \n",
" 210 | \n",
" u60 | \n",
" 1704416960 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 219 | \n",
" 210 | \n",
" u60 | \n",
" 1704416960 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 220 | \n",
" 210 | \n",
" u60 | \n",
" 1704416960 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 221 | \n",
" 210 | \n",
" u60 | \n",
" 1704416960 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 222 | \n",
" 210 | \n",
" u60 | \n",
" 1704416960 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
" 223 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 224 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 225 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 226 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 227 | \n",
" 210 | \n",
" u60 | \n",
" 1704417140 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
" 228 | \n",
" 210 | \n",
" u60 | \n",
" 1704417320 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 229 | \n",
" 210 | \n",
" u60 | \n",
" 1704417320 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 230 | \n",
" 210 | \n",
" u60 | \n",
" 1704417320 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 231 | \n",
" 210 | \n",
" u60 | \n",
" 1704417320 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 232 | \n",
" 210 | \n",
" u60 | \n",
" 1704417320 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
" 233 | \n",
" 210 | \n",
" u60 | \n",
" 1704417500 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 18 | \n",
" 28 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 0 | \n",
"
\n",
" \n",
" 234 | \n",
" 210 | \n",
" u60 | \n",
" 1704417500 | \n",
" 1 | \n",
" 2 | \n",
" 6 | \n",
" 2 | \n",
" 15 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 1 | \n",
"
\n",
" \n",
" 235 | \n",
" 210 | \n",
" u60 | \n",
" 1704417500 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
" 43 | \n",
" ggggggggG | \n",
" ggggggggr | \n",
" 2 | \n",
"
\n",
" \n",
" 236 | \n",
" 210 | \n",
" u60 | \n",
" 1704417500 | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
" 4 | \n",
" 70 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 3 | \n",
"
\n",
" \n",
" 237 | \n",
" 210 | \n",
" u60 | \n",
" 1704417500 | \n",
" 4 | \n",
" 4 | \n",
" 8 | \n",
" 3 | \n",
" 24 | \n",
" ggggggggr | \n",
" ggggggggr | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"218 210 u60 1704416960 1 1 6 18 28 \n",
"219 210 u60 1704416960 1 2 6 2 15 \n",
"220 210 u60 1704416960 2 2 5 2 43 \n",
"221 210 u60 1704416960 3 3 7 4 70 \n",
"222 210 u60 1704416960 4 4 8 3 24 \n",
"223 210 u60 1704417140 1 1 6 18 28 \n",
"224 210 u60 1704417140 1 2 6 2 15 \n",
"225 210 u60 1704417140 2 2 5 2 43 \n",
"226 210 u60 1704417140 3 3 7 4 70 \n",
"227 210 u60 1704417140 4 4 8 3 24 \n",
"228 210 u60 1704417320 1 1 6 18 28 \n",
"229 210 u60 1704417320 1 2 6 2 15 \n",
"230 210 u60 1704417320 2 2 5 2 43 \n",
"231 210 u60 1704417320 3 3 7 4 70 \n",
"232 210 u60 1704417320 4 4 8 3 24 \n",
"233 210 u60 1704417500 1 1 6 18 28 \n",
"234 210 u60 1704417500 1 2 6 2 15 \n",
"235 210 u60 1704417500 2 2 5 2 43 \n",
"236 210 u60 1704417500 3 3 7 4 70 \n",
"237 210 u60 1704417500 4 4 8 3 24 \n",
"\n",
" state_A state_B phase_sumo \n",
"218 ggggggggr ggggggggr 0 \n",
"219 ggggggggr ggggggggr 1 \n",
"220 ggggggggG ggggggggr 2 \n",
"221 ggggggggr ggggggggr 3 \n",
"222 ggggggggr ggggggggr 4 \n",
"223 ggggggggr ggggggggr 0 \n",
"224 ggggggggr ggggggggr 1 \n",
"225 ggggggggG ggggggggr 2 \n",
"226 ggggggggr ggggggggr 3 \n",
"227 ggggggggr ggggggggr 4 \n",
"228 ggggggggr ggggggggr 0 \n",
"229 ggggggggr ggggggggr 1 \n",
"230 ggggggggG ggggggggr 2 \n",
"231 ggggggggr ggggggggr 3 \n",
"232 ggggggggr ggggggggr 4 \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 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 유턴 신호가 한번도 배정되지 않은 경우에 대해서는 유턴이동류의 신호를 항상 g로 배정\n",
"for uturn_id in self.uturn_ids:\n",
" the_uturn = self.sigtable.node_id==uturn_id\n",
" states = np.unique(self.sigtable[the_uturn][['state_A', 'state_B']].values)\n",
" if not any('G' in state for state in states):\n",
" uindex = self.uid2uindex[uturn_id]\n",
" for i, row in self.sigtable[the_uturn].iterrows():\n",
" self.sigtable.at[i, 'state_A'] = row.state_A[:uindex] + 'g' + row.state_A[uindex+1:]\n",
" self.sigtable.at[i, 'state_B'] = row.state_B[:uindex] + 'g' + row.state_B[uindex+1:]"
]
}
],
"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
}