{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"import numpy as np\n",
"import sys\n",
"sys.path.append('../../Scripts')\n",
"from preprocess_daily import DailyPreprocessor\n",
"from generate_signals import SignalGenerator"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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",
"1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\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": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" node_id | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 000 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 180 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 090 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 103 | \n",
" 210 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
" straight | \n",
"
\n",
" \n",
" 104 | \n",
" 210 | \n",
" 3 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
" left | \n",
"
\n",
" \n",
" 105 | \n",
" 210 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
" straight | \n",
"
\n",
" \n",
" 106 | \n",
" 210 | \n",
" 4 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
" straight | \n",
"
\n",
" \n",
" 107 | \n",
" 210 | \n",
" 4 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" NaN | \n",
" NaN | \n",
" u60 | \n",
" left | \n",
"
\n",
" \n",
"
\n",
"
108 rows × 12 columns
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
"0 175 1 A 8 남 북 179 \n",
"1 175 1 B 4 북 남 001 \n",
"2 175 2 A 7 북 동 001 \n",
"3 175 2 B 3 남 서 179 \n",
"4 175 3 A 6 동 서 090 \n",
".. ... ... ... ... ... ... ... \n",
"103 210 2 B 2 서 동 270 \n",
"104 210 3 A 7 북 동 000 \n",
"105 210 3 B 4 북 남 000 \n",
"106 210 4 A 8 남 북 180 \n",
"107 210 4 B 3 남 서 180 \n",
"\n",
" out_angle inc_edge_id out_edge_id node_id turn_type \n",
"0 000 -571542797_02 571500487_01 i0 straight \n",
"1 180 -571500487_01 571542797_02 i0 straight \n",
"2 090 -571500487_01 571545870_01 i0 left \n",
"3 270 -571542797_02 571510153_01 i0 left \n",
"4 270 571545870_02 571510153_01 i0 straight \n",
".. ... ... ... ... ... \n",
"103 090 NaN NaN u60 straight \n",
"104 090 NaN NaN u60 left \n",
"105 180 NaN NaN u60 straight \n",
"106 000 NaN NaN u60 straight \n",
"107 270 NaN NaN u60 left \n",
"\n",
"[108 rows x 12 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.match6"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" i0 | \n",
" 8 | \n",
" 179 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" i0 | \n",
" 4 | \n",
" 001 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" i0 | \n",
" 7 | \n",
" 001 | \n",
" 090 | \n",
" 북 | \n",
" 동 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" i0 | \n",
" 3 | \n",
" 179 | \n",
" 270 | \n",
" 남 | \n",
" 서 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" i0 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" i0 | \n",
" 1 | \n",
" 090 | \n",
" 180 | \n",
" 동 | \n",
" 남 | \n",
" 571545870_02 | \n",
" 571542797_02 | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" i0 | \n",
" 5 | \n",
" 270 | \n",
" 000 | \n",
" 서 | \n",
" 북 | \n",
" 571510153_02 | \n",
" 571500487_01 | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" i0 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571510153_02 | \n",
" 571545870_01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"0 175 i0 8 179 000 남 북 \n",
"1 175 i0 4 001 180 북 남 \n",
"2 175 i0 7 001 090 북 동 \n",
"3 175 i0 3 179 270 남 서 \n",
"4 175 i0 6 090 270 동 서 \n",
"5 175 i0 1 090 180 동 남 \n",
"6 175 i0 5 270 000 서 북 \n",
"7 175 i0 2 270 090 서 동 \n",
"\n",
" inc_edge_id out_edge_id \n",
"0 -571542797_02 571500487_01 \n",
"1 -571500487_01 571542797_02 \n",
"2 -571500487_01 571545870_01 \n",
"3 -571542797_02 571510153_01 \n",
"4 571545870_02 571510153_01 \n",
"5 571545870_02 571542797_02 \n",
"6 571510153_02 571500487_01 \n",
"7 571510153_02 571545870_01 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 90, 179, 270]\n",
"[0, 90, 180, 270]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 16 | \n",
" 176 | \n",
" i1 | \n",
" 8 | \n",
" 180 | \n",
" 356 | \n",
" 남 | \n",
" 북 | \n",
" -571542810_01 | \n",
" -571542797_02.99 | \n",
"
\n",
" \n",
" 17 | \n",
" 176 | \n",
" i1 | \n",
" 4 | \n",
" 359 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571542797_02.99 | \n",
" 571542810_01 | \n",
"
\n",
" \n",
" 18 | \n",
" 176 | \n",
" i1 | \n",
" 8 | \n",
" 180 | \n",
" 356 | \n",
" 남 | \n",
" 북 | \n",
" -571542810_01 | \n",
" -571542797_02.99 | \n",
"
\n",
" \n",
" 19 | \n",
" 176 | \n",
" i1 | \n",
" 3 | \n",
" 180 | \n",
" 270 | \n",
" 남 | \n",
" 서 | \n",
" -571542810_01 | \n",
" 571543469_01 | \n",
"
\n",
" \n",
" 20 | \n",
" 176 | \n",
" i1 | \n",
" 5 | \n",
" 270 | \n",
" 356 | \n",
" 서 | \n",
" 북 | \n",
" 571543469_02 | \n",
" -571542797_02.99 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"16 176 i1 8 180 356 남 북 \n",
"17 176 i1 4 359 180 북 남 \n",
"18 176 i1 8 180 356 남 북 \n",
"19 176 i1 3 180 270 남 서 \n",
"20 176 i1 5 270 356 서 북 \n",
"\n",
" inc_edge_id out_edge_id \n",
"16 -571542810_01 -571542797_02.99 \n",
"17 571542797_02.99 571542810_01 \n",
"18 -571542810_01 -571542797_02.99 \n",
"19 -571542810_01 571543469_01 \n",
"20 571543469_02 -571542797_02.99 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[180, 270, 359]\n",
"[180, 270, 356]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 22 | \n",
" 177 | \n",
" i2 | \n",
" 8 | \n",
" 179 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
"
\n",
" \n",
" 23 | \n",
" 177 | \n",
" i2 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"22 177 i2 8 179 000 남 북 \n",
"23 177 i2 4 000 180 북 남 \n",
"\n",
" inc_edge_id out_edge_id \n",
"22 -571542809_01 571542811_01 \n",
"23 571542811_02 571542809_01 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 179]\n",
"[0, 180]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 38 | \n",
" 178 | \n",
" i3 | \n",
" 8 | \n",
" 180 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" 571540304_02 | \n",
" 571556450_01 | \n",
"
\n",
" \n",
" 39 | \n",
" 178 | \n",
" i3 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571556450_02 | \n",
" 571540304_01 | \n",
"
\n",
" \n",
" 40 | \n",
" 178 | \n",
" i3 | \n",
" 7 | \n",
" 000 | \n",
" 090 | \n",
" 북 | \n",
" 동 | \n",
" 571556450_02 | \n",
" 571500475_01 | \n",
"
\n",
" \n",
" 41 | \n",
" 178 | \n",
" i3 | \n",
" 3 | \n",
" 180 | \n",
" 270 | \n",
" 남 | \n",
" 서 | \n",
" 571540304_02 | \n",
" 571540303_01 | \n",
"
\n",
" \n",
" 42 | \n",
" 178 | \n",
" i3 | \n",
" 5 | \n",
" 270 | \n",
" 000 | \n",
" 서 | \n",
" 북 | \n",
" 571540303_02.21 | \n",
" 571556450_01 | \n",
"
\n",
" \n",
" 43 | \n",
" 178 | \n",
" i3 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571540303_02.21 | \n",
" 571500475_01 | \n",
"
\n",
" \n",
" 44 | \n",
" 178 | \n",
" i3 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" -571500475_01 | \n",
" 571540303_01 | \n",
"
\n",
" \n",
" 45 | \n",
" 178 | \n",
" i3 | \n",
" 1 | \n",
" 090 | \n",
" 180 | \n",
" 동 | \n",
" 남 | \n",
" -571500475_01 | \n",
" 571540304_01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"38 178 i3 8 180 000 남 북 \n",
"39 178 i3 4 000 180 북 남 \n",
"40 178 i3 7 000 090 북 동 \n",
"41 178 i3 3 180 270 남 서 \n",
"42 178 i3 5 270 000 서 북 \n",
"43 178 i3 2 270 090 서 동 \n",
"44 178 i3 6 090 270 동 서 \n",
"45 178 i3 1 090 180 동 남 \n",
"\n",
" inc_edge_id out_edge_id \n",
"38 571540304_02 571556450_01 \n",
"39 571556450_02 571540304_01 \n",
"40 571556450_02 571500475_01 \n",
"41 571540304_02 571540303_01 \n",
"42 571540303_02.21 571556450_01 \n",
"43 571540303_02.21 571500475_01 \n",
"44 -571500475_01 571540303_01 \n",
"45 -571500475_01 571540304_01 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 90, 180, 270]\n",
"[0, 90, 180, 270]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 92 | \n",
" 210 | \n",
" i6 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" -571542115_01 | \n",
" 571500535_01 | \n",
"
\n",
" \n",
" 94 | \n",
" 210 | \n",
" i6 | \n",
" 5 | \n",
" 270 | \n",
" 000 | \n",
" 서 | \n",
" 북 | \n",
" 571500535_02.18 | \n",
" 571511538_01 | \n",
"
\n",
" \n",
" 95 | \n",
" 210 | \n",
" i6 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571500535_02.18 | \n",
" 571542115_01 | \n",
"
\n",
" \n",
" 96 | \n",
" 210 | \n",
" i6 | \n",
" 7 | \n",
" 000 | \n",
" 090 | \n",
" 북 | \n",
" 동 | \n",
" 571511538_02.121 | \n",
" 571542115_01 | \n",
"
\n",
" \n",
" 97 | \n",
" 210 | \n",
" i6 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571511538_02.121 | \n",
" 571500585_01 | \n",
"
\n",
" \n",
" 98 | \n",
" 210 | \n",
" i6 | \n",
" 8 | \n",
" 180 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" 571500585_02 | \n",
" 571511538_01 | \n",
"
\n",
" \n",
" 99 | \n",
" 210 | \n",
" i6 | \n",
" 3 | \n",
" 180 | \n",
" 270 | \n",
" 남 | \n",
" 서 | \n",
" 571500585_02 | \n",
" 571500535_01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"92 210 i6 6 090 270 동 서 \n",
"94 210 i6 5 270 000 서 북 \n",
"95 210 i6 2 270 090 서 동 \n",
"96 210 i6 7 000 090 북 동 \n",
"97 210 i6 4 000 180 북 남 \n",
"98 210 i6 8 180 000 남 북 \n",
"99 210 i6 3 180 270 남 서 \n",
"\n",
" inc_edge_id out_edge_id \n",
"92 -571542115_01 571500535_01 \n",
"94 571500535_02.18 571511538_01 \n",
"95 571500535_02.18 571542115_01 \n",
"96 571511538_02.121 571542115_01 \n",
"97 571511538_02.121 571500585_01 \n",
"98 571500585_02 571511538_01 \n",
"99 571500585_02 571500535_01 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 90, 180, 270]\n",
"[0, 90, 180, 270]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 84 | \n",
" 206 | \n",
" i7 | \n",
" 8 | \n",
" 180 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" -571511538_02 | \n",
" 571542073_02 | \n",
"
\n",
" \n",
" 85 | \n",
" 206 | \n",
" i7 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571542073_01 | \n",
" 571511538_02 | \n",
"
\n",
" \n",
" 88 | \n",
" 206 | \n",
" i7 | \n",
" 8 | \n",
" 180 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" -571511538_02 | \n",
" 571542073_02 | \n",
"
\n",
" \n",
" 89 | \n",
" 206 | \n",
" i7 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571542073_01 | \n",
" 571511538_02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"84 206 i7 8 180 000 남 북 \n",
"85 206 i7 4 000 180 북 남 \n",
"88 206 i7 8 180 000 남 북 \n",
"89 206 i7 4 000 180 북 남 \n",
"\n",
" inc_edge_id out_edge_id \n",
"84 -571511538_02 571542073_02 \n",
"85 571542073_01 571511538_02 \n",
"88 -571511538_02 571542073_02 \n",
"89 571542073_01 571511538_02 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 180]\n",
"[0, 180]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 70 | \n",
" 201 | \n",
" i8 | \n",
" 8 | \n",
" 180 | \n",
" 000 | \n",
" 남 | \n",
" 북 | \n",
" -571500569_01 | \n",
" 571500583_02 | \n",
"
\n",
" \n",
" 71 | \n",
" 201 | \n",
" i8 | \n",
" 3 | \n",
" 180 | \n",
" 270 | \n",
" 남 | \n",
" 서 | \n",
" -571500569_01 | \n",
" 571500618_01 | \n",
"
\n",
" \n",
" 72 | \n",
" 201 | \n",
" i8 | \n",
" 5 | \n",
" 270 | \n",
" 000 | \n",
" 서 | \n",
" 북 | \n",
" 571500618_02 | \n",
" 571500583_02 | \n",
"
\n",
" \n",
" 73 | \n",
" 201 | \n",
" i8 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571500618_02 | \n",
" 571500617_01 | \n",
"
\n",
" \n",
" 74 | \n",
" 201 | \n",
" i8 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" 571500617_02 | \n",
" 571500618_01 | \n",
"
\n",
" \n",
" 75 | \n",
" 201 | \n",
" i8 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571500618_02 | \n",
" 571500617_01 | \n",
"
\n",
" \n",
" 76 | \n",
" 201 | \n",
" i8 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" 571500617_02 | \n",
" 571500618_01 | \n",
"
\n",
" \n",
" 77 | \n",
" 201 | \n",
" i8 | \n",
" 1 | \n",
" 090 | \n",
" 180 | \n",
" 동 | \n",
" 남 | \n",
" 571500617_02 | \n",
" 571500569_01 | \n",
"
\n",
" \n",
" 78 | \n",
" 201 | \n",
" i8 | \n",
" 7 | \n",
" 000 | \n",
" 090 | \n",
" 북 | \n",
" 동 | \n",
" 571500583_01 | \n",
" 571500617_01 | \n",
"
\n",
" \n",
" 79 | \n",
" 201 | \n",
" i8 | \n",
" 4 | \n",
" 000 | \n",
" 180 | \n",
" 북 | \n",
" 남 | \n",
" 571500583_01 | \n",
" 571500569_01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"70 201 i8 8 180 000 남 북 \n",
"71 201 i8 3 180 270 남 서 \n",
"72 201 i8 5 270 000 서 북 \n",
"73 201 i8 2 270 090 서 동 \n",
"74 201 i8 6 090 270 동 서 \n",
"75 201 i8 2 270 090 서 동 \n",
"76 201 i8 6 090 270 동 서 \n",
"77 201 i8 1 090 180 동 남 \n",
"78 201 i8 7 000 090 북 동 \n",
"79 201 i8 4 000 180 북 남 \n",
"\n",
" inc_edge_id out_edge_id \n",
"70 -571500569_01 571500583_02 \n",
"71 -571500569_01 571500618_01 \n",
"72 571500618_02 571500583_02 \n",
"73 571500618_02 571500617_01 \n",
"74 571500617_02 571500618_01 \n",
"75 571500618_02 571500617_01 \n",
"76 571500617_02 571500618_01 \n",
"77 571500617_02 571500569_01 \n",
"78 571500583_01 571500617_01 \n",
"79 571500583_01 571500569_01 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 90, 180, 270]\n",
"[0, 90, 180, 270]\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" node_id | \n",
" move_no | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 80 | \n",
" 202 | \n",
" i9 | \n",
" 6 | \n",
" 090 | \n",
" 270 | \n",
" 동 | \n",
" 서 | \n",
" 571510152_02 | \n",
" -571510152_01 | \n",
"
\n",
" \n",
" 81 | \n",
" 202 | \n",
" i9 | \n",
" 2 | \n",
" 270 | \n",
" 090 | \n",
" 서 | \n",
" 동 | \n",
" 571510152_01 | \n",
" 571510152_01.65 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
"80 202 i9 6 090 270 동 서 \n",
"81 202 i9 2 270 090 서 동 \n",
"\n",
" inc_edge_id out_edge_id \n",
"80 571510152_02 -571510152_01 \n",
"81 571510152_01 571510152_01.65 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[90, 270]\n",
"[90, 270]\n"
]
}
],
"source": [
"self.match7 = self.match6.copy()\n",
"self.match7 = self.match7[['inter_no', 'node_id', 'move_no', 'inc_angle', 'out_angle', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id']]\n",
"# parent_id = self.parent_ids[1]\n",
"\n",
"for parent_id in self.parent_ids:\n",
" m7 = self.match7[self.match7.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
" display(m7)\n",
" inc_angles = [int(angle) for angle in np.unique(m7.inc_angle.values)]\n",
" out_angles = [int(angle) for angle in np.unique(m7.out_angle.values)]\n",
" print(inc_angles)\n",
" print(out_angles)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"# child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"\n",
"# (1) 가능한 (진입방향, 진출방향) 목록 \n",
"flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
"# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
"pdires = {}\n",
"for node_id in self.parent_ids:\n",
" dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten()\n",
" dires = {dire for dire in dires if type(dire)==str}\n",
" pdires[node_id] = dires\n",
"# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
"inc2id = {}\n",
"for node_id in self.parent_ids:\n",
" for inc_dire in pdires[node_id]:\n",
" df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)]\n",
" inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
"# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
"out2id = {}\n",
"for node_id in self.parent_ids:\n",
" for out_dire in pdires[node_id]:\n",
" df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)]\n",
" out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0]\n",
"# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
"pflow = {}\n",
"for node_id in self.parent_ids:\n",
" pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n",
"# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
"dires_right = ['북', '북서', '서', '남서', '남', '남동', '동', '북동'] # ex (북, 서), (서, 남) 등은 우회전 flow\n",
"self.matching = []\n",
"for node_id in self.parent_ids:\n",
" inter_no = self.node2inter[node_id]\n",
" # 좌회전과 직진(1 ~ 16)\n",
" for (inc_dire, out_dire) in pflow[node_id]:\n",
" move_no = self.nema[(self.nema.inc_dire==inc_dire) & (self.nema.out_dire==out_dire)].move_no.iloc[0]\n",
" inc_edge_id = inc2id[(node_id, inc_dire)]\n",
" out_edge_id = out2id[(node_id, out_dire)]\n",
" new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
" 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
" 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
" self.matching.append(new_row)\n",
" # 보행신호(17), 전적색(18)\n",
" new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18],\n",
" 'inc_dire':[None]*2, 'out_dire':[None]*2,\n",
" 'inc_edge_id':[None]*2, 'out_edge_id':[None]*2, 'node_id':[node_id]*2})\n",
" self.matching.append(new_row)\n",
" # 신호우회전(21)\n",
" for d in range(len(dires_right)):\n",
" inc_dire = dires_right[d]\n",
" out_dire = dires_right[(d+2)%8]\n",
" if {inc_dire, out_dire}.issubset(pdires[node_id]):\n",
" inc_edge_id = inc2id[(node_id, inc_dire)]\n",
" out_edge_id = out2id[(node_id, out_dire)]\n",
" new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n",
" 'inc_dire':[inc_dire], 'out_dire':[out_dire],\n",
" 'inc_edge_id':[inc_edge_id], 'out_edge_id':[out_edge_id], 'node_id':[node_id]})\n",
" self.matching.append(new_row)\n",
"self.matching.append(self.match7[self.match7.node_id.isin(self.child_ids)])\n",
"self.matching = pd.concat(self.matching)\n",
"self.matching = self.matching.dropna(subset=['inc_edge_id', 'out_edge_id'])\\\n",
" .sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n",
"self.matching['move_no'] = self.matching['move_no'].astype(int)\n"
]
}
],
"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
}