{ "cells": [ { "cell_type": "code", "execution_count": 2, "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": 3, "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:46<00:00, 368.16it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2-1. 매칭 테이블들을 생성했습니다.\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": 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", " \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": 4, "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": 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", "
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": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-2 match2 : match1을 계층화합니다. (세로로 길게 늘립니다.)\n", "dp.match2[:15]" ] }, { "cell_type": "code", "execution_count": 6, "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": 6, "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": 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
01751A8179004NaNNaNu00
11751B4003176NaNNaNu00
21752A19001095571500487_02571500487_01.32u00
31752B3179270NaNNaNu00
41753A6090270NaNNaNu00
51753B1090180NaNNaNu00
61754A5268000NaNNaNu00
71754B2270090NaNNaNu00
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
201774A5268000-571542809_01571542811_01i2
211774B1090180571542107_02571542809_01i2
01771A8180000NaNNaNu20
11771B4001176NaNNaNu20
21772A7000090NaNNaNu20
31772B3179270NaNNaNu20
41773A17NaNNaNNaNNaN571542810_01.51571542810_02u20
51773B18NaNNaNNaNNaNNaNNaNu20
61774A5268000NaNNaNu20
71774B1090180NaNNaNu20
01781A20NaNNaNNaNNaNNaNNaNc30
11781B20NaNNaNNaNNaNNaNNaNc30
21782A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
31782B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
41783A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
51783B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
61784A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
71784B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
221781A8180000571540304_02571556450_01i3
231781B4000180571556450_02571540304_01i3
241782A7000090571556450_02571500475_01i3
251782B3180270571540304_02571540303_01i3
261783A5270000571540303_02.21571556450_01i3
271783B2270090571540303_02.21571500475_01i3
281784A6090270-571500475_01571540303_01i3
291784B1090180-571500475_01571540304_01i3
01781A8180000NaNNaNu30
11781B4000180NaNNaNu30
21782A7000090NaNNaNu30
31782B3180270NaNNaNu30
41783A5270000NaNNaNu30
51783B2270090NaNNaNu30
\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", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 19 북 동 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", "20 177 4 A 5 서 북 268 000 \n", "21 177 4 B 1 동 남 090 180 \n", "0 177 1 A 8 남 북 180 000 \n", "1 177 1 B 4 북 남 001 176 \n", "2 177 2 A 7 북 동 000 090 \n", "3 177 2 B 3 남 서 179 270 \n", "4 177 3 A 17 NaN NaN NaN NaN \n", "5 177 3 B 18 NaN NaN NaN NaN \n", "6 177 4 A 5 서 북 268 000 \n", "7 177 4 B 1 동 남 090 180 \n", "0 178 1 A 20 NaN NaN NaN NaN \n", "1 178 1 B 20 NaN NaN NaN NaN \n", "2 178 2 A 20 NaN NaN NaN NaN \n", "3 178 2 B 20 NaN NaN NaN NaN \n", "4 178 3 A 20 NaN NaN NaN NaN \n", "5 178 3 B 20 NaN NaN NaN NaN \n", "6 178 4 A 20 NaN NaN NaN NaN \n", "7 178 4 B 20 NaN NaN NaN NaN \n", "22 178 1 A 8 남 북 180 000 \n", "23 178 1 B 4 북 남 000 180 \n", "24 178 2 A 7 북 동 000 090 \n", "25 178 2 B 3 남 서 180 270 \n", "26 178 3 A 5 서 북 270 000 \n", "27 178 3 B 2 서 동 270 090 \n", "28 178 4 A 6 동 서 090 270 \n", "29 178 4 B 1 동 남 090 180 \n", "0 178 1 A 8 남 북 180 000 \n", "1 178 1 B 4 북 남 000 180 \n", "2 178 2 A 7 북 동 000 090 \n", "3 178 2 B 3 남 서 180 270 \n", "4 178 3 A 5 서 북 270 000 \n", "5 178 3 B 2 서 동 270 090 \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", "0 NaN NaN u00 \n", "1 NaN NaN u00 \n", "2 571500487_02 571500487_01.32 u00 \n", "3 NaN NaN u00 \n", "4 NaN NaN u00 \n", "5 NaN NaN u00 \n", "6 NaN NaN u00 \n", "7 NaN NaN u00 \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 \n", "20 -571542809_01 571542811_01 i2 \n", "21 571542107_02 571542809_01 i2 \n", "0 NaN NaN u20 \n", "1 NaN NaN u20 \n", "2 NaN NaN u20 \n", "3 NaN NaN u20 \n", "4 571542810_01.51 571542810_02 u20 \n", "5 NaN NaN u20 \n", "6 NaN NaN u20 \n", "7 NaN NaN u20 \n", "0 NaN NaN c30 \n", "1 NaN NaN c30 \n", "2 571542116_01 -571542116_02.96 c30 \n", "3 571542116_02.96 571542116_02.164 c30 \n", "4 571542116_01 -571542116_02.96 c30 \n", "5 571542116_02.96 571542116_02.164 c30 \n", "6 571542116_01 -571542116_02.96 c30 \n", "7 571542116_02.96 571542116_02.164 c30 \n", "22 571540304_02 571556450_01 i3 \n", "23 571556450_02 571540304_01 i3 \n", "24 571556450_02 571500475_01 i3 \n", "25 571540304_02 571540303_01 i3 \n", "26 571540303_02.21 571556450_01 i3 \n", "27 571540303_02.21 571500475_01 i3 \n", "28 -571500475_01 571540303_01 i3 \n", "29 -571500475_01 571540304_01 i3 \n", "0 NaN NaN u30 \n", "1 NaN NaN u30 \n", "2 NaN NaN u30 \n", "3 NaN NaN u30 \n", "4 NaN NaN u30 \n", "5 NaN NaN u30 " ] }, "execution_count": 13, "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": 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
817521-571500487_01571510153_01i0
917521571510153_02571542797_02i0
1017521-571542797_02571545870_01i0
1117521571545870_02571500487_01i0
1217519571500487_02571500487_01.32u00
131763-571542810_01571543469_01i1
141764571542797_02.99571542810_01i1
151765571543469_02-571542797_02.99i1
161768-571542810_01-571542797_02.99i1
1717621571542797_02.99571543469_01i1
1817621571543469_02571542810_01i1
191771571542107_02571542809_01i2
201772-571542809_01571542107_01i2
211773-571542809_01571542809_01i2
221774571542811_02571542809_01i2
231775-571542809_01571542811_01i2
241776571542107_02571542809_01i2
251777571542811_02571542107_01i2
261778-571542809_01571542811_01i2
2717721571542811_02571542809_01i2
2817721-571542809_01571542809_01i2
2917721-571542809_01571542107_01i2
3017721571542107_02571542811_01i2
311781-571500475_01571540304_01i3
321782571540303_02.21571500475_01i3
331783571540304_02571540303_01i3
341784571556450_02571540304_01i3
351785571540303_02.21571556450_01i3
361786-571500475_01571540303_01i3
371787571556450_02571500475_01i3
381788571540304_02571556450_01i3
3917821571556450_02571540303_01i3
4017821571540303_02.21571540304_01i3
4117821571540304_02571500475_01i3
4217821-571500475_01571556450_01i3
4317819571556452_01571556452_02u30
4417819571500475_02571500475_01.26u31
4517819571540303_02-571540303_02u32
462011571500617_02571500569_01i8
472012571500618_02571500617_01i8
482013-571500569_01571500618_01i8
492014571500583_01571500569_01i8
502015571500618_02571500583_02i8
512016571500617_02571500618_01i8
522017571500583_01571500617_01i8
532018-571500569_01571500583_02i8
5420121571500583_01571500618_01i8
5520121571500618_02571500569_01i8
5620121-571500569_01571500617_01i8
5720121571500617_02571500583_02i8
582022571510152_01571510152_01.65i9
592026571510152_02-571510152_01i9
\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 21 북 서 -571500487_01 571510153_01 \n", "9 175 21 서 남 571510153_02 571542797_02 \n", "10 175 21 남 동 -571542797_02 571545870_01 \n", "11 175 21 동 북 571545870_02 571500487_01 \n", "12 175 19 북 동 571500487_02 571500487_01.32 \n", "13 176 3 남 서 -571542810_01 571543469_01 \n", "14 176 4 북 남 571542797_02.99 571542810_01 \n", "15 176 5 서 북 571543469_02 -571542797_02.99 \n", "16 176 8 남 북 -571542810_01 -571542797_02.99 \n", "17 176 21 북 서 571542797_02.99 571543469_01 \n", "18 176 21 서 남 571543469_02 571542810_01 \n", "19 177 1 동 남 571542107_02 571542809_01 \n", "20 177 2 서 동 -571542809_01 571542107_01 \n", "21 177 3 남 서 -571542809_01 571542809_01 \n", "22 177 4 북 남 571542811_02 571542809_01 \n", "23 177 5 서 북 -571542809_01 571542811_01 \n", "24 177 6 동 서 571542107_02 571542809_01 \n", "25 177 7 북 동 571542811_02 571542107_01 \n", "26 177 8 남 북 -571542809_01 571542811_01 \n", "27 177 21 북 서 571542811_02 571542809_01 \n", "28 177 21 서 남 -571542809_01 571542809_01 \n", "29 177 21 남 동 -571542809_01 571542107_01 \n", "30 177 21 동 북 571542107_02 571542811_01 \n", "31 178 1 동 남 -571500475_01 571540304_01 \n", "32 178 2 서 동 571540303_02.21 571500475_01 \n", "33 178 3 남 서 571540304_02 571540303_01 \n", "34 178 4 북 남 571556450_02 571540304_01 \n", "35 178 5 서 북 571540303_02.21 571556450_01 \n", "36 178 6 동 서 -571500475_01 571540303_01 \n", "37 178 7 북 동 571556450_02 571500475_01 \n", "38 178 8 남 북 571540304_02 571556450_01 \n", "39 178 21 북 서 571556450_02 571540303_01 \n", "40 178 21 서 남 571540303_02.21 571540304_01 \n", "41 178 21 남 동 571540304_02 571500475_01 \n", "42 178 21 동 북 -571500475_01 571556450_01 \n", "43 178 19 동 서 571556452_01 571556452_02 \n", "44 178 19 남 북 571500475_02 571500475_01.26 \n", "45 178 19 북 남 571540303_02 -571540303_02 \n", "46 201 1 동 남 571500617_02 571500569_01 \n", "47 201 2 서 동 571500618_02 571500617_01 \n", "48 201 3 남 서 -571500569_01 571500618_01 \n", "49 201 4 북 남 571500583_01 571500569_01 \n", "50 201 5 서 북 571500618_02 571500583_02 \n", "51 201 6 동 서 571500617_02 571500618_01 \n", "52 201 7 북 동 571500583_01 571500617_01 \n", "53 201 8 남 북 -571500569_01 571500583_02 \n", "54 201 21 북 서 571500583_01 571500618_01 \n", "55 201 21 서 남 571500618_02 571500569_01 \n", "56 201 21 남 동 -571500569_01 571500617_01 \n", "57 201 21 동 북 571500617_02 571500583_02 \n", "58 202 2 서 동 571510152_01 571510152_01.65 \n", "59 202 6 동 서 571510152_02 -571510152_01 \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 u00 \n", "13 i1 \n", "14 i1 \n", "15 i1 \n", "16 i1 \n", "17 i1 \n", "18 i1 \n", "19 i2 \n", "20 i2 \n", "21 i2 \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 i3 \n", "32 i3 \n", "33 i3 \n", "34 i3 \n", "35 i3 \n", "36 i3 \n", "37 i3 \n", "38 i3 \n", "39 i3 \n", "40 i3 \n", "41 i3 \n", "42 i3 \n", "43 u30 \n", "44 u31 \n", "45 u32 \n", "46 i8 \n", "47 i8 \n", "48 i8 \n", "49 i8 \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 i9 \n", "59 i9 " ] }, "execution_count": 12, "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": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "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": 23, "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
19091761704416540371034000000371034000000180
19101751704416540434555370000434533590000180
191120217044165704611400000046114000000160
1912201170441656033362558180003336255818000170
19132061704416610455326260000455326260000150
19142101704416600434370240000285870240000180
19151781704416690383943500000383971220000170
19161771704416700432770400000432770400000180
191720217044167294611400000046114000000160
19181761704416719371034000000371034000000180
19191751704416720434555370000434533590000180
1920201170441673033362558180003336255818000170
19212061704416760455326260000455326260000150
19222101704416780434370240000285870240000180
19231781704416860383943500000383971220000170
\n", "
" ], "text/plain": [ " inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n", "1909 176 1704416540 37 103 40 0 0 \n", "1910 175 1704416540 43 45 55 37 0 \n", "1911 202 1704416570 46 114 0 0 0 \n", "1912 201 1704416560 33 36 25 58 18 \n", "1913 206 1704416610 45 53 26 26 0 \n", "1914 210 1704416600 43 43 70 24 0 \n", "1915 178 1704416690 38 39 43 50 0 \n", "1916 177 1704416700 43 27 70 40 0 \n", "1917 202 1704416729 46 114 0 0 0 \n", "1918 176 1704416719 37 103 40 0 0 \n", "1919 175 1704416720 43 45 55 37 0 \n", "1920 201 1704416730 33 36 25 58 18 \n", "1921 206 1704416760 45 53 26 26 0 \n", "1922 210 1704416780 43 43 70 24 0 \n", "1923 178 1704416860 38 39 43 50 0 \n", "\n", " dura_A6 dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n", "1909 0 0 0 37 103 40 0 0 \n", "1910 0 0 0 43 45 33 59 0 \n", "1911 0 0 0 46 114 0 0 0 \n", "1912 0 0 0 33 36 25 58 18 \n", "1913 0 0 0 45 53 26 26 0 \n", "1914 0 0 0 28 58 70 24 0 \n", "1915 0 0 0 38 39 71 22 0 \n", "1916 0 0 0 43 27 70 40 0 \n", "1917 0 0 0 46 114 0 0 0 \n", "1918 0 0 0 37 103 40 0 0 \n", "1919 0 0 0 43 45 33 59 0 \n", "1920 0 0 0 33 36 25 58 18 \n", "1921 0 0 0 45 53 26 26 0 \n", "1922 0 0 0 28 58 70 24 0 \n", "1923 0 0 0 38 39 71 22 0 \n", "\n", " dura_B6 dura_B7 dura_B8 cycle \n", "1909 0 0 0 180 \n", "1910 0 0 0 180 \n", "1911 0 0 0 160 \n", "1912 0 0 0 170 \n", "1913 0 0 0 150 \n", "1914 0 0 0 180 \n", "1915 0 0 0 170 \n", "1916 0 0 0 180 \n", "1917 0 0 0 160 \n", "1918 0 0 0 180 \n", "1919 0 0 0 180 \n", "1920 0 0 0 170 \n", "1921 0 0 0 150 \n", "1922 0 0 0 180 \n", "1923 0 0 0 170 " ] }, "execution_count": 23, "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": 21, "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...dura_B4dura_B5dura_B6dura_B7dura_B8cycleD_nS_nUnnamed: 0offset
61761704417620371034000000...00000180900.0900.0NaNNaN
71761704417800371034000000...00000180900.0900.0NaNNaN
81761704417980371034000000...00000180900.0900.0NaNNaN
91761704418160371034000000...00000180900.0900.0NaNNaN
101761704418520371034000000...00000180NaNNaN6.0169.0
111761704418700371034000000...00000180NaNNaN6.0169.0
121761704418880371034000000...00000180NaNNaN6.0169.0
61751704417620434555370000...590000180900.0900.0NaNNaN
71751704417800434555370000...590000180900.0900.0NaNNaN
81751704417980434555370000...590000180900.0900.0NaNNaN
91751704418160434555370000...590000180900.0900.0NaNNaN
101751704418520434555370000...590000180NaNNaN2.028.0
111751704418700434555370000...590000180NaNNaN2.028.0
121751704418880434555370000...590000180NaNNaN2.028.0
7202170441769046114000000...00000160900.0960.0NaNNaN
\n", "

15 rows × 23 columns

\n", "
" ], "text/plain": [ " inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n", "6 176 1704417620 37 103 40 0 0 \n", "7 176 1704417800 37 103 40 0 0 \n", "8 176 1704417980 37 103 40 0 0 \n", "9 176 1704418160 37 103 40 0 0 \n", "10 176 1704418520 37 103 40 0 0 \n", "11 176 1704418700 37 103 40 0 0 \n", "12 176 1704418880 37 103 40 0 0 \n", "6 175 1704417620 43 45 55 37 0 \n", "7 175 1704417800 43 45 55 37 0 \n", "8 175 1704417980 43 45 55 37 0 \n", "9 175 1704418160 43 45 55 37 0 \n", "10 175 1704418520 43 45 55 37 0 \n", "11 175 1704418700 43 45 55 37 0 \n", "12 175 1704418880 43 45 55 37 0 \n", "7 202 1704417690 46 114 0 0 0 \n", "\n", " dura_A6 dura_A7 dura_A8 ... dura_B4 dura_B5 dura_B6 dura_B7 \\\n", "6 0 0 0 ... 0 0 0 0 \n", "7 0 0 0 ... 0 0 0 0 \n", "8 0 0 0 ... 0 0 0 0 \n", "9 0 0 0 ... 0 0 0 0 \n", "10 0 0 0 ... 0 0 0 0 \n", "11 0 0 0 ... 0 0 0 0 \n", "12 0 0 0 ... 0 0 0 0 \n", "6 0 0 0 ... 59 0 0 0 \n", "7 0 0 0 ... 59 0 0 0 \n", "8 0 0 0 ... 59 0 0 0 \n", "9 0 0 0 ... 59 0 0 0 \n", "10 0 0 0 ... 59 0 0 0 \n", "11 0 0 0 ... 59 0 0 0 \n", "12 0 0 0 ... 59 0 0 0 \n", "7 0 0 0 ... 0 0 0 0 \n", "\n", " dura_B8 cycle D_n S_n Unnamed: 0 offset \n", "6 0 180 900.0 900.0 NaN NaN \n", "7 0 180 900.0 900.0 NaN NaN \n", "8 0 180 900.0 900.0 NaN NaN \n", "9 0 180 900.0 900.0 NaN NaN \n", "10 0 180 NaN NaN 6.0 169.0 \n", "11 0 180 NaN NaN 6.0 169.0 \n", "12 0 180 NaN NaN 6.0 169.0 \n", "6 0 180 900.0 900.0 NaN NaN \n", "7 0 180 900.0 900.0 NaN NaN \n", "8 0 180 900.0 900.0 NaN NaN \n", "9 0 180 900.0 900.0 NaN NaN \n", "10 0 180 NaN NaN 2.0 28.0 \n", "11 0 180 NaN NaN 2.0 28.0 \n", "12 0 180 NaN NaN 2.0 28.0 \n", "7 0 160 900.0 960.0 NaN NaN \n", "\n", "[15 rows x 23 columns]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-2. rhists : 참값판단프로세스\n", "# rhistory에서 각 행마다 시간차이와 현시합을 비교하여 그 차이가 5초 이내이면 참값으로 판단하고, 그렇지 않으면 거짓값으로 판단합니다.\n", "# 만약 해당 행이 거짓값이면, 다음 과정을 진행합니다.\n", "# 이전 행과의 차이가 주기의 두 배보다 크면 신호계획에서 현시값을 불러와 채워나갑니다. (그 차이가 주기보다 작거나 같아질때까지) <결측치 처리>\n", "# 이전 행과의 차이가 주기의 두 배보다 크지 않으면 해당 행을 \"삭제\"하거나 일정한 비율로 \"대체\"합니다. <이상치 처리>\n", "sg.rhists[:15]" ] }, { "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", "
inter_nostart_unixphas_Aphas_Bduration
017617044176201137
1176170441762022103
217617044176203340
017617044178001137
1176170441780022103
217617044178003340
017617044179801137
1176170441798022103
217617044179803340
017617044181601137
1176170441816022103
217617044181603340
017617044185201137
1176170441852022103
217617044185203340
\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B duration\n", "0 176 1704417620 1 1 37\n", "1 176 1704417620 2 2 103\n", "2 176 1704417620 3 3 40\n", "0 176 1704417800 1 1 37\n", "1 176 1704417800 2 2 103\n", "2 176 1704417800 3 3 40\n", "0 176 1704417980 1 1 37\n", "1 176 1704417980 2 2 103\n", "2 176 1704417980 3 3 40\n", "0 176 1704418160 1 1 37\n", "1 176 1704418160 2 2 103\n", "2 176 1704418160 3 3 40\n", "0 176 1704418520 1 1 37\n", "1 176 1704418520 2 2 103\n", "2 176 1704418520 3 3 40" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-3. hrhists : 계층화\n", "# rhists를 계층화된 형태로 변환합니다.\n", "sg.hrhists[:15]" ] }, { "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", "
inter_nophas_Aphas_Bmove_Amove_Bstart_unix
017811841704414919
117822731704414919
217833521704414919
317844611704414919
420611841704414920
52062217181704414920
620633841704414920
72064417181704414920
817611841704414940
917622831704414940
10176335181704414940
1117511841704414951
1217522731704414951
1317533611704414951
1417534621704414951
\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B start_unix\n", "0 178 1 1 8 4 1704414919\n", "1 178 2 2 7 3 1704414919\n", "2 178 3 3 5 2 1704414919\n", "3 178 4 4 6 1 1704414919\n", "4 206 1 1 8 4 1704414920\n", "5 206 2 2 17 18 1704414920\n", "6 206 3 3 8 4 1704414920\n", "7 206 4 4 17 18 1704414920\n", "8 176 1 1 8 4 1704414940\n", "9 176 2 2 8 3 1704414940\n", "10 176 3 3 5 18 1704414940\n", "11 175 1 1 8 4 1704414951\n", "12 175 2 2 7 3 1704414951\n", "13 175 3 3 6 1 1704414951\n", "14 175 3 4 6 2 1704414951" ] }, "execution_count": 19, "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": 24, "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
017811841704414919NaN
117822731704414919NaN
217833521704414919NaN
317844611704414919NaN
420611841704414920NaN
........................
8912011183170441877016.0
8922012252170441877017.0
8932013362170441877018.0
8942014461170441877019.0
8952015574170441877020.0
\n", "

896 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B start_unix Unnamed: 0\n", "0 178 1 1 8 4 1704414919 NaN\n", "1 178 2 2 7 3 1704414919 NaN\n", "2 178 3 3 5 2 1704414919 NaN\n", "3 178 4 4 6 1 1704414919 NaN\n", "4 206 1 1 8 4 1704414920 NaN\n", ".. ... ... ... ... ... ... ...\n", "891 201 1 1 8 3 1704418770 16.0\n", "892 201 2 2 5 2 1704418770 17.0\n", "893 201 3 3 6 2 1704418770 18.0\n", "894 201 4 4 6 1 1704418770 19.0\n", "895 201 5 5 7 4 1704418770 20.0\n", "\n", "[896 rows x 7 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 3-2. movement_updated\n", "# 참값판단 프로세스의 결측처리시 추가한 시작유닉스를 추가합니다.\n", "sg.movement_updated" ] }, { "cell_type": "code", "execution_count": 28, "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", "
inter_nostart_unixphas_Aphas_Bduration
017617044176201137
1176170441762022103
217617044176203340
017617044178001137
1176170441780022103
..................
317717044187904440
017717044189201131
117717044189202219
217717044189203350
317717044189204428
\n", "

237 rows × 5 columns

\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B duration\n", "0 176 1704417620 1 1 37\n", "1 176 1704417620 2 2 103\n", "2 176 1704417620 3 3 40\n", "0 176 1704417800 1 1 37\n", "1 176 1704417800 2 2 103\n", ".. ... ... ... ... ...\n", "3 177 1704418790 4 4 40\n", "0 177 1704418920 1 1 31\n", "1 177 1704418920 2 2 19\n", "2 177 1704418920 3 3 50\n", "3 177 1704418920 4 4 28\n", "\n", "[237 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "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
017811841704414919NaN
117822731704414919NaN
217833521704414919NaN
317844611704414919NaN
420611841704414920NaN
........................
8912011183170441877016.0
8922012252170441877017.0
8932013362170441877018.0
8942014461170441877019.0
8952015574170441877020.0
\n", "

896 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B start_unix Unnamed: 0\n", "0 178 1 1 8 4 1704414919 NaN\n", "1 178 2 2 7 3 1704414919 NaN\n", "2 178 3 3 5 2 1704414919 NaN\n", "3 178 4 4 6 1 1704414919 NaN\n", "4 206 1 1 8 4 1704414920 NaN\n", ".. ... ... ... ... ... ... ...\n", "891 201 1 1 8 3 1704418770 16.0\n", "892 201 2 2 5 2 1704418770 17.0\n", "893 201 3 3 6 2 1704418770 18.0\n", "894 201 4 4 6 1 1704418770 19.0\n", "895 201 5 5 7 4 1704418770 20.0\n", "\n", "[896 rows x 7 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "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_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
........................
7021021571511538_02.121571500535_01i6
7121021571500535_02.18571500585_01i6
7221021571500585_02571542115_01i6
7321021-571542115_01571511538_01i6
7421019571500535_02-571500535_02u60
\n", "

75 rows × 7 columns

\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n", "0 175 1 동 남 571545870_02 571542797_02 i0\n", "1 175 2 서 동 571510153_02 571545870_01 i0\n", "2 175 3 남 서 -571542797_02 571510153_01 i0\n", "3 175 4 북 남 -571500487_01 571542797_02 i0\n", "4 175 5 서 북 571510153_02 571500487_01 i0\n", ".. ... ... ... ... ... ... ...\n", "70 210 21 북 서 571511538_02.121 571500535_01 i6\n", "71 210 21 서 남 571500535_02.18 571500585_01 i6\n", "72 210 21 남 동 571500585_02 571542115_01 i6\n", "73 210 21 동 북 -571542115_01 571511538_01 i6\n", "74 210 19 서 북 571500535_02 -571500535_02 u60\n", "\n", "[75 rows x 7 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "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_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_B
6176i117044179801137-571542810_01-571542797_02.99571542797_02.99571542810_01
7176i1170441798022103-571542810_01-571542797_02.99-571542810_01571543469_01
8176i117044179803340571543469_02-571542797_02.99NaNNaN
9176i117044181601137-571542810_01-571542797_02.99571542797_02.99571542810_01
10176i1170441816022103-571542810_01-571542797_02.99-571542810_01571543469_01
.................................
225177i217044187904440-571542809_01571542811_01571542107_02571542809_01
226177i217044189201131-571542809_01571542811_01571542811_02571542809_01
227177i217044189202219571542811_02571542107_01-571542809_01571542809_01
228177i217044189203350NaNNaNNaNNaN
229177i217044189204428-571542809_01571542811_01571542107_02571542809_01
\n", "

171 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "6 176 i1 1704417980 1 1 37 -571542810_01 \n", "7 176 i1 1704417980 2 2 103 -571542810_01 \n", "8 176 i1 1704417980 3 3 40 571543469_02 \n", "9 176 i1 1704418160 1 1 37 -571542810_01 \n", "10 176 i1 1704418160 2 2 103 -571542810_01 \n", ".. ... ... ... ... ... ... ... \n", "225 177 i2 1704418790 4 4 40 -571542809_01 \n", "226 177 i2 1704418920 1 1 31 -571542809_01 \n", "227 177 i2 1704418920 2 2 19 571542811_02 \n", "228 177 i2 1704418920 3 3 50 NaN \n", "229 177 i2 1704418920 4 4 28 -571542809_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "6 -571542797_02.99 571542797_02.99 571542810_01 \n", "7 -571542797_02.99 -571542810_01 571543469_01 \n", "8 -571542797_02.99 NaN NaN \n", "9 -571542797_02.99 571542797_02.99 571542810_01 \n", "10 -571542797_02.99 -571542810_01 571543469_01 \n", ".. ... ... ... \n", "225 571542811_01 571542107_02 571542809_01 \n", "226 571542811_01 571542811_02 571542809_01 \n", "227 571542107_01 -571542809_01 571542809_01 \n", "228 NaN NaN NaN \n", "229 571542811_01 571542107_02 571542809_01 \n", "\n", "[171 rows x 10 columns]" ] }, "execution_count": 28, "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": 35, "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_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_B
6176i117044179801137-571542810_01-571542797_02.99571542797_02.99571542810_01
7176i1170441798022103-571542810_01-571542797_02.99-571542810_01571543469_01
8176i117044179803340571543469_02-571542797_02.99NaNNaN
9176i117044181601137-571542810_01-571542797_02.99571542797_02.99571542810_01
10176i1170441816022103-571542810_01-571542797_02.99-571542810_01571543469_01
.................................
169210u6017044189201124NaNNaNNaNNaN
170210u6017044189201214NaNNaNNaNNaN
171210u6017044189202238NaNNaNNaNNaN
172210u6017044189203362NaNNaNNaNNaN
173210u6017044189204421NaNNaNNaNNaN
\n", "

321 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "6 176 i1 1704417980 1 1 37 -571542810_01 \n", "7 176 i1 1704417980 2 2 103 -571542810_01 \n", "8 176 i1 1704417980 3 3 40 571543469_02 \n", "9 176 i1 1704418160 1 1 37 -571542810_01 \n", "10 176 i1 1704418160 2 2 103 -571542810_01 \n", ".. ... ... ... ... ... ... ... \n", "169 210 u60 1704418920 1 1 24 NaN \n", "170 210 u60 1704418920 1 2 14 NaN \n", "171 210 u60 1704418920 2 2 38 NaN \n", "172 210 u60 1704418920 3 3 62 NaN \n", "173 210 u60 1704418920 4 4 21 NaN \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "6 -571542797_02.99 571542797_02.99 571542810_01 \n", "7 -571542797_02.99 -571542810_01 571543469_01 \n", "8 -571542797_02.99 NaN NaN \n", "9 -571542797_02.99 571542797_02.99 571542810_01 \n", "10 -571542797_02.99 -571542810_01 571543469_01 \n", ".. ... ... ... \n", "169 NaN NaN NaN \n", "170 NaN NaN NaN \n", "171 NaN NaN NaN \n", "172 NaN NaN NaN \n", "173 NaN NaN NaN \n", "\n", "[321 rows x 10 columns]" ] }, "execution_count": 35, "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": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'c30': ['g', 'g', 'g', 'g', 'g', 'g'],\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', 'g', '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', 'g', 'g', 'g', 'g', 'g'],\n", " 'u20': ['g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u30': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u31': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g']}" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### 5. 신호 생성\n", "\n", "# 5-1. 신호초기화\n", "# 각 노드id에 대하여 비보호우회전신호(g)를 부여합니다.\n", "sg.node2init" ] }, { "cell_type": "code", "execution_count": 37, "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
0i11704417980037gGGGGGrgrr2024-01-05 10:26:20
1i117044179801103grrGGGGgrr2024-01-05 10:26:20
2i11704417980240grrrrrrgGG2024-01-05 10:26:20
3i11704418160037gGGGGGrgrr2024-01-05 10:29:20
4i117044181601103grrGGGGgrr2024-01-05 10:29:20
.....................
316u601704418920024grrrgGGGrgrrgrrr2024-01-05 10:42:00
317u601704418920114grrrgGGGrgrrgGGr2024-01-05 10:42:00
318u601704418920238grrrgrrrrgrrgGGG2024-01-05 10:42:00
319u601704418920362gGGGgrrrrgrrgrrr2024-01-05 10:42:00
320u601704418920421grrrgrrrrgGGgrrr2024-01-05 10:42:00
\n", "

321 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state \\\n", "0 i1 1704417980 0 37 gGGGGGrgrr \n", "1 i1 1704417980 1 103 grrGGGGgrr \n", "2 i1 1704417980 2 40 grrrrrrgGG \n", "3 i1 1704418160 0 37 gGGGGGrgrr \n", "4 i1 1704418160 1 103 grrGGGGgrr \n", ".. ... ... ... ... ... \n", "316 u60 1704418920 0 24 grrrgGGGrgrrgrrr \n", "317 u60 1704418920 1 14 grrrgGGGrgrrgGGr \n", "318 u60 1704418920 2 38 grrrgrrrrgrrgGGG \n", "319 u60 1704418920 3 62 gGGGgrrrrgrrgrrr \n", "320 u60 1704418920 4 21 grrrgrrrrgGGgrrr \n", "\n", " start_dt \n", "0 2024-01-05 10:26:20 \n", "1 2024-01-05 10:26:20 \n", "2 2024-01-05 10:26:20 \n", "3 2024-01-05 10:29:20 \n", "4 2024-01-05 10:29:20 \n", ".. ... \n", "316 2024-01-05 10:42:00 \n", "317 2024-01-05 10:42:00 \n", "318 2024-01-05 10:42:00 \n", "319 2024-01-05 10:42:00 \n", "320 2024-01-05 10:42:00 \n", "\n", "[321 rows x 6 columns]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 5-2. 녹색신호 부여\n", "# 녹색신호(G)를 부여합니다.\n", "# 각 (노드id, 시작시각, 현시번호)에 대하여 신호(state)를 부여합니다.\n", "sg.sigtable" ] }, { "cell_type": "code", "execution_count": 38, "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
216c301704418050038gGGGrgrrrrgGGGrgrrrr2024-01-05 10:27:30
217c301704418050139grrrGgrrrrgrrrGgrrrr2024-01-05 10:27:30
218c301704418050243grrrrgrrrrgrrrrgGGGG2024-01-05 10:27:30
219c301704418050322grrrrgGGGGgrrrrgrrrr2024-01-05 10:27:30
220c301704418221038gGGGrgrrrrgGGGrgrrrr2024-01-05 10:30:21
.....................
311u601704418760028grrrgGGGrgrrgrrr2024-01-05 10:39:20
312u601704418760115grrrgGGGrgrrgGGr2024-01-05 10:39:20
313u601704418760243grrrgrrrrgrrgGGG2024-01-05 10:39:20
314u601704418760370gGGGgrrrrgrrgrrr2024-01-05 10:39:20
315u601704418760424grrrgrrrrgGGgrrr2024-01-05 10:39:20
\n", "

238 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state \\\n", "216 c30 1704418050 0 38 gGGGrgrrrrgGGGrgrrrr \n", "217 c30 1704418050 1 39 grrrGgrrrrgrrrGgrrrr \n", "218 c30 1704418050 2 43 grrrrgrrrrgrrrrgGGGG \n", "219 c30 1704418050 3 22 grrrrgGGGGgrrrrgrrrr \n", "220 c30 1704418221 0 38 gGGGrgrrrrgGGGrgrrrr \n", ".. ... ... ... ... ... \n", "311 u60 1704418760 0 28 grrrgGGGrgrrgrrr \n", "312 u60 1704418760 1 15 grrrgGGGrgrrgGGr \n", "313 u60 1704418760 2 43 grrrgrrrrgrrgGGG \n", "314 u60 1704418760 3 70 gGGGgrrrrgrrgrrr \n", "315 u60 1704418760 4 24 grrrgrrrrgGGgrrr \n", "\n", " start_dt \n", "216 2024-01-05 10:27:30 \n", "217 2024-01-05 10:27:30 \n", "218 2024-01-05 10:27:30 \n", "219 2024-01-05 10:27:30 \n", "220 2024-01-05 10:30:21 \n", ".. ... \n", "311 2024-01-05 10:39:20 \n", "312 2024-01-05 10:39:20 \n", "313 2024-01-05 10:39:20 \n", "314 2024-01-05 10:39:20 \n", "315 2024-01-05 10:39:20 \n", "\n", "[238 rows x 6 columns]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 5-3. 신호 파일의 시작 및 종료시각 설정\n", "sg.Sigtable" ] }, { "cell_type": "code", "execution_count": 39, "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": 40, "metadata": {}, "outputs": [], "source": [ "# 5-5. 신호파일 생성\n", "# 신호파일(sn_[timestamp].add.xml)를 생성합니다." ] } ], "metadata": { "kernelspec": { "display_name": "rts", "language": "python", "name": "rts" }, "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 }