{ "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:13<00:00, 1243.60it/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": 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": 42, "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": 42, "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": 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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": 6, "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": 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-5 match5 : 각 행에 진입엣지id, 진출엣지id를 부여합니다.\n", "# 이때 네트워크 파일을 사용하며, shape와 코사인유사도(내적)을 사용하는 과정이 있습니다.\n", "dp.match5[:20]" ] }, { "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
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
\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", "\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 " ] }, "execution_count": 8, "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[:20]\n", "\n", "# 이때 [표준테이블 6 : 교차로-노드 매칭]과 [표준테이블 7 : 유턴교차로정보], [표준테이블 8 : 연동교차로정보]가 사용됩니다.\n", "# dp.inter_node\n", "# dp.uturn\n", "# dp.load_tables()\n", "# dp.coord" ] }, { "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", "
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
\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", "\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 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2-1-7 matching : 부교차로(유턴교차로와 연동교차로)에도 진입엣지id, 진출엣지id를 부여합니다.\n", "# 또한, 모든 교차로에 대하여, 가능한 모든 이동류번호에 대하여 진입엣지id, 진출엣지id를 부여합니다.\n", "dp.matching[:20]" ] }, { "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 }