{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "\n", "import sys\n", "from datetime import datetime\n", "sys.path.append('../../Scripts')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "표준테이블 목록\n", "|순번|테이블명|설명|획득방법|\n", "|:-:|:-:|:-:|:-:|\n", "|1|교차로번호 |각 교차로의 이름, 위치|DB|\n", "|2|방위각정보 |각 교차로의 (현시, 링)별 진입·진출 방위각|DB|\n", "|3|이동류번호 |각 교차로의 (현시, 링)별 이동류번호|DB|\n", "|4|신호계획 |각 교차로의 신호계획|DB|\n", "|5|신호이력 |각 교차로의 (현시, 링)별 현시시간|DB|\n", "|6|교차로-노드 매칭 |교차로번호와 노드ID를 매칭정보 및 parent/child 여부|수작업|\n", "|7|유턴교차로정보 |각 유턴교차로별 부모교차로, 방향, 유턴옵션|수작업|\n", "|8|연동교차로정보 |각 연동교차로별 부모교차로, (현시, 링)별 진입진출ID|수작업|\n", "|9|NEMA 정보 |NEMA에서 정의한 이동류번호에 대한 진입·진출 방향|수작업|\n", "|10|<미정> |(현시, 링)별로 이동류번호가 두 개 이상 부여된 경우에 대비한 테이블|수작업|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "스크립트 목록\n", "|스크립트명|`preprocess_daily.py`|`generate_signal.py`|\n", "|:-:|:-:|:-:|\n", "|실행주기|매일|매5분|\n", "|목적|신호생성에 사용되는 중간산출물 생성|실시간 신호파일 생성|\n", "|산출물목록|`match.csv`
`match6.csv`
`matching.csv`
`node2num_cycles.json`|`sn_[timestamp].add.xml`|" ] }, { "attachments": { "image.png": { "image/png": "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yY933r0sbti+rXJz3569jn2iRWwYDqvhMDcJw3MsHfvMfcJxPjasp+1iSdM21Jb6B1MDN7FvMvo8cbjYsCWWZCayh+E2CFV5onpKePyqCBEQAREQARFoLQGJJRU77XHBZPO2BUWV1MC8tXekGl4JgbY4SmpnsqjTFrGkDYJGlW0cFVki20627WFcXjo2cLsffm7sMJmk/CzNzLLMTNzKyjZFVhyq5IGsQkVABERABESgJQSCEktu+d9/4a74m3s6/fn6f3dvp6/P+o++jAtFdX5vyf2nZtZEIMmh0LFszluTvCSWXFiOWKlS7ChatsSS8u6pbXsn3Tsnhk+8mnQ/IowgkCCUIJgkpcl6rKZHtKoRAREQAREQgSAJBCWW4GgX/bGm/GH8qKYv6xRH4nUFebepUY0RyOogKH15Tl8ZLCWWhPFcH/d+lVhSzn3z4el59917nkkldjC0hiE2trINQ2/KuOesjMYe2qpYBERABERABAIgILHk9+34ETruR2po5yWWBHB3qwnLBOyHv7blOHN1c5RY0o73lMSScu6vhx474pi7ZNR9xiStTNZqK9swge6o9HnPLT9EtSMCIiACIiACPSQgsURiSSXRPBJLevg0CfiS8zoKyleO81eUo8QSiSVFbahN+UdN7MpqQrayDcsAV726UMCPdTVNBERABERABConILFEYonEkspvM1XQNIE2OUpq62qBRmKJxJK+3xdEjmy9cxANt9n1wCDXyjZ5GDb97Fb9IiACIiACItAkAYklEkskljR5B6ruWgjkcRKUZ7Vo0RQTiSUSS5qyvabrPTo56zZsW1rZhrlJiqxsk+daanlAqxIREAEREAERCJSAxBKJJRJLAr051azyCORxEpQnILHkhs86BJMufe68+rpOXU/UNzd8tpJ5M/p4L7KyzfqbpqMP+00xKO8prJJEQAREQAREoH0EJJZILJFY0r77Vi3OSKApR0P1hiO4hNYXn9twpDEHODQWas/SfULUyMO/nImW/yWahKiSptlkfNQquQiIgAiIgAh0ikBvxZJfPXpwqEhwZGrgJn74IzcqTdOrz5w5+2aq9qVNV/b1aILXTj0nWn8xTTscql+iSdwGJJbIJswmWP6XeUhs+d+qVrax+rJsW//w1wWIgAiIgAiIQAECvRVLtmz5XqJY8psTr7ivfu1yNzM372697Xb3+KGn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EE3ufvSsRJOSurcJJ0N1luc4SiyRWKL7qbz7KQvLkh7BKkYEREAEREAEWklAYkkru02N7gsBVsth1RwiTW782UnHajr6y04gi3OgtM04ZaO4SyyRWDLKPnSuuns2+9NWOURABERABESgOwQklnSnL3UlHSZgosna62ejpYclmmTrbDlT1TlTdbCVWCKxpA47Ux2rnxPZnrRKLQIiIAIiIALdIiCxpFv9qavpOIFPPv2Le3DynDPR5IVTf+j4FZdzeXKCVjtBbWIisURiSZvstUttLecJrFJEQAREQAREoJ0EJJa0s9/U6p4TMNHki1uPuW/tWHASTUYbRJeclz5ei8QSiSV9tPsQrnn0k1VnRUAEREAERKDbBCSWdLt/dXU9IPD47KIz0WT25Qs9uOLslxiC06E25I9uOX/DZx2CSZc+d159XaeuJ+qbGz7rZOf57TxEdtmftsohAiIgAiIgAt0hILGkO32pK+k5ARNNvnz7cXdk4b2e01h5+SE6IWpTt5zKrP35uQ1HJCyc7bcNZLWZJtKvfJLqmwiIgAiIgAj0i4DEkn71t662BwQQShBM+Dz9/Ls9uOLxl9iEk6E65QiPsgGJJbKPUfYRyrnxT1elEAEREAEREIHuEpBY0t2+1ZX1nICJJgzRIeqkz3+hOB5qhxxkswGJJbIFs4WQt31+b+jaRUAEREAEREBiiWxABDpOgMlfmQS2z6JJyM6I2tZPp1liST/7vW33e8dfj7o8ERABERABERhJQGLJSDw6KQLdIWCiCcsOs/wwK+r05a9tDora231HWmJJ9/u4C/dxX94Ruk4REAEREAERSCIgsSSJio6JQIcJnDj7gbv+py+7PokmXXBadA3dcq4llnSrP7t6f3b4VahLEwEREAEREIGxBCSWjEWkBCLQTQKn3vpwWTTZ/djr7k8ff9rNC3VOq45o1ZHgbEBiicSSNggsnX0p6MJEQAREQAREIAUBiSUpICmJCHSZwBuLH7vb9r7q1mwcuK6KJm1wStTGfjnPEkv61d9tvb+7/O7TtYmACIiACIjAOAISS8YR0nkR6AmB353/87JosuPAGXf+g086c+VtdVTU7u461BJLutu3XbpvO/MS0IWIgAiIgAiIQA4CEktyQFMWEegyAUSTO/afiiJNuiKadMl50bV0w8mWWNKNfuz6/djld52uTQREQAREQATG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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `preprocess_daily.py`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "2. 중간산출물을 생성합니다.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:14<00:00, 1213.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n", "2-3. 직진 및 좌회전(G)을 배정했습니다.\n", "2-2. node2num_cycles.json를 저장했습니다.\n", "3. 이슈사항을 저장합니다.\n" ] } ], "source": [ "# 매일 실행하는 스크립트\n", "from preprocess_daily import DailyPreprocessor\n", "dp = DailyPreprocessor()\n", "\n", "# 1. 데이터 불러오기\n", "dp.load_data()\n", "# 2. 중간산출물 만들기\n", "dp.get_intermediates()\n", "# 3. 이슈사항 저장\n", "dp.write_issues()" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
10177331718
111774451
121781184
131782273
141783352
\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\n", "10 177 3 3 17 18\n", "11 177 4 4 5 1\n", "12 178 1 1 8 4\n", "13 178 2 2 7 3\n", "14 178 3 3 5 2" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-1 match1 : 각 교차로마다 (A현시번호, B현시번호)를 (A이동류번호, B이동류번호)로 대응시키는 테이블입니다.\n", "# 이러한 대응은 유일하지 않을 수 있지만(시차제), 임의의 대응 하나만 만들어놓아도 전체 프로세스에는 문제 없습니다.\n", "dp.match1[:15]\n", "# 이때, [표준테이블 3 : 이동류정보]를 사용합니다.\n", "# [이동류정보] 테이블은 매 1초마다 바뀌는 테이블로서, 스크립트는 5초마다 한번씩 이 테이블을 불러옵니다.\n", "# path_move = os.path.join(dp.path_tables, 'move')\n", "# move = pd.read_csv(os.path.join(path_move, os.listdir(path_move)[400]), index_col=0)\n", "# move" ] }, { "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", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_no
01751A8
01751B4
11752A7
11752B3
21753A6
21753B1
41754A5
31754B2
51761A8
51761B4
61762A8
61762B3
71763A5
71763B18
81771A8
\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\n", "6 176 2 A 8\n", "6 176 2 B 3\n", "7 176 3 A 5\n", "7 176 3 B 18\n", "8 177 1 A 8" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-2 match2 : match1을 계층화합니다. (세로로 길게 늘립니다.)\n", "dp.match2[:15]" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_noinc_dirout_dir
01751A8
11751B4
21752A7
31752B3
41753A6
51753B1
61754A5
71754B2
81761A8
91761B4
101762A8
111762B3
121763A5
131763B18NaNNaN
141771A8
\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", "5 175 3 B 1 동 남\n", "6 175 4 A 5 서 북\n", "7 175 4 B 2 서 동\n", "8 176 1 A 8 남 북\n", "9 176 1 B 4 북 남\n", "10 176 2 A 8 남 북\n", "11 176 2 B 3 남 서\n", "12 176 3 A 5 서 북\n", "13 176 3 B 18 NaN NaN\n", "14 177 1 A 8 남 북" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-3 match3 : 각 행에 진입방향, 진출방향을 부여합니다.\n", "dp.match3[:15]\n", "# 이때 [표준테이블 9 : NEMA 정보]를 사용합니다.\n", "# [NEMA 정보] 테이블은 한 번 만들어두고 계속 사용하는 테이블입니다.\n", "# dp.nema" ] }, { "cell_type": "code", "execution_count": 7, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179004
11751B4003176
21752A7001095
31752B3179270
41753A6090270
51753B1090180
61754A5268000
71754B2270090
81761A8180000
91761B4359180
101762A8180000
111762B3180270
121763A5270356
131763B18NaNNaNNaNNaN
141771A8180000
\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", "5 175 3 B 1 동 남 090 180\n", "6 175 4 A 5 서 북 268 000\n", "7 175 4 B 2 서 동 270 090\n", "8 176 1 A 8 남 북 180 000\n", "9 176 1 B 4 북 남 359 180\n", "10 176 2 A 8 남 북 180 000\n", "11 176 2 B 3 남 서 180 270\n", "12 176 3 A 5 서 북 270 356\n", "13 176 3 B 18 NaN NaN NaN NaN\n", "14 177 1 A 8 남 북 180 000" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-4 match4 : 각 행에 진입각도, 진출각도를 부여합니다.\n", "dp.match4[:15]\n", "# 이때 [표준테이블 2 : 방위각정보]를 사용합니다.\n", "# [방위각정보] 테이블은 하루에 한 번씩 업데이트되는 테이블입니다.\n", "# dp.angle" ] }, { "cell_type": "code", "execution_count": 8, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
01751A8179004-571542797_02571500487_01i0
11751B4003176-571500487_01571542797_02i0
21752A7001095-571500487_01571545870_01i0
31752B3179270-571542797_02571510153_01i0
41753A6090270571545870_02571510153_01i0
51753B1090180571545870_02571542797_02i0
61754A5268000571510153_02571500487_01i0
71754B2270090571510153_02571545870_01i0
81761A8180000-571542810_01-571542797_02.99i1
91761B4359180571542797_02.99571542810_01i1
101762A8180000-571542810_01-571542797_02.99i1
111762B3180270-571542810_01571543469_01i1
121763A5270356571543469_02-571542797_02.99i1
131763B18NaNNaNNaNNaNNaNNaNi1
141771A8180000-571542809_01571542811_01i2
151771B4001176571542811_02571542809_01i2
161772A7000090571542811_02571542107_01i2
171772B3179270-571542809_01571542809_01i2
181773A17NaNNaNNaNNaNNaNNaNi2
191773B18NaNNaNNaNNaNNaNNaNi2
\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", "5 175 3 B 1 동 남 090 180 \n", "6 175 4 A 5 서 북 268 000 \n", "7 175 4 B 2 서 동 270 090 \n", "8 176 1 A 8 남 북 180 000 \n", "9 176 1 B 4 북 남 359 180 \n", "10 176 2 A 8 남 북 180 000 \n", "11 176 2 B 3 남 서 180 270 \n", "12 176 3 A 5 서 북 270 356 \n", "13 176 3 B 18 NaN NaN NaN NaN \n", "14 177 1 A 8 남 북 180 000 \n", "15 177 1 B 4 북 남 001 176 \n", "16 177 2 A 7 북 동 000 090 \n", "17 177 2 B 3 남 서 179 270 \n", "18 177 3 A 17 NaN NaN NaN NaN \n", "19 177 3 B 18 NaN NaN NaN NaN \n", "\n", " inc_edge out_edge node_id \n", "0 -571542797_02 571500487_01 i0 \n", "1 -571500487_01 571542797_02 i0 \n", "2 -571500487_01 571545870_01 i0 \n", "3 -571542797_02 571510153_01 i0 \n", "4 571545870_02 571510153_01 i0 \n", "5 571545870_02 571542797_02 i0 \n", "6 571510153_02 571500487_01 i0 \n", "7 571510153_02 571545870_01 i0 \n", "8 -571542810_01 -571542797_02.99 i1 \n", "9 571542797_02.99 571542810_01 i1 \n", "10 -571542810_01 -571542797_02.99 i1 \n", "11 -571542810_01 571543469_01 i1 \n", "12 571543469_02 -571542797_02.99 i1 \n", "13 NaN NaN i1 \n", "14 -571542809_01 571542811_01 i2 \n", "15 571542811_02 571542809_01 i2 \n", "16 571542811_02 571542107_01 i2 \n", "17 -571542809_01 571542809_01 i2 \n", "18 NaN NaN i2 \n", "19 NaN NaN i2 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-5 match5 : 각 행에 진입엣지id, 진출엣지id를 부여합니다.\n", "# 이때 네트워크 파일을 사용하며, shape와 코사인유사도(내적)을 사용하는 과정이 있습니다.\n", "dp.match5[:20]" ] }, { "cell_type": "code", "execution_count": 9, "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", "
inter_nonode_idphase_noring_typemove_nostate
0175i01A8grrrgrrrgGGGGrgrr
1175i01B4gGGrgrrrgrrrrrgrr
2175i02A7grrGgrrrgrrrrrgrr
3175i02B3grrrgrrrgrrrrGgrr
4175i03A6grrrgGGrgrrrrrgrr
5175i03B1grrrgrrGgrrrrrgrr
6175i04A5grrrgrrrgrrrrrgrG
7175i04B2grrrgrrrgrrrrrgGr
8175u001A8ggggrgggg
9175u001B4ggggrgggg
10175u002A7ggggGgggg
11175u002B3ggggrgggg
12175u003A6ggggrgggg
13175u003B1ggggrgggg
14175u004A5ggggrgggg
15175u004B2ggggrgggg
16176i11A8grrGGGrgrr
17176i11B4gGGrrrrgrr
18176i12A8grrGGGrgrr
19176i12B3grrrrrGgrr
20176i13A5grrrrrrgGG
21176i13B18grrrrrrgrr
22177i21A8rrgrGGG
23177i21B4GGgrrrr
24177i22A7rrgrrrr
25177i22B3rrgrrrr
26177i23A17rrgrrrr
27177i23B18rrgrrrr
28177i24A5rrgrGGG
29177i24B1rrgrrrr
30177u201A8ggrggg
31177u201B4ggrggg
32177u202A7ggGggg
33177u202B3ggrggg
34177u203A17ggrggg
35177u203B18ggrggg
36177u204A5ggrggg
37177u204B1ggrggg
38178c301A20rrrrrr
39178c301B20rrrrrr
40178c302A20GGGrrr
41178c302B20rrrGGG
42178c303A20GGGrrr
43178c303B20rrrGGG
44178c304A20GGGrrr
45178c304B20rrrGGG
46178i31A8grrrrgrrrrgGGGrgrrrr
47178i31B4gGGGrgrrrrgrrrrgrrrr
48178i32A7grrrGgrrrrgrrrrgrrrr
49178i32B3grrrrgrrrrgrrrGgrrrr
50178i33A5grrrrgrrrrgrrrrgrrrG
51178i33B2grrrrgrrrrgrrrrgGGGr
52178i34A6grrrrgGGGrgrrrrgrrrr
53178i34B1grrrrgrrrGgrrrrgrrrr
54178u301A8ggggrggg
55178u301B4ggggrggg
56178u302A7ggggrggg
57178u302B3ggggrggg
58178u303A5ggggrggg
59178u303B2ggggrggg
\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no state\n", "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n", "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n", "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n", "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n", "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr\n", "5 175 i0 3 B 1 grrrgrrGgrrrrrgrr\n", "6 175 i0 4 A 5 grrrgrrrgrrrrrgrG\n", "7 175 i0 4 B 2 grrrgrrrgrrrrrgGr\n", "8 175 u00 1 A 8 ggggrgggg\n", "9 175 u00 1 B 4 ggggrgggg\n", "10 175 u00 2 A 7 ggggGgggg\n", "11 175 u00 2 B 3 ggggrgggg\n", "12 175 u00 3 A 6 ggggrgggg\n", "13 175 u00 3 B 1 ggggrgggg\n", "14 175 u00 4 A 5 ggggrgggg\n", "15 175 u00 4 B 2 ggggrgggg\n", "16 176 i1 1 A 8 grrGGGrgrr\n", "17 176 i1 1 B 4 gGGrrrrgrr\n", "18 176 i1 2 A 8 grrGGGrgrr\n", "19 176 i1 2 B 3 grrrrrGgrr\n", "20 176 i1 3 A 5 grrrrrrgGG\n", "21 176 i1 3 B 18 grrrrrrgrr\n", "22 177 i2 1 A 8 rrgrGGG\n", "23 177 i2 1 B 4 GGgrrrr\n", "24 177 i2 2 A 7 rrgrrrr\n", "25 177 i2 2 B 3 rrgrrrr\n", "26 177 i2 3 A 17 rrgrrrr\n", "27 177 i2 3 B 18 rrgrrrr\n", "28 177 i2 4 A 5 rrgrGGG\n", "29 177 i2 4 B 1 rrgrrrr\n", "30 177 u20 1 A 8 ggrggg\n", "31 177 u20 1 B 4 ggrggg\n", "32 177 u20 2 A 7 ggGggg\n", "33 177 u20 2 B 3 ggrggg\n", "34 177 u20 3 A 17 ggrggg\n", "35 177 u20 3 B 18 ggrggg\n", "36 177 u20 4 A 5 ggrggg\n", "37 177 u20 4 B 1 ggrggg\n", "38 178 c30 1 A 20 rrrrrr\n", "39 178 c30 1 B 20 rrrrrr\n", "40 178 c30 2 A 20 GGGrrr\n", "41 178 c30 2 B 20 rrrGGG\n", "42 178 c30 3 A 20 GGGrrr\n", "43 178 c30 3 B 20 rrrGGG\n", "44 178 c30 4 A 20 GGGrrr\n", "45 178 c30 4 B 20 rrrGGG\n", "46 178 i3 1 A 8 grrrrgrrrrgGGGrgrrrr\n", "47 178 i3 1 B 4 gGGGrgrrrrgrrrrgrrrr\n", "48 178 i3 2 A 7 grrrGgrrrrgrrrrgrrrr\n", "49 178 i3 2 B 3 grrrrgrrrrgrrrGgrrrr\n", "50 178 i3 3 A 5 grrrrgrrrrgrrrrgrrrG\n", "51 178 i3 3 B 2 grrrrgrrrrgrrrrgGGGr\n", "52 178 i3 4 A 6 grrrrgGGGrgrrrrgrrrr\n", "53 178 i3 4 B 1 grrrrgrrrGgrrrrgrrrr\n", "54 178 u30 1 A 8 ggggrggg\n", "55 178 u30 1 B 4 ggggrggg\n", "56 178 u30 2 A 7 ggggrggg\n", "57 178 u30 2 B 3 ggggrggg\n", "58 178 u30 3 A 5 ggggrggg\n", "59 178 u30 3 B 2 ggggrggg" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-6 match6 : 부교차로(유턴교차로와 연동교차로)에도 진입엣지id, 진출엣지id를 부여합니다.\n", "# 부교차로의 다른 컬럼들 (inter_no ~ out_angle)은 주교차로의 값을 그대로 따릅니다.\n", "# 부교차로의 진입엣지id, 진출엣지id는 별도로 부여되지 않으면 NaN이 됩니다.\n", "# 마지막으로 노드id(네트워크에서의 junction id)도 부여됩니다.\n", "dp.match6[:60]\n", "\n", "# 이때 [표준테이블 6 : 교차로-노드 매칭]과 [표준테이블 7 : 유턴교차로정보], [표준테이블 8 : 연동교차로정보]가 사용됩니다.\n", "# dp.inter_node\n", "# dp.uturn\n", "# dp.load_tables()\n", "# dp.coord" ] }, { "cell_type": "code", "execution_count": 10, "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", "
inter_nonode_idmove_nostate
0175i01grrrgrrGgrrrrrgrr
1175i02grrrgrrrgrrrrrgGr
2175i03grrrgrrrgrrrrGgrr
3175i04gGGrgrrrgrrrrrgrr
4175i05grrrgrrrgrrrrrgrG
5175i06grrrgGGrgrrrrrgrr
6175i07grrGgrrrgrrrrrgrr
7175i08grrrgrrrgGGGGrgrr
8175i021grrrgrrrgrrrrrgrr
9175i021grrrgrrrgrrrrrgrr
10175i021grrrgrrrgrrrrrgrr
11175i021grrrgrrrgrrrrrgrr
12175u007ggggGgggg
13176i13grrrrrGgrr
14176i14gGGrrrrgrr
15176i15grrrrrrgGG
16176i18grrGGGrgrr
17176i121grrrrrrgrr
18176i121grrrrrrgrr
19177i21rrgrrrr
20177i22rrgGrrr
21177i23rrgrrrr
22177i24GGgrrrr
23177i25rrgrGGG
24177i26rrgrrrr
25177i27rrgrrrr
26177i28rrgrGGG
27177i221rrgrrrr
28177i221rrgrrrr
29177i221rrgrrrr
30177i221rrgrrrr
31177u207ggGggg
32178i31grrrrgrrrGgrrrrgrrrr
33178i32grrrrgrrrrgrrrrgGGGr
34178i33grrrrgrrrrgrrrGgrrrr
35178i34gGGGrgrrrrgrrrrgrrrr
36178i35grrrrgrrrrgrrrrgrrrG
37178i36grrrrgGGGrgrrrrgrrrr
38178i37grrrGgrrrrgrrrrgrrrr
39178i38grrrrgrrrrgGGGrgrrrr
40178i321grrrrgrrrrgrrrrgrrrr
41178i321grrrrgrrrrgrrrrgrrrr
42178i321grrrrgrrrrgrrrrgrrrr
43178i321grrrrgrrrrgrrrrgrrrr
44178u306ggggGggg
45178u318ggggGggg
46178u324gggggggG
47201i81grrrrrrGgrrrgrrr
48201i82grrrrrrrgrrrgGGr
49201i83grrrrrrrgrrGgrrr
50201i84gGGrrrrrgrrrgrrr
51201i85grrrrrrrgrrrgrrG
52201i86grrrGGGrgrrrgrrr
53201i87grrGrrrrgrrrgrrr
54201i88grrrrrrrgGGrgrrr
55201i821grrrrrrrgrrrgrrr
56201i821grrrrrrrgrrrgrrr
57201i821grrrrrrrgrrrgrrr
58201i821grrrrrrrgrrrgrrr
59202i92rrGG
\n", "
" ], "text/plain": [ " inter_no node_id move_no state\n", "0 175 i0 1 grrrgrrGgrrrrrgrr\n", "1 175 i0 2 grrrgrrrgrrrrrgGr\n", "2 175 i0 3 grrrgrrrgrrrrGgrr\n", "3 175 i0 4 gGGrgrrrgrrrrrgrr\n", "4 175 i0 5 grrrgrrrgrrrrrgrG\n", "5 175 i0 6 grrrgGGrgrrrrrgrr\n", "6 175 i0 7 grrGgrrrgrrrrrgrr\n", "7 175 i0 8 grrrgrrrgGGGGrgrr\n", "8 175 i0 21 grrrgrrrgrrrrrgrr\n", "9 175 i0 21 grrrgrrrgrrrrrgrr\n", "10 175 i0 21 grrrgrrrgrrrrrgrr\n", "11 175 i0 21 grrrgrrrgrrrrrgrr\n", "12 175 u00 7 ggggGgggg\n", "13 176 i1 3 grrrrrGgrr\n", "14 176 i1 4 gGGrrrrgrr\n", "15 176 i1 5 grrrrrrgGG\n", "16 176 i1 8 grrGGGrgrr\n", "17 176 i1 21 grrrrrrgrr\n", "18 176 i1 21 grrrrrrgrr\n", "19 177 i2 1 rrgrrrr\n", "20 177 i2 2 rrgGrrr\n", "21 177 i2 3 rrgrrrr\n", "22 177 i2 4 GGgrrrr\n", "23 177 i2 5 rrgrGGG\n", "24 177 i2 6 rrgrrrr\n", "25 177 i2 7 rrgrrrr\n", "26 177 i2 8 rrgrGGG\n", "27 177 i2 21 rrgrrrr\n", "28 177 i2 21 rrgrrrr\n", "29 177 i2 21 rrgrrrr\n", "30 177 i2 21 rrgrrrr\n", "31 177 u20 7 ggGggg\n", "32 178 i3 1 grrrrgrrrGgrrrrgrrrr\n", "33 178 i3 2 grrrrgrrrrgrrrrgGGGr\n", "34 178 i3 3 grrrrgrrrrgrrrGgrrrr\n", "35 178 i3 4 gGGGrgrrrrgrrrrgrrrr\n", "36 178 i3 5 grrrrgrrrrgrrrrgrrrG\n", "37 178 i3 6 grrrrgGGGrgrrrrgrrrr\n", "38 178 i3 7 grrrGgrrrrgrrrrgrrrr\n", "39 178 i3 8 grrrrgrrrrgGGGrgrrrr\n", "40 178 i3 21 grrrrgrrrrgrrrrgrrrr\n", "41 178 i3 21 grrrrgrrrrgrrrrgrrrr\n", "42 178 i3 21 grrrrgrrrrgrrrrgrrrr\n", "43 178 i3 21 grrrrgrrrrgrrrrgrrrr\n", "44 178 u30 6 ggggGggg\n", "45 178 u31 8 ggggGggg\n", "46 178 u32 4 gggggggG\n", "47 201 i8 1 grrrrrrGgrrrgrrr\n", "48 201 i8 2 grrrrrrrgrrrgGGr\n", "49 201 i8 3 grrrrrrrgrrGgrrr\n", "50 201 i8 4 gGGrrrrrgrrrgrrr\n", "51 201 i8 5 grrrrrrrgrrrgrrG\n", "52 201 i8 6 grrrGGGrgrrrgrrr\n", "53 201 i8 7 grrGrrrrgrrrgrrr\n", "54 201 i8 8 grrrrrrrgGGrgrrr\n", "55 201 i8 21 grrrrrrrgrrrgrrr\n", "56 201 i8 21 grrrrrrrgrrrgrrr\n", "57 201 i8 21 grrrrrrrgrrrgrrr\n", "58 201 i8 21 grrrrrrrgrrrgrrr\n", "59 202 i9 2 rrGG" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-7 matching : 부교차로(유턴교차로와 연동교차로)에도 진입엣지id, 진출엣지id를 부여합니다.\n", "# 또한, 모든 교차로에 대하여, 가능한 모든 이동류번호에 대하여 진입엣지id, 진출엣지id를 부여합니다.\n", "dp.matching[:60]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `generate_signal.py`" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\n", "5. 신호를 생성합니다.\n", "6. 이슈사항을 저장합니다.\n" ] } ], "source": [ "# 5분마다 실행하는 스크립트\n", "from generate_signals import SignalGenerator\n", "sg = SignalGenerator()\n", "\n", "# 1. 데이터 준비\n", "sg.prepare_data()\n", "# 2. 신호이력 전처리\n", "sg.process_history()\n", "# 3. 이동류정보 전처리\n", "sg.process_movement()\n", "# 4. 통합테이블 생성\n", "sg.make_histids()\n", "# 5. 신호 생성\n", "sg.get_signals()\n", "# 6. 이슈사항 저장\n", "sg.write_issues()" ] }, { "cell_type": "code", "execution_count": 12, "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", "
inter_nostart_unixdura_A1dura_A2dura_A3dura_A4dura_A5dura_A6dura_A7dura_A8dura_B1dura_B2dura_B3dura_B4dura_B5dura_B6dura_B7dura_B8cycle
18112101704414440434370240000285870240000180
181220217044144904611400000046114000000160
18131781704414480383943500000383971220000170
18142061704414510455326260000455326260000150
1815201170441452033362558180003336255818000170
18161751704414509434555370000434533590000180
18171771704414540432770400000432770400000180
18181761704414560371034000000371034000000180
18192101704414619434370240000285870240000180
182020217044146504611400000046114000000160
18212061704414660455326260000455326260000150
18221781704414651383943500000383971220000170
1823201170441469033362558180003336255818000170
18241751704414690434555370000434533590000180
18251771704414720432770400000432770400000180
\n", "
" ], "text/plain": [ " inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n", "1811 210 1704414440 43 43 70 24 0 \n", "1812 202 1704414490 46 114 0 0 0 \n", "1813 178 1704414480 38 39 43 50 0 \n", "1814 206 1704414510 45 53 26 26 0 \n", "1815 201 1704414520 33 36 25 58 18 \n", "1816 175 1704414509 43 45 55 37 0 \n", "1817 177 1704414540 43 27 70 40 0 \n", "1818 176 1704414560 37 103 40 0 0 \n", "1819 210 1704414619 43 43 70 24 0 \n", "1820 202 1704414650 46 114 0 0 0 \n", "1821 206 1704414660 45 53 26 26 0 \n", "1822 178 1704414651 38 39 43 50 0 \n", "1823 201 1704414690 33 36 25 58 18 \n", "1824 175 1704414690 43 45 55 37 0 \n", "1825 177 1704414720 43 27 70 40 0 \n", "\n", " dura_A6 dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n", "1811 0 0 0 28 58 70 24 0 \n", "1812 0 0 0 46 114 0 0 0 \n", "1813 0 0 0 38 39 71 22 0 \n", "1814 0 0 0 45 53 26 26 0 \n", "1815 0 0 0 33 36 25 58 18 \n", "1816 0 0 0 43 45 33 59 0 \n", "1817 0 0 0 43 27 70 40 0 \n", "1818 0 0 0 37 103 40 0 0 \n", "1819 0 0 0 28 58 70 24 0 \n", "1820 0 0 0 46 114 0 0 0 \n", "1821 0 0 0 45 53 26 26 0 \n", "1822 0 0 0 38 39 71 22 0 \n", "1823 0 0 0 33 36 25 58 18 \n", "1824 0 0 0 43 45 33 59 0 \n", "1825 0 0 0 43 27 70 40 0 \n", "\n", " dura_B6 dura_B7 dura_B8 cycle \n", "1811 0 0 0 180 \n", "1812 0 0 0 160 \n", "1813 0 0 0 170 \n", "1814 0 0 0 150 \n", "1815 0 0 0 170 \n", "1816 0 0 0 180 \n", "1817 0 0 0 180 \n", "1818 0 0 0 180 \n", "1819 0 0 0 180 \n", "1820 0 0 0 160 \n", "1821 0 0 0 150 \n", "1822 0 0 0 170 \n", "1823 0 0 0 170 \n", "1824 0 0 0 180 \n", "1825 0 0 0 180 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### 2. 신호이력 전처리\n", "\n", "# 2-1. rhistory : 현재시점 기준으로 최근 30분간의 신호이력을 불러옵니다.\n", "# 종료유닉스였던 것을 시작유닉스로 바꿉니다.\n", "# 나중을 위해 현재시각 + 10분의 시점에 한주기의 신호를 추가합니다.\n", "# rhistory에 모든 교차로번호가 존재하지 않으면 해당 교차로번호에 대한 신호이력을 추가합니다. (at 최근 프로그램 시작시각)\n", "sg.rhistory[:15]\n", "# 이때 [표준테이블 5 : 신호이력]을 사용합니다.\n", "# [신호이력] 테이블은 매 주기마다 업데이트되는 테이블입니다.\n", "# sg.history" ] }, { "cell_type": "code", "execution_count": 13, "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", "
inter_nostart_unixdura_A1dura_A2dura_A3dura_A4dura_A5dura_A6dura_A7dura_A8...red_A4red_B4red_A5red_B5red_A6red_B6red_A7red_B7red_A8red_B8
62101704415520434370240000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
72101704415700434370240000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
82101704415880434370240000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
92101704416060434370240000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
102101704416240434370240000...2.02.02.02.02.02.02.02.02.02.0
112101704416420434370240000...2.02.02.02.02.02.02.02.02.02.0
122101704416600434370240000...2.02.02.02.02.02.02.02.02.02.0
132101704416780434370240000...2.02.02.02.02.02.02.02.02.02.0
7202170441561046114000000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
8202170441577046114000000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
9202170441592946114000000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
10202170441609046114000000...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
11202170441625046114000000...1.01.01.01.01.01.01.01.01.01.0
12202170441641046114000000...1.01.01.01.01.01.01.01.01.01.0
13202170441657046114000000...1.01.01.01.01.01.01.01.01.01.0
\n", "

15 rows × 54 columns

\n", "
" ], "text/plain": [ " inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n", "6 210 1704415520 43 43 70 24 0 \n", "7 210 1704415700 43 43 70 24 0 \n", "8 210 1704415880 43 43 70 24 0 \n", "9 210 1704416060 43 43 70 24 0 \n", "10 210 1704416240 43 43 70 24 0 \n", "11 210 1704416420 43 43 70 24 0 \n", "12 210 1704416600 43 43 70 24 0 \n", "13 210 1704416780 43 43 70 24 0 \n", "7 202 1704415610 46 114 0 0 0 \n", "8 202 1704415770 46 114 0 0 0 \n", "9 202 1704415929 46 114 0 0 0 \n", "10 202 1704416090 46 114 0 0 0 \n", "11 202 1704416250 46 114 0 0 0 \n", "12 202 1704416410 46 114 0 0 0 \n", "13 202 1704416570 46 114 0 0 0 \n", "\n", " dura_A6 dura_A7 dura_A8 ... red_A4 red_B4 red_A5 red_B5 red_A6 \\\n", "6 0 0 0 ... NaN NaN NaN NaN NaN \n", "7 0 0 0 ... NaN NaN NaN NaN NaN \n", "8 0 0 0 ... NaN NaN NaN NaN NaN \n", "9 0 0 0 ... NaN NaN NaN NaN NaN \n", "10 0 0 0 ... 2.0 2.0 2.0 2.0 2.0 \n", "11 0 0 0 ... 2.0 2.0 2.0 2.0 2.0 \n", "12 0 0 0 ... 2.0 2.0 2.0 2.0 2.0 \n", "13 0 0 0 ... 2.0 2.0 2.0 2.0 2.0 \n", "7 0 0 0 ... NaN NaN NaN NaN NaN \n", "8 0 0 0 ... NaN NaN NaN NaN NaN \n", "9 0 0 0 ... NaN NaN NaN NaN NaN \n", "10 0 0 0 ... NaN NaN NaN NaN NaN \n", "11 0 0 0 ... 1.0 1.0 1.0 1.0 1.0 \n", "12 0 0 0 ... 1.0 1.0 1.0 1.0 1.0 \n", "13 0 0 0 ... 1.0 1.0 1.0 1.0 1.0 \n", "\n", " red_B6 red_A7 red_B7 red_A8 red_B8 \n", "6 NaN NaN NaN NaN NaN \n", "7 NaN NaN NaN NaN NaN \n", "8 NaN NaN NaN NaN NaN \n", "9 NaN NaN NaN NaN NaN \n", "10 2.0 2.0 2.0 2.0 2.0 \n", "11 2.0 2.0 2.0 2.0 2.0 \n", "12 2.0 2.0 2.0 2.0 2.0 \n", "13 2.0 2.0 2.0 2.0 2.0 \n", "7 NaN NaN NaN NaN NaN \n", "8 NaN NaN NaN NaN NaN \n", "9 NaN NaN NaN NaN NaN \n", "10 NaN NaN NaN NaN NaN \n", "11 1.0 1.0 1.0 1.0 1.0 \n", "12 1.0 1.0 1.0 1.0 1.0 \n", "13 1.0 1.0 1.0 1.0 1.0 \n", "\n", "[15 rows x 54 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-2. rhists : 참값판단프로세스\n", "# rhistory에서 각 행마다 시간차이와 현시합을 비교하여 그 차이가 5초 이내이면 참값으로 판단하고, 그렇지 않으면 거짓값으로 판단합니다.\n", "# 만약 해당 행이 거짓값이면, 다음 과정을 진행합니다.\n", "# 이전 행과의 차이가 주기의 두 배보다 크면 신호계획에서 현시값을 불러와 채워나갑니다. (그 차이가 주기보다 작거나 같아질때까지) <결측치 처리>\n", "# 이전 행과의 차이가 주기의 두 배보다 크지 않으면 해당 행을 \"삭제\"하거나 일정한 비율로 \"대체\"합니다. <이상치 처리>\n", "sg.rhists[:15]" ] }, { "cell_type": "code", "execution_count": 14, "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", "
inter_nostart_unixphas_Aphas_Bduration
021017044155201128
121017044155201215
221017044155202243
321017044155203370
421017044155204424
021017044157001128
121017044157001215
221017044157002243
321017044157003370
421017044157004424
021017044158801128
121017044158801215
221017044158802243
321017044158803370
421017044158804424
\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B duration\n", "0 210 1704415520 1 1 28\n", "1 210 1704415520 1 2 15\n", "2 210 1704415520 2 2 43\n", "3 210 1704415520 3 3 70\n", "4 210 1704415520 4 4 24\n", "0 210 1704415700 1 1 28\n", "1 210 1704415700 1 2 15\n", "2 210 1704415700 2 2 43\n", "3 210 1704415700 3 3 70\n", "4 210 1704415700 4 4 24\n", "0 210 1704415880 1 1 28\n", "1 210 1704415880 1 2 15\n", "2 210 1704415880 2 2 43\n", "3 210 1704415880 3 3 70\n", "4 210 1704415880 4 4 24" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-3. hrhists : 계층화\n", "# rhists를 계층화된 형태로 변환합니다.\n", "sg.hrhists[:15]" ] }, { "cell_type": "code", "execution_count": 15, "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", "
inter_nophas_Aphas_Bmove_Amove_Bstart_unix
020611841704412820
12062217181704412820
220633841704412820
32064417181704412820
417811841704412880
517822731704412880
617833521704412880
717844611704412880
8210116181704412880
921012621704412880
1021022521704412880
1121033741704412880
1221044831704412880
1317711841704412890
1417722731704412890
\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B start_unix\n", "0 206 1 1 8 4 1704412820\n", "1 206 2 2 17 18 1704412820\n", "2 206 3 3 8 4 1704412820\n", "3 206 4 4 17 18 1704412820\n", "4 178 1 1 8 4 1704412880\n", "5 178 2 2 7 3 1704412880\n", "6 178 3 3 5 2 1704412880\n", "7 178 4 4 6 1 1704412880\n", "8 210 1 1 6 18 1704412880\n", "9 210 1 2 6 2 1704412880\n", "10 210 2 2 5 2 1704412880\n", "11 210 3 3 7 4 1704412880\n", "12 210 4 4 8 3 1704412880\n", "13 177 1 1 8 4 1704412890\n", "14 177 2 2 7 3 1704412890" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### 3. 이동류정보 전처리\n", "\n", "# 3-1. movement\n", "# 5분간의 [이동류정보] 테이블을 모아서 concat합니다.\n", "# 이때, 신호이력에서 최근의 종료유닉스시각을 가져와서 시작유닉스시각으로 둡니다.\n", "sg.movement[:15]\n", "\n", "# 이때, [표준테이블 3 : 이동류정보]를 사용합니다.\n", "# [이동류정보] 테이블은 매 1초마다 바뀌는 테이블로서, 스크립트는 5초마다 한번씩 이 테이블을 불러옵니다.\n", "# path_move = os.path.join(dp.path_tables, 'move')\n", "# move = pd.read_csv(os.path.join(path_move, os.listdir(path_move)[400]), index_col=0)\n", "# move" ] }, { "cell_type": "code", "execution_count": 16, "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", "
inter_nophas_Aphas_Bmove_Amove_Bstart_unixUnnamed: 0
020611841704412820NaN
12062217181704412820NaN
220633841704412820NaN
32064417181704412820NaN
417811841704412880NaN
........................
9281774451170441682011.0
9291781184170441601012.0
9301782273170441601013.0
9311783352170441601014.0
9321784461170441601015.0
\n", "

933 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B start_unix Unnamed: 0\n", "0 206 1 1 8 4 1704412820 NaN\n", "1 206 2 2 17 18 1704412820 NaN\n", "2 206 3 3 8 4 1704412820 NaN\n", "3 206 4 4 17 18 1704412820 NaN\n", "4 178 1 1 8 4 1704412880 NaN\n", ".. ... ... ... ... ... ... ...\n", "928 177 4 4 5 1 1704416820 11.0\n", "929 178 1 1 8 4 1704416010 12.0\n", "930 178 2 2 7 3 1704416010 13.0\n", "931 178 3 3 5 2 1704416010 14.0\n", "932 178 4 4 6 1 1704416010 15.0\n", "\n", "[933 rows x 7 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 3-2. movement_updated\n", "# 참값판단 프로세스의 결측처리시 추가한 시작유닉스를 추가합니다.\n", "sg.movement_updated" ] }, { "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", "
inter_nostart_unixphas_Aphas_Bmove_Amove_Bdurationnode_idstate_Astate_B
1021017044158801161828i6grrrgGGGrgrrgrrrgrrrgrrrrgrrgrrr
112101704415880126215i6grrrgGGGrgrrgrrrgrrrgrrrrgrrgGGr
122101704415880225243i6grrrgrrrrgrrgrrGgrrrgrrrrgrrgGGr
132101704415880337470i6grrGgrrrrgrrgrrrgGGrgrrrrgrrgrrr
142101704415880448324i6grrrgrrrrgGGgrrrgrrrgrrrrgrrgrrr
.................................
26617617044167202283103i1grrGGGrgrrgrrrrrGgrr
26717617044167203351840i1grrrrrrgGGgrrrrrrgrr
2681761704416820118421i1grrGGGrgrrgGGrrrrgrr
2691761704416820228357i1grrGGGrgrrgrrrrrGgrr
27017617044168203351822i1grrrrrrgGGgrrrrrrgrr
\n", "

210 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B move_A move_B duration node_id \\\n", "10 210 1704415880 1 1 6 18 28 i6 \n", "11 210 1704415880 1 2 6 2 15 i6 \n", "12 210 1704415880 2 2 5 2 43 i6 \n", "13 210 1704415880 3 3 7 4 70 i6 \n", "14 210 1704415880 4 4 8 3 24 i6 \n", ".. ... ... ... ... ... ... ... ... \n", "266 176 1704416720 2 2 8 3 103 i1 \n", "267 176 1704416720 3 3 5 18 40 i1 \n", "268 176 1704416820 1 1 8 4 21 i1 \n", "269 176 1704416820 2 2 8 3 57 i1 \n", "270 176 1704416820 3 3 5 18 22 i1 \n", "\n", " state_A state_B \n", "10 grrrgGGGrgrrgrrr grrrgrrrrgrrgrrr \n", "11 grrrgGGGrgrrgrrr grrrgrrrrgrrgGGr \n", "12 grrrgrrrrgrrgrrG grrrgrrrrgrrgGGr \n", "13 grrGgrrrrgrrgrrr gGGrgrrrrgrrgrrr \n", "14 grrrgrrrrgGGgrrr grrrgrrrrgrrgrrr \n", ".. ... ... \n", "266 grrGGGrgrr grrrrrGgrr \n", "267 grrrrrrgGG grrrrrrgrr \n", "268 grrGGGrgrr gGGrrrrgrr \n", "269 grrGGGrgrr grrrrrGgrr \n", "270 grrrrrrgGG grrrrrrgrr \n", "\n", "[210 rows x 10 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### 4. 통합테이블 생성\n", "# 지금까지 만들어놓은 두 테이블 hrhists와 movement_updated를 통합합니다.\n", "# 또한, matching 테이블을 사용하여 진입엣지id와 진출엣지id를 붙입니다.\n", "\n", "# display(sg.hrhists)\n", "# display(sg.movement_updated)\n", "# display(dp.matching)\n", "\n", "# 4-1. histid (history with edge_ids)\n", "sg.histid" ] }, { "cell_type": "code", "execution_count": 18, "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", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_B
0176i11704415820118437grrGGGrgrrgGGrrrrgrr
1176i117044158202283103grrGGGrgrrgrrrrrGgrr
2176i117044158203351840grrrrrrgGGgrrrrrrgrr
3178c301704415840118438rrrrrrrrrrrr
4178c301704415840227339GGGrrrrrrGGG
.................................
401178u311704416820446117ggggrgggggggrggg
402178u321704416820118429gggggggrgggggggG
403178u321704416820227330gggggggrgggggggr
404178u321704416820335233gggggggrgggggggr
405178u321704416820446117gggggggrgggggggr
\n", "

406 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 176 i1 1704415820 1 1 8 4 37 \n", "1 176 i1 1704415820 2 2 8 3 103 \n", "2 176 i1 1704415820 3 3 5 18 40 \n", "3 178 c30 1704415840 1 1 8 4 38 \n", "4 178 c30 1704415840 2 2 7 3 39 \n", ".. ... ... ... ... ... ... ... ... \n", "401 178 u31 1704416820 4 4 6 1 17 \n", "402 178 u32 1704416820 1 1 8 4 29 \n", "403 178 u32 1704416820 2 2 7 3 30 \n", "404 178 u32 1704416820 3 3 5 2 33 \n", "405 178 u32 1704416820 4 4 6 1 17 \n", "\n", " state_A state_B \n", "0 grrGGGrgrr gGGrrrrgrr \n", "1 grrGGGrgrr grrrrrGgrr \n", "2 grrrrrrgGG grrrrrrgrr \n", "3 rrrrrr rrrrrr \n", "4 GGGrrr rrrGGG \n", ".. ... ... \n", "401 ggggrggg ggggrggg \n", "402 gggggggr gggggggG \n", "403 gggggggr gggggggr \n", "404 gggggggr gggggggr \n", "405 gggggggr gggggggr \n", "\n", "[406 rows x 10 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 4-2. histids\n", "# 이전의 histid는 주교차로에 대한 테이블이었습니다.\n", "# match6를 사용하여 부교차로(유턴, 연동)에 대한 행을 만듭니다.\n", "\n", "# sg.match6\n", "sg.histids" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'c30': ['r', 'r', 'r', 'r', 'r', 'r'],\n", " 'i0': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r'],\n", " 'i1': ['g', 'r', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r'],\n", " 'i2': ['r', 'r', 'g', 'r', 'r', 'r', 'r'],\n", " 'i3': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i6': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i7': ['r', 'r', 'r', 'g', 'g', 'r', 'r'],\n", " 'i8': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i9': ['r', 'r', 'r', 'r'],\n", " 'u00': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g', 'g'],\n", " 'u20': ['g', 'g', 'r', 'g', 'g', 'g'],\n", " 'u30': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n", " 'u31': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n", " 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'r'],\n", " 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'r']}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### 5. 신호 생성\n", "\n", "# 5-1. 신호초기화\n", "# 각 노드id에 대하여 비보호우회전신호(g)를 부여합니다.\n", "sg.node2init" ] }, { "cell_type": "code", "execution_count": 20, "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", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_Bphase_sumo
0178c301704416010118438rrrrrrrrrrrr0
1178c301704416010227339GGGrrrrrrGGG1
2178c301704416010335243GGGrrrrrrGGG2
3178c301704416010446122GGGrrrrrrGGG3
4178c301704416180118438rrrrrrrrrrrr0
....................................
233210u6017044166001161828ggggggggrggggggggr0
234210u601704416600126215ggggggggrggggggggr1
235210u601704416600225243ggggggggGggggggggr2
236210u601704416600337470ggggggggrggggggggr3
237210u601704416600448324ggggggggrggggggggr4
\n", "

238 rows × 11 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 178 c30 1704416010 1 1 8 4 38 \n", "1 178 c30 1704416010 2 2 7 3 39 \n", "2 178 c30 1704416010 3 3 5 2 43 \n", "3 178 c30 1704416010 4 4 6 1 22 \n", "4 178 c30 1704416180 1 1 8 4 38 \n", ".. ... ... ... ... ... ... ... ... \n", "233 210 u60 1704416600 1 1 6 18 28 \n", "234 210 u60 1704416600 1 2 6 2 15 \n", "235 210 u60 1704416600 2 2 5 2 43 \n", "236 210 u60 1704416600 3 3 7 4 70 \n", "237 210 u60 1704416600 4 4 8 3 24 \n", "\n", " state_A state_B phase_sumo \n", "0 rrrrrr rrrrrr 0 \n", "1 GGGrrr rrrGGG 1 \n", "2 GGGrrr rrrGGG 2 \n", "3 GGGrrr rrrGGG 3 \n", "4 rrrrrr rrrrrr 0 \n", ".. ... ... ... \n", "233 ggggggggr ggggggggr 0 \n", "234 ggggggggr ggggggggr 1 \n", "235 ggggggggG ggggggggr 2 \n", "236 ggggggggr ggggggggr 3 \n", "237 ggggggggr ggggggggr 4 \n", "\n", "[238 rows x 11 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 5-2. 녹색신호 부여\n", "# 녹색신호(G)를 부여합니다.\n", "# 각 (노드id, 시작시각, 현시번호)에 대하여 신호(state)를 부여합니다.\n", "sg.sigtable" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'SignalGenerator' object has no attribute 'Sigtable'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[21], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# 5-3. 신호 파일의 시작 및 종료시각 설정\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[43msg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSigtable\u001b[49m\n", "\u001b[1;31mAttributeError\u001b[0m: 'SignalGenerator' object has no attribute 'Sigtable'" ] } ], "source": [ "# 5-3. 신호 파일의 시작 및 종료시각 설정\n", "sg.Sigtable" ] }, { "cell_type": "code", "execution_count": null, "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", "
node_idstart_unixphase_sumodurationstatestart_dt
0c3017044180500_g33gGGGrgrrrrgGGGrgrrrr2024-01-05 10:27:30
1c3017044180500_y4gyyyrgrrrrgyyyrgrrrr2024-01-05 10:27:30
2c3017044180501__r1grrrrgrrrrgrrrrgrrrr2024-01-05 10:27:30
0c3017044180501_g34grrrGgrrrrgrrrGgrrrr2024-01-05 10:27:30
1c3017044180501_y4grrrygrrrrgrrrygrrrr2024-01-05 10:27:30
.....................
2u6017044187603__r1grrrgrrrrgrrgrrr2024-01-05 10:39:20
0u6017044187603_g65gGGGgrrrrgrrgrrr2024-01-05 10:39:20
1u6017044187603_y4gyyygrrrrgrrgrrr2024-01-05 10:39:20
2u6017044187604__r1grrrgrrrrgrrgrrr2024-01-05 10:39:20
315u6017044187604_g19grrrgrrrrgGGgrrr2024-01-05 10:39:20
\n", "

684 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state \\\n", "0 c30 1704418050 0_g 33 gGGGrgrrrrgGGGrgrrrr \n", "1 c30 1704418050 0_y 4 gyyyrgrrrrgyyyrgrrrr \n", "2 c30 1704418050 1__r 1 grrrrgrrrrgrrrrgrrrr \n", "0 c30 1704418050 1_g 34 grrrGgrrrrgrrrGgrrrr \n", "1 c30 1704418050 1_y 4 grrrygrrrrgrrrygrrrr \n", ".. ... ... ... ... ... \n", "2 u60 1704418760 3__r 1 grrrgrrrrgrrgrrr \n", "0 u60 1704418760 3_g 65 gGGGgrrrrgrrgrrr \n", "1 u60 1704418760 3_y 4 gyyygrrrrgrrgrrr \n", "2 u60 1704418760 4__r 1 grrrgrrrrgrrgrrr \n", "315 u60 1704418760 4_g 19 grrrgrrrrgGGgrrr \n", "\n", " start_dt \n", "0 2024-01-05 10:27:30 \n", "1 2024-01-05 10:27:30 \n", "2 2024-01-05 10:27:30 \n", "0 2024-01-05 10:27:30 \n", "1 2024-01-05 10:27:30 \n", ".. ... \n", "2 2024-01-05 10:39:20 \n", "0 2024-01-05 10:39:20 \n", "1 2024-01-05 10:39:20 \n", "2 2024-01-05 10:39:20 \n", "315 2024-01-05 10:39:20 \n", "\n", "[684 rows x 6 columns]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 5-4. 적색 및 황색신호 부여\n", "sg.SIGTABLE" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 5-5. 신호파일 생성\n", "# 신호파일(sn_[timestamp].add.xml)를 생성합니다." ] } ], "metadata": { "kernelspec": { "display_name": "sts", "language": "python", "name": "sts" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }