{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os, sumolib\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"from matplotlib_venn import venn2, venn3\n",
|
|
"from datetime import datetime"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class DailyPreprocessor:\n",
|
|
" def __init__(self, config_name='revised', nowTime=datetime.now()):\n",
|
|
" self.config_name = config_name\n",
|
|
" self.nowTime = nowTime\n",
|
|
"self = DailyPreprocessor(nowTime = datetime.now())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"56\n",
|
|
"436, 437, 438, 442, 443, 444, 455, 456, 457, 458, 459, 460, 461, 462, 463, 472, 474, 482, 483, 484, \n",
|
|
"485, 486, 488, 490, 491, 492, 493, 494, 498, 499, 502, 503, 504, 514, 515, 523, 524, 527, 565, 575, \n",
|
|
"576, 581, 582, 583, 611, 615, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 교차로목록 정의\n",
|
|
"sixties = pd.read_excel('교차로기반정보_(시범지역).xlsx', header=1)\n",
|
|
"self.inter_nos = set(sixties['교차로 ID'].dropna().astype(int))\n",
|
|
"# 551, 561은 TC_IF_TOD_RED_YELLO, TN_IF_SIGL_FLOW에 존재하지 않음. TOD 보고서에서도 확인할 수 없음\n",
|
|
"# 551 : 보육시설 삼거리, 561 : 공영주차장 단일로\n",
|
|
"self.inter_nos = self.inter_nos - {551, 561}\n",
|
|
"# 464는 매칭테이블에 존재하지 않음. 500에 매칭되는 node_id가 네트워크에 존재하지 않음.\n",
|
|
"# 464 : 성남공판장 단일로, 500 : 단남아파트 단일로\n",
|
|
"self.inter_nos = self.inter_nos - {464, 500}\n",
|
|
"print(len(self.inter_nos))\n",
|
|
"inter_nos_display = \", \".join(map(str, sorted(self.inter_nos)))\n",
|
|
"inter_nos_display = \"\\n\".join([inter_nos_display[i:i+100] for i in range(0, len(inter_nos_display), 100)])\n",
|
|
"# print(len(inter_nos_display))\n",
|
|
"print(inter_nos_display)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"## 매칭테이블 정의, 교차로-노드 딕셔너리 정의\n",
|
|
"self.net = sumolib.net.readNet('new_sungnam_network_internal_0809.net.xml')\n",
|
|
"self.inter_node = pd.read_excel('signal_node_matching.xlsx', dtype={'node_id':str})\n",
|
|
"self.inter_node = self.inter_node.rename(columns={'signal_id':'inter_no'})\n",
|
|
"self.inter_node['inter_type'] = 'parent'\n",
|
|
"self.inter_node = self.inter_node[self.inter_node.inter_no.isin(self.inter_nos)].reset_index(drop=True)\n",
|
|
"\n",
|
|
"# 일대일대응 확인\n",
|
|
"if not len(self.inter_node) == self.inter_node.inter_no.nunique() == self.inter_node.node_id.nunique():\n",
|
|
" raise ValueError(\"Warning: 'inter_no'와 'node_id' 간에 일대일대응 관계가 성립하지 않습니다.\")\n",
|
|
"\n",
|
|
"# 교차로번호 vs 노드id 간 딕셔너리\n",
|
|
"self.inter2node = dict(zip(self.inter_node.inter_no, self.inter_node.node_id))\n",
|
|
"self.node2inter = dict(zip(self.inter_node.node_id, self.inter_node.inter_no))\n",
|
|
"self.node_ids = {self.inter2node[inter_no] for inter_no in self.inter_nos}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# net = sumolib.net.readNet('new_sungnam_network_internal_0809.net.xml')\n",
|
|
"# inter_node = pd.read_excel('signal_node_matching.xlsx', dtype={'node_id':str})\n",
|
|
"# print(len(set(inter_node.signal_id)))\n",
|
|
"# print(inter_nos - set(inter_node.signal_id))\n",
|
|
"# inter_node = inter_node[inter_node.node_id.isin(node.getID() for node in net.getNodes())]\n",
|
|
"# print(len(set(inter_node.signal_id)))\n",
|
|
"# print(inter_nos - set(inter_node.signal_id))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"## 테이블 표준화\n",
|
|
"\n",
|
|
"# 주요 테이블 로드 (실제로는 쿼리문 작성 부분이 되어야 함.)\n",
|
|
"self.dayplan = pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TC_IF_TOD_DAY_PLAN.csv'))\n",
|
|
"self.holyplan = pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TC_IF_TOD_HOLIDAY_PLAN.csv'))\n",
|
|
"self.red_yel = pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TC_IF_TOD_RED_YELLO.csv'))\n",
|
|
"self.weekplan = pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TC_IF_TOD_WEEK_PLAN.csv'))\n",
|
|
"# 교차로정보 테이블은 불러오지 않음 (해당 테이블이 실질적으로 쓰이지는 않고, 60개 테이블 정보가 있지도 않음)\n",
|
|
"# inter_info=pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TM_FA_CRSRD.csv'))\n",
|
|
"self.flows = pd.read_csv(os.path.join(os.path.abspath('.'), 'sn_admin_tables', 'TN_IF_SIGL_FLOW.csv'))\n",
|
|
"\n",
|
|
"# 유효한 교차로들에 대하여만 슬라이싱\n",
|
|
"self.dayplan = self.dayplan[self.dayplan.CRSRD_ID.isin(self.inter_nos)]\n",
|
|
"self.weekplan= self.weekplan[self.weekplan.CRSRD_ID.isin(self.inter_nos)]\n",
|
|
"self.red_yel = self.red_yel[self.red_yel.CRSRD_ID.isin(self.inter_nos)]\n",
|
|
"self.flows = self.flows[self.flows.CRSRD_ID.isin(self.inter_nos)]\n",
|
|
"\n",
|
|
"# 컬럼명 변경 적용\n",
|
|
"rename_cname_1 = {'CRSRD_ID':'inter_no', 'CYCL':'cycle', 'DAY':'DD',\n",
|
|
" 'HOUR':'hh', 'MIN':'mm', 'MNTH':'MM',\n",
|
|
" 'OFFSET':'offset', 'PHASE':'phase_no', 'PLAN_NO':'plan_no',\n",
|
|
" 'RINGA_RED_SEC':'red_A', 'RINGA_YELLO_SEC':'yel_A', 'RINGB_RED_SEC':'red_B',\n",
|
|
" 'RINGB_YELLO_SEC':'yel_B'}\n",
|
|
"\n",
|
|
"rename_cname_2 = {f'RING{alph}_PHASE{i}':f'dura_{alph}{i}' for alph in ['A', 'B'] for i in range(1,9)}\n",
|
|
"rename_cname = {**rename_cname_1, **rename_cname_2}\n",
|
|
"self.dayplan = self.dayplan.rename(columns=rename_cname)\n",
|
|
"self.holyplan = self.holyplan.rename(columns=rename_cname)\n",
|
|
"self.weekplan = self.weekplan.rename(columns=rename_cname)\n",
|
|
"self.red_yel = self.red_yel.rename(columns=rename_cname)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"## self.plan : 신호계획 테이블 생성\n",
|
|
"\n",
|
|
"# 날짜, 요일 지정\n",
|
|
"MM, DD = self.nowTime.month, self.nowTime.day # 날짜\n",
|
|
"dow_number = self.nowTime.weekday() # 요일\n",
|
|
"hplan = self.holyplan[(self.holyplan.MM==MM) & (self.holyplan.DD==DD)]\n",
|
|
"dows = [dow for dow in self.weekplan.columns if dow.endswith('PLAN_NO')]\n",
|
|
"dows = dows[1:] + dows[0:1]\n",
|
|
"dow = dows[dow_number]\n",
|
|
"\n",
|
|
"# (신호교차로, 신호계획번호) 목록\n",
|
|
"if len(hplan):\n",
|
|
" inter_pnos = list(zip(hplan['inter_no'], hplan['plan_no']))\n",
|
|
"else:\n",
|
|
" inter_pnos = list(zip(self.weekplan.inter_no, self.weekplan[dow]))\n",
|
|
"\n",
|
|
"# 신호테이블 통합\n",
|
|
"self.plan = self.dayplan.copy()\n",
|
|
"self.plan['inter_pno'] = list(zip(self.plan['inter_no'], self.plan['plan_no']))\n",
|
|
"self.plan = self.plan[(self.plan.inter_pno.isin(inter_pnos))]\n",
|
|
"self.plan = self.plan.drop(columns='inter_pno')\n",
|
|
"max_phase_no = int(self.red_yel.phase_no.max())\n",
|
|
"for j in range(1,max_phase_no+1):\n",
|
|
" RY = self.red_yel[self.red_yel.phase_no==j].iloc[0]\n",
|
|
" red_A = RY.red_A\n",
|
|
" red_B = RY.red_B\n",
|
|
" yel_A = RY.yel_A\n",
|
|
" yel_B = RY.yel_B\n",
|
|
" self.plan[f'red_A{j}'] = red_A\n",
|
|
" self.plan[f'red_B{j}'] = red_B\n",
|
|
" self.plan[f'yellow_A{j}'] = yel_A\n",
|
|
" self.plan[f'yellow_B{j}'] = yel_B"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>inter_no</th>\n",
|
|
" <th>phase_no</th>\n",
|
|
" <th>ring_type</th>\n",
|
|
" <th>move_no</th>\n",
|
|
" <th>STOS_NO</th>\n",
|
|
" <th>angle_code</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>262358</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>262074</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>174355</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>172263</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>356074</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>...</th>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>371</th>\n",
|
|
" <td>639</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>120312</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>372</th>\n",
|
|
" <td>639</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>126221</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>373</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>226052</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>374</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>043222</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>375</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>17</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>None</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>376 rows × 6 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no STOS_NO angle_code\n",
|
|
"0 436 1 A 5 0 262358\n",
|
|
"1 436 1 B 2 0 262074\n",
|
|
"2 436 2 A 8 0 174355\n",
|
|
"3 436 2 B 3 0 172263\n",
|
|
"4 436 3 A 7 0 356074\n",
|
|
".. ... ... ... ... ... ...\n",
|
|
"371 639 4 A 6 0 120312\n",
|
|
"372 639 4 B 1 0 126221\n",
|
|
"373 640 1 A 8 0 226052\n",
|
|
"374 640 1 B 4 0 043222\n",
|
|
"375 640 2 A 17 0 None\n",
|
|
"\n",
|
|
"[376 rows x 6 columns]"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"## self.angle : 각도(이동류방향) 테이블 생성\n",
|
|
"self.angle = self.flows.copy()\n",
|
|
"self.angle = self.angle.rename(columns={'CRSRD_ID':'inter_no', 'PHASE':'phase_no',\n",
|
|
" 'RING':'ring_type', 'FLOW_NO':'move_no'})\n",
|
|
"# 유효한 이동류번호 및 교차로번호로 슬라이싱\n",
|
|
"self.angle = self.angle[self.angle.move_no.isin(range(1,19))]\n",
|
|
"self.angle = self.angle[self.angle.inter_no.isin(self.inter_nos)]\n",
|
|
"# 세 점 데이터 파싱 및 각도코드 열 생성\n",
|
|
"for ind, row in self.angle.iterrows():\n",
|
|
" arrow = row.SIGL_ARROW\n",
|
|
" # 위경도 추출\n",
|
|
" # arrow = re.findall(r'-?\\d+\\.?\\d*', arrow)\n",
|
|
" arrow = [coord.lstrip(' ') for coord in arrow.split(',')]\n",
|
|
" arrow = [coord.lstrip('[') for coord in arrow]\n",
|
|
" arrow = [coord.rstrip(']') for coord in arrow]\n",
|
|
" exists = all([bool(coord) for coord in arrow])\n",
|
|
" if exists:\n",
|
|
" y1, x1, y2, x2, y3, x3 = arrow\n",
|
|
"\n",
|
|
" # 미터 단위로 변환\n",
|
|
" x1, y1 = self.net.convertLonLat2XY(x1, y1)\n",
|
|
" x2, y2 = self.net.convertLonLat2XY(x2, y2)\n",
|
|
" x3, y3 = self.net.convertLonLat2XY(x3, y3)\n",
|
|
"\n",
|
|
" # 진입각, 진출각 설정\n",
|
|
" inc_angle = np.arctan2(y1 - y2, x1 - x2)\n",
|
|
" out_angle = np.arctan2(y3 - y2, x3 - x2)\n",
|
|
" inc_angle = inc_angle * 180 / np.pi\n",
|
|
" out_angle = out_angle * 180 / np.pi\n",
|
|
" inc_angle = int((90 - inc_angle) % 360)\n",
|
|
" out_angle = int((90 - out_angle) % 360)\n",
|
|
"\n",
|
|
" # 각도코드 설정\n",
|
|
" angle_code = str(inc_angle).zfill(3) + str(out_angle).zfill(3)\n",
|
|
" # print(angle_code)\n",
|
|
" self.angle.loc[ind, 'angle_code'] = angle_code\n",
|
|
" else:\n",
|
|
" self.angle.loc[ind, 'angle_code'] = None\n",
|
|
"self.angle = self.angle.drop(columns='SIGL_ARROW')\n",
|
|
"self.angle = self.angle.reset_index(drop=True)\\\n",
|
|
" .sort_values(by=['inter_no', 'phase_no', 'ring_type']).reset_index(drop=True)\n",
|
|
"self.angle"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>inter_no</th>\n",
|
|
" <th>phase_no</th>\n",
|
|
" <th>ring_type</th>\n",
|
|
" <th>move_no</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>...</th>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>383</th>\n",
|
|
" <td>576</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>384</th>\n",
|
|
" <td>582</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>385</th>\n",
|
|
" <td>632</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>386</th>\n",
|
|
" <td>634</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>387</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>388 rows × 4 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no\n",
|
|
"0 436 1 A 5\n",
|
|
"1 436 1 B 2\n",
|
|
"2 436 2 A 8\n",
|
|
"3 436 2 B 3\n",
|
|
"4 436 3 A 7\n",
|
|
".. ... ... ... ...\n",
|
|
"383 576 2 B 17\n",
|
|
"384 582 2 B 17\n",
|
|
"385 632 2 B 17\n",
|
|
"386 634 4 B 5\n",
|
|
"387 640 2 B 17\n",
|
|
"\n",
|
|
"[388 rows x 4 columns]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>inter_no</th>\n",
|
|
" <th>phase_no</th>\n",
|
|
" <th>ring_type</th>\n",
|
|
" <th>move_no</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>...</th>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>383</th>\n",
|
|
" <td>576</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>384</th>\n",
|
|
" <td>582</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>385</th>\n",
|
|
" <td>632</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>386</th>\n",
|
|
" <td>634</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>387</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>388 rows × 4 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no\n",
|
|
"0 436 1 A 5\n",
|
|
"1 436 1 B 2\n",
|
|
"2 436 2 A 8\n",
|
|
"3 436 2 B 3\n",
|
|
"4 436 3 A 7\n",
|
|
".. ... ... ... ...\n",
|
|
"383 576 2 B 17\n",
|
|
"384 582 2 B 17\n",
|
|
"385 632 2 B 17\n",
|
|
"386 634 4 B 5\n",
|
|
"387 640 2 B 17\n",
|
|
"\n",
|
|
"[388 rows x 4 columns]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"## self.match1 테이블 생성\n",
|
|
"match1 = self.flows.copy()\n",
|
|
"match1 = match1[['CRSRD_ID', 'PHASE', 'RING', 'FLOW_NO']]\n",
|
|
"match1 = match1.rename(columns={'CRSRD_ID':'inter_no', 'PHASE':'phase_no', 'RING':'ring_type', 'FLOW_NO':'move_no'})\n",
|
|
"match1 = match1.sort_values(by=['inter_no', 'phase_no', 'ring_type']).reset_index(drop=True)\n",
|
|
"# 유효한 이동류번호 및 교차로번호로 슬라이싱\n",
|
|
"match1 = match1[match1.move_no.isin(range(1,19))]\n",
|
|
"match1 = match1[match1.inter_no.isin(self.inter_nos)]\n",
|
|
"# 특정한 (교차로번호, 현시번호)에 대하여 한 링에 대해서만 이동류번호만 정의된 경우, 나머지 링에 대해서 이동류 정의\n",
|
|
"additional_m1s = []\n",
|
|
"for key, group in match1.groupby(['inter_no', 'phase_no']):\n",
|
|
" inter_no, phase_no = map(int,key)\n",
|
|
" if set(group.ring_type) != {'A', 'B'}:\n",
|
|
" assert len(group)==1\n",
|
|
" ring_type = group.iloc[0].ring_type\n",
|
|
" RING_TYPE = list({'A', 'B'} - set(ring_type))[0]\n",
|
|
" additional_m1 = group.copy()\n",
|
|
" additional_m1['ring_type'] = RING_TYPE\n",
|
|
" additional_m1s.append(additional_m1)\n",
|
|
"match1 = pd.concat([match1] + additional_m1s)\n",
|
|
"match1 = match1.reset_index(drop=True)\n",
|
|
"display(match1)\n",
|
|
"# 열 재편 : 현시시간과 이동류번호 열을 A, B로 구분\n",
|
|
"match1s = []\n",
|
|
"for key, group in match1.copy().groupby(['inter_no', 'phase_no']):\n",
|
|
" inter_no, phase_no = map(int, key)\n",
|
|
" assert len(group) == 2\n",
|
|
" row_A = group[group.ring_type=='A']\n",
|
|
" row_B = group[group.ring_type=='B']\n",
|
|
" assert len(row_A)==len(row_B)==1\n",
|
|
" row_A = row_A.iloc[0]\n",
|
|
" row_B = row_B.iloc[0]\n",
|
|
" m1 = pd.DataFrame({'inter_no':[inter_no], 'phas_A':[phase_no], 'phas_B':[phase_no],\n",
|
|
" 'move_A':[row_A.move_no], 'move_B':[row_B.move_no]})\n",
|
|
" match1s.append(m1)\n",
|
|
"display(match1)\n",
|
|
"self.match1 = pd.concat(match1s).reset_index(drop=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>parent_id</th>\n",
|
|
" <th>child_id</th>\n",
|
|
" <th>phase_no</th>\n",
|
|
" <th>ring_type</th>\n",
|
|
" <th>inc_edge_id</th>\n",
|
|
" <th>out_edge_id</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"Empty DataFrame\n",
|
|
"Columns: [parent_id, child_id, phase_no, ring_type, inc_edge_id, out_edge_id]\n",
|
|
"Index: []"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# # self.coord : 연등교차로 테이블 생성\n",
|
|
"# self.coord = pd.DataFrame(columns=['parent_id', 'child_id', 'phase_no', 'ring_type', 'inc_edge_id', 'out_edge_id'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>inter_no</th>\n",
|
|
" <th>node_id</th>\n",
|
|
" <th>inter_type</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>436</td>\n",
|
|
" <td>109836</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>437</td>\n",
|
|
" <td>109986</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>438</td>\n",
|
|
" <td>106350</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>442</td>\n",
|
|
" <td>106332</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>443</td>\n",
|
|
" <td>108769</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>444</td>\n",
|
|
" <td>109842</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>455</td>\n",
|
|
" <td>109901</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>456</td>\n",
|
|
" <td>106231</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>457</td>\n",
|
|
" <td>106234</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>458</td>\n",
|
|
" <td>106238</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>459</td>\n",
|
|
" <td>106242</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>460</td>\n",
|
|
" <td>109946</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>461</td>\n",
|
|
" <td>109829</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>462</td>\n",
|
|
" <td>106174</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>463</td>\n",
|
|
" <td>106267</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>472</td>\n",
|
|
" <td>109965</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>474</td>\n",
|
|
" <td>109845</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>17</th>\n",
|
|
" <td>482</td>\n",
|
|
" <td>106329</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>18</th>\n",
|
|
" <td>483</td>\n",
|
|
" <td>107928</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>19</th>\n",
|
|
" <td>484</td>\n",
|
|
" <td>106303</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>485</td>\n",
|
|
" <td>107940</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>486</td>\n",
|
|
" <td>106273</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>488</td>\n",
|
|
" <td>107093</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>490</td>\n",
|
|
" <td>106908</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>491</td>\n",
|
|
" <td>109987</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>492</td>\n",
|
|
" <td>106244</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>26</th>\n",
|
|
" <td>493</td>\n",
|
|
" <td>106225</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>494</td>\n",
|
|
" <td>108235</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>28</th>\n",
|
|
" <td>498</td>\n",
|
|
" <td>107120</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>499</td>\n",
|
|
" <td>107111</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>30</th>\n",
|
|
" <td>502</td>\n",
|
|
" <td>106286</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>31</th>\n",
|
|
" <td>503</td>\n",
|
|
" <td>106313</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>32</th>\n",
|
|
" <td>504</td>\n",
|
|
" <td>109897</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>33</th>\n",
|
|
" <td>514</td>\n",
|
|
" <td>106708</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>34</th>\n",
|
|
" <td>515</td>\n",
|
|
" <td>106969</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>35</th>\n",
|
|
" <td>523</td>\n",
|
|
" <td>106325</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>524</td>\n",
|
|
" <td>107049</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>37</th>\n",
|
|
" <td>527</td>\n",
|
|
" <td>107123</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>38</th>\n",
|
|
" <td>565</td>\n",
|
|
" <td>109943</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>39</th>\n",
|
|
" <td>575</td>\n",
|
|
" <td>106197</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>40</th>\n",
|
|
" <td>576</td>\n",
|
|
" <td>107955</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>41</th>\n",
|
|
" <td>581</td>\n",
|
|
" <td>106326</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>42</th>\n",
|
|
" <td>582</td>\n",
|
|
" <td>108639</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>43</th>\n",
|
|
" <td>583</td>\n",
|
|
" <td>106184</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>44</th>\n",
|
|
" <td>611</td>\n",
|
|
" <td>107345</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>45</th>\n",
|
|
" <td>615</td>\n",
|
|
" <td>106717</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>46</th>\n",
|
|
" <td>631</td>\n",
|
|
" <td>109823</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>47</th>\n",
|
|
" <td>632</td>\n",
|
|
" <td>109964</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>48</th>\n",
|
|
" <td>633</td>\n",
|
|
" <td>106450</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>49</th>\n",
|
|
" <td>634</td>\n",
|
|
" <td>108112</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>635</td>\n",
|
|
" <td>108179</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>636</td>\n",
|
|
" <td>107293</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>637</td>\n",
|
|
" <td>109852</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>638</td>\n",
|
|
" <td>109853</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>639</td>\n",
|
|
" <td>109854</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>640</td>\n",
|
|
" <td>109990</td>\n",
|
|
" <td>parent</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id inter_type\n",
|
|
"0 436 109836 parent\n",
|
|
"1 437 109986 parent\n",
|
|
"2 438 106350 parent\n",
|
|
"3 442 106332 parent\n",
|
|
"4 443 108769 parent\n",
|
|
"5 444 109842 parent\n",
|
|
"6 455 109901 parent\n",
|
|
"7 456 106231 parent\n",
|
|
"8 457 106234 parent\n",
|
|
"9 458 106238 parent\n",
|
|
"10 459 106242 parent\n",
|
|
"11 460 109946 parent\n",
|
|
"12 461 109829 parent\n",
|
|
"13 462 106174 parent\n",
|
|
"14 463 106267 parent\n",
|
|
"15 472 109965 parent\n",
|
|
"16 474 109845 parent\n",
|
|
"17 482 106329 parent\n",
|
|
"18 483 107928 parent\n",
|
|
"19 484 106303 parent\n",
|
|
"20 485 107940 parent\n",
|
|
"21 486 106273 parent\n",
|
|
"22 488 107093 parent\n",
|
|
"23 490 106908 parent\n",
|
|
"24 491 109987 parent\n",
|
|
"25 492 106244 parent\n",
|
|
"26 493 106225 parent\n",
|
|
"27 494 108235 parent\n",
|
|
"28 498 107120 parent\n",
|
|
"29 499 107111 parent\n",
|
|
"30 502 106286 parent\n",
|
|
"31 503 106313 parent\n",
|
|
"32 504 109897 parent\n",
|
|
"33 514 106708 parent\n",
|
|
"34 515 106969 parent\n",
|
|
"35 523 106325 parent\n",
|
|
"36 524 107049 parent\n",
|
|
"37 527 107123 parent\n",
|
|
"38 565 109943 parent\n",
|
|
"39 575 106197 parent\n",
|
|
"40 576 107955 parent\n",
|
|
"41 581 106326 parent\n",
|
|
"42 582 108639 parent\n",
|
|
"43 583 106184 parent\n",
|
|
"44 611 107345 parent\n",
|
|
"45 615 106717 parent\n",
|
|
"46 631 109823 parent\n",
|
|
"47 632 109964 parent\n",
|
|
"48 633 106450 parent\n",
|
|
"49 634 108112 parent\n",
|
|
"50 635 108179 parent\n",
|
|
"51 636 107293 parent\n",
|
|
"52 637 109852 parent\n",
|
|
"53 638 109853 parent\n",
|
|
"54 639 109854 parent\n",
|
|
"55 640 109990 parent"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.inter_node"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"['make_intermediates.ipynb',\n",
|
|
" 'new_sungnam_network_internal_0809.net.xml',\n",
|
|
" 'signal_node_matching.xlsx',\n",
|
|
" 'sn_admin_tables',\n",
|
|
" '~$signal_node_matching.xlsx',\n",
|
|
" '~$교차로기반정보_(시범지역).xlsx',\n",
|
|
" '교차로기반정보_(시범지역).xlsx']"
|
|
]
|
|
},
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"os.listdir()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 42,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# dfs = {'dayplan':dayplan, 'red_yel':red_yel, 'weekplan':weekplan, 'flows':flows}\n",
|
|
"# for df_name, df in dfs.items():\n",
|
|
"# print(df_name)\n",
|
|
"# assert set(df.CRSRD_ID).issubset(inter_nos)\n",
|
|
"# inter_no_coincide = inter_nos == set(df.CRSRD_ID)\n",
|
|
"# if not inter_no_coincide:\n",
|
|
"# print(f\" inter_no's doesn't conicide.\")\n",
|
|
"# print(f\" missing inter_no's : {inter_nos - set(df.CRSRD_ID)}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 43,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# venn3([set(dayplan.CRSRD_ID), set(red_yel.CRSRD_ID), set(weekplan.CRSRD_ID)], ('dayplan', 'redyel', 'weekplan'))\n",
|
|
"# plt.show()\n",
|
|
"# print(f'일간계획 테이블의 교차로 개수 : {len(set(dayplan.CRSRD_ID))}')\n",
|
|
"# print(f'황색적색 테이블의 교차로 개수 : {len(set(red_yel.CRSRD_ID))}')\n",
|
|
"# print(f'주간계획 테이블의 교차로 개수 : {len(set(weekplan.CRSRD_ID))}')\n",
|
|
"# CRSRD_IDs_plan = set(dayplan.CRSRD_ID) & set(red_yel.CRSRD_ID) & set(weekplan.CRSRD_ID)\n",
|
|
"# print(f'겹치는 교차로 개수 : {len(CRSRD_IDs_plan)}')\n",
|
|
"# print(f'겹치는 교차로 목록 : {sorted(CRSRD_IDs_plan)}')"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "siggen_env",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"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.12.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|