신호생성 repo (24. 1. 5 ~).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3030 lines
103 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import sumolib\n",
"import random\n",
"from tqdm import tqdm\n",
"from datetime import datetime"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [1] 이동류 매칭"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 17280/17280 [00:13<00:00, 1324.51it/s]\n"
]
},
{
"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>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>move_A</th>\n",
" <th>move_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>176</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>176</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>177</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>177</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no phas_A phas_B move_A move_B\n",
"0 175 1 1 8 4\n",
"1 175 2 2 7 3\n",
"2 175 3 3 6 1\n",
"3 175 3 4 6 2\n",
"4 175 4 4 5 2\n",
"5 176 1 1 8 4\n",
"6 176 2 2 8 3\n",
"7 176 3 3 5 18\n",
"8 177 1 1 8 4\n",
"9 177 2 2 7 3"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [이동류번호] 불러오기 (약 1분의 소요시간)\n",
"path_moves = '../../Data/tables/moves/'\n",
"csv_moves = os.listdir('../../Data/tables/moves/')\n",
"moves = [pd.read_csv(path_moves + csv_move, index_col=0) for csv_move in tqdm(csv_moves)]\n",
"match1 = pd.concat(moves).drop_duplicates().sort_values(by=['inter_no','phas_A','phas_B']).reset_index(drop=True)\n",
"match1.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>175</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>B</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>A</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no\n",
"0 175 1 A 8\n",
"0 175 1 B 4\n",
"1 175 2 A 7\n",
"1 175 2 B 3\n",
"2 175 3 A 6\n",
"2 175 3 B 1\n",
"4 175 4 A 5\n",
"3 175 4 B 2\n",
"5 176 1 A 8\n",
"5 176 1 B 4"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 계층화 (inter_no, phas_A, phas_B, move_A, move_B) -> ('inter_no', 'phase_no', 'ring_type', 'move_no')\n",
"matchA = match1[['inter_no', 'phas_A', 'move_A']].copy()\n",
"matchA.columns = ['inter_no', 'phase_no', 'move_no']\n",
"matchA['ring_type'] = 'A'\n",
"matchB = match1[['inter_no', 'phas_B', 'move_B']].copy()\n",
"matchB.columns = ['inter_no', 'phase_no', 'move_no']\n",
"matchB['ring_type'] = 'B'\n",
"match2 = pd.concat([matchA, matchB]).drop_duplicates()\n",
"match2 = match2[['inter_no', 'phase_no', 'ring_type', 'move_no']]\n",
"match2 = match2.sort_values(by=list(match2.columns))\n",
"match2.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>inc_dir</th>\n",
" <th>out_dir</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>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</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>59</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>17</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>18</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir\n",
"0 175 1 A 8 남 북\n",
"1 175 1 B 4 북 남\n",
"2 175 2 A 7 북 동\n",
"3 175 2 B 3 남 서\n",
"4 175 3 A 6 동 서\n",
".. ... ... ... ... ... ...\n",
"59 210 4 B 3 남 서\n",
"60 211 1 A 6 동 서\n",
"61 211 1 B 2 서 동\n",
"62 211 2 A 17 NaN NaN\n",
"63 211 2 B 18 NaN NaN\n",
"\n",
"[64 rows x 6 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [nema 이동류목록] 불러오기 및 병합\n",
"nema = pd.read_csv('../../Data/tables/nema.csv', encoding='cp949')\n",
"match3 = pd.merge(match2, nema, how='left', on='move_no').drop_duplicates()\n",
"match3"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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>inc_dir</th>\n",
" <th>out_dir</th>\n",
" <th>inc_angle</th>\n",
" <th>out_angle</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>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>179</td>\n",
" <td>004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>003</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>001</td>\n",
" <td>095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>179</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>090</td>\n",
" <td>270</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",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>180</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>090</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>270</td>\n",
" <td>090</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>17</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>18</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n",
"0 175 1 A 8 남 북 179 004\n",
"1 175 1 B 4 북 남 003 176\n",
"2 175 2 A 7 북 동 001 095\n",
"3 175 2 B 3 남 서 179 270\n",
"4 175 3 A 6 동 서 090 270\n",
".. ... ... ... ... ... ... ... ...\n",
"59 210 4 B 3 남 서 180 270\n",
"60 211 1 A 6 동 서 090 270\n",
"61 211 1 B 2 서 동 270 090\n",
"62 211 2 A 17 NaN NaN NaN NaN\n",
"63 211 2 B 18 NaN NaN NaN NaN\n",
"\n",
"[64 rows x 8 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [방위각정보] 불러오기, 계층화, 병합\n",
"# 불러오기\n",
"dtype_dict = {f'angle_{alph}{j}':'str' for alph in ['A', 'B'] for j in range(1,9)}\n",
"angle_original = pd.read_csv('../../Data/tables/angle.csv', index_col=0, dtype = dtype_dict)\n",
"# 계층화\n",
"angle = []\n",
"for i, row in angle_original.iterrows():\n",
" angle_codes = row[[f'angle_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
" new = pd.DataFrame({'inter_no':[row.inter_no] * 16, 'phase_no':list(range(1, 9))*2, 'ring_type':['A'] * 8 + ['B'] * 8, 'angle_code':angle_codes.to_list()})\n",
" angle.append(new)\n",
"angle = pd.concat(angle)\n",
"angle = angle.dropna().reset_index(drop=True)\n",
"# 병합\n",
"six_chars = angle.angle_code.apply(lambda x:len(x)==6)\n",
"angle.loc[six_chars,'inc_angle'] = angle.angle_code.apply(lambda x:x[:3])\n",
"angle.loc[six_chars,'out_angle'] = angle.angle_code.apply(lambda x:x[3:])\n",
"angle = angle.drop('angle_code', axis=1)\n",
"match4 = pd.merge(match3, angle, how='left', left_on=['inter_no', 'phase_no', 'ring_type'],\n",
" right_on=['inter_no', 'phase_no', 'ring_type']).drop_duplicates()\n",
"match4"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# [네트워크], [교차로-노드 매칭], [교차로정보] 불러오기 \n",
"net = sumolib.net.readNet('../../Data/networks/SN_sample.net.xml')\n",
"inter_node = pd.read_csv('../../Data/tables/inter_node.csv', index_col=0)\n",
"inter_info = pd.read_csv('../../Data/tables/inter_info.csv', index_col=0)\n",
"\n",
"inter_node1 = inter_node[inter_node.inter_type == 'parent'].drop('inter_type', axis=1)\n",
"inter_info1 = inter_info[['inter_no', 'inter_lat', 'inter_lon']]\n",
"inter = pd.merge(inter_node1, inter_info1, how='left', left_on=['inter_no'],\n",
" right_on=['inter_no']).drop_duplicates()\n",
"\n",
"inter2node = dict(zip(inter['inter_no'], inter['node_id']))\n",
"\n",
"match5 = match4.copy()\n",
"# 진입진출ID 매칭\n",
"for index, row in match5.iterrows():\n",
" node_id = inter2node[row.inter_no]\n",
" node = net.getNode(node_id)\n",
" # 교차로의 모든 (from / to) edges\n",
" inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges\n",
" out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges\n",
" # 교차로의 모든 (from / to) directions\n",
" inc_dirs = []\n",
" for inc_edge in inc_edges:\n",
" start = inc_edge.getShape()[-2]\n",
" end = inc_edge.getShape()[-1]\n",
" inc_dir = np.array(end) - np.array(start)\n",
" inc_dir = inc_dir / (inc_dir ** 2).sum() ** 0.5\n",
" inc_dirs.append(inc_dir)\n",
" out_dirs = []\n",
" for out_edge in out_edges:\n",
" start = out_edge.getShape()[0]\n",
" end = out_edge.getShape()[1]\n",
" out_dir = np.array(end) - np.array(start)\n",
" out_dir = out_dir / (out_dir ** 2).sum() ** 0.5\n",
" out_dirs.append(out_dir)\n",
" # 진입각, 진출각 불러오기\n",
" if not pd.isna(row.inc_angle):\n",
" inc_angle = int(row.inc_angle)\n",
" out_angle = int(row.out_angle)\n",
" # 방위각을 일반각으로 가공, 라디안 변환, 단위벡터로 변환\n",
" inc_angle = (-90 - inc_angle) % 360\n",
" inc_angle = inc_angle * np.pi / 180.\n",
" inc_dir_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_dir_true = np.array([np.cos(out_angle), np.sin(out_angle)])\n",
" # 매칭 엣지 반환\n",
" inc_index = np.array([np.dot(inc_dir, inc_dir_true) for inc_dir in inc_dirs]).argmax()\n",
" out_index = np.array([np.dot(out_dir, out_dir_true) for out_dir in out_dirs]).argmax()\n",
" inc_edge_id = inc_edges[inc_index].getID()\n",
" out_edge_id = out_edges[out_index].getID()\n",
" match5.at[index, 'inc_edge'] = inc_edge_id\n",
" match5.at[index, 'out_edge'] = out_edge_id\n",
"match5['node_id'] = match5['inter_no'].map(inter2node)\n",
"# match5 = match5[['inter_no', 'node_id', 'move_no', 'inc_edge', 'out_edge']]\n",
"match5 = match5.sort_values(by=['inter_no', 'move_no']).reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"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>move_no</th>\n",
" <th>inc_dir</th>\n",
" <th>out_dir</th>\n",
" <th>inc_edge</th>\n",
" <th>out_edge</th>\n",
" <th>node_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>175</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>175</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>175</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>175</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>175</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>-571500487_01</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571510153_02</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571542797_02</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571545870_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>176</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542810_01</td>\n",
" <td>571543469_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>176</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571542810_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>176</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571543469_02</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>176</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>176</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>176</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>176</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571543469_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>176</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571543469_02</td>\n",
" <td>571542810_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>177</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571542107_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>177</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>177</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>177</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542811_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>177</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>177</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571542107_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>177</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571542811_02</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>177</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>177</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>177</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571542811_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571542107_02</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>-571500475_01</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>178</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>571540304_02</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>178</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571556450_02</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>178</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>178</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>-571500475_01</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>178</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571556450_02</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>178</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>571540304_02</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>178</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>178</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571556450_02</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>571540304_02</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>-571500475_01</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>201</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571500617_02</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>201</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571500618_02</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>201</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>201</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571500583_01</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>201</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571500618_02</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>201</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571500617_02</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>201</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571500583_01</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>201</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>201</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>201</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571500583_01</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571500618_02</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571500617_02</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>64</th>\n",
" <td>202</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571510152_01</td>\n",
" <td>571510152_01.65</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>65</th>\n",
" <td>202</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571510152_02</td>\n",
" <td>-571510152_01</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66</th>\n",
" <td>202</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>67</th>\n",
" <td>202</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>68</th>\n",
" <td>206</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542073_01</td>\n",
" <td>571511538_02</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>206</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571511538_02</td>\n",
" <td>571542073_02</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>206</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>206</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>210</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>210</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>210</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>571500585_02</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>210</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>210</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>210</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>210</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>571500585_02</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>210</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>210</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>571500585_02</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>-571542115_01</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571542116_02.96</td>\n",
" <td>571542116_02.164</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>211</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571542116_01</td>\n",
" <td>-571542116_02.96</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>211</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>211</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no move_no inc_dir out_dir inc_edge out_edge \\\n",
"0 175 1 동 남 571545870_02 571542797_02 \n",
"1 175 2 서 동 571510153_02 571545870_01 \n",
"2 175 3 남 서 -571542797_02 571510153_01 \n",
"3 175 4 북 남 -571500487_01 571542797_02 \n",
"4 175 5 서 북 571510153_02 571500487_01 \n",
"5 175 6 동 서 571545870_02 571510153_01 \n",
"6 175 7 북 동 -571500487_01 571545870_01 \n",
"7 175 8 남 북 -571542797_02 571500487_01 \n",
"8 175 17 None None None None \n",
"9 175 18 None None None None \n",
"10 175 21 북 서 -571500487_01 571510153_01 \n",
"11 175 21 서 남 571510153_02 571542797_02 \n",
"12 175 21 남 동 -571542797_02 571545870_01 \n",
"13 175 21 동 북 571545870_02 571500487_01 \n",
"14 176 3 남 서 -571542810_01 571543469_01 \n",
"15 176 4 북 남 571542797_02.99 571542810_01 \n",
"16 176 5 서 북 571543469_02 -571542797_02.99 \n",
"17 176 8 남 북 -571542810_01 -571542797_02.99 \n",
"18 176 17 None None None None \n",
"19 176 18 None None None None \n",
"20 176 21 북 서 571542797_02.99 571543469_01 \n",
"21 176 21 서 남 571543469_02 571542810_01 \n",
"22 177 1 동 남 571542107_02 571542809_01 \n",
"23 177 2 서 동 -571542809_01 571542107_01 \n",
"24 177 3 남 서 -571542809_01 571542809_01 \n",
"25 177 4 북 남 571542811_02 571542809_01 \n",
"26 177 5 서 북 -571542809_01 571542811_01 \n",
"27 177 6 동 서 571542107_02 571542809_01 \n",
"28 177 7 북 동 571542811_02 571542107_01 \n",
"29 177 8 남 북 -571542809_01 571542811_01 \n",
"30 177 17 None None None None \n",
"31 177 18 None None None None \n",
"32 177 21 북 서 571542811_02 571542809_01 \n",
"33 177 21 서 남 -571542809_01 571542809_01 \n",
"34 177 21 남 동 -571542809_01 571542107_01 \n",
"35 177 21 동 북 571542107_02 571542811_01 \n",
"36 178 1 동 남 -571500475_01 571540304_01 \n",
"37 178 2 서 동 571540303_02.21 571500475_01 \n",
"38 178 3 남 서 571540304_02 571540303_01 \n",
"39 178 4 북 남 571556450_02 571540304_01 \n",
"40 178 5 서 북 571540303_02.21 571556450_01 \n",
"41 178 6 동 서 -571500475_01 571540303_01 \n",
"42 178 7 북 동 571556450_02 571500475_01 \n",
"43 178 8 남 북 571540304_02 571556450_01 \n",
"44 178 17 None None None None \n",
"45 178 18 None None None None \n",
"46 178 21 북 서 571556450_02 571540303_01 \n",
"47 178 21 서 남 571540303_02.21 571540304_01 \n",
"48 178 21 남 동 571540304_02 571500475_01 \n",
"49 178 21 동 북 -571500475_01 571556450_01 \n",
"50 201 1 동 남 571500617_02 571500569_01 \n",
"51 201 2 서 동 571500618_02 571500617_01 \n",
"52 201 3 남 서 -571500569_01 571500618_01 \n",
"53 201 4 북 남 571500583_01 571500569_01 \n",
"54 201 5 서 북 571500618_02 571500583_02 \n",
"55 201 6 동 서 571500617_02 571500618_01 \n",
"56 201 7 북 동 571500583_01 571500617_01 \n",
"57 201 8 남 북 -571500569_01 571500583_02 \n",
"58 201 17 None None None None \n",
"59 201 18 None None None None \n",
"60 201 21 북 서 571500583_01 571500618_01 \n",
"61 201 21 서 남 571500618_02 571500569_01 \n",
"62 201 21 남 동 -571500569_01 571500617_01 \n",
"63 201 21 동 북 571500617_02 571500583_02 \n",
"64 202 2 서 동 571510152_01 571510152_01.65 \n",
"65 202 6 동 서 571510152_02 -571510152_01 \n",
"66 202 17 None None None None \n",
"67 202 18 None None None None \n",
"68 206 4 북 남 571542073_01 571511538_02 \n",
"69 206 8 남 북 -571511538_02 571542073_02 \n",
"70 206 17 None None None None \n",
"71 206 18 None None None None \n",
"72 210 1 동 남 -571542115_01 571500585_01 \n",
"73 210 2 서 동 571500535_02.18 571542115_01 \n",
"74 210 3 남 서 571500585_02 571500535_01 \n",
"75 210 4 북 남 571511538_02.121 571500585_01 \n",
"76 210 5 서 북 571500535_02.18 571511538_01 \n",
"77 210 6 동 서 -571542115_01 571500535_01 \n",
"78 210 7 북 동 571511538_02.121 571542115_01 \n",
"79 210 8 남 북 571500585_02 571511538_01 \n",
"80 210 17 None None None None \n",
"81 210 18 None None None None \n",
"82 210 21 북 서 571511538_02.121 571500535_01 \n",
"83 210 21 서 남 571500535_02.18 571500585_01 \n",
"84 210 21 남 동 571500585_02 571542115_01 \n",
"85 210 21 동 북 -571542115_01 571511538_01 \n",
"86 211 2 서 동 571542116_02.96 571542116_02.164 \n",
"87 211 6 동 서 571542116_01 -571542116_02.96 \n",
"88 211 17 None None None None \n",
"89 211 18 None None None None \n",
"\n",
" node_id \n",
"0 i0 \n",
"1 i0 \n",
"2 i0 \n",
"3 i0 \n",
"4 i0 \n",
"5 i0 \n",
"6 i0 \n",
"7 i0 \n",
"8 i0 \n",
"9 i0 \n",
"10 i0 \n",
"11 i0 \n",
"12 i0 \n",
"13 i0 \n",
"14 i1 \n",
"15 i1 \n",
"16 i1 \n",
"17 i1 \n",
"18 i1 \n",
"19 i1 \n",
"20 i1 \n",
"21 i1 \n",
"22 i2 \n",
"23 i2 \n",
"24 i2 \n",
"25 i2 \n",
"26 i2 \n",
"27 i2 \n",
"28 i2 \n",
"29 i2 \n",
"30 i2 \n",
"31 i2 \n",
"32 i2 \n",
"33 i2 \n",
"34 i2 \n",
"35 i2 \n",
"36 i3 \n",
"37 i3 \n",
"38 i3 \n",
"39 i3 \n",
"40 i3 \n",
"41 i3 \n",
"42 i3 \n",
"43 i3 \n",
"44 i3 \n",
"45 i3 \n",
"46 i3 \n",
"47 i3 \n",
"48 i3 \n",
"49 i3 \n",
"50 i8 \n",
"51 i8 \n",
"52 i8 \n",
"53 i8 \n",
"54 i8 \n",
"55 i8 \n",
"56 i8 \n",
"57 i8 \n",
"58 i8 \n",
"59 i8 \n",
"60 i8 \n",
"61 i8 \n",
"62 i8 \n",
"63 i8 \n",
"64 i9 \n",
"65 i9 \n",
"66 i9 \n",
"67 i9 \n",
"68 i7 \n",
"69 i7 \n",
"70 i7 \n",
"71 i7 \n",
"72 i6 \n",
"73 i6 \n",
"74 i6 \n",
"75 i6 \n",
"76 i6 \n",
"77 i6 \n",
"78 i6 \n",
"79 i6 \n",
"80 i6 \n",
"81 i6 \n",
"82 i6 \n",
"83 i6 \n",
"84 i6 \n",
"85 i6 \n",
"86 c30 \n",
"87 c30 \n",
"88 c30 \n",
"89 c30 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 각 교차로에 대하여, 가능한 모든 이동류(1 ~ 18, 21)에 대한 진입·진출엣지ID를 지정한다.\n",
"# 모든 이동류에 대해 지정하므로, 시차제시 이전과 다른 이동류가 등장하더라도 항상 진입·진출 엣지 ID를 지정할 수 있다.\n",
"match6 = match5.copy().dropna()\n",
"match6 = match6[['inter_no', 'move_no', 'inc_dir', 'out_dir', 'inc_edge', 'out_edge', 'node_id']]\n",
"# (1) 가능한 (진입방향, 진출방향) 목록\n",
"flows = nema.dropna().apply(lambda row: (row['inc_dir'], row['out_dir']), axis=1).tolist()\n",
"# (2) 각 교차로별 방향 목록 : pdires\n",
"pdires = {}\n",
"for inter_no in match6.inter_no.unique():\n",
" dires = match6[match6.inter_no == inter_no][['inc_dir','out_dir']].values.flatten()\n",
" dires = {dire for dire in dires if type(dire)==str}\n",
" pdires[inter_no] = dires\n",
"# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id\n",
"inc2id = {}\n",
"for inter_no in match6.inter_no.unique():\n",
" for inc_dir in pdires[inter_no]:\n",
" df = match6[(match6.inter_no==inter_no) & (match6.inc_dir==inc_dir)]\n",
" inc2id[(inter_no, inc_dir)] = df.inc_edge.iloc[0]\n",
"# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id\n",
"out2id = {}\n",
"for inter_no in match6.inter_no.unique():\n",
" for out_dir in pdires[inter_no]:\n",
" df = match6[(match6.inter_no==inter_no) & (match6.out_dir==out_dir)]\n",
" out2id[(inter_no, out_dir)] = df.out_edge.iloc[0]\n",
"# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflows\n",
"pflow = {}\n",
"for inter_no in match6.inter_no.unique():\n",
" pflow[inter_no] = [flow for flow in flows if set(flow).issubset(pdires[inter_no])]\n",
"# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
"inter2node = dict(zip(match6['inter_no'], match6['node_id']))\n",
"dires_right = ['북', '서', '남', '동', '북']\n",
"matching = []\n",
"for inter_no in match6.inter_no.unique():\n",
" node_id = inter2node[inter_no]\n",
" # 좌회전과 직진\n",
" for (inc_dir, out_dir) in pflow[inter_no]:\n",
" move_no = nema[(nema.inc_dir==inc_dir) & (nema.out_dir==out_dir)].move_no.iloc[0]\n",
" inc_edge = inc2id[(inter_no, inc_dir)]\n",
" out_edge = out2id[(inter_no, out_dir)]\n",
" new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n",
" 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n",
" 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n",
" matching.append(new_row)\n",
" # 보행신호(17), 전적색(18)\n",
" new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18],\n",
" 'inc_dir':[None]*2, 'out_dir':[None]*2,\n",
" 'inc_edge':[None]*2, 'out_edge':[None]*2, 'node_id':[node_id]*2})\n",
" matching.append(new_row)\n",
" # 신호우회전(21)\n",
" for d in range(len(dires_right)-1):\n",
" inc_dir = dires_right[d]\n",
" out_dir = dires_right[d+1]\n",
" if {inc_dir, out_dir}.issubset(pdires[inter_no]):\n",
" inc_edge = inc2id[(inter_no, inc_dir)]\n",
" out_edge = out2id[(inter_no, out_dir)]\n",
" new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n",
" 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n",
" 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n",
" matching.append(new_row)\n",
"matching = pd.concat(matching)\n",
"matching = matching.sort_values(by=['inter_no', 'move_no']).reset_index(drop=True)\n",
"with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n",
" display(matching)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [2] 5초 간격으로 이동류번호 수집"
]
},
{
"cell_type": "code",
"execution_count": 19,
"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>Unnamed: 0</th>\n",
" <th>inter_no</th>\n",
" <th>start_hour</th>\n",
" <th>start_minute</th>\n",
" <th>dura_A1</th>\n",
" <th>dura_A2</th>\n",
" <th>dura_A3</th>\n",
" <th>dura_A4</th>\n",
" <th>dura_A5</th>\n",
" <th>dura_A6</th>\n",
" <th>...</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>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>175</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>175</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>42</td>\n",
" <td>55</td>\n",
" <td>33</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>170</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>175</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>45</td>\n",
" <td>55</td>\n",
" <td>37</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>180</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>175</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>176</td>\n",
" <td>0</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>...</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>150</td>\n",
" <td>131</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>176</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>93</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37</td>\n",
" <td>93</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>170</td>\n",
" <td>153</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>176</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>103</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37</td>\n",
" <td>103</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>180</td>\n",
" <td>169</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>176</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>37</td>\n",
" <td>113</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37</td>\n",
" <td>113</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>190</td>\n",
" <td>185</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>177</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>36</td>\n",
" <td>20</td>\n",
" <td>68</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36</td>\n",
" <td>20</td>\n",
" <td>68</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>177</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>25</td>\n",
" <td>71</td>\n",
" <td>34</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>25</td>\n",
" <td>71</td>\n",
" <td>34</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>177</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>27</td>\n",
" <td>70</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>43</td>\n",
" <td>27</td>\n",
" <td>70</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11</td>\n",
" <td>177</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>45</td>\n",
" <td>32</td>\n",
" <td>77</td>\n",
" <td>36</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>45</td>\n",
" <td>32</td>\n",
" <td>77</td>\n",
" <td>36</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>12</td>\n",
" <td>178</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>13</td>\n",
" <td>178</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>42</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>62</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>14</td>\n",
" <td>178</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>43</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>71</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>80</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>15</td>\n",
" <td>178</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>80</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>16</td>\n",
" <td>201</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>17</td>\n",
" <td>201</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>36</td>\n",
" <td>18</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>30</td>\n",
" <td>36</td>\n",
" <td>18</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>201</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>33</td>\n",
" <td>36</td>\n",
" <td>25</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33</td>\n",
" <td>36</td>\n",
" <td>25</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>19</td>\n",
" <td>201</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>36</td>\n",
" <td>50</td>\n",
" <td>18</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36</td>\n",
" <td>50</td>\n",
" <td>18</td>\n",
" <td>58</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>137</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>20</td>\n",
" <td>202</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>21</td>\n",
" <td>202</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>114</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46</td>\n",
" <td>114</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>22</td>\n",
" <td>202</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>114</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46</td>\n",
" <td>114</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>23</td>\n",
" <td>202</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>48</td>\n",
" <td>122</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>48</td>\n",
" <td>122</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>24</td>\n",
" <td>206</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>25</td>\n",
" <td>206</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>44</td>\n",
" <td>44</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>44</td>\n",
" <td>44</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>26</td>\n",
" <td>206</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>45</td>\n",
" <td>53</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>45</td>\n",
" <td>53</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>27</td>\n",
" <td>206</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>46</td>\n",
" <td>62</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46</td>\n",
" <td>62</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>28</td>\n",
" <td>210</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>29</td>\n",
" <td>56</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>24</td>\n",
" <td>48</td>\n",
" <td>56</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>29</td>\n",
" <td>210</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>39</td>\n",
" <td>65</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>24</td>\n",
" <td>58</td>\n",
" <td>65</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>131</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>30</td>\n",
" <td>210</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>43</td>\n",
" <td>70</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28</td>\n",
" <td>58</td>\n",
" <td>70</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>137</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>31</td>\n",
" <td>210</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>43</td>\n",
" <td>47</td>\n",
" <td>75</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>24</td>\n",
" <td>66</td>\n",
" <td>75</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>32</td>\n",
" <td>211</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>28</td>\n",
" <td>97</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28</td>\n",
" <td>97</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>125</td>\n",
" <td>45</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>33</td>\n",
" <td>211</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>28</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>135</td>\n",
" <td>45</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>34</td>\n",
" <td>211</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>28</td>\n",
" <td>112</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28</td>\n",
" <td>112</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>35</td>\n",
" <td>211</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>28</td>\n",
" <td>117</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28</td>\n",
" <td>117</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>145</td>\n",
" <td>55</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>36 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 inter_no start_hour start_minute dura_A1 dura_A2 dura_A3 \\\n",
"0 0 175 0 0 37 39 55 \n",
"1 1 175 7 0 40 42 55 \n",
"2 2 175 9 0 43 45 55 \n",
"3 3 175 18 30 46 48 55 \n",
"4 4 176 0 0 37 73 40 \n",
"5 5 176 7 0 37 93 40 \n",
"6 6 176 9 0 37 103 40 \n",
"7 7 176 18 30 37 113 40 \n",
"8 8 177 0 0 36 20 68 \n",
"9 9 177 7 0 40 25 71 \n",
"10 10 177 9 0 43 27 70 \n",
"11 11 177 18 30 45 32 77 \n",
"12 12 178 0 0 38 39 40 \n",
"13 13 178 7 0 38 39 42 \n",
"14 14 178 9 0 38 39 43 \n",
"15 15 178 18 30 38 39 44 \n",
"16 16 201 0 0 24 24 17 \n",
"17 17 201 7 0 30 36 18 \n",
"18 18 201 9 0 33 36 25 \n",
"19 19 201 18 30 36 50 18 \n",
"20 20 202 0 0 39 101 0 \n",
"21 21 202 7 0 46 114 0 \n",
"22 22 202 9 0 46 114 0 \n",
"23 23 202 18 30 48 122 0 \n",
"24 24 206 0 0 33 35 26 \n",
"25 25 206 7 0 44 44 26 \n",
"26 26 206 9 0 45 53 26 \n",
"27 27 206 18 30 46 62 26 \n",
"28 28 210 0 0 43 29 56 \n",
"29 29 210 7 0 43 39 65 \n",
"30 30 210 9 0 43 43 70 \n",
"31 31 210 18 30 43 47 75 \n",
"32 32 211 0 0 28 97 0 \n",
"33 33 211 7 0 28 107 0 \n",
"34 34 211 9 0 28 112 0 \n",
"35 35 211 18 30 28 117 0 \n",
"\n",
" dura_A4 dura_A5 dura_A6 ... dura_B1 dura_B2 dura_B3 dura_B4 \\\n",
"0 29 0 0 ... 37 39 25 59 \n",
"1 33 0 0 ... 40 42 29 59 \n",
"2 37 0 0 ... 43 45 33 59 \n",
"3 41 0 0 ... 46 48 37 59 \n",
"4 0 0 0 ... 37 73 40 0 \n",
"5 0 0 0 ... 37 93 40 0 \n",
"6 0 0 0 ... 37 103 40 0 \n",
"7 0 0 0 ... 37 113 40 0 \n",
"8 26 0 0 ... 36 20 68 26 \n",
"9 34 0 0 ... 40 25 71 34 \n",
"10 40 0 0 ... 43 27 70 40 \n",
"11 36 0 0 ... 45 32 77 36 \n",
"12 23 0 0 ... 38 39 40 23 \n",
"13 41 0 0 ... 38 39 62 21 \n",
"14 50 0 0 ... 38 39 71 22 \n",
"15 59 0 0 ... 38 39 80 23 \n",
"16 58 17 0 ... 24 24 17 58 \n",
"17 58 18 0 ... 30 36 18 58 \n",
"18 58 18 0 ... 33 36 25 58 \n",
"19 58 18 0 ... 36 50 18 58 \n",
"20 0 0 0 ... 39 101 0 0 \n",
"21 0 0 0 ... 46 114 0 0 \n",
"22 0 0 0 ... 46 114 0 0 \n",
"23 0 0 0 ... 48 122 0 0 \n",
"24 26 0 0 ... 33 35 26 26 \n",
"25 26 0 0 ... 44 44 26 26 \n",
"26 26 0 0 ... 45 53 26 26 \n",
"27 26 0 0 ... 46 62 26 26 \n",
"28 22 0 0 ... 24 48 56 22 \n",
"29 23 0 0 ... 24 58 65 23 \n",
"30 24 0 0 ... 28 58 70 24 \n",
"31 25 0 0 ... 24 66 75 25 \n",
"32 0 0 0 ... 28 97 0 0 \n",
"33 0 0 0 ... 28 107 0 0 \n",
"34 0 0 0 ... 28 112 0 0 \n",
"35 0 0 0 ... 28 117 0 0 \n",
"\n",
" dura_B5 dura_B6 dura_B7 dura_B8 cycle offset \n",
"0 0 0 0 0 160 57 \n",
"1 0 0 0 0 170 40 \n",
"2 0 0 0 0 180 28 \n",
"3 0 0 0 0 190 18 \n",
"4 0 0 0 0 150 131 \n",
"5 0 0 0 0 170 153 \n",
"6 0 0 0 0 180 169 \n",
"7 0 0 0 0 190 185 \n",
"8 0 0 0 0 150 35 \n",
"9 0 0 0 0 170 33 \n",
"10 0 0 0 0 180 41 \n",
"11 0 0 0 0 190 49 \n",
"12 0 0 0 0 140 50 \n",
"13 0 0 0 0 160 90 \n",
"14 0 0 0 0 170 80 \n",
"15 0 0 0 0 180 75 \n",
"16 17 0 0 0 140 133 \n",
"17 18 0 0 0 160 132 \n",
"18 18 0 0 0 170 134 \n",
"19 18 0 0 0 180 137 \n",
"20 0 0 0 0 140 103 \n",
"21 0 0 0 0 160 103 \n",
"22 0 0 0 0 160 103 \n",
"23 0 0 0 0 170 103 \n",
"24 0 0 0 0 120 10 \n",
"25 0 0 0 0 140 7 \n",
"26 0 0 0 0 150 17 \n",
"27 0 0 0 0 160 10 \n",
"28 0 0 0 0 150 115 \n",
"29 0 0 0 0 170 131 \n",
"30 0 0 0 0 180 137 \n",
"31 0 0 0 0 190 143 \n",
"32 0 0 0 0 125 45 \n",
"33 0 0 0 0 135 45 \n",
"34 0 0 0 0 140 55 \n",
"35 0 0 0 0 145 55 \n",
"\n",
"[36 rows x 22 columns]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plan = pd.read_csv('../../Data/tables/plan.csv')\n",
"plan"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "rts",
"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
}