{ "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophas_Aphas_Bmove_Amove_B
01751184
11752273
21753361
31753462
41754452
51761184
61762283
717633518
81771184
91772273
\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_no
01751A8
01751B4
11752A7
11752B3
21753A6
21753B1
41754A5
31754B2
51761A8
51761B4
\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_dirout_dir
01751A8
11751B4
21752A7
31752B3
41753A6
.....................
592104B3
602111A6
612111B2
622112A17NaNNaN
632112B18NaNNaN
\n", "

64 rows × 6 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179004
11751B4003176
21752A7001095
31752B3179270
41753A6090270
...........................
592104B3180270
602111A6090270
612111B2270090
622112A17NaNNaNNaNNaN
632112B18NaNNaNNaNNaN
\n", "

64 rows × 8 columns

\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "0 175 1 A 8 남 북 179 004\n", "1 175 1 B 4 북 남 003 176\n", "2 175 2 A 7 북 동 001 095\n", "3 175 2 B 3 남 서 179 270\n", "4 175 3 A 6 동 서 090 270\n", ".. ... ... ... ... ... ... ... ...\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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
51756571545870_02571510153_01i0
61757-571500487_01571545870_01i0
71758-571542797_02571500487_01i0
817517NoneNoneNoneNonei0
917518NoneNoneNoneNonei0
1017521-571500487_01571510153_01i0
1117521571510153_02571542797_02i0
1217521-571542797_02571545870_01i0
1317521571545870_02571500487_01i0
141763-571542810_01571543469_01i1
151764571542797_02.99571542810_01i1
161765571543469_02-571542797_02.99i1
171768-571542810_01-571542797_02.99i1
1817617NoneNoneNoneNonei1
1917618NoneNoneNoneNonei1
2017621571542797_02.99571543469_01i1
2117621571543469_02571542810_01i1
221771571542107_02571542809_01i2
231772-571542809_01571542107_01i2
241773-571542809_01571542809_01i2
251774571542811_02571542809_01i2
261775-571542809_01571542811_01i2
271776571542107_02571542809_01i2
281777571542811_02571542107_01i2
291778-571542809_01571542811_01i2
3017717NoneNoneNoneNonei2
3117718NoneNoneNoneNonei2
3217721571542811_02571542809_01i2
3317721-571542809_01571542809_01i2
3417721-571542809_01571542107_01i2
3517721571542107_02571542811_01i2
361781-571500475_01571540304_01i3
371782571540303_02.21571500475_01i3
381783571540304_02571540303_01i3
391784571556450_02571540304_01i3
401785571540303_02.21571556450_01i3
411786-571500475_01571540303_01i3
421787571556450_02571500475_01i3
431788571540304_02571556450_01i3
4417817NoneNoneNoneNonei3
4517818NoneNoneNoneNonei3
4617821571556450_02571540303_01i3
4717821571540303_02.21571540304_01i3
4817821571540304_02571500475_01i3
4917821-571500475_01571556450_01i3
502011571500617_02571500569_01i8
512012571500618_02571500617_01i8
522013-571500569_01571500618_01i8
532014571500583_01571500569_01i8
542015571500618_02571500583_02i8
552016571500617_02571500618_01i8
562017571500583_01571500617_01i8
572018-571500569_01571500583_02i8
5820117NoneNoneNoneNonei8
5920118NoneNoneNoneNonei8
6020121571500583_01571500618_01i8
6120121571500618_02571500569_01i8
6220121-571500569_01571500617_01i8
6320121571500617_02571500583_02i8
642022571510152_01571510152_01.65i9
652026571510152_02-571510152_01i9
6620217NoneNoneNoneNonei9
6720218NoneNoneNoneNonei9
682064571542073_01571511538_02i7
692068-571511538_02571542073_02i7
7020617NoneNoneNoneNonei7
7120618NoneNoneNoneNonei7
722101-571542115_01571500585_01i6
732102571500535_02.18571542115_01i6
742103571500585_02571500535_01i6
752104571511538_02.121571500585_01i6
762105571500535_02.18571511538_01i6
772106-571542115_01571500535_01i6
782107571511538_02.121571542115_01i6
792108571500585_02571511538_01i6
8021017NoneNoneNoneNonei6
8121018NoneNoneNoneNonei6
8221021571511538_02.121571500535_01i6
8321021571500535_02.18571500585_01i6
8421021571500585_02571542115_01i6
8521021-571542115_01571511538_01i6
862112571542116_02.96571542116_02.164c30
872116571542116_01-571542116_02.96c30
8821117NoneNoneNoneNonec30
8921118NoneNoneNoneNonec30
\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0inter_nostart_hourstart_minutedura_A1dura_A2dura_A3dura_A4dura_A5dura_A6...dura_B1dura_B2dura_B3dura_B4dura_B5dura_B6dura_B7dura_B8cycleoffset
00175003739552900...37392559000016057
11175704042553300...40422959000017040
22175904345553700...43453359000018028
3317518304648554100...46483759000019018
4417600377340000...37734000000150131
5517670379340000...37934000000170153
66176903710340000...371034000000180169
7717618303711340000...371134000000190185
88177003620682600...36206826000015035
99177704025713400...40257134000017033
1010177904327704000...43277040000018041
111117718304532773600...45327736000019049
1212178003839402300...38394023000014050
1313178703839424100...38396221000016090
1414178903839435000...38397122000017080
151517818303839445900...38398023000018075
16162010024241758170...2424175817000140133
17172017030361858180...3036185818000160132
18182019033362558180...3336255818000170134
1919201183036501858180...3650185818000180137
202020200391010000...39101000000140103
212120270461140000...46114000000160103
222220290461140000...46114000000160103
23232021830481220000...48122000000170103
2424206003335262600...33352626000012010
2525206704444262600...4444262600001407
2626206904553262600...45532626000015017
272720618304662262600...46622626000016010
2828210004329562200...244856220000150115
2929210704339652300...245865230000170131
3030210904343702400...285870240000180137
313121018304347752500...246675250000190143
32322110028970000...289700000012545
333321170281070000...2810700000013545
343421190281120000...2811200000014055
35352111830281170000...2811700000014555
\n", "

36 rows × 22 columns

\n", "
" ], "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 }