{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os, sys, copy, sumolib, json, datetime\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class DailyPreprocessor():\n",
|
|
" def __init__(self):\n",
|
|
" pass\n",
|
|
"self = DailyPreprocessor()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"c:\\Github\\snits_siggen\n",
|
|
"c:\\Github\\snits_siggen\\Data\n",
|
|
"c:\\Github\\snits_siggen\\Intermediates\n",
|
|
"c:\\Github\\snits_siggen\\Results\n",
|
|
"c:\\Github\\snits_siggen\\Data\\tables\n",
|
|
"c:\\Github\\snits_siggen\\Data\\networks\n",
|
|
"c:\\Github\\snits_siggen\\Scripts\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 루트폴더 지정\n",
|
|
"self.path_root = os.path.dirname(os.path.dirname(os.path.join(os.path.abspath('.'))))\n",
|
|
"print(self.path_root)\n",
|
|
"\n",
|
|
"with open(os.path.join(self.path_root, 'configs', 'config.json'), 'r') as file:\n",
|
|
" config = json.load(file)\n",
|
|
"\n",
|
|
"# 주요 폴더 경로 지정\n",
|
|
"self.paths = config['paths']\n",
|
|
"self.path_data = os.path.join(self.path_root, *self.paths['data'])\n",
|
|
"self.path_intermediates = os.path.join(self.path_root, *self.paths['intermediates'])\n",
|
|
"self.path_results = os.path.join(self.path_root, *self.paths['results'])\n",
|
|
"self.path_tables = os.path.join(self.path_root, *self.paths['tables'])\n",
|
|
"self.path_networks = os.path.join(self.path_root, *self.paths['networks'])\n",
|
|
"self.path_scripts = os.path.join(self.path_root, *self.paths['scripts'])\n",
|
|
"print(self.path_data)\n",
|
|
"print(self.path_intermediates)\n",
|
|
"print(self.path_results)\n",
|
|
"print(self.path_tables)\n",
|
|
"print(self.path_networks)\n",
|
|
"print(self.path_scripts)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 1-1. 네트워크 불러오기\n",
|
|
"self.net = sumolib.net.readNet(os.path.join(self.path_networks, 'sn.net.xml'))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 1-2. 테이블 불러오기\n",
|
|
"# csv_files = [filename for filename in os.listdir(self.path_tables) if filename.endswith('csv')]\n",
|
|
"# COLUMNS = []\n",
|
|
"# for csv_file in csv_files:\n",
|
|
"# df = pd.read_csv(os.path.join(self.path_tables, csv_file))\n",
|
|
"# columns = list(df.columns)\n",
|
|
"# COLUMNS.extend(columns)\n",
|
|
"# COLUMNS = sorted(set(COLUMNS))\n",
|
|
"self.alphs = ['A', 'B']\n",
|
|
"\n",
|
|
"loading_dtype_1 = {'CRSRD_ID':int, 'CRSRD_NM':str, 'CRSRD_TYPE':int, \n",
|
|
" 'CTRLER_TYPE':str, 'CYCL':int, 'DAY':int, \n",
|
|
" 'FLOW_NO':int, 'FRI_PLAN_NO':int, 'FRST_REG_DT':str, \n",
|
|
" 'GRP_NO':int, 'HOUR':int, 'LAST_MDFCN_DT':str, \n",
|
|
" 'LGTD':float, 'LOS_YN':int, 'LTTD':float, \n",
|
|
" 'MAIN_CRSRD_ID':str, 'MAIN_PHASE':int, 'MIN':int, \n",
|
|
" 'MNTH':int, 'MON_PLAN_NO':int, 'NODE_ID':str, \n",
|
|
" 'OFFSET':int, 'PHASE':int, 'PHASE_DT':str, \n",
|
|
" 'PLAN_NO':int, 'PPC_TYPE':int, 'RING':str, \n",
|
|
" 'RINGA_FLOW':int, 'RINGA_MIN_SEC':int, 'RINGA_RED_SEC':int, \n",
|
|
" 'RINGA_YELLO_SEC':int, 'RINGB_FLOW':int, 'RINGB_MIN_SEC':int, \n",
|
|
" 'RINGB_RED_SEC':int, 'RINGB_YELLO_SEC':int, 'SAT_PLAN_NO':int, \n",
|
|
" 'SIGL_ANGLE':str, 'STOS_NO':int, 'SUN_PLAN_NO':int, \n",
|
|
" 'THU_PLAN_NO':int, 'TRFLIG_TYPE':int, 'TUE_PLAN_NO':int, \n",
|
|
" 'USE_YN':int, 'WED_PLAN_NO':int, 'adj_inc_edge_id':str, \n",
|
|
" 'adj_out_edge_id':str, 'child_id':str, 'condition':str, \n",
|
|
" 'inc_edge_id':str, 'inter_no':int, 'inter_type':int, \n",
|
|
" 'node_id':str, 'out_edge_id':str, 'parent_id':str, \n",
|
|
" 'phase_no':int, 'ring_type':str, 'turn_type':str}\n",
|
|
"loading_dtype_2 = {f'RING{alph}_PHASE{i}':int for alph in self.alphs for i in range(1,9)}\n",
|
|
"loading_dtype = {**loading_dtype_1, **loading_dtype_2}\n",
|
|
"\n",
|
|
"# 테이블 불러오기\n",
|
|
"\n",
|
|
"# 수작업으로 만든 테이블\n",
|
|
"self.inter_node = pd.read_csv(os.path.join(self.path_tables, 'inter_node.csv'), dtype=loading_dtype)\n",
|
|
"self.turn_type = pd.read_csv(os.path.join(self.path_tables, 'turn_type.csv'), dtype=loading_dtype)\n",
|
|
"self.uturn = pd.read_csv(os.path.join(self.path_tables, 'uturn.csv'), dtype=loading_dtype)\n",
|
|
"self.u_condition= pd.read_csv(os.path.join(self.path_tables, 'u_condition.csv'), dtype=loading_dtype)\n",
|
|
"self.coord = pd.read_csv(os.path.join(self.path_tables, 'coord.csv'), dtype=loading_dtype)\n",
|
|
"self.turn_type = pd.read_csv(os.path.join(self.path_tables, 'turn_type.csv'), dtype=loading_dtype)\n",
|
|
"\n",
|
|
"# DB에서 fetch하는 테이블\n",
|
|
"self.dayplan = pd.read_csv(os.path.join(self.path_tables, 'TC_IF_TOD_DAY_PLAN.csv'), dtype=loading_dtype)\n",
|
|
"self.holyplan = pd.read_csv(os.path.join(self.path_tables, 'TC_IF_TOD_HOLIDAY_PLAN.csv'), dtype=loading_dtype)\n",
|
|
"self.red_yel = pd.read_csv(os.path.join(self.path_tables, 'TC_IF_TOD_RED_YELLO.csv'), dtype=loading_dtype)\n",
|
|
"self.weekplan = pd.read_csv(os.path.join(self.path_tables, 'TC_IF_TOD_WEEK_PLAN.csv'), dtype=loading_dtype)\n",
|
|
"self.history = pd.read_csv(os.path.join(self.path_tables, 'TL_IF_SIGL_CYCL.csv'), dtype=loading_dtype)\n",
|
|
"self.inter_info = pd.read_csv(os.path.join(self.path_tables, 'TM_FA_CRSRD.csv'), dtype=loading_dtype)\n",
|
|
"self.angle = pd.read_csv(os.path.join(self.path_tables, 'TN_IF_SIGL_FLOW.csv'), dtype=loading_dtype)\n",
|
|
"\n",
|
|
"# 컬럼명 변경\n",
|
|
"rename_cname_1 = {'CRSRD_ID':'inter_no', 'CRSRD_NM':'inter_name', 'CRSRD_TYPE':'inter_type', \n",
|
|
" 'CYCL':'cycle', 'DAY':'DD', 'FLOW_NO':'move_no', \n",
|
|
" 'GRP_NO':'group_no', 'HOUR':'hh', 'LGTD':'inter_lon', \n",
|
|
" 'LTTD':'inter_lat', 'MAIN_CRSRD_ID':'parent_id','MAIN_PHASE':'main_phase', \n",
|
|
" 'MIN':'mm', 'MNTH':'MM', 'NODE_ID':'node_id', \n",
|
|
" 'OFFSET':'offset', 'PHASE':'phase_no', 'RING':'ring_type', \n",
|
|
" 'RINGA_RED_SEC':'red_A', 'RINGA_YELLO_SEC':'yel_A', 'RINGB_RED_SEC':'red_B', \n",
|
|
" 'RINGB_YELLO_SEC':'yel_B', 'SIGL_ANGLE':'angle_code', 'PLAN_NO':'plan_no'}\n",
|
|
"\n",
|
|
"rename_cname_2 = {f'RING{alph}_PHASE{i}':f'dura_{alph}{i}' for alph in self.alphs for i in range(1,9)}\n",
|
|
"rename_cname = {**rename_cname_1, **rename_cname_2}\n",
|
|
"\n",
|
|
"self.dayplan = self.dayplan.rename(columns=rename_cname)\n",
|
|
"self.holyplan = self.holyplan.rename(columns=rename_cname)\n",
|
|
"self.red_yel = self.red_yel.rename(columns=rename_cname)\n",
|
|
"self.weekplan = self.weekplan.rename(columns=rename_cname)\n",
|
|
"self.history = self.history.rename(columns=rename_cname)\n",
|
|
"self.inter_info = self.inter_info.rename(columns=rename_cname)\n",
|
|
"self.angle = self.angle.rename(columns=rename_cname)\n",
|
|
"\n",
|
|
"# 교차로목록, 노드목록 정의\n",
|
|
"self.inter_nos = [int(x) for x in sorted(self.inter_info.inter_no.unique())]\n",
|
|
"self.node_ids = sorted(self.inter_node.node_id.unique())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 1-3. 네트워크 무결성 검사\n",
|
|
"# (생략)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 1-4. 테이블 무결성 검사\n",
|
|
"# (생략)"
|
|
]
|
|
},
|
|
{
|
|
"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>node_id</th>\n",
|
|
" <th>inter_type</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>u00</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>u20</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>u30</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>u31</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>u32</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id inter_type\n",
|
|
"0 175 i0 0\n",
|
|
"1 175 u00 1\n",
|
|
"2 176 i1 0\n",
|
|
"3 177 i2 0\n",
|
|
"4 177 u20 1\n",
|
|
"5 178 i3 0\n",
|
|
"6 178 u30 1\n",
|
|
"7 178 u31 1\n",
|
|
"8 178 u32 1\n",
|
|
"9 201 i8 0\n",
|
|
"10 202 i9 0\n",
|
|
"11 206 i7 0\n",
|
|
"12 210 i6 0\n",
|
|
"13 210 u60 1\n",
|
|
"14 178 c30 1"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.inter_node"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[175, 176, 177, 178, 201, 202, 206, 210]\n",
|
|
"['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
|
|
"['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n",
|
|
"['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
|
|
"['u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
|
|
"['c30']\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 1-5. 주요 객체 (리스트, 딕셔너리) 저장\n",
|
|
"\n",
|
|
"# 주교차로 / 부교차로 / 유턴교차로 / 연등교차로 노드id\n",
|
|
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type==0].node_id.unique())\n",
|
|
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type==1].node_id.unique())\n",
|
|
"self.uturn_ids = sorted(self.uturn.node_id.unique())\n",
|
|
"self.coord_ids = sorted(self.coord.node_id.unique())\n",
|
|
"\n",
|
|
"print(self.inter_nos)\n",
|
|
"print(self.node_ids )\n",
|
|
"print(self.parent_ids)\n",
|
|
"print(self.child_ids )\n",
|
|
"print(self.uturn_ids )\n",
|
|
"print(self.coord_ids )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{'i0': 175, 'u00': 175, 'i1': 176, 'i2': 177, 'u20': 177, 'i3': 178, 'u30': 178, 'u31': 178, 'u32': 178, 'i8': 201, 'i9': 202, 'i7': 206, 'i6': 210, 'u60': 210, 'c30': 178}\n",
|
|
"{175: ['i0', 'u00'], 176: ['i1'], 177: ['i2', 'u20'], 178: ['i3', 'u30', 'u31', 'u32', 'c30'], 201: ['i8'], 202: ['i9'], 206: ['i7'], 210: ['i6', 'u60']}\n",
|
|
"{175: 'i0', 176: 'i1', 177: 'i2', 178: 'i3', 201: 'i8', 202: 'i9', 206: 'i7', 210: 'i6'}\n",
|
|
"{'i0': 0, 'u00': 1, 'i1': 0, 'i2': 0, 'u20': 1, 'i3': 0, 'u30': 1, 'u31': 1, 'u32': 1, 'i8': 0, 'i9': 0, 'i7': 0, 'i6': 0, 'u60': 1, 'c30': 1}\n",
|
|
"{'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'u60': 'i6', 'c30': 'i3'}\n",
|
|
"{'i0': ['u00'], 'i2': ['u20'], 'i3': ['u30', 'u31', 'u32', 'c30'], 'i6': ['u60']}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 교차로번호 - 노드id 간 딕셔너리\n",
|
|
"self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n",
|
|
"self.inter2nodes = {inter:[key for key, value in self.node2inter.items() if value == inter] for inter in self.node2inter.values()}\n",
|
|
"self.inter2node = dict(zip(self.inter_node[self.inter_node.inter_type==0]['inter_no'], self.inter_node[self.inter_node.inter_type==0]['node_id']))\n",
|
|
"self.node2type = dict(zip(self.inter_node['node_id'], self.inter_node['inter_type']))\n",
|
|
"# 주교차로id - 부교차로id 간 딕셔너리\n",
|
|
"self.child2parent = dict()\n",
|
|
"for child_id in list(self.inter_node[self.inter_node.inter_type==1]['node_id'].unique()):\n",
|
|
" inter_no = self.inter_node[self.inter_node.node_id==child_id].iloc[0].inter_no\n",
|
|
" parent_id = self.inter_node[self.inter_node.inter_no==inter_no][self.inter_node[self.inter_node.inter_no==inter_no].inter_type==0].iloc[0].node_id\n",
|
|
" self.child2parent[child_id] = parent_id\n",
|
|
"self.parent2childs = {parent_id:[key for key, value in self.child2parent.items() if value == parent_id] for parent_id in self.child2parent.values()}\n",
|
|
"print(self.node2inter)\n",
|
|
"print(self.inter2nodes)\n",
|
|
"print(self.inter2node)\n",
|
|
"print(self.node2type)\n",
|
|
"print(self.child2parent)\n",
|
|
"print(self.parent2childs)"
|
|
]
|
|
},
|
|
{
|
|
"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>plan_no</th>\n",
|
|
" <th>hh</th>\n",
|
|
" <th>mm</th>\n",
|
|
" <th>cycle</th>\n",
|
|
" <th>offset</th>\n",
|
|
" <th>dura_A1</th>\n",
|
|
" <th>dura_A2</th>\n",
|
|
" <th>dura_A3</th>\n",
|
|
" <th>dura_A4</th>\n",
|
|
" <th>...</th>\n",
|
|
" <th>dura_A8</th>\n",
|
|
" <th>dura_B1</th>\n",
|
|
" <th>dura_B2</th>\n",
|
|
" <th>dura_B3</th>\n",
|
|
" <th>dura_B4</th>\n",
|
|
" <th>dura_B5</th>\n",
|
|
" <th>dura_B6</th>\n",
|
|
" <th>dura_B7</th>\n",
|
|
" <th>dura_B8</th>\n",
|
|
" <th>LAST_MDFCN_DT</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>160</td>\n",
|
|
" <td>57</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>9</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>28</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>30</td>\n",
|
|
" <td>190</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>46</td>\n",
|
|
" <td>48</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>41</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>46</td>\n",
|
|
" <td>48</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>150</td>\n",
|
|
" <td>131</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>73</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>73</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>5 rows × 23 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no plan_no hh mm cycle offset dura_A1 dura_A2 dura_A3 \\\n",
|
|
"0 175 1 0 0 160 57 37 39 55 \n",
|
|
"1 175 1 7 0 170 40 40 42 55 \n",
|
|
"2 175 1 9 0 180 28 43 45 55 \n",
|
|
"3 175 1 18 30 190 18 46 48 55 \n",
|
|
"4 176 1 0 0 150 131 37 73 40 \n",
|
|
"\n",
|
|
" dura_A4 ... dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n",
|
|
"0 29 ... 0 37 39 25 59 0 \n",
|
|
"1 33 ... 0 40 42 29 59 0 \n",
|
|
"2 37 ... 0 43 45 33 59 0 \n",
|
|
"3 41 ... 0 46 48 37 59 0 \n",
|
|
"4 0 ... 0 37 73 40 0 0 \n",
|
|
"\n",
|
|
" dura_B6 dura_B7 dura_B8 LAST_MDFCN_DT \n",
|
|
"0 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"1 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"2 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"3 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"4 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"\n",
|
|
"[5 rows x 23 columns]"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 1-6. 신호계획 테이블 통합\n",
|
|
"\n",
|
|
"now = datetime.datetime.now()\n",
|
|
"# 월, 일\n",
|
|
"MM, DD, hh, mm = now.month, now.day, now.hour, now.minute\n",
|
|
"hplan = self.holyplan[(self.holyplan.MM==MM) & (self.holyplan.DD==DD)]\n",
|
|
"\n",
|
|
"# 요일\n",
|
|
"dow_number = now.weekday()\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",
|
|
"# (inter_no, plan_no) 목록 \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",
|
|
"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",
|
|
"self.plan.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"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>plan_no</th>\n",
|
|
" <th>hh</th>\n",
|
|
" <th>mm</th>\n",
|
|
" <th>cycle</th>\n",
|
|
" <th>offset</th>\n",
|
|
" <th>dura_A1</th>\n",
|
|
" <th>dura_A2</th>\n",
|
|
" <th>dura_A3</th>\n",
|
|
" <th>dura_A4</th>\n",
|
|
" <th>...</th>\n",
|
|
" <th>dura_A8</th>\n",
|
|
" <th>dura_B1</th>\n",
|
|
" <th>dura_B2</th>\n",
|
|
" <th>dura_B3</th>\n",
|
|
" <th>dura_B4</th>\n",
|
|
" <th>dura_B5</th>\n",
|
|
" <th>dura_B6</th>\n",
|
|
" <th>dura_B7</th>\n",
|
|
" <th>dura_B8</th>\n",
|
|
" <th>LAST_MDFCN_DT</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>160</td>\n",
|
|
" <td>57</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>9</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>28</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>30</td>\n",
|
|
" <td>190</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>46</td>\n",
|
|
" <td>48</td>\n",
|
|
" <td>55</td>\n",
|
|
" <td>41</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>46</td>\n",
|
|
" <td>48</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>59</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>150</td>\n",
|
|
" <td>131</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>73</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>73</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2024-07-12 16:36:43.702267</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>5 rows × 23 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no plan_no hh mm cycle offset dura_A1 dura_A2 dura_A3 \\\n",
|
|
"0 175 1 0 0 160 57 37 39 55 \n",
|
|
"1 175 1 7 0 170 40 40 42 55 \n",
|
|
"2 175 1 9 0 180 28 43 45 55 \n",
|
|
"3 175 1 18 30 190 18 46 48 55 \n",
|
|
"4 176 1 0 0 150 131 37 73 40 \n",
|
|
"\n",
|
|
" dura_A4 ... dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n",
|
|
"0 29 ... 0 37 39 25 59 0 \n",
|
|
"1 33 ... 0 40 42 29 59 0 \n",
|
|
"2 37 ... 0 43 45 33 59 0 \n",
|
|
"3 41 ... 0 46 48 37 59 0 \n",
|
|
"4 0 ... 0 37 73 40 0 0 \n",
|
|
"\n",
|
|
" dura_B6 dura_B7 dura_B8 LAST_MDFCN_DT \n",
|
|
"0 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"1 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"2 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"3 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"4 0 0 0 2024-07-12 16:36:43.702267 \n",
|
|
"\n",
|
|
"[5 rows x 23 columns]"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"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",
|
|
"self.plan.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"['angle',\n",
|
|
" 'coord',\n",
|
|
" 'dayplan',\n",
|
|
" 'history',\n",
|
|
" 'holyplan',\n",
|
|
" 'inter_info',\n",
|
|
" 'inter_node',\n",
|
|
" 'plan',\n",
|
|
" 'red_yel',\n",
|
|
" 'turn_type',\n",
|
|
" 'u_condition',\n",
|
|
" 'uturn',\n",
|
|
" 'weekplan']"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_attributes = [attr for attr in dir(self) if isinstance(getattr(self, attr), pd.DataFrame)]\n",
|
|
"df_attributes"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{175: 'i0',\n",
|
|
" 176: 'i1',\n",
|
|
" 177: 'i2',\n",
|
|
" 178: 'i3',\n",
|
|
" 201: 'i8',\n",
|
|
" 202: 'i9',\n",
|
|
" 206: 'i7',\n",
|
|
" 210: 'i6'}"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.inter2node"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"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>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>179004</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>003176</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>001095</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>179271</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>092270</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>090180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>268358</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>270090</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>180000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>17</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>359180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>18</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>180000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>19</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>180270</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>270356</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>26</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>28</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>-1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no STOS_NO angle_code\n",
|
|
"0 175 1 A -1 0 179004\n",
|
|
"1 175 1 B -1 0 003176\n",
|
|
"2 175 2 A -1 0 001095\n",
|
|
"3 175 2 B -1 0 179271\n",
|
|
"4 175 3 A -1 0 092270\n",
|
|
"5 175 3 B -1 0 090180\n",
|
|
"6 175 4 A -1 0 268358\n",
|
|
"7 175 4 B -1 0 270090\n",
|
|
"8 175 5 A -1 0 NaN\n",
|
|
"9 175 5 B -1 0 NaN\n",
|
|
"10 175 6 A -1 0 NaN\n",
|
|
"11 175 6 B -1 0 NaN\n",
|
|
"12 175 7 A -1 0 NaN\n",
|
|
"13 175 7 B -1 0 NaN\n",
|
|
"14 175 8 A -1 0 NaN\n",
|
|
"15 175 8 B -1 0 NaN\n",
|
|
"16 176 1 A -1 0 180000\n",
|
|
"17 176 1 B -1 0 359180\n",
|
|
"18 176 2 A -1 0 180000\n",
|
|
"19 176 2 B -1 0 180270\n",
|
|
"20 176 3 A -1 0 270356\n",
|
|
"21 176 3 B -1 0 NaN\n",
|
|
"22 176 4 A -1 0 NaN\n",
|
|
"23 176 4 B -1 0 NaN\n",
|
|
"24 176 5 A -1 0 NaN\n",
|
|
"25 176 5 B -1 0 NaN\n",
|
|
"26 176 6 A -1 0 NaN\n",
|
|
"27 176 6 B -1 0 NaN\n",
|
|
"28 176 7 A -1 0 NaN\n",
|
|
"29 176 7 B -1 0 NaN"
|
|
]
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.angle[:30]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"self.angle_new = []\n",
|
|
"for inter_no in self.inter_nos:\n",
|
|
" ang = self.angle[self.angle.inter_no==inter_no]\n",
|
|
" max_phase_no = ang.dropna(subset='angle_code')['phase_no'].max()\n",
|
|
" self.angle_new.append(ang[ang.phase_no <= max_phase_no])\n",
|
|
"self.angle = pd.concat(self.angle_new)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"self.angle = self.angle.copy()\n",
|
|
"\n",
|
|
"self.angle['node_id'] = self.angle['inter_no'].map(self.inter2node)\n",
|
|
"self.angle['parent_id'] = self.angle['node_id']\n",
|
|
"self.angle = self.angle.drop(columns='move_no')\n",
|
|
"for index, row in self.angle.iterrows():\n",
|
|
" node_id = row.node_id\n",
|
|
" if not isinstance(row.angle_code, str) or len(row.angle_code)!=6:\n",
|
|
" continue\n",
|
|
" # 방위각\n",
|
|
" inc_angle = int(row.angle_code[:3])\n",
|
|
" out_angle = int(row.angle_code[3:])\n",
|
|
" self.angle.at[index, 'inc_angle'] = inc_angle\n",
|
|
" self.angle.at[index, 'out_angle'] = out_angle\n",
|
|
" # 일반각 및 라디안으로 변환, 실제 방향 설정\n",
|
|
" inc_angle = (90 - inc_angle) % 360\n",
|
|
" inc_angle = inc_angle * np.pi / 180\n",
|
|
" inc_vec_true = np.array([np.cos(inc_angle), np.sin(inc_angle)])\n",
|
|
" out_angle = (90 - out_angle) % 360\n",
|
|
" out_angle = out_angle * np.pi / 180\n",
|
|
" out_vec_true = np.array([np.cos(out_angle), np.sin(out_angle)])\n",
|
|
"\n",
|
|
" # 진입로 목록\n",
|
|
" inc_edge_ids = [edge.getID() for edge in self.net.getNode(node_id).getIncoming()]\n",
|
|
" inc_vecs = []\n",
|
|
" for inc_edge_id in inc_edge_ids:\n",
|
|
" init_pt = self.net.getEdge(inc_edge_id).getShape()[-1]\n",
|
|
" term_pt = self.net.getEdge(inc_edge_id).getShape()[-2]\n",
|
|
" assert init_pt != term_pt\n",
|
|
" inc_vec = np.array(term_pt) - np.array(init_pt)\n",
|
|
" inc_vec = inc_vec / np.linalg.norm(inc_vec)\n",
|
|
" inc_vecs.append(inc_vec)\n",
|
|
" # 각도에 맞는 진입로 지정\n",
|
|
" max_index = np.argmax([np.dot(inc_vec, inc_vec_true) for inc_vec in inc_vecs])\n",
|
|
" inc_edge_id = inc_edge_ids[max_index]\n",
|
|
" self.angle.at[index, 'inc_edge_id'] = inc_edge_id\n",
|
|
"\n",
|
|
" # 진출로 목록\n",
|
|
" out_edge_ids = [edge.getID() for edge in self.net.getNode(node_id).getOutgoing()]\n",
|
|
" out_vecs = []\n",
|
|
" for out_edge_id in out_edge_ids:\n",
|
|
" init_pt = self.net.getEdge(out_edge_id).getShape()[0]\n",
|
|
" term_pt = self.net.getEdge(out_edge_id).getShape()[1]\n",
|
|
" assert init_pt != term_pt\n",
|
|
" out_vec = np.array(term_pt) - np.array(init_pt)\n",
|
|
" out_vec = out_vec / np.linalg.norm(out_vec)\n",
|
|
" out_vecs.append(out_vec)\n",
|
|
" # 각도에 맞는 진출로 지정\n",
|
|
" max_index = np.argmax([np.dot(out_vec, out_vec_true) for out_vec in out_vecs])\n",
|
|
" out_edge_id = out_edge_ids[max_index]\n",
|
|
" self.angle.at[index, 'out_edge_id'] = out_edge_id\n",
|
|
"self.angle = self.angle.drop(columns='angle_code')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# turn_type 지정\n",
|
|
"io2turn_type = dict()\n",
|
|
"for row in self.turn_type.itertuples():\n",
|
|
" if not (row.inc_edge_id, row.out_edge_id) in io2turn_type:\n",
|
|
" io2turn_type[(row.inc_edge_id, row.out_edge_id)] = row.turn_type\n",
|
|
" else:\n",
|
|
" if io2turn_type[(row.inc_edge_id, row.out_edge_id)] != row.turn_type:\n",
|
|
" print('the dictionary is not well-defined')\n",
|
|
"self.angle['turn_type'] = self.angle.apply(lambda row:io2turn_type.get((row['inc_edge_id'], row['out_edge_id']), None), axis=1)\n",
|
|
"self.angle['turn_type'] = self.angle['turn_type'].map({'straight': 'S', 'left': 'L', 'right': 'R'})\n",
|
|
"# node_type 지정\n",
|
|
"self.angle['node_type'] = 'normal'"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'u00': '좌회전시',\n",
|
|
" 'u20': '보행신호시',\n",
|
|
" 'u30': '보행신호시',\n",
|
|
" 'u31': '보행신호시',\n",
|
|
" 'u32': '보행신호시',\n",
|
|
" 'u60': '좌회전시'}"
|
|
]
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"u_condition = dict(zip(self.u_condition.child_id, self.u_condition.condition))\n",
|
|
"self.u_condition\n",
|
|
"u_condition"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"self.angle_sep = 20\n",
|
|
"\n",
|
|
"ne2angle = dict() # (node_id, edge_id) -> angle\n",
|
|
"NIA = [] # (node_id, inc_edge_id, angle)\n",
|
|
"NIs = set(zip(self.angle.node_id, self.angle.inc_edge_id)) # (node_id, inc_edge_id)\n",
|
|
"NIs = sorted(ni for ni in NIs if not pd.isna(ni[1]))\n",
|
|
"for node_id, inc_edge_id in NIs:\n",
|
|
" ang = self.angle[(self.angle.node_id==node_id) & (self.angle.inc_edge_id==inc_edge_id)]\n",
|
|
" mean_x = np.mean(np.cos(np.deg2rad(ang.inc_angle)))\n",
|
|
" mean_y = np.mean(np.sin(np.deg2rad(ang.inc_angle)))\n",
|
|
" mean_angle = int(np.rad2deg(np.arctan2(mean_y, mean_x)) % 360)\n",
|
|
" NIA.append(pd.DataFrame({'node_id':[node_id], 'inc_edge_id':[inc_edge_id], 'angle':[mean_angle]}))\n",
|
|
"NIA = pd.concat(NIA).reset_index(drop=True)\n",
|
|
"NOA = [] # (node_id, out_edge_id, angle)\n",
|
|
"NOs = set(zip(self.angle.node_id, self.angle.out_edge_id)) # (node_id, out_edge_id)\n",
|
|
"NOs = sorted(no for no in NOs if not pd.isna(no[1]))\n",
|
|
"for node_id, out_edge_id in NOs:\n",
|
|
" ang = self.angle[(self.angle.node_id==node_id) & (self.angle.out_edge_id==out_edge_id)]\n",
|
|
" mean_x = np.mean(np.cos(np.deg2rad(ang.out_angle)))\n",
|
|
" mean_y = np.mean(np.sin(np.deg2rad(ang.out_angle)))\n",
|
|
" mean_angle = int(np.rad2deg(np.arctan2(mean_y, mean_x)) % 360)\n",
|
|
" NOA.append(pd.DataFrame({'node_id':[node_id], 'out_edge_id':[out_edge_id], 'angle':[mean_angle]}))\n",
|
|
"NOA = pd.concat(NOA).reset_index(drop=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"uangles = []\n",
|
|
"for uturn_id in self.uturn_ids:\n",
|
|
" parent_id = self.child2parent[uturn_id] # 주교차로 노드id\n",
|
|
" condition = u_condition[uturn_id] # 유턴조건\n",
|
|
" # 바꿔서 넣을 데이터프레임\n",
|
|
" uangle = self.angle[self.angle.parent_id==parent_id].copy() # 'angle' dataframe for a specific 'parent_id'\n",
|
|
" uangle['node_id'] = uturn_id\n",
|
|
" uangle['node_type'] = 'uturn'\n",
|
|
" # 유턴에 관한 정보\n",
|
|
" urow = self.uturn[self.uturn.node_id==uturn_id].iloc[0]\n",
|
|
" node_id = urow.parent_id\n",
|
|
" inc_edge_id = urow.inc_edge_id # 유턴 진입엣지id\n",
|
|
" out_edge_id = urow.out_edge_id # 유턴 진출엣지id\n",
|
|
" adj_inc_edge_id = urow.adj_inc_edge_id # 유턴 인접진입엣지id\n",
|
|
" adj_out_edge_id = urow.adj_out_edge_id # 유턴 인접진출엣지id\n",
|
|
"\n",
|
|
" # 해당 노드에 대한 (노드id, 진입(출)엣지id, 방위각) 데이터프레임\n",
|
|
" nia = NIA[NIA.node_id==node_id].sort_values(by='angle').reset_index(drop=True)\n",
|
|
" noa = NOA[NOA.node_id==node_id].sort_values(by='angle').reset_index(drop=True)\n",
|
|
"\n",
|
|
" # 진입엣지 각도\n",
|
|
" inc_angle = nia[nia.inc_edge_id==adj_inc_edge_id].iloc[0].angle\n",
|
|
"\n",
|
|
" # 진/출입로 각도 목록 (extended)\n",
|
|
" inc_angles = np.array(nia.angle)\n",
|
|
" inc_angles = np.concatenate((inc_angles - 360, inc_angles, inc_angles + 360))\n",
|
|
" out_angles = np.array(noa.angle)\n",
|
|
" out_angles = np.concatenate((out_angles - 360, out_angles, out_angles + 360))\n",
|
|
"\n",
|
|
" # 좌측 진출로 (좌회전신호시 진출로)\n",
|
|
" out_angles_left = out_angles[out_angles >= inc_angle + self.angle_sep]\n",
|
|
" out_angle_left = np.sort(out_angles_left)[0] % 360\n",
|
|
" out_edge_id_left = noa[noa.angle==out_angle_left].iloc[0].out_edge_id\n",
|
|
"\n",
|
|
" # 좌측 진입로 (보행신호시 진입로)\n",
|
|
" inc_angles_left = inc_angles[inc_angles >= inc_angle + self.angle_sep]\n",
|
|
" inc_angle_left = np.sort(inc_angles_left)[0] % 360\n",
|
|
" inc_edge_id_left = nia[nia.angle==inc_angle_left].iloc[0].inc_edge_id\n",
|
|
"\n",
|
|
" # 우측 진출로 (보행신호시 진출로)\n",
|
|
" out_angles_right = out_angles[out_angles <= inc_angle - self.angle_sep]\n",
|
|
" out_angle_right = np.sort(out_angles_right)[-1] % 360\n",
|
|
" out_edge_id_right = noa[noa.angle==out_angle_right].iloc[0].out_edge_id\n",
|
|
"\n",
|
|
" # 좌회전시 조건\n",
|
|
" left_flag = (uangle.inc_edge_id==adj_inc_edge_id) & (uangle.out_edge_id==out_edge_id_left) & (uangle.turn_type=='L')\n",
|
|
"\n",
|
|
" # 보행신호시 조건\n",
|
|
" pedes_flag = (uangle.inc_edge_id==inc_edge_id_left) & (uangle.out_edge_id==out_edge_id_right)\n",
|
|
"\n",
|
|
" # 진출엣지가 유턴 인접진출엣지와 다르다는 조건\n",
|
|
" out_adj_coincides = uangle[uangle.out_edge_id==adj_out_edge_id]\n",
|
|
" out_adj_flag = ~uangle.phase_no.isin(out_adj_coincides.phase_no)\n",
|
|
"\n",
|
|
" if condition == '좌회전시':\n",
|
|
" # 유턴교차로에 대한 from / to 재입력\n",
|
|
" uangle.loc[left_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
|
|
" uangle.loc[~left_flag, ['inc_edge_id', 'out_edge_id']] = ['', '']\n",
|
|
"\n",
|
|
" elif condition == '보행신호시':\n",
|
|
" # 유턴교차로에 대한 from / to 재입력\n",
|
|
" uangle.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
|
|
" uangle.loc[~pedes_flag, ['inc_edge_id', 'out_edge_id']] = ['', '']\n",
|
|
"\n",
|
|
" uturn_not_assigned = (uangle[['inc_edge_id', 'out_edge_id']] == ('', '')).any(axis=1).all()\n",
|
|
" if uturn_not_assigned:\n",
|
|
" if left_flag.any():\n",
|
|
" uangle.loc[left_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
|
|
" uangle.loc[~left_flag, ['inc_edge_id', 'out_edge_id']] = ['', '']\n",
|
|
" elif pedes_flag.any():\n",
|
|
" uangle.loc[left_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
|
|
" uangle.loc[~left_flag, ['inc_edge_id', 'out_edge_id']] = ['', '']\n",
|
|
" elif out_adj_flag.any():\n",
|
|
" uangle.loc[out_adj_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
|
|
" uangle.loc[~out_adj_flag, ['inc_edge_id', 'out_edge_id']] = ['', '']\n",
|
|
" uangles.append(uangle)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"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>STOS_NO</th>\n",
|
|
" <th>node_id</th>\n",
|
|
" <th>parent_id</th>\n",
|
|
" <th>inc_angle</th>\n",
|
|
" <th>out_angle</th>\n",
|
|
" <th>inc_edge_id</th>\n",
|
|
" <th>out_edge_id</th>\n",
|
|
" <th>turn_type</th>\n",
|
|
" <th>node_type</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>112</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>113</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>114</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>268.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571500535_02</td>\n",
|
|
" <td>-571500535_02</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>115</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>116</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>359.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>117</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>118</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>119</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>uturn</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type STOS_NO node_id parent_id inc_angle \\\n",
|
|
"112 210 1 A 0 u60 i6 90.0 \n",
|
|
"113 210 1 B 0 u60 i6 NaN \n",
|
|
"114 210 2 A 0 u60 i6 268.0 \n",
|
|
"115 210 2 B 0 u60 i6 270.0 \n",
|
|
"116 210 3 A 0 u60 i6 359.0 \n",
|
|
"117 210 3 B 0 u60 i6 0.0 \n",
|
|
"118 210 4 A 0 u60 i6 180.0 \n",
|
|
"119 210 4 B 0 u60 i6 180.0 \n",
|
|
"\n",
|
|
" out_angle inc_edge_id out_edge_id turn_type node_type \n",
|
|
"112 270.0 S uturn \n",
|
|
"113 NaN NaN uturn \n",
|
|
"114 0.0 571500535_02 -571500535_02 L uturn \n",
|
|
"115 90.0 S uturn \n",
|
|
"116 90.0 L uturn \n",
|
|
"117 180.0 S uturn \n",
|
|
"118 0.0 S uturn \n",
|
|
"119 270.0 L uturn "
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"uangle"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"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>parent_id</th>\n",
|
|
" <th>node_id</th>\n",
|
|
" <th>STOS_NO</th>\n",
|
|
" <th>phase_no</th>\n",
|
|
" <th>ring_type</th>\n",
|
|
" <th>inc_edge_id</th>\n",
|
|
" <th>out_edge_id</th>\n",
|
|
" <th>turn_type</th>\n",
|
|
" <th>node_type</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td></td>\n",
|
|
" <td></td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>coord</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no parent_id node_id STOS_NO phase_no ring_type inc_edge_id \\\n",
|
|
"0 178 i3 c30 0 1 A \n",
|
|
"1 178 i3 c30 0 1 B \n",
|
|
"2 178 i3 c30 0 2 A 571542116_01 \n",
|
|
"3 178 i3 c30 0 2 B 571542116_02.96 \n",
|
|
"4 178 i3 c30 0 3 A 571542116_01 \n",
|
|
"5 178 i3 c30 0 3 B 571542116_02.96 \n",
|
|
"6 178 i3 c30 0 4 A 571542116_01 \n",
|
|
"7 178 i3 c30 0 4 B 571542116_02.96 \n",
|
|
"\n",
|
|
" out_edge_id turn_type node_type \n",
|
|
"0 NaN coord \n",
|
|
"1 NaN coord \n",
|
|
"2 -571542116_02.96 S coord \n",
|
|
"3 571542116_02.164 S coord \n",
|
|
"4 -571542116_02.96 S coord \n",
|
|
"5 571542116_02.164 S coord \n",
|
|
"6 -571542116_02.96 S coord \n",
|
|
"7 571542116_02.164 S coord "
|
|
]
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 연등교차로 처리\n",
|
|
"self.coord[['inc_edge_id', 'out_edge_id']] = self.coord[['inc_edge_id', 'out_edge_id']].fillna('')\n",
|
|
"self.coord['node_type'] = 'coord'\n",
|
|
"self.coord"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"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>STOS_NO</th>\n",
|
|
" <th>node_id</th>\n",
|
|
" <th>parent_id</th>\n",
|
|
" <th>inc_angle</th>\n",
|
|
" <th>out_angle</th>\n",
|
|
" <th>inc_edge_id</th>\n",
|
|
" <th>out_edge_id</th>\n",
|
|
" <th>turn_type</th>\n",
|
|
" <th>node_type</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>179.0</td>\n",
|
|
" <td>4.0</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>3.0</td>\n",
|
|
" <td>176.0</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1.0</td>\n",
|
|
" <td>95.0</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>179.0</td>\n",
|
|
" <td>271.0</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>92.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>268.0</td>\n",
|
|
" <td>358.0</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>17</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>359.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571542797_02.99</td>\n",
|
|
" <td>571542810_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>18</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>19</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>571543469_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>356.0</td>\n",
|
|
" <td>571543469_02</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>i1</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>32</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542811_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>33</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>1.0</td>\n",
|
|
" <td>176.0</td>\n",
|
|
" <td>571542811_02</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>34</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542811_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>35</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>1.0</td>\n",
|
|
" <td>176.0</td>\n",
|
|
" <td>571542811_02</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>37</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>38</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542811_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>39</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>i2</td>\n",
|
|
" <td>1.0</td>\n",
|
|
" <td>176.0</td>\n",
|
|
" <td>571542811_02</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>48</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571540304_02</td>\n",
|
|
" <td>571556450_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>49</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571556450_02</td>\n",
|
|
" <td>571540304_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571556450_02</td>\n",
|
|
" <td>571500475_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571540304_02</td>\n",
|
|
" <td>571540303_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571540303_02.21</td>\n",
|
|
" <td>571556450_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571540303_02.21</td>\n",
|
|
" <td>571500475_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>-571500475_01</td>\n",
|
|
" <td>571540303_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>i3</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>-571500475_01</td>\n",
|
|
" <td>571540304_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>64</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571500569_01</td>\n",
|
|
" <td>571500583_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>65</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>-571500569_01</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>66</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500583_02</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>67</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>68</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>69</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>70</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>71</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500569_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>72</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571500583_01</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>73</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>i8</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571500583_01</td>\n",
|
|
" <td>571500569_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>80</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571510152_02</td>\n",
|
|
" <td>-571510152_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>81</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571510152_01</td>\n",
|
|
" <td>571510152_01.65</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>82</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>83</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>i9</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>96</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571511538_02</td>\n",
|
|
" <td>571542073_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>97</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571542073_01</td>\n",
|
|
" <td>571511538_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>98</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>99</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>100</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>-571511538_02</td>\n",
|
|
" <td>571542073_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>101</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571542073_01</td>\n",
|
|
" <td>571511538_02</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>102</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>103</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>i7</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>112</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>-571542115_01</td>\n",
|
|
" <td>571500535_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>113</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>114</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>268.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571500535_02.18</td>\n",
|
|
" <td>571511538_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>115</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571500535_02.18</td>\n",
|
|
" <td>571542115_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>116</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>359.0</td>\n",
|
|
" <td>90.0</td>\n",
|
|
" <td>571511538_02.121</td>\n",
|
|
" <td>571542115_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>117</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>571511538_02.121</td>\n",
|
|
" <td>571500585_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>118</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" <td>571500585_02</td>\n",
|
|
" <td>571511538_01</td>\n",
|
|
" <td>S</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>119</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>i6</td>\n",
|
|
" <td>180.0</td>\n",
|
|
" <td>270.0</td>\n",
|
|
" <td>571500585_02</td>\n",
|
|
" <td>571500535_01</td>\n",
|
|
" <td>L</td>\n",
|
|
" <td>normal</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type STOS_NO node_id parent_id inc_angle \\\n",
|
|
"0 175 1 A 0 i0 i0 179.0 \n",
|
|
"1 175 1 B 0 i0 i0 3.0 \n",
|
|
"2 175 2 A 0 i0 i0 1.0 \n",
|
|
"3 175 2 B 0 i0 i0 179.0 \n",
|
|
"4 175 3 A 0 i0 i0 92.0 \n",
|
|
"5 175 3 B 0 i0 i0 90.0 \n",
|
|
"6 175 4 A 0 i0 i0 268.0 \n",
|
|
"7 175 4 B 0 i0 i0 270.0 \n",
|
|
"16 176 1 A 0 i1 i1 180.0 \n",
|
|
"17 176 1 B 0 i1 i1 359.0 \n",
|
|
"18 176 2 A 0 i1 i1 180.0 \n",
|
|
"19 176 2 B 0 i1 i1 180.0 \n",
|
|
"20 176 3 A 0 i1 i1 270.0 \n",
|
|
"21 176 3 B 0 i1 i1 NaN \n",
|
|
"32 177 1 A 0 i2 i2 180.0 \n",
|
|
"33 177 1 B 0 i2 i2 1.0 \n",
|
|
"34 177 2 A 0 i2 i2 180.0 \n",
|
|
"35 177 2 B 0 i2 i2 1.0 \n",
|
|
"36 177 3 A 0 i2 i2 NaN \n",
|
|
"37 177 3 B 0 i2 i2 NaN \n",
|
|
"38 177 4 A 0 i2 i2 180.0 \n",
|
|
"39 177 4 B 0 i2 i2 1.0 \n",
|
|
"48 178 1 A 0 i3 i3 180.0 \n",
|
|
"49 178 1 B 0 i3 i3 0.0 \n",
|
|
"50 178 2 A 0 i3 i3 0.0 \n",
|
|
"51 178 2 B 0 i3 i3 180.0 \n",
|
|
"52 178 3 A 0 i3 i3 270.0 \n",
|
|
"53 178 3 B 0 i3 i3 270.0 \n",
|
|
"54 178 4 A 0 i3 i3 90.0 \n",
|
|
"55 178 4 B 0 i3 i3 90.0 \n",
|
|
"64 201 1 A 0 i8 i8 180.0 \n",
|
|
"65 201 1 B 0 i8 i8 180.0 \n",
|
|
"66 201 2 A 0 i8 i8 270.0 \n",
|
|
"67 201 2 B 0 i8 i8 270.0 \n",
|
|
"68 201 3 A 0 i8 i8 90.0 \n",
|
|
"69 201 3 B 0 i8 i8 270.0 \n",
|
|
"70 201 4 A 0 i8 i8 90.0 \n",
|
|
"71 201 4 B 0 i8 i8 90.0 \n",
|
|
"72 201 5 A 0 i8 i8 0.0 \n",
|
|
"73 201 5 B 0 i8 i8 0.0 \n",
|
|
"80 202 1 A 0 i9 i9 90.0 \n",
|
|
"81 202 1 B 0 i9 i9 270.0 \n",
|
|
"82 202 2 A 0 i9 i9 NaN \n",
|
|
"83 202 2 B 0 i9 i9 NaN \n",
|
|
"96 206 1 A 0 i7 i7 180.0 \n",
|
|
"97 206 1 B 0 i7 i7 0.0 \n",
|
|
"98 206 2 A 0 i7 i7 NaN \n",
|
|
"99 206 2 B 0 i7 i7 NaN \n",
|
|
"100 206 3 A 0 i7 i7 180.0 \n",
|
|
"101 206 3 B 0 i7 i7 0.0 \n",
|
|
"102 206 4 A 0 i7 i7 NaN \n",
|
|
"103 206 4 B 0 i7 i7 NaN \n",
|
|
"112 210 1 A 0 i6 i6 90.0 \n",
|
|
"113 210 1 B 0 i6 i6 NaN \n",
|
|
"114 210 2 A 0 i6 i6 268.0 \n",
|
|
"115 210 2 B 0 i6 i6 270.0 \n",
|
|
"116 210 3 A 0 i6 i6 359.0 \n",
|
|
"117 210 3 B 0 i6 i6 0.0 \n",
|
|
"118 210 4 A 0 i6 i6 180.0 \n",
|
|
"119 210 4 B 0 i6 i6 180.0 \n",
|
|
"\n",
|
|
" out_angle inc_edge_id out_edge_id turn_type node_type \n",
|
|
"0 4.0 -571542797_02 571500487_01 S normal \n",
|
|
"1 176.0 -571500487_01 571542797_02 S normal \n",
|
|
"2 95.0 -571500487_01 571545870_01 L normal \n",
|
|
"3 271.0 -571542797_02 571510153_01 L normal \n",
|
|
"4 270.0 571545870_02 571510153_01 S normal \n",
|
|
"5 180.0 571545870_02 571542797_02 L normal \n",
|
|
"6 358.0 571510153_02 571500487_01 L normal \n",
|
|
"7 90.0 571510153_02 571545870_01 S normal \n",
|
|
"16 0.0 -571542810_01 -571542797_02.99 S normal \n",
|
|
"17 180.0 571542797_02.99 571542810_01 S normal \n",
|
|
"18 0.0 -571542810_01 -571542797_02.99 S normal \n",
|
|
"19 270.0 -571542810_01 571543469_01 L normal \n",
|
|
"20 356.0 571543469_02 -571542797_02.99 L normal \n",
|
|
"21 NaN NaN NaN NaN normal \n",
|
|
"32 0.0 -571542809_01 571542811_01 S normal \n",
|
|
"33 176.0 571542811_02 571542809_01 S normal \n",
|
|
"34 0.0 -571542809_01 571542811_01 S normal \n",
|
|
"35 176.0 571542811_02 571542809_01 S normal \n",
|
|
"36 NaN NaN NaN NaN normal \n",
|
|
"37 NaN NaN NaN NaN normal \n",
|
|
"38 0.0 -571542809_01 571542811_01 S normal \n",
|
|
"39 176.0 571542811_02 571542809_01 S normal \n",
|
|
"48 0.0 571540304_02 571556450_01 S normal \n",
|
|
"49 180.0 571556450_02 571540304_01 S normal \n",
|
|
"50 90.0 571556450_02 571500475_01 L normal \n",
|
|
"51 270.0 571540304_02 571540303_01 L normal \n",
|
|
"52 0.0 571540303_02.21 571556450_01 L normal \n",
|
|
"53 90.0 571540303_02.21 571500475_01 S normal \n",
|
|
"54 270.0 -571500475_01 571540303_01 S normal \n",
|
|
"55 180.0 -571500475_01 571540304_01 L normal \n",
|
|
"64 0.0 -571500569_01 571500583_02 S normal \n",
|
|
"65 270.0 -571500569_01 571500618_01 L normal \n",
|
|
"66 0.0 571500618_02 571500583_02 L normal \n",
|
|
"67 90.0 571500618_02 571500617_01 S normal \n",
|
|
"68 270.0 571500617_02 571500618_01 S normal \n",
|
|
"69 90.0 571500618_02 571500617_01 S normal \n",
|
|
"70 270.0 571500617_02 571500618_01 S normal \n",
|
|
"71 180.0 571500617_02 571500569_01 L normal \n",
|
|
"72 90.0 571500583_01 571500617_01 L normal \n",
|
|
"73 180.0 571500583_01 571500569_01 S normal \n",
|
|
"80 270.0 571510152_02 -571510152_01 S normal \n",
|
|
"81 90.0 571510152_01 571510152_01.65 S normal \n",
|
|
"82 NaN NaN NaN NaN normal \n",
|
|
"83 NaN NaN NaN NaN normal \n",
|
|
"96 0.0 -571511538_02 571542073_02 S normal \n",
|
|
"97 180.0 571542073_01 571511538_02 S normal \n",
|
|
"98 NaN NaN NaN NaN normal \n",
|
|
"99 NaN NaN NaN NaN normal \n",
|
|
"100 0.0 -571511538_02 571542073_02 S normal \n",
|
|
"101 180.0 571542073_01 571511538_02 S normal \n",
|
|
"102 NaN NaN NaN NaN normal \n",
|
|
"103 NaN NaN NaN NaN normal \n",
|
|
"112 270.0 -571542115_01 571500535_01 S normal \n",
|
|
"113 NaN NaN NaN NaN normal \n",
|
|
"114 0.0 571500535_02.18 571511538_01 L normal \n",
|
|
"115 90.0 571500535_02.18 571542115_01 S normal \n",
|
|
"116 90.0 571511538_02.121 571542115_01 L normal \n",
|
|
"117 180.0 571511538_02.121 571500585_01 S normal \n",
|
|
"118 0.0 571500585_02 571511538_01 S normal \n",
|
|
"119 270.0 571500585_02 571500535_01 L normal "
|
|
]
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.matcher = pd.concat([self.angle, *uangles, self.coord])\n",
|
|
"self.matcher[:60]"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "siggen",
|
|
"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.8.10"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|