{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "import sumolib\n", "import random\n", "from tqdm import tqdm\n", "from datetime import datetime" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# A. 이동류 매칭" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 17280/17280 [00:18<00:00, 924.90it/s] \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophas_Aphas_Bmove_Amove_B
01751184
11752273
21753361
31753462
41754452
51761184
61762283
717633518
81771184
91772273
\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B\n", "0 175 1 1 8 4\n", "1 175 2 2 7 3\n", "2 175 3 3 6 1\n", "3 175 3 4 6 2\n", "4 175 4 4 5 2\n", "5 176 1 1 8 4\n", "6 176 2 2 8 3\n", "7 176 3 3 5 18\n", "8 177 1 1 8 4\n", "9 177 2 2 7 3" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# [이동류번호] 불러오기 (약 1분의 소요시간)\n", "path_moves = '../../Data/tables/moves/'\n", "csv_moves = os.listdir('../../Data/tables/moves/')\n", "moves = [pd.read_csv(path_moves + csv_move, index_col=0) for csv_move in tqdm(csv_moves)]\n", "match1 = pd.concat(moves).drop_duplicates().sort_values(by=['inter_no','phas_A','phas_B']).reset_index(drop=True)\n", "match1.head(10)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nophase_noring_typemove_no
01751A8
01751B4
11752A7
11752B3
21753A6
21753B1
41754A5
31754B2
51761A8
51761B4
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no\n", "0 175 1 A 8\n", "0 175 1 B 4\n", "1 175 2 A 7\n", "1 175 2 B 3\n", "2 175 3 A 6\n", "2 175 3 B 1\n", "4 175 4 A 5\n", "3 175 4 B 2\n", "5 176 1 A 8\n", "5 176 1 B 4" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 계층화 (inter_no, phas_A, phas_B, move_A, move_B) -> ('inter_no', 'phase_no', 'ring_type', 'move_no')\n", "matchA = match1[['inter_no', 'phas_A', 'move_A']].copy()\n", "matchA.columns = ['inter_no', 'phase_no', 'move_no']\n", "matchA['ring_type'] = 'A'\n", "matchB = match1[['inter_no', 'phas_B', 'move_B']].copy()\n", "matchB.columns = ['inter_no', 'phase_no', 'move_no']\n", "matchB['ring_type'] = 'B'\n", "match2 = pd.concat([matchA, matchB]).drop_duplicates()\n", "match2 = match2[['inter_no', 'phase_no', 'ring_type', 'move_no']]\n", "match2 = match2.sort_values(by=list(match2.columns))\n", "match2.head(10)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
151771B4
161772A7
171772B3
181773A17NaNNaN
191773B18NaNNaN
201774A5
211774B1
221781A8
231781B4
241782A7
251782B3
261783A5
271783B2
281784A6
291784B1
302011A8
312011B3
322012A5
332012B2
342013A6
352013B2
362014A6
372014B1
382015A7
392015B4
402021A6
412021B2
422022A17NaNNaN
432022B18NaNNaN
442061A8
452061B4
462062A17NaNNaN
472062B18NaNNaN
482063A8
492063B4
502064A17NaNNaN
512064B18NaNNaN
522101A6
532101B18NaNNaN
542102A5
552102B2
562103A7
572103B4
582104A8
592104B3
\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 남 북\n", "15 177 1 B 4 북 남\n", "16 177 2 A 7 북 동\n", "17 177 2 B 3 남 서\n", "18 177 3 A 17 NaN NaN\n", "19 177 3 B 18 NaN NaN\n", "20 177 4 A 5 서 북\n", "21 177 4 B 1 동 남\n", "22 178 1 A 8 남 북\n", "23 178 1 B 4 북 남\n", "24 178 2 A 7 북 동\n", "25 178 2 B 3 남 서\n", "26 178 3 A 5 서 북\n", "27 178 3 B 2 서 동\n", "28 178 4 A 6 동 서\n", "29 178 4 B 1 동 남\n", "30 201 1 A 8 남 북\n", "31 201 1 B 3 남 서\n", "32 201 2 A 5 서 북\n", "33 201 2 B 2 서 동\n", "34 201 3 A 6 동 서\n", "35 201 3 B 2 서 동\n", "36 201 4 A 6 동 서\n", "37 201 4 B 1 동 남\n", "38 201 5 A 7 북 동\n", "39 201 5 B 4 북 남\n", "40 202 1 A 6 동 서\n", "41 202 1 B 2 서 동\n", "42 202 2 A 17 NaN NaN\n", "43 202 2 B 18 NaN NaN\n", "44 206 1 A 8 남 북\n", "45 206 1 B 4 북 남\n", "46 206 2 A 17 NaN NaN\n", "47 206 2 B 18 NaN NaN\n", "48 206 3 A 8 남 북\n", "49 206 3 B 4 북 남\n", "50 206 4 A 17 NaN NaN\n", "51 206 4 B 18 NaN NaN\n", "52 210 1 A 6 동 서\n", "53 210 1 B 18 NaN NaN\n", "54 210 2 A 5 서 북\n", "55 210 2 B 2 서 동\n", "56 210 3 A 7 북 동\n", "57 210 3 B 4 북 남\n", "58 210 4 A 8 남 북\n", "59 210 4 B 3 남 서" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# [nema 이동류목록] 불러오기 및 병합\n", "nema = pd.read_csv('../../Data/tables/nema.csv', encoding='cp949')\n", "match3 = pd.merge(match2, nema, how='left', on='move_no').drop_duplicates()\n", "match3" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
151771B4001176
161772A7000090
171772B3179270
181773A17NaNNaNNaNNaN
191773B18NaNNaNNaNNaN
201774A5268000
211774B1090180
221781A8180000
231781B4000180
241782A7000090
251782B3180270
261783A5270000
271783B2270090
281784A6090270
291784B1090180
302011A8180000
312011B3180270
322012A5270000
332012B2270090
342013A6090270
352013B2270090
362014A6090270
372014B1090180
382015A7000090
392015B4000180
402021A6090270
412021B2270090
422022A17NaNNaNNaNNaN
432022B18NaNNaNNaNNaN
442061A8180000
452061B4000180
462062A17NaNNaNNaNNaN
472062B18NaNNaNNaNNaN
482063A8180000
492063B4000180
502064A17NaNNaNNaNNaN
512064B18NaNNaNNaNNaN
522101A6090270
532101B18NaNNaNNaNNaN
542102A5268000
552102B2270090
562103A7359090
572103B4000180
582104A8180000
592104B3180270
\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", "20 177 4 A 5 서 북 268 000\n", "21 177 4 B 1 동 남 090 180\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", "30 201 1 A 8 남 북 180 000\n", "31 201 1 B 3 남 서 180 270\n", "32 201 2 A 5 서 북 270 000\n", "33 201 2 B 2 서 동 270 090\n", "34 201 3 A 6 동 서 090 270\n", "35 201 3 B 2 서 동 270 090\n", "36 201 4 A 6 동 서 090 270\n", "37 201 4 B 1 동 남 090 180\n", "38 201 5 A 7 북 동 000 090\n", "39 201 5 B 4 북 남 000 180\n", "40 202 1 A 6 동 서 090 270\n", "41 202 1 B 2 서 동 270 090\n", "42 202 2 A 17 NaN NaN NaN NaN\n", "43 202 2 B 18 NaN NaN NaN NaN\n", "44 206 1 A 8 남 북 180 000\n", "45 206 1 B 4 북 남 000 180\n", "46 206 2 A 17 NaN NaN NaN NaN\n", "47 206 2 B 18 NaN NaN NaN NaN\n", "48 206 3 A 8 남 북 180 000\n", "49 206 3 B 4 북 남 000 180\n", "50 206 4 A 17 NaN NaN NaN NaN\n", "51 206 4 B 18 NaN NaN NaN NaN\n", "52 210 1 A 6 동 서 090 270\n", "53 210 1 B 18 NaN NaN NaN NaN\n", "54 210 2 A 5 서 북 268 000\n", "55 210 2 B 2 서 동 270 090\n", "56 210 3 A 7 북 동 359 090\n", "57 210 3 B 4 북 남 000 180\n", "58 210 4 A 8 남 북 180 000\n", "59 210 4 B 3 남 서 180 270" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# [방위각정보] 불러오기, 계층화, 병합\n", "# 불러오기\n", "dtype_dict = {f'angle_{alph}{j}':'str' for alph in ['A', 'B'] for j in range(1,9)}\n", "angle_original = pd.read_csv('../../Data/tables/angle.csv', index_col=0, dtype = dtype_dict)\n", "# 계층화\n", "angle = []\n", "for i, row in angle_original.iterrows():\n", " angle_codes = row[[f'angle_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n", " new = pd.DataFrame({'inter_no':[row.inter_no] * 16, 'phase_no':list(range(1, 9))*2, 'ring_type':['A'] * 8 + ['B'] * 8, 'angle_code':angle_codes.to_list()})\n", " angle.append(new)\n", "angle = pd.concat(angle)\n", "angle = angle.dropna().reset_index(drop=True)\n", "# 병합\n", "six_chars = angle.angle_code.apply(lambda x:len(x)==6)\n", "angle.loc[six_chars,'inc_angle'] = angle.angle_code.apply(lambda x:x[:3])\n", "angle.loc[six_chars,'out_angle'] = angle.angle_code.apply(lambda x:x[3:])\n", "angle = angle.drop('angle_code', axis=1)\n", "match4 = pd.merge(match3, angle, how='left', left_on=['inter_no', 'phase_no', 'ring_type'],\n", " right_on=['inter_no', 'phase_no', 'ring_type']).drop_duplicates()\n", "match4" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# [네트워크], [교차로-노드 매칭], [교차로정보] 불러오기 \n", "net = sumolib.net.readNet('../../Data/networks/SN_sample.net.xml')\n", "inter_node = pd.read_csv('../../Data/tables/inter_node.csv', index_col=0)\n", "inter_info = pd.read_csv('../../Data/tables/inter_info.csv', index_col=0)\n", "\n", "inter_node1 = inter_node[inter_node.inter_type == 'parent'].drop('inter_type', axis=1)\n", "inter_info1 = inter_info[['inter_no', 'inter_lat', 'inter_lon']]\n", "inter = pd.merge(inter_node1, inter_info1, how='left', left_on=['inter_no'],\n", " right_on=['inter_no']).drop_duplicates()\n", "\n", "inter2node = dict(zip(inter['inter_no'], inter['node_id']))\n", "\n", "match5 = match4.copy()\n", "# 진입진출ID 매칭\n", "for index, row in match5.iterrows():\n", " node_id = inter2node[row.inter_no]\n", " node = net.getNode(node_id)\n", " # 교차로의 모든 (from / to) edges\n", " inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges\n", " out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges\n", " # 교차로의 모든 (from / to) directions\n", " inc_dirs = []\n", " for inc_edge in inc_edges:\n", " start = inc_edge.getShape()[-2]\n", " end = inc_edge.getShape()[-1]\n", " inc_dir = np.array(end) - np.array(start)\n", " inc_dir = inc_dir / (inc_dir ** 2).sum() ** 0.5\n", " inc_dirs.append(inc_dir)\n", " out_dirs = []\n", " for out_edge in out_edges:\n", " start = out_edge.getShape()[0]\n", " end = out_edge.getShape()[1]\n", " out_dir = np.array(end) - np.array(start)\n", " out_dir = out_dir / (out_dir ** 2).sum() ** 0.5\n", " out_dirs.append(out_dir)\n", " # 진입각, 진출각 불러오기\n", " if not pd.isna(row.inc_angle):\n", " inc_angle = int(row.inc_angle)\n", " out_angle = int(row.out_angle)\n", " # 방위각을 일반각으로 가공, 라디안 변환, 단위벡터로 변환\n", " inc_angle = (-90 - inc_angle) % 360\n", " inc_angle = inc_angle * np.pi / 180.\n", " inc_dir_true = np.array([np.cos(inc_angle), np.sin(inc_angle)])\n", " out_angle = (90 - out_angle) % 360\n", " out_angle = out_angle * np.pi / 180.\n", " out_dir_true = np.array([np.cos(out_angle), np.sin(out_angle)])\n", " # 매칭 엣지 반환\n", " inc_index = np.array([np.dot(inc_dir, inc_dir_true) for inc_dir in inc_dirs]).argmax()\n", " out_index = np.array([np.dot(out_dir, out_dir_true) for out_dir in out_dirs]).argmax()\n", " inc_edge_id = inc_edges[inc_index].getID()\n", " out_edge_id = out_edges[out_index].getID()\n", " match5.at[index, 'inc_edge'] = inc_edge_id\n", " match5.at[index, 'out_edge'] = out_edge_id\n", "match5['node_id'] = match5['inter_no'].map(inter2node)\n", "# match5 = match5[['inter_no', 'node_id', 'move_no', 'inc_edge', 'out_edge']]\n", "match5 = match5.sort_values(by=['inter_no', 'move_no']).reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
01751571545870_02571542797_02i0
11752571510153_02571545870_01i0
21753-571542797_02571510153_01i0
31754-571500487_01571542797_02i0
41755571510153_02571500487_01i0
51756571545870_02571510153_01i0
61757-571500487_01571545870_01i0
71758-571542797_02571500487_01i0
817517NoneNoneNoneNonei0
917518NoneNoneNoneNonei0
1017521-571500487_01571510153_01i0
1117521571510153_02571542797_02i0
1217521-571542797_02571545870_01i0
1317521571545870_02571500487_01i0
141763-571542810_01571543469_01i1
151764571542797_02.99571542810_01i1
161765571543469_02-571542797_02.99i1
171768-571542810_01-571542797_02.99i1
1817617NoneNoneNoneNonei1
1917618NoneNoneNoneNonei1
2017621571542797_02.99571543469_01i1
2117621571543469_02571542810_01i1
221771571542107_02571542809_01i2
231772-571542809_01571542107_01i2
241773-571542809_01571542809_01i2
251774571542811_02571542809_01i2
261775-571542809_01571542811_01i2
271776571542107_02571542809_01i2
281777571542811_02571542107_01i2
291778-571542809_01571542811_01i2
3017717NoneNoneNoneNonei2
3117718NoneNoneNoneNonei2
3217721571542811_02571542809_01i2
3317721-571542809_01571542809_01i2
3417721-571542809_01571542107_01i2
3517721571542107_02571542811_01i2
361781-571500475_01571540304_01i3
371782571540303_02.21571500475_01i3
381783571540304_02571540303_01i3
391784571556450_02571540304_01i3
401785571540303_02.21571556450_01i3
411786-571500475_01571540303_01i3
421787571556450_02571500475_01i3
431788571540304_02571556450_01i3
4417817NoneNoneNoneNonei3
4517818NoneNoneNoneNonei3
4617821571556450_02571540303_01i3
4717821571540303_02.21571540304_01i3
4817821571540304_02571500475_01i3
4917821-571500475_01571556450_01i3
502011571500617_02571500569_01i8
512012571500618_02571500617_01i8
522013-571500569_01571500618_01i8
532014571500583_01571500569_01i8
542015571500618_02571500583_02i8
552016571500617_02571500618_01i8
562017571500583_01571500617_01i8
572018-571500569_01571500583_02i8
5820117NoneNoneNoneNonei8
5920118NoneNoneNoneNonei8
6020121571500583_01571500618_01i8
6120121571500618_02571500569_01i8
6220121-571500569_01571500617_01i8
6320121571500617_02571500583_02i8
642022571510152_01571510152_01.65i9
652026571510152_02-571510152_01i9
6620217NoneNoneNoneNonei9
6720218NoneNoneNoneNonei9
682064571542073_01571511538_02i7
692068-571511538_02571542073_02i7
7020617NoneNoneNoneNonei7
7120618NoneNoneNoneNonei7
722101-571542115_01571500585_01i6
732102571500535_02.18571542115_01i6
742103571500585_02571500535_01i6
752104571511538_02.121571500585_01i6
762105571500535_02.18571511538_01i6
772106-571542115_01571500535_01i6
782107571511538_02.121571542115_01i6
792108571500585_02571511538_01i6
8021017NoneNoneNoneNonei6
8121018NoneNoneNoneNonei6
8221021571511538_02.121571500535_01i6
8321021571500535_02.18571500585_01i6
8421021571500585_02571542115_01i6
8521021-571542115_01571511538_01i6
\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge \\\n", "0 175 1 동 남 571545870_02 571542797_02 \n", "1 175 2 서 동 571510153_02 571545870_01 \n", "2 175 3 남 서 -571542797_02 571510153_01 \n", "3 175 4 북 남 -571500487_01 571542797_02 \n", "4 175 5 서 북 571510153_02 571500487_01 \n", "5 175 6 동 서 571545870_02 571510153_01 \n", "6 175 7 북 동 -571500487_01 571545870_01 \n", "7 175 8 남 북 -571542797_02 571500487_01 \n", "8 175 17 None None None None \n", "9 175 18 None None None None \n", "10 175 21 북 서 -571500487_01 571510153_01 \n", "11 175 21 서 남 571510153_02 571542797_02 \n", "12 175 21 남 동 -571542797_02 571545870_01 \n", "13 175 21 동 북 571545870_02 571500487_01 \n", "14 176 3 남 서 -571542810_01 571543469_01 \n", "15 176 4 북 남 571542797_02.99 571542810_01 \n", "16 176 5 서 북 571543469_02 -571542797_02.99 \n", "17 176 8 남 북 -571542810_01 -571542797_02.99 \n", "18 176 17 None None None None \n", "19 176 18 None None None None \n", "20 176 21 북 서 571542797_02.99 571543469_01 \n", "21 176 21 서 남 571543469_02 571542810_01 \n", "22 177 1 동 남 571542107_02 571542809_01 \n", "23 177 2 서 동 -571542809_01 571542107_01 \n", "24 177 3 남 서 -571542809_01 571542809_01 \n", "25 177 4 북 남 571542811_02 571542809_01 \n", "26 177 5 서 북 -571542809_01 571542811_01 \n", "27 177 6 동 서 571542107_02 571542809_01 \n", "28 177 7 북 동 571542811_02 571542107_01 \n", "29 177 8 남 북 -571542809_01 571542811_01 \n", "30 177 17 None None None None \n", "31 177 18 None None None None \n", "32 177 21 북 서 571542811_02 571542809_01 \n", "33 177 21 서 남 -571542809_01 571542809_01 \n", "34 177 21 남 동 -571542809_01 571542107_01 \n", "35 177 21 동 북 571542107_02 571542811_01 \n", "36 178 1 동 남 -571500475_01 571540304_01 \n", "37 178 2 서 동 571540303_02.21 571500475_01 \n", "38 178 3 남 서 571540304_02 571540303_01 \n", "39 178 4 북 남 571556450_02 571540304_01 \n", "40 178 5 서 북 571540303_02.21 571556450_01 \n", "41 178 6 동 서 -571500475_01 571540303_01 \n", "42 178 7 북 동 571556450_02 571500475_01 \n", "43 178 8 남 북 571540304_02 571556450_01 \n", "44 178 17 None None None None \n", "45 178 18 None None None None \n", "46 178 21 북 서 571556450_02 571540303_01 \n", "47 178 21 서 남 571540303_02.21 571540304_01 \n", "48 178 21 남 동 571540304_02 571500475_01 \n", "49 178 21 동 북 -571500475_01 571556450_01 \n", "50 201 1 동 남 571500617_02 571500569_01 \n", "51 201 2 서 동 571500618_02 571500617_01 \n", "52 201 3 남 서 -571500569_01 571500618_01 \n", "53 201 4 북 남 571500583_01 571500569_01 \n", "54 201 5 서 북 571500618_02 571500583_02 \n", "55 201 6 동 서 571500617_02 571500618_01 \n", "56 201 7 북 동 571500583_01 571500617_01 \n", "57 201 8 남 북 -571500569_01 571500583_02 \n", "58 201 17 None None None None \n", "59 201 18 None None None None \n", "60 201 21 북 서 571500583_01 571500618_01 \n", "61 201 21 서 남 571500618_02 571500569_01 \n", "62 201 21 남 동 -571500569_01 571500617_01 \n", "63 201 21 동 북 571500617_02 571500583_02 \n", "64 202 2 서 동 571510152_01 571510152_01.65 \n", "65 202 6 동 서 571510152_02 -571510152_01 \n", "66 202 17 None None None None \n", "67 202 18 None None None None \n", "68 206 4 북 남 571542073_01 571511538_02 \n", "69 206 8 남 북 -571511538_02 571542073_02 \n", "70 206 17 None None None None \n", "71 206 18 None None None None \n", "72 210 1 동 남 -571542115_01 571500585_01 \n", "73 210 2 서 동 571500535_02.18 571542115_01 \n", "74 210 3 남 서 571500585_02 571500535_01 \n", "75 210 4 북 남 571511538_02.121 571500585_01 \n", "76 210 5 서 북 571500535_02.18 571511538_01 \n", "77 210 6 동 서 -571542115_01 571500535_01 \n", "78 210 7 북 동 571511538_02.121 571542115_01 \n", "79 210 8 남 북 571500585_02 571511538_01 \n", "80 210 17 None None None None \n", "81 210 18 None None None None \n", "82 210 21 북 서 571511538_02.121 571500535_01 \n", "83 210 21 서 남 571500535_02.18 571500585_01 \n", "84 210 21 남 동 571500585_02 571542115_01 \n", "85 210 21 동 북 -571542115_01 571511538_01 \n", "\n", " node_id \n", "0 i0 \n", "1 i0 \n", "2 i0 \n", "3 i0 \n", "4 i0 \n", "5 i0 \n", "6 i0 \n", "7 i0 \n", "8 i0 \n", "9 i0 \n", "10 i0 \n", "11 i0 \n", "12 i0 \n", "13 i0 \n", "14 i1 \n", "15 i1 \n", "16 i1 \n", "17 i1 \n", "18 i1 \n", "19 i1 \n", "20 i1 \n", "21 i1 \n", "22 i2 \n", "23 i2 \n", "24 i2 \n", "25 i2 \n", "26 i2 \n", "27 i2 \n", "28 i2 \n", "29 i2 \n", "30 i2 \n", "31 i2 \n", "32 i2 \n", "33 i2 \n", "34 i2 \n", "35 i2 \n", "36 i3 \n", "37 i3 \n", "38 i3 \n", "39 i3 \n", "40 i3 \n", "41 i3 \n", "42 i3 \n", "43 i3 \n", "44 i3 \n", "45 i3 \n", "46 i3 \n", "47 i3 \n", "48 i3 \n", "49 i3 \n", "50 i8 \n", "51 i8 \n", "52 i8 \n", "53 i8 \n", "54 i8 \n", "55 i8 \n", "56 i8 \n", "57 i8 \n", "58 i8 \n", "59 i8 \n", "60 i8 \n", "61 i8 \n", "62 i8 \n", "63 i8 \n", "64 i9 \n", "65 i9 \n", "66 i9 \n", "67 i9 \n", "68 i7 \n", "69 i7 \n", "70 i7 \n", "71 i7 \n", "72 i6 \n", "73 i6 \n", "74 i6 \n", "75 i6 \n", "76 i6 \n", "77 i6 \n", "78 i6 \n", "79 i6 \n", "80 i6 \n", "81 i6 \n", "82 i6 \n", "83 i6 \n", "84 i6 \n", "85 i6 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 이동류 매칭\n", "# 각 교차로에 대하여, 가능한 모든 이동류(1~18, 21)에 대한 진입·진출엣지ID를 지정한다.\n", "# 모든 이동류에 대해 지정하므로, 시차제시 이전과 다른 이동류가 등장하더라도 항상 진입·진출 엣지 ID를 지정할 수 있다.\n", "match6 = match5.copy().dropna()\n", "match6 = match6[['inter_no', 'move_no', 'inc_dir', 'out_dir', 'inc_edge', 'out_edge', 'node_id']]\n", "# (1) 가능한 (진입방향, 진출방향) 목록\n", "flows = nema.dropna().apply(lambda row: (row['inc_dir'], row['out_dir']), axis=1).tolist()\n", "# (2) 각 교차로별 방향 목록 : pdires\n", "pdires = {}\n", "for inter_no in match6.inter_no.unique():\n", " dires = match6[match6.inter_no == inter_no][['inc_dir','out_dir']].values.flatten()\n", " dires = {dire for dire in dires if type(dire)==str}\n", " pdires[inter_no] = dires\n", "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id\n", "inc2id = {}\n", "for inter_no in match6.inter_no.unique():\n", " for inc_dir in pdires[inter_no]:\n", " df = match6[(match6.inter_no==inter_no) & (match6.inc_dir==inc_dir)]\n", " inc2id[(inter_no, inc_dir)] = df.inc_edge.iloc[0]\n", "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id\n", "out2id = {}\n", "for inter_no in match6.inter_no.unique():\n", " for out_dir in pdires[inter_no]:\n", " df = match6[(match6.inter_no==inter_no) & (match6.out_dir==out_dir)]\n", " out2id[(inter_no, out_dir)] = df.out_edge.iloc[0]\n", "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflows\n", "pflow = {}\n", "for inter_no in match6.inter_no.unique():\n", " pflow[inter_no] = [flow for flow in flows if set(flow).issubset(pdires[inter_no])]\n", "# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n", "inter2node = dict(zip(match6['inter_no'], match6['node_id']))\n", "dires_right = ['북', '서', '남', '동', '북']\n", "matching = []\n", "for inter_no in match6.inter_no.unique():\n", " node_id = inter2node[inter_no]\n", " # 좌회전과 직진(1 ~ 16)\n", " for (inc_dir, out_dir) in pflow[inter_no]:\n", " move_no = nema[(nema.inc_dir==inc_dir) & (nema.out_dir==out_dir)].move_no.iloc[0]\n", " inc_edge = inc2id[(inter_no, inc_dir)]\n", " out_edge = out2id[(inter_no, out_dir)]\n", " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[move_no],\n", " 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n", " 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n", " matching.append(new_row)\n", " # 보행신호(17), 전적색(18)\n", " new_row = pd.DataFrame({'inter_no':[inter_no] * 2, 'move_no':[17, 18],\n", " 'inc_dir':[None]*2, 'out_dir':[None]*2,\n", " 'inc_edge':[None]*2, 'out_edge':[None]*2, 'node_id':[node_id]*2})\n", " matching.append(new_row)\n", " # 신호우회전(21)\n", " for d in range(len(dires_right)-1):\n", " inc_dir = dires_right[d]\n", " out_dir = dires_right[d+1]\n", " if {inc_dir, out_dir}.issubset(pdires[inter_no]):\n", " inc_edge = inc2id[(inter_no, inc_dir)]\n", " out_edge = out2id[(inter_no, out_dir)]\n", " new_row = pd.DataFrame({'inter_no':[inter_no], 'move_no':[21],\n", " 'inc_dir':[inc_dir], 'out_dir':[out_dir],\n", " 'inc_edge':[inc_edge], 'out_edge':[out_edge], 'node_id':[node_id]})\n", " matching.append(new_row)\n", "matching = pd.concat(matching)\n", "matching = matching.sort_values(by=['inter_no', 'move_no']).reset_index(drop=True)\n", "with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n", " display(matching)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# B. 5초 간격으로 이동류번호 수집" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 14/17280 [00:00<02:04, 138.54it/s]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 17280/17280 [05:41<00:00, 50.64it/s] \n" ] } ], "source": [ "# 5초 단위로 이동류번호 저장 및 신호이력에서 유닉스시각 가져와서 표시, 한시간동안의 데이터만 보관\n", "midnight = int(datetime(2024, 1, 5, 0, 0, 0).timestamp())\n", "next_day = int(datetime(2024, 1, 6, 0, 0, 0).timestamp())\n", "fsecs = range(midnight, next_day, 5) # fsecs : unix time by Five SECondS\n", "time2move = dict(zip(fsecs,moves)) # move : 어느 순간의 이동류정보\n", "history = pd.read_csv('../../Data/tables/history.csv', index_col=0)\n", "\n", "time2movement = {} # movement : 어느 순간의, 그 순간으로부터 한시간 동안의 (교차로번호 + 현시별이동류번호 + 시작시간)\n", "# - 아래 절차를 5초마다 반복\n", "for fsec in tqdm(fsecs): # fsec : unix time by Five SECond\n", " # 1. 상태 테이블 조회해서 전체 데이터중 필요데이터(교차로번호, A링 현시번호, A링 이동류번호, B링 현시번호, B링 이동류번호)만 수집 : A\n", " move = time2move[fsec]\n", " # 2. 이력 테이블 조회해서 교차로별로 유닉스시간 최대인 데이터(교차로변호, 종료유닉스타임)만 수집 : B\n", " recent_histories = [group.iloc[-1:] for _, group in history[history['end_unix'] < fsec].groupby('inter_no')] # 교차로별로 유닉스시간이 최대인 행들\n", " if not recent_histories:\n", " rhistory = pd.DataFrame({'inter_no':[], 'end_unix':[]}) # recent history\n", " else:\n", " rhistory = pd.concat(recent_histories)\n", " recent_unix = rhistory[['inter_no', 'end_unix']]\n", " # 3. 상태 테이블 조회정보(A)와 이력 테이블 조회정보(B) 조인(키값 : 교차로번호) : C\n", " move = pd.merge(move, recent_unix, how='left', on='inter_no')\n", " move['end_unix'] = move['end_unix'].fillna(0).astype(int)\n", " move = move.drop_duplicates()\n", " # 4. C데이터 프레임에 신규 컬럼(시작 유닉스타임) 생성 후 종료유닉스 타임 값 입력, 종료 유닉스 타임 컬럼 제거\n", " move = move.rename(columns = {'end_unix':'start_unix'})\n", " # 5. 이동류 이력정보 READ\n", " # - CSV 파일로 서버에 저장된 이동류정보를 읽어옴(파일이 없는 경우에는 데이터가 없는 프레임 D 생성)\n", " try:\n", " if isinstance(movement, pd.DataFrame): # movement가 존재할 경우 그걸 그대로 씀.\n", " pass\n", " else: \n", " movement = pd.DataFrame()\n", " except NameError: # movement가 존재하지 않는 경우 생성\n", " movement = pd.DataFrame()\n", " # 6. 이동류 이력정보 데이터테이블(D)에 C데이터 add\n", " movement = pd.concat([movement, move])\n", " # 7. D데이터 프레임에서 중복데이터 제거(교차로번호, 시작 유닉스타임, A링 현시번호, B링 현시번호 같은 행은 제거)\n", " movement = movement.drop_duplicates(['inter_no','phas_A','phas_B','start_unix'])\n", " # 8. D데이터 보관 시간 기준시간을 시작 유닉스 타임의 최대값 - 3600을 값으로 산출하고, 보관 시간 기준시간보다 작은 시작 유닉스 타임을 가진 행은 모두 제거(1시간 데이터만 보관)\n", " movement = movement[movement.start_unix > fsec - 3600]\n", " start_unix_min = movement.start_unix.min()\n", " start_unix_max = movement.start_unix.max()\n", " movement = movement.sort_values(by=['start_unix','inter_no','phas_A','phas_B']).reset_index(drop=True)\n", "\n", " time2movement[fsec] = movement\n", " movement.to_csv(f'../../Data/tables/movements/movements_{fsec}.csv')\n", "\n", "# 각 movement들의 길이 시각화\n", "import matplotlib.pyplot as plt\n", "plt.plot(fsecs, [len(time2movement[fsec]) for fsec in fsecs])\n", "plt.close()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'fmins' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[9], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m288\u001b[39m):\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28mprint\u001b[39m(m, \u001b[38;5;28mlen\u001b[39m(time2movement[\u001b[43mfmins\u001b[49m[\u001b[38;5;241m287\u001b[39m]]))\n", "\u001b[1;31mNameError\u001b[0m: name 'fmins' is not defined" ] } ], "source": [ "for m in range(1, 288):\n", " print(m, len(time2movement[fmins[287]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# C. 5분 간격으로 신호이력 수집 및 통합테이블 생성" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nostart_hourstart_minuteddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffset
017500373925302900016057
117570404229263300017040
217590434533223700018028
31751830464837184100019018
41760037734000000150131
\n", "
" ], "text/plain": [ " inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n", "0 175 0 0 37 39 25 30 29 \n", "1 175 7 0 40 42 29 26 33 \n", "2 175 9 0 43 45 33 22 37 \n", "3 175 18 30 46 48 37 18 41 \n", "4 176 0 0 37 73 40 0 0 \n", "\n", " ddur_6 ddur_7 ddur_8 cycle offset \n", "0 0 0 0 160 57 \n", "1 0 0 0 170 40 \n", "2 0 0 0 180 28 \n", "3 0 0 0 190 18 \n", "4 0 0 0 150 131 " ] }, "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", "
inter_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffset
0206170438052033352626000012010
12111704380525289700000012545
2178170438054038394023000014050
320117043805402424175817000140133
4202170438054039101000000140103
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "0 206 1704380520 33 35 26 26 0 0 \n", "1 211 1704380525 28 97 0 0 0 0 \n", "2 178 1704380540 38 39 40 23 0 0 \n", "3 201 1704380540 24 24 17 58 17 0 \n", "4 202 1704380540 39 101 0 0 0 0 \n", "\n", " ddur_7 ddur_8 cycle offset \n", "0 0 0 120 10 \n", "1 0 0 125 45 \n", "2 0 0 140 50 \n", "3 0 0 140 133 \n", "4 0 0 140 103 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pland = pd.read_csv('../../Data/tables/pland.csv', index_col=0)\n", "plan = pd.read_csv('../../Data/tables/plan.csv', index_col=0)\n", "history = pd.read_csv('../../Data/tables/history.csv', index_col=0)\n", "display(pland.head())\n", "display(history.head())\n", "# plan은 A, B가 통합된 형식으로 history는 분리된 형식으로 표시되었음." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetdiff
7231751704391690373925302900016057160
7321751704391850373925302900016057160
7411751704392010373925302900016057160
7551751704392170373925302900016057160
7641751704392330373925302900016057160
7731751704392490373925302900016057160
7841751704392651373925302900016057161
7931751704392810373925302900016057159
8021751704392970373925302900016057160
8131751704393130373925302900016057160
8251751704393290373925302900016057160
8341751704393450373925302900016057160
8461751704393610373925302900016057160
8561751704393770373925302900016057160
8651751704393930373925302900016057160
8761751704394090373925302900016057160
8861751704394250373925302900016057160
8981751704394410373925302900016057160
9091751704394570373925302900016057160
9181751704394730373925302900016057160
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "723 175 1704391690 37 39 25 30 29 0 \n", "732 175 1704391850 37 39 25 30 29 0 \n", "741 175 1704392010 37 39 25 30 29 0 \n", "755 175 1704392170 37 39 25 30 29 0 \n", "764 175 1704392330 37 39 25 30 29 0 \n", "773 175 1704392490 37 39 25 30 29 0 \n", "784 175 1704392651 37 39 25 30 29 0 \n", "793 175 1704392810 37 39 25 30 29 0 \n", "802 175 1704392970 37 39 25 30 29 0 \n", "813 175 1704393130 37 39 25 30 29 0 \n", "825 175 1704393290 37 39 25 30 29 0 \n", "834 175 1704393450 37 39 25 30 29 0 \n", "846 175 1704393610 37 39 25 30 29 0 \n", "856 175 1704393770 37 39 25 30 29 0 \n", "865 175 1704393930 37 39 25 30 29 0 \n", "876 175 1704394090 37 39 25 30 29 0 \n", "886 175 1704394250 37 39 25 30 29 0 \n", "898 175 1704394410 37 39 25 30 29 0 \n", "909 175 1704394570 37 39 25 30 29 0 \n", "918 175 1704394730 37 39 25 30 29 0 \n", "\n", " ddur_7 ddur_8 cycle offset diff \n", "723 0 0 160 57 160 \n", "732 0 0 160 57 160 \n", "741 0 0 160 57 160 \n", "755 0 0 160 57 160 \n", "764 0 0 160 57 160 \n", "773 0 0 160 57 160 \n", "784 0 0 160 57 161 \n", "793 0 0 160 57 159 \n", "802 0 0 160 57 160 \n", "813 0 0 160 57 160 \n", "825 0 0 160 57 160 \n", "834 0 0 160 57 160 \n", "846 0 0 160 57 160 \n", "856 0 0 160 57 160 \n", "865 0 0 160 57 160 \n", "876 0 0 160 57 160 \n", "886 0 0 160 57 160 \n", "898 0 0 160 57 160 \n", "909 0 0 160 57 160 \n", "918 0 0 160 57 160 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hist = history.copy()\n", "hist = hist[hist.inter_no==175]\n", "hist['diff'] = hist['end_unix'].diff().fillna(0).astype(int)\n", "hist[70:90]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_hourstart_minutestart_seconds
0001704380400
1701704405600
2901704412800
318301704447000
\n", "
" ], "text/plain": [ " start_hour start_minute start_seconds\n", "0 0 0 1704380400\n", "1 7 0 1704405600\n", "2 9 0 1704412800\n", "3 18 30 1704447000" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# split, isplit : A,B 분리 혹은 통합시 사용될 수 있는 딕셔너리\n", "splits = {} # splits maps (inter_no, start_hour, start_minute) to split\n", "for i, row in plan.iterrows():\n", " inter_no = row.inter_no\n", " start_hour = row.start_hour\n", " start_minute = row.start_minute\n", " cycle = row.cycle\n", " cums_A = row[[f'dura_A{j}' for j in range(1,9)]].cumsum()\n", " cums_B = row[[f'dura_B{j}' for j in range(1,9)]].cumsum()\n", " splits[(inter_no, start_hour, start_minute)] = {} # split maps (phas_A, phas_B) to k\n", " k = 0\n", " for t in range(cycle):\n", " new_phas_A = len(cums_A[cums_A < t]) + 1\n", " new_phas_B = len(cums_B[cums_B < t]) + 1\n", " if k == 0 or ((new_phas_A, new_phas_B) != (phas_A, phas_B)):\n", " k += 1\n", " phas_A = new_phas_A\n", " phas_B = new_phas_B\n", " splits[(inter_no, start_hour, start_minute)][(phas_A, phas_B)] = k\n", "\n", "isplits = {} # the inverse of splits\n", "for i in splits:\n", " isplits[i] = {splits[i][k]:k for k in splits[i]} # isplit maps k to (phas_A, phas_B)\n", "\n", "# timetable\n", "timetable = plan[['start_hour', 'start_minute']].drop_duplicates()\n", "timetable['start_seconds'] = midnight + timetable['start_hour'] * 3600 + timetable['start_minute'] * 60\n", "timetable" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[175, 176, 177, 178, 201, 202, 206, 210, 211]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted(history.inter_no.unique())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_hourstart_minutestart_seconds
0001704380400
1701704405600
2901704412800
318301704447000
\n", "
" ], "text/plain": [ " start_hour start_minute start_seconds\n", "0 0 0 1704380400\n", "1 7 0 1704405600\n", "2 9 0 1704412800\n", "3 18 30 1704447000" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timetable" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffset
14601751704403110373925302900016057
14701751704403270373925302900016057
14791751704403430373925302900016057
14891751704403590373925302900016057
14971751704403750373925302900016057
15061751704403910373925302900016057
15171751704404070373925302900016057
15281751704404230373925302900016057
16861751704407111373925302900016057
16951751704407280404229263300017040
17051751704407449404229263300017040
17151751704407620404229263300017040
17251751704407791404229263300017040
17351751704407960404229263300017040
17451751704408130404229263300017040
17541751704408300404229263300017040
17651751704408470404229263300017040
17741751704408640404229263300017040
17831751704408810404229263300017040
17921751704408980404229263300017040
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "1460 175 1704403110 37 39 25 30 29 0 \n", "1470 175 1704403270 37 39 25 30 29 0 \n", "1479 175 1704403430 37 39 25 30 29 0 \n", "1489 175 1704403590 37 39 25 30 29 0 \n", "1497 175 1704403750 37 39 25 30 29 0 \n", "1506 175 1704403910 37 39 25 30 29 0 \n", "1517 175 1704404070 37 39 25 30 29 0 \n", "1528 175 1704404230 37 39 25 30 29 0 \n", "1686 175 1704407111 37 39 25 30 29 0 \n", "1695 175 1704407280 40 42 29 26 33 0 \n", "1705 175 1704407449 40 42 29 26 33 0 \n", "1715 175 1704407620 40 42 29 26 33 0 \n", "1725 175 1704407791 40 42 29 26 33 0 \n", "1735 175 1704407960 40 42 29 26 33 0 \n", "1745 175 1704408130 40 42 29 26 33 0 \n", "1754 175 1704408300 40 42 29 26 33 0 \n", "1765 175 1704408470 40 42 29 26 33 0 \n", "1774 175 1704408640 40 42 29 26 33 0 \n", "1783 175 1704408810 40 42 29 26 33 0 \n", "1792 175 1704408980 40 42 29 26 33 0 \n", "\n", " ddur_7 ddur_8 cycle offset \n", "1460 0 0 160 57 \n", "1470 0 0 160 57 \n", "1479 0 0 160 57 \n", "1489 0 0 160 57 \n", "1497 0 0 160 57 \n", "1506 0 0 160 57 \n", "1517 0 0 160 57 \n", "1528 0 0 160 57 \n", "1686 0 0 160 57 \n", "1695 0 0 170 40 \n", "1705 0 0 170 40 \n", "1715 0 0 170 40 \n", "1725 0 0 170 40 \n", "1735 0 0 170 40 \n", "1745 0 0 170 40 \n", "1754 0 0 170 40 \n", "1765 0 0 170 40 \n", "1774 0 0 170 40 \n", "1783 0 0 170 40 \n", "1792 0 0 170 40 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "history[(history.inter_no==175) & (history.end_unix>=1704403000) & (history.end_unix<=1704409000)]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-01-05 14:29:20\n", "2024-01-05 15:29:19\n" ] } ], "source": [ "# inter_no = 175, m = 30 : 조정 (수축)\n", "# inter_no = 175, m = 70 : 삭제 + 조정(수축)\n", "# inter_no = 175, m = 90 : 결측(전이) + 삭제 + 조정(수축)\n", "# inter_no = 175, m = 140 : 삭제 + 조정(수축)\n", "# inter_no = 176, m = 50 : 조정(수축)\n", "# inter_no = 176, m = 155 : 삭제(마지막 행에서 삭제)\n", "# inter_no = 176, m = 160 : 조정(수축) + 삭제 + 조정(수축)\n", "# inter_no = 176, m = 190 : 결측\n", "# inter_no = 176, m = 220 : 삭제\n", "# inter_no = 176, m = 270 : 삭제\n", "# inter_no = 176, m = 275 : 삭제\n", "# inter_no = 177, m = 40 : 조정(수축)\n", "# inter_no = 178, m = 70 : 삭제\n", "# inter_no = 178, m = 100 : 조정(확장) + 삭제\n", "##inter_no = 178, m = 270 : 결측 + 조정(확장)\n", "\n", "print(datetime.fromtimestamp(1704432560))\n", "print(datetime.fromtimestamp(1704436159))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "결측치 처리 전\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetdiff
361751704386320373925302900016057160
371751704386480373925302900016057160
38175170438657237392530290001605792
391751704386730373925302900016057158
401751704386889373925302900016057159
411751704387050373925302900016057161
421751704387210373925302900016057160
431751704387370373925302900016057160
441751704387530373925302900016057160
451751704387690373925302900016057160
461751704387850373925302900016057160
471751704388010373925302900016057160
481751704388170373925302900016057160
491751704388330373925302900016057160
501751704388490373925302900016057160
511751704388650373925302900016057160
521751704388810373925302900016057160
531751704388970373925302900016057160
541751704389130373925302900016057160
551751704389290373925302900016057160
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "36 175 1704386320 37 39 25 30 29 0 \n", "37 175 1704386480 37 39 25 30 29 0 \n", "38 175 1704386572 37 39 25 30 29 0 \n", "39 175 1704386730 37 39 25 30 29 0 \n", "40 175 1704386889 37 39 25 30 29 0 \n", "41 175 1704387050 37 39 25 30 29 0 \n", "42 175 1704387210 37 39 25 30 29 0 \n", "43 175 1704387370 37 39 25 30 29 0 \n", "44 175 1704387530 37 39 25 30 29 0 \n", "45 175 1704387690 37 39 25 30 29 0 \n", "46 175 1704387850 37 39 25 30 29 0 \n", "47 175 1704388010 37 39 25 30 29 0 \n", "48 175 1704388170 37 39 25 30 29 0 \n", "49 175 1704388330 37 39 25 30 29 0 \n", "50 175 1704388490 37 39 25 30 29 0 \n", "51 175 1704388650 37 39 25 30 29 0 \n", "52 175 1704388810 37 39 25 30 29 0 \n", "53 175 1704388970 37 39 25 30 29 0 \n", "54 175 1704389130 37 39 25 30 29 0 \n", "55 175 1704389290 37 39 25 30 29 0 \n", "\n", " ddur_7 ddur_8 cycle offset diff \n", "36 0 0 160 57 160 \n", "37 0 0 160 57 160 \n", "38 0 0 160 57 92 \n", "39 0 0 160 57 158 \n", "40 0 0 160 57 159 \n", "41 0 0 160 57 161 \n", "42 0 0 160 57 160 \n", "43 0 0 160 57 160 \n", "44 0 0 160 57 160 \n", "45 0 0 160 57 160 \n", "46 0 0 160 57 160 \n", "47 0 0 160 57 160 \n", "48 0 0 160 57 160 \n", "49 0 0 160 57 160 \n", "50 0 0 160 57 160 \n", "51 0 0 160 57 160 \n", "52 0 0 160 57 160 \n", "53 0 0 160 57 160 \n", "54 0 0 160 57 160 \n", "55 0 0 160 57 160 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "결측치 처리 후\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetdiff
361751704386320373925302900016057160
371751704386480373925302900016057160
38175170438657237392530290001605792
391751704386730373925302900016057158
401751704386889373925302900016057159
411751704387050373925302900016057161
421751704387210373925302900016057160
431751704387370373925302900016057160
441751704387530373925302900016057160
451751704387690373925302900016057160
461751704387850373925302900016057160
471751704388010373925302900016057160
481751704388170373925302900016057160
491751704388330373925302900016057160
501751704388490373925302900016057160
511751704388650373925302900016057160
521751704388810373925302900016057160
531751704388970373925302900016057160
541751704389130373925302900016057160
551751704389290373925302900016057160
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "36 175 1704386320 37 39 25 30 29 0 \n", "37 175 1704386480 37 39 25 30 29 0 \n", "38 175 1704386572 37 39 25 30 29 0 \n", "39 175 1704386730 37 39 25 30 29 0 \n", "40 175 1704386889 37 39 25 30 29 0 \n", "41 175 1704387050 37 39 25 30 29 0 \n", "42 175 1704387210 37 39 25 30 29 0 \n", "43 175 1704387370 37 39 25 30 29 0 \n", "44 175 1704387530 37 39 25 30 29 0 \n", "45 175 1704387690 37 39 25 30 29 0 \n", "46 175 1704387850 37 39 25 30 29 0 \n", "47 175 1704388010 37 39 25 30 29 0 \n", "48 175 1704388170 37 39 25 30 29 0 \n", "49 175 1704388330 37 39 25 30 29 0 \n", "50 175 1704388490 37 39 25 30 29 0 \n", "51 175 1704388650 37 39 25 30 29 0 \n", "52 175 1704388810 37 39 25 30 29 0 \n", "53 175 1704388970 37 39 25 30 29 0 \n", "54 175 1704389130 37 39 25 30 29 0 \n", "55 175 1704389290 37 39 25 30 29 0 \n", "\n", " ddur_7 ddur_8 cycle offset diff \n", "36 0 0 160 57 160 \n", "37 0 0 160 57 160 \n", "38 0 0 160 57 92 \n", "39 0 0 160 57 158 \n", "40 0 0 160 57 159 \n", "41 0 0 160 57 161 \n", "42 0 0 160 57 160 \n", "43 0 0 160 57 160 \n", "44 0 0 160 57 160 \n", "45 0 0 160 57 160 \n", "46 0 0 160 57 160 \n", "47 0 0 160 57 160 \n", "48 0 0 160 57 160 \n", "49 0 0 160 57 160 \n", "50 0 0 160 57 160 \n", "51 0 0 160 57 160 \n", "52 0 0 160 57 160 \n", "53 0 0 160 57 160 \n", "54 0 0 160 57 160 \n", "55 0 0 160 57 160 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "이상치 처리 전\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetD_nS_ndiff
01751704385840373925302900016057256025600
1175170438600037392530290001605727202720160
2175170438616037392530290001605728802880160
3175170438632037392530290001605730403040160
4175170438648037392530290001605732003200160
517517043865723739253029000160573292336092
6175170438673037392530290001605734503520158
7175170438688937392530290001605736093680159
8175170438705037392530290001605737703840161
9175170438721037392530290001605739304000160
10175170438737037392530290001605740904160160
11175170438753037392530290001605742504320160
121751704387690373925302900016057801800160
131751704387850373925302900016057961960160
14175170438801037392530290001605711211120160
15175170438817037392530290001605712811280160
16175170438833037392530290001605714411440160
17175170438849037392530290001605716011600160
18175170438865037392530290001605717611760160
19175170438881037392530290001605719211920160
20175170438897037392530290001605720812080160
21175170438913037392530290001605722412240160
22175170438929037392530290001605724012400160
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "0 175 1704385840 37 39 25 30 29 0 \n", "1 175 1704386000 37 39 25 30 29 0 \n", "2 175 1704386160 37 39 25 30 29 0 \n", "3 175 1704386320 37 39 25 30 29 0 \n", "4 175 1704386480 37 39 25 30 29 0 \n", "5 175 1704386572 37 39 25 30 29 0 \n", "6 175 1704386730 37 39 25 30 29 0 \n", "7 175 1704386889 37 39 25 30 29 0 \n", "8 175 1704387050 37 39 25 30 29 0 \n", "9 175 1704387210 37 39 25 30 29 0 \n", "10 175 1704387370 37 39 25 30 29 0 \n", "11 175 1704387530 37 39 25 30 29 0 \n", "12 175 1704387690 37 39 25 30 29 0 \n", "13 175 1704387850 37 39 25 30 29 0 \n", "14 175 1704388010 37 39 25 30 29 0 \n", "15 175 1704388170 37 39 25 30 29 0 \n", "16 175 1704388330 37 39 25 30 29 0 \n", "17 175 1704388490 37 39 25 30 29 0 \n", "18 175 1704388650 37 39 25 30 29 0 \n", "19 175 1704388810 37 39 25 30 29 0 \n", "20 175 1704388970 37 39 25 30 29 0 \n", "21 175 1704389130 37 39 25 30 29 0 \n", "22 175 1704389290 37 39 25 30 29 0 \n", "\n", " ddur_7 ddur_8 cycle offset D_n S_n diff \n", "0 0 0 160 57 2560 2560 0 \n", "1 0 0 160 57 2720 2720 160 \n", "2 0 0 160 57 2880 2880 160 \n", "3 0 0 160 57 3040 3040 160 \n", "4 0 0 160 57 3200 3200 160 \n", "5 0 0 160 57 3292 3360 92 \n", "6 0 0 160 57 3450 3520 158 \n", "7 0 0 160 57 3609 3680 159 \n", "8 0 0 160 57 3770 3840 161 \n", "9 0 0 160 57 3930 4000 160 \n", "10 0 0 160 57 4090 4160 160 \n", "11 0 0 160 57 4250 4320 160 \n", "12 0 0 160 57 801 800 160 \n", "13 0 0 160 57 961 960 160 \n", "14 0 0 160 57 1121 1120 160 \n", "15 0 0 160 57 1281 1280 160 \n", "16 0 0 160 57 1441 1440 160 \n", "17 0 0 160 57 1601 1600 160 \n", "18 0 0 160 57 1761 1760 160 \n", "19 0 0 160 57 1921 1920 160 \n", "20 0 0 160 57 2081 2080 160 \n", "21 0 0 160 57 2241 2240 160 \n", "22 0 0 160 57 2401 2400 160 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "1704386000 1.0 2720 2720\n", "1704386160 1.0 2880 2880\n", "1704386320 1.0 3040 3040\n", "1704386480 1.0 3200 3200\n", "1704386572 0.57 3292 3360\n", "gt 5 1704386572 0.57 3292 3360\n", "1704386730 0.99 3450 3520\n", "gt 6 1704386730 0.99 3450 3520\n", "1704386889 0.99 3609 3680\n", "gt 7 1704386889 0.99 3609 3680\n", "1704387050 1.01 3770 3840\n", "gt 8 1704387050 1.01 3770 3840\n", "1704387210 1.0 3930 4000\n", "gt 9 1704387210 1.0 3930 4000\n", "1704387370 1.0 4090 4160\n", "gt 10 1704387370 1.0 4090 4160\n", "1704387530 1.0 4250 4320\n", "gt 11 1704387530 1.0 4250 4320\n", "1704387690 1.0 801 800\n", "1704387850 1.0 961 960\n", "1704388010 1.0 1121 1120\n", "1704388170 1.0 1281 1280\n", "1704388330 1.0 1441 1440\n", "1704388490 1.0 1601 1600\n", "1704388650 1.0 1761 1760\n", "1704388810 1.0 1921 1920\n", "1704388970 1.0 2081 2080\n", "1704389130 1.0 2241 2240\n", "1704389290 1.0 2401 2400\n", "이상치 처리 후\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetD_nS_ndiff
01751704385840373925302900016057256025600
1175170438600037392530290001605727202720160
2175170438616037392530290001605728802880160
3175170438632037392530290001605730403040160
4175170438648037392530290001605732003200160
51751704386572212314171700092573292336092
6175170438673036382530290001585734503520158
7175170438688937382530290001595736093680159
8175170438705037402530290001615737703840161
9175170438721037392530290001605739304000160
10175170438737037392530290001605740904160160
11175170438753037392530290001605742504320160
121751704387690373925302900016057801800160
131751704387850373925302900016057961960160
14175170438801037392530290001605711211120160
15175170438817037392530290001605712811280160
16175170438833037392530290001605714411440160
17175170438849037392530290001605716011600160
18175170438865037392530290001605717611760160
19175170438881037392530290001605719211920160
20175170438897037392530290001605720812080160
21175170438913037392530290001605722412240160
22175170438929037392530290001605724012400160
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "0 175 1704385840 37 39 25 30 29 0 \n", "1 175 1704386000 37 39 25 30 29 0 \n", "2 175 1704386160 37 39 25 30 29 0 \n", "3 175 1704386320 37 39 25 30 29 0 \n", "4 175 1704386480 37 39 25 30 29 0 \n", "5 175 1704386572 21 23 14 17 17 0 \n", "6 175 1704386730 36 38 25 30 29 0 \n", "7 175 1704386889 37 38 25 30 29 0 \n", "8 175 1704387050 37 40 25 30 29 0 \n", "9 175 1704387210 37 39 25 30 29 0 \n", "10 175 1704387370 37 39 25 30 29 0 \n", "11 175 1704387530 37 39 25 30 29 0 \n", "12 175 1704387690 37 39 25 30 29 0 \n", "13 175 1704387850 37 39 25 30 29 0 \n", "14 175 1704388010 37 39 25 30 29 0 \n", "15 175 1704388170 37 39 25 30 29 0 \n", "16 175 1704388330 37 39 25 30 29 0 \n", "17 175 1704388490 37 39 25 30 29 0 \n", "18 175 1704388650 37 39 25 30 29 0 \n", "19 175 1704388810 37 39 25 30 29 0 \n", "20 175 1704388970 37 39 25 30 29 0 \n", "21 175 1704389130 37 39 25 30 29 0 \n", "22 175 1704389290 37 39 25 30 29 0 \n", "\n", " ddur_7 ddur_8 cycle offset D_n S_n diff \n", "0 0 0 160 57 2560 2560 0 \n", "1 0 0 160 57 2720 2720 160 \n", "2 0 0 160 57 2880 2880 160 \n", "3 0 0 160 57 3040 3040 160 \n", "4 0 0 160 57 3200 3200 160 \n", "5 0 0 92 57 3292 3360 92 \n", "6 0 0 158 57 3450 3520 158 \n", "7 0 0 159 57 3609 3680 159 \n", "8 0 0 161 57 3770 3840 161 \n", "9 0 0 160 57 3930 4000 160 \n", "10 0 0 160 57 4090 4160 160 \n", "11 0 0 160 57 4250 4320 160 \n", "12 0 0 160 57 801 800 160 \n", "13 0 0 160 57 961 960 160 \n", "14 0 0 160 57 1121 1120 160 \n", "15 0 0 160 57 1281 1280 160 \n", "16 0 0 160 57 1441 1440 160 \n", "17 0 0 160 57 1601 1600 160 \n", "18 0 0 160 57 1761 1760 160 \n", "19 0 0 160 57 1921 1920 160 \n", "20 0 0 160 57 2081 2080 160 \n", "21 0 0 160 57 2241 2240 160 \n", "22 0 0 160 57 2401 2400 160 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inter_no = 175\n", "m = 30 # ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n", "fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n", "present_time = fmins[m] # 현재시점\n", "# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n", "# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 1시간 이내인 데이터 수집\n", "rhistory = history.copy() # recent history (3시간 이내)\n", "rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 10800)]\n", "hours = np.array(range(midnight, next_day + 1, 3600))\n", "rhist = rhistory.copy()[rhistory.inter_no == inter_no] # 특정한 inter_no\n", "rhist = rhist.reset_index(drop=True)\n", "print(\"결측치 처리 전\")\n", "rhist_diff = rhist.copy()\n", "rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n", "display(rhist_diff.tail(20)) # 결측치 처리 전\n", "new_rows = []\n", "# 1-1. 결측치 처리 : 인접한 두 end_unix의 차이가 계획된 주기의 두 배보다 크면 결측이 일어났다고 판단\n", "for n in range(len(rhist) - 1):\n", " curr_unix = rhist.iloc[n].end_unix # current end_unix\n", " next_unix = rhist.iloc[n+1].end_unix # next end_unix\n", " cycle = rhist.iloc[n].cycle\n", " if next_unix - curr_unix >= 2 * cycle:\n", " # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n", " #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n", " while next_unix - curr_unix > cycle:\n", " curr_unix += cycle\n", " start_seconds = np.array(timetable.start_seconds)\n", " idx = (start_seconds <= curr_unix).sum() - 1\n", " start_hour = timetable.iloc[idx].start_hour\n", " start_minute = timetable.iloc[idx].start_minute\n", " prow = pland[(pland.inter_no==inter_no) & (pland.start_hour==start_hour) & (pland.start_minute==start_minute)] # planned row\n", " prow = prow.drop(['start_hour', 'start_minute'], axis=1)\n", " prow['end_unix'] = curr_unix\n", " cycle = prow.iloc[0].cycle\n", " display(prow)\n", " new_rows.append(prow)\n", "\n", "rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\n", "print(\"결측치 처리 후\")\n", "rhist_diff = rhist.copy()\n", "rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n", "display(rhist_diff.tail(20)) # 결측치 처리 후\n", "rhist = rhist.reset_index(drop=True)\n", "\n", "# 1-2. 이상치 처리 : 기준유닉스로부터의 시간차이와 현시시간합이 11 이상 차이나면 이상치가 발생했다고 판단\n", "Rhist = rhist.copy() # recent history 1704393231\n", "Rhist = Rhist[(Rhist.end_unix < present_time) & (Rhist.end_unix >= present_time - 3600)] # Recent history (1시간 이내)\n", "Rhist = Rhist.reset_index(drop=True)\n", "# for n in range(len(Rhist)) 이하 : D_n, S_n을 시각적으로 표시하기 위한 코드. 전처리과정과는 무관\n", "Rhist['D_n'] = 0\n", "Rhist['S_n'] = 0\n", "for n in range(len(Rhist)):\n", " curr_unix = Rhist.iloc[n].end_unix # current end_unix\n", " cycle = Rhist.iloc[n].cycle\n", " ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n", " end_unixes = rhist.end_unix.unique()\n", " end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n", " base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n", " # D_n : 시간차이\n", " D_n = curr_unix - base_unix\n", " ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'ddur_{j}' for j in range(1,9)]]\n", " # S_n : 현시시간합\n", " S_n = ddurations.values.sum()\n", " Rhist.loc[n, ['D_n', 'S_n']] = [D_n, S_n]\n", "print(\"이상치 처리 전\")\n", "Rhist_diff = Rhist.copy()\n", "Rhist_diff['diff'] = Rhist_diff['end_unix'].diff().fillna(0).astype(int)\n", "display(Rhist_diff)\n", "n = 1\n", "while n < len(Rhist):\n", " prev_unix = Rhist[Rhist.index==n-1]['end_unix'].iloc[0] # previous end_unix\n", " curr_unix = Rhist[Rhist.index==n]['end_unix'].iloc[0] # current end_unix\n", " R_n = (curr_unix - prev_unix) / cycle\n", " ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n", " end_unixes = rhist.end_unix.unique()\n", " end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n", " base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n", " # D_n : 시간차이\n", " D_n = curr_unix - base_unix\n", " # S_n : 현시시간합\n", " ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'ddur_{j}' for j in range(1,9)]]\n", " S_n = ddurations.values.sum()\n", " print(curr_unix, round(R_n,2), D_n, S_n)\n", " # 1-2-1 비율이 0.5보다 작거나 같으면 해당 행을 삭제\n", " if (abs(D_n - S_n) > 10) & (R_n <= 0.5):\n", " print(\"lt\", n, curr_unix, round(R_n,2), D_n, S_n)\n", " Rhist = Rhist.drop(index=n)\n", " n += 1\n", " # 행삭제에 따른 curr_unix, D_n, S_n 등 재정의\n", " if not Rhist[Rhist.index==n]['end_unix'].empty: # 마지막 행을 삭제하여 뒤의 행이 없을 때를 대비\n", " curr_unix = Rhist[Rhist.index==n]['end_unix'].iloc[0] # current end_unix\n", " R_n = (curr_unix - prev_unix) / cycle\n", " ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n", " end_unixes = rhist.end_unix.unique()\n", " end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n", " base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n", " # D_n : 시간차이\n", " D_n = curr_unix - base_unix\n", " # S_n : 현시시간합\n", " ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'ddur_{j}' for j in range(1,9)]]\n", " S_n = ddurations.values.sum()\n", " # 1-2-1 비율이 0.5보다 크면 해당 행 조정 (비율을 유지한 채로 현시시간 대체)\n", " if (abs(D_n - S_n) > 10) & (R_n > 0.5):\n", " print(\"gt\", n, curr_unix, round(R_n, 2), D_n, S_n)\n", " start_seconds = np.array(timetable.start_seconds)\n", " idx = (start_seconds <= curr_unix).sum() - 1\n", " start_hour = timetable.iloc[idx].start_hour\n", " start_minute = timetable.iloc[idx].start_minute\n", " prow = pland[(pland.inter_no==inter_no) & (pland.start_hour==start_hour) & (pland.start_minute==start_minute)].copy().reset_index(drop=True).iloc[0] # planned row\n", " adjusted_dur = prow[['ddur_1', 'ddur_2', 'ddur_3', 'ddur_4', 'ddur_5', 'ddur_6', 'ddur_7', 'ddur_8']] * R_n\n", " # 조정된 현시시간을 정수로 바꿈\n", " int_parts = adjusted_dur.apply(lambda x: int(x))\n", " frac_parts = adjusted_dur - int_parts\n", " difference = int(round(adjusted_dur.sum())) - int_parts.sum()\n", " # 소수 부분이 가장 큰 상위 'difference'개의 값에 대해 올림 처리\n", " for _ in range(difference):\n", " max_frac_index = frac_parts.idxmax()\n", " int_parts[max_frac_index] += 1\n", " frac_parts[max_frac_index] = 0 # 이미 처리된 항목은 0으로 설정\n", " Rhist.loc[n, ['ddur_1', 'ddur_2', 'ddur_3', 'ddur_4', 'ddur_5', 'ddur_6', 'ddur_7', 'ddur_8']] = int_parts.values\n", " Rhist.loc[n, 'cycle'] = int_parts.sum()\n", " n += 1\n", "print(\"이상치 처리 후\")\n", "Rhist_diff = Rhist.copy()\n", "Rhist_diff['diff'] = Rhist_diff['end_unix'].diff().fillna(0).astype(int)\n", "display(Rhist_diff)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixdur_A1dur_A2dur_A3dur_A4dur_A5dur_A6dur_A7dur_A8dur_B1dur_B2dur_B3dur_B4dur_B5dur_B6dur_B7dur_B8cycle
02061704380520333526260000333526260000120
1211170438052528970000002897000000125
21781704380540383940230000383940230000140
3201170438054024241758170002424175817000140
420217043805403910100000039101000000140
\n", "
" ], "text/plain": [ " inter_no end_unix dur_A1 dur_A2 dur_A3 dur_A4 dur_A5 dur_A6 \\\n", "0 206 1704380520 33 35 26 26 0 0 \n", "1 211 1704380525 28 97 0 0 0 0 \n", "2 178 1704380540 38 39 40 23 0 0 \n", "3 201 1704380540 24 24 17 58 17 0 \n", "4 202 1704380540 39 101 0 0 0 0 \n", "\n", " dur_A7 dur_A8 dur_B1 dur_B2 dur_B3 dur_B4 dur_B5 dur_B6 dur_B7 \\\n", "0 0 0 33 35 26 26 0 0 0 \n", "1 0 0 28 97 0 0 0 0 0 \n", "2 0 0 38 39 40 23 0 0 0 \n", "3 0 0 24 24 17 58 17 0 0 \n", "4 0 0 39 101 0 0 0 0 0 \n", "\n", " dur_B8 cycle \n", "0 0 120 \n", "1 0 125 \n", "2 0 140 \n", "3 0 140 \n", "4 0 140 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 세부현시로 되어있던 history를 A, B로 나뉘어 현시시간이 구성된 형태로 바꿈.\n", "plan = pd.read_csv('../../Data/tables/plan.csv', index_col=0)\n", "history = pd.read_csv('../../Data/tables/history.csv', index_col=0)\n", "\n", "# A, B 분리 혹은 통합시 사용할 수 있는 딕셔너리\n", "splits = {} # splits maps (inter_no, start_hour, start_minute) to split\n", "for i, row in plan.iterrows():\n", " inter_no = row.inter_no\n", " start_hour = row.start_hour\n", " start_minute = row.start_minute\n", " cycle = row.cycle\n", " cums_A = row[[f'dura_A{j}' for j in range(1,9)]].cumsum()\n", " cums_B = row[[f'dura_B{j}' for j in range(1,9)]].cumsum()\n", " splits[(inter_no, start_hour, start_minute)] = {} # split maps (phas_A, phas_B) to k\n", " k = 0\n", " for t in range(cycle):\n", " new_phas_A = len(cums_A[cums_A < t]) + 1\n", " new_phas_B = len(cums_B[cums_B < t]) + 1\n", " if k == 0 or ((new_phas_A, new_phas_B) != (phas_A, phas_B)):\n", " k += 1\n", " phas_A = new_phas_A\n", " phas_B = new_phas_B\n", " splits[(inter_no, start_hour, start_minute)][(phas_A, phas_B)] = k\n", "\n", "# the inverse of splits\n", "isplits = {} # isplit maps k to (phas_A, phas_B)\n", "for i in splits:\n", " isplits[i] = {splits[i][k]:k for k in splits[i]}\n", "\n", "timetable = plan[['start_hour', 'start_minute']].drop_duplicates()\n", "timetable['start_seconds'] = midnight + timetable['start_hour'] * 3600 + timetable['start_minute'] * 60\n", "\n", "abhistory = history.copy() # A, B가 나뉘어진 history\n", "# history의 행들을 순회하며 새로운 열 dur_A1, dur_A2, ... 를 만들어내고 값을 배정함.\n", "for i, row in abhistory.iterrows():\n", " inter_no = row.inter_no\n", " ind = (timetable['start_seconds'] < row.end_unix).sum() - 1\n", " start_hour = timetable.iloc[ind].start_hour\n", " start_minute = timetable.iloc[ind].start_minute\n", " isplit = isplits[(inter_no,start_hour,start_minute)]\n", " dur_dict = {}\n", " dur_chars = [f'dur_{alph}{j}' for alph in ['A', 'B'] for j in range(1, 9)] # 새로운 행들\n", " for dur_char in dur_chars:\n", " dur_dict[dur_char] = 0\n", " for k in range(1, len(isplit)+1): # dur_dict에 값 저장\n", " ja = isplit[k][0] # A현시번호\n", " jb = isplit[k][1] # B현시번호\n", " dur_dict[f'dur_A{ja}'] += row[f'ddur_{k}']\n", " dur_dict[f'dur_B{jb}'] += row[f'ddur_{k}']\n", " for dur_char in dur_chars: # history의 새로운 열들에 값 배정\n", " abhistory.at[i, dur_char] = dur_dict[dur_char]\n", "abhistory = abhistory[['inter_no','end_unix'] + dur_chars + ['cycle']].astype(int)\n", "abhistory = abhistory.astype(int).sort_values(by = ['end_unix','inter_no'])\n", "abhistory.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n", "\n", "def make_histid(m:int):\n", " '''\n", " input : m\n", " - m ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n", " - present_time = fmins[m] : 현재시점\n", " output : histid\n", " - history with edge ids (incoming and outgoing edge ids)\n", " - 현재시점으로부터 한시간동안 (교차로번호, 현시, 링)별 현시시간, 진입엣지id, 진출엣지id\n", " '''\n", " present_time = fmins[m] ####### 현재 시점 ranges from 0 to 287\n", " # - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n", " # 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 1시간 이내인 데이터 수집\n", " rhistory = history.copy()\n", " rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 3600)]\n", " ddurs = [f'ddur_{j}' for j in range(1, 9)]\n", "\n", " # 2. 시작 유닉스 타임컬럼 생성 후 종류 유닉스 타임에서 현시별 현시기간 컬럼의 합을 뺀 값으로 입력\n", " # - 현시시간의 합을 뺀 시간의 +- 10초 이내에 이전 주기정보가 존재하면 그 유닉스 시간을 시작 유닉스시간 값으로 하고, 존재하지 않으면 현시시간의 합을 뺀 유닉스 시간을 시작 유닉스 시간으로 지정\n", " # # 이전 유닉스 존재하지 않음 => 현시시간 합의 차\n", " # # 이전 유닉스 존재, abs < 10 => 이전 유닉스\n", " # # 이전 유닉스 존재, abs >=10 => 현시시간 합의 차\n", " for i, row in rhistory.iterrows():\n", " inter_no = row.inter_no\n", " end_unix = row.end_unix\n", " elapsed_time = row[ddurs].sum()\n", " start_unix = end_unix - elapsed_time\n", " pre_rows = history[:i] # previous rows\n", " if inter_no in pre_rows.inter_no.unique(): # 이전 유닉스 존재\n", " pre_unix = pre_rows[pre_rows.inter_no == inter_no]['end_unix'].iloc[-1] # previous unix time\n", " if abs(pre_unix - start_unix) < 10: # abs < 10\n", " start_unix = pre_unix\n", " else: # abs >= 10\n", " pass\n", " rhistory.loc[i, 'start_unix'] = start_unix\n", " rhistory[rhistory.isna()] = 0\n", " rhistory['start_unix'] = rhistory['start_unix'].astype(int)\n", " # with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n", " # display(rhistory)\n", " rhistory = rhistory[['inter_no', 'start_unix'] + ddurs + ['cycle']]\n", "\n", " # 계층화된 형태로 변환\n", " hrhistory = [] # hierarchied recent history\n", " for i, row in rhistory.iterrows():\n", " inter_no = row.inter_no #\n", " start_unix = row.start_unix #\n", " ind = (timetable['start_seconds'] <= row.start_unix).sum() - 1\n", " start_hour = timetable.iloc[ind].start_hour\n", " start_minute = timetable.iloc[ind].start_minute\n", " isplit = isplits[(inter_no, start_hour, start_minute)]\n", " new_rows = []\n", " for j in isplit.keys():\n", " phas_A, phas_B = isplit[j]\n", " duration = row[f'ddur_{j}']\n", " new_rows.append(pd.DataFrame({'inter_no':[inter_no], 'start_unix':[start_unix],\n", " 'phas_A':[phas_A],'phas_B':[phas_B],'duration':[duration]}))\n", " new_rows = pd.concat(new_rows)\n", " hrhistory.append(new_rows)\n", " hrhistory = pd.concat(hrhistory)\n", " hrhistory = hrhistory.sort_values(by = ['start_unix', 'inter_no', 'phas_A', 'phas_B']).reset_index(drop=True)\n", "\n", " # 5초단위로 수집한 이동류정보(time2movement[present_time])와 최근 1시간 신호이력(hrhistory)을 병합\n", " movedur = pd.merge(time2movement[present_time], hrhistory, how='inner', on=['inter_no', 'start_unix', 'phas_A', 'phas_B'])\n", " # movements and durations\n", " movedur = movedur.sort_values(by=['start_unix', 'inter_no', 'phas_A','phas_B'])\n", " movedur = movedur[['inter_no', 'start_unix', 'phas_A', 'phas_B', 'move_A', 'move_B', 'duration']]\n", " # 이동류 매칭 테이블에서 진입id, 진출id를 가져와서 붙임.\n", " for i, row in movedur.iterrows():\n", " inter_no = row.inter_no\n", " start_unix = row.start_unix\n", " move_A = row.move_A\n", " move_B = row.move_B\n", " match_A = matching[(matching.inter_no == inter_no) & (matching.move_no == move_A)].iloc[0]\n", " match_B = matching[(matching.inter_no == inter_no) & (matching.move_no == move_B)].iloc[0]\n", " inc_edge_A = match_A.inc_edge\n", " inc_edge_B = match_B.inc_edge\n", " out_edge_A = match_A.out_edge\n", " out_edge_B = match_B.out_edge\n", " movedur.loc[i, ['inc_edge_A', 'inc_edge_B', 'out_edge_A', 'out_edge_B']] = [inc_edge_A, inc_edge_B, out_edge_A, out_edge_B]\n", " # 이동류 컬럼 제거\n", " movedur = movedur.drop(['move_A', 'move_B'], axis=1)\n", "\n", " histid = movedur.copy() # history with edge ids (incoming and outgoing edge ids)\n", " return histid" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_noend_unixddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffsetdiff
171751704380721373925302900016057161
261751704380880373925302900016057159
371751704381040373925302900016057160
461751704381200373925302900016057160
551751704381360373925302900016057160
691751704381520373925302900016057160
781751704381680373925302900016057160
881751704381840373925302900016057160
981751704382000373925302900016057160
1071751704382159373925302900016057159
1171751704382320373925302900016057161
1271751704382480373925302900016057160
1371751704382640373925302900016057160
1521751704382801373925302900016057161
1621751704382960373925302900016057159
1711751704383120373925302900016057160
1811751704383280373925302900016057160
1911751704383440373925302900016057160
2001751704383599373925302900016057159
2111751704383760373925302900016057161
2231751704383920373925302900016057160
2321751704384080373925302900016057160
2421751704384241373925302900016057161
2521751704384400373925302900016057159
2611751704384561373925302900016057161
2701751704384720373925302900016057159
2841751704384880373925302900016057160
2931751704385040373925302900016057160
3021751704385200373925302900016057160
3151751704385360373925302900016057160
3251751704385520373925302900016057160
3341751704385679373925302900016057159
3451751704385840373925302900016057161
3551751704386000373925302900016057160
3671751704386160373925302900016057160
3771751704386320373925302900016057160
3861751704386480373925302900016057160
395175170438657237392530290001605792
4041751704386730373925302900016057158
4151751704386889373925302900016057159
4241751704387050373925302900016057161
4331751704387210373925302900016057160
4441751704387370373925302900016057160
4531751704387530373925302900016057160
4651751704387690373925302900016057160
4771751704387850373925302900016057160
4861751704388010373925302900016057160
4951751704388170373925302900016057160
5061751704388330373925302900016057160
5151751704388490373925302900016057160
5241751704388650373925302900016057160
5391751704388810373925302900016057160
5491751704388970373925302900016057160
5581751704389130373925302900016057160
5691751704389290373925302900016057160
5781751704389450373925302900016057160
5871751704389610373925302900016057160
5981751704389770373925302900016057160
6101751704389930373925302900016057160
6191751704390090373925302900016057160
6311751704390250373925302900016057160
6401751704390410373925302900016057160
6491751704390570373925302900016057160
6601751704390731373925302900016057161
6681751704390890373925302900016057159
6811751704391051373925302900016057161
6931751704391210373925302900016057159
7021751704391370373925302900016057160
7121751704391530373925302900016057160
7231751704391690373925302900016057160
7321751704391850373925302900016057160
7411751704392010373925302900016057160
7551751704392170373925302900016057160
7641751704392330373925302900016057160
7731751704392490373925302900016057160
7841751704392651373925302900016057161
7931751704392810373925302900016057159
8021751704392970373925302900016057160
8131751704393130373925302900016057160
8251751704393290373925302900016057160
8341751704393450373925302900016057160
8461751704393610373925302900016057160
8561751704393770373925302900016057160
8651751704393930373925302900016057160
8761751704394090373925302900016057160
8861751704394250373925302900016057160
8981751704394410373925302900016057160
9091751704394570373925302900016057160
9181751704394730373925302900016057160
9271751704394890373925302900016057160
9381751704395050373925302900016057160
9471751704395210373925302900016057160
9561751704395370373925302900016057160
9701751704395530373925302900016057160
9791751704395690373925302900016057160
9881751704395850373925302900016057160
9991751704396010373925302900016057160
10091751704396170373925302900016057160
10181751704396330373925302900016057160
10301751704396490373925302900016057160
10421751704396650373925302900016057160
10521751704396810373925302900016057160
10631751704396970373925302900016057160
10721751704397130373925302900016057160
10811751704397290373925302900016057160
10931751704397451373925302900016057161
11021751704397610373925302900016057159
11131751704397770373925302900016057160
11241751704397930373925302900016057160
11341751704398089373925302900016057159
11421751704398250373925302900016057161
11541751704398410373925302900016057160
11631751704398570373925302900016057160
11731751704398730373925302900016057160
11861751704398890373925302900016057160
11951751704399050373925302900016057160
12061751704399210373925302900016057160
12171751704399370373925302900016057160
12261751704399530373925302900016057160
12351751704399690373925302900016057160
12471751704399850373925302900016057160
12581751704400010373925302900016057160
12671751704400169373925302900016057159
12791751704400330373925302900016057161
12881751704400490373925302900016057160
1291175170440054937392530290001605759
13051751704400710373925302900016057161
13141751704400870373925302900016057160
13251751704401030373925302900016057160
13361751704401190373925302900016057160
13451751704401350373925302900016057160
13541751704401510373925302900016057160
13651751704401670373925302900016057160
13761751704401830373925302900016057160
13861751704401991373925302900016057161
13971751704402150373925302900016057159
14061751704402310373925302900016057160
14161751704402471373925302900016057161
14281751704402630373925302900016057159
14381751704402790373925302900016057160
14481751704402950373925302900016057160
14601751704403110373925302900016057160
14701751704403270373925302900016057160
14791751704403430373925302900016057160
14891751704403590373925302900016057160
14971751704403750373925302900016057160
15061751704403910373925302900016057160
15171751704404070373925302900016057160
15281751704404230373925302900016057160
168617517044071113739253029000160572881
16951751704407280404229263300017040169
17051751704407449404229263300017040169
17151751704407620404229263300017040171
17251751704407791404229263300017040171
17351751704407960404229263300017040169
17451751704408130404229263300017040170
17541751704408300404229263300017040170
17651751704408470404229263300017040170
17741751704408640404229263300017040170
17831751704408810404229263300017040170
17921751704408980404229263300017040170
18041751704409150404229263300017040170
18131751704409320404229263300017040170
18221751704409490404229263300017040170
18331751704409660404229263300017040170
18431751704409831404229263300017040171
18531751704410000404229263300017040169
18631751704410170404229263300017040170
18721751704410340404229263300017040170
18811751704410510404229263300017040170
18911751704410680404229263300017040170
19021751704410850404229263300017040170
19111751704411020404229263300017040170
19201751704411191404229263300017040171
19301751704411360404229263300017040169
19401751704411530404229263300017040170
19491751704411700404229263300017040170
19591751704411869404229263300017040169
19691751704412040404229263300017040171
19781751704412210404229263300017040170
19891751704412380404229263300017040170
19981751704412550404229263300017040170
20081751704412720404229263300017040170
20181751704412890404229263300017040170
20271751704413070434533223700018028180
20381751704413250434533223700018028180
20471751704413430434533223700018028180
20571751704413610434533223700018028180
20661751704413790434533223700018028180
20751751704413970434533223700018028180
20861751704414150434533223700018028180
20951751704414330434533223700018028180
21041751704414510434533223700018028180
21141751704414690434533223700018028180
21261751704414871434533223700018028181
21361751704415050434533223700018028179
21451751704415230434533223700018028180
21551751704415410434533223700018028180
21651751704415590434533223700018028180
21741751704415770434533223700018028180
21851751704415950434533223700018028180
21951751704416130434533223700018028180
22041751704416310434533223700018028180
22141751704416490434533223700018028180
22241751704416671434533223700018028181
22341751704416850434533223700018028179
22431751704417030434533223700018028180
22521751704417210434533223700018028180
22621751704417390434533223700018028180
22711751704417570434533223700018028180
22811751704417750434533223700018028180
22931751704417930434533223700018028180
23021751704418109434533223700018028179
23111751704418290434533223700018028181
23201751704418470434533223700018028180
23311751704418650434533223700018028180
23411751704418830434533223700018028180
23501751704419010434533223700018028180
23601751704419190434533223700018028180
23701751704419370434533223700018028180
23811751704419550434533223700018028180
23901751704419730434533223700018028180
24001751704419909434533223700018028179
24091751704420090434533223700018028181
24181751704420271434533223700018028181
24291751704420450434533223700018028179
24381751704420630434533223700018028180
24481751704420810434533223700018028180
24581751704420990434533223700018028180
24681751704421170434533223700018028180
24781751704421350434533223700018028180
24871751704421530434533223700018028180
24971751704421710434533223700018028180
25071751704421890434533223700018028180
2510175170442194343453322370001802853
25191751704422120434533223700018028177
25291751704422299434533223700018028179
25381751704422480434533223700018028181
25471751704422660434533223700018028180
25581751704422840434533223700018028180
25671751704423021434533223700018028181
25771751704423200434533223700018028179
25871751704423380434533223700018028180
25961751704423561434533223700018028181
26061751704423740434533223700018028179
26151751704423920434533223700018028180
26261751704424100434533223700018028180
26351751704424280434533223700018028180
26441751704424460434533223700018028180
26551751704424640434533223700018028180
26651751704424820434533223700018028180
26741751704424999434533223700018028179
26831751704425180434533223700018028181
26931751704425360434533223700018028180
27031751704425540434533223700018028180
27121751704425719434533223700018028179
27221751704425900434533223700018028181
27321751704426080434533223700018028180
27421751704426260434533223700018028180
27521751704426440434533223700018028180
27621751704426620434533223700018028180
27721751704426800434533223700018028180
27821751704426980434533223700018028180
27901751704427160434533223700018028180
28021751704427341434533223700018028181
28101751704427520434533223700018028179
28221751704427700434533223700018028180
28311751704427880434533223700018028180
28411751704428060434533223700018028180
28491751704428239434533223700018028179
28581751704428420434533223700018028181
28691751704428600434533223700018028180
28791751704428781434533223700018028181
28891751704428960434533223700018028179
28981751704429140434533223700018028180
29081751704429320434533223700018028180
29181751704429500434533223700018028180
29281751704429680434533223700018028180
29381751704429860434533223700018028180
29471751704430040434533223700018028180
29581751704430220434533223700018028180
29711751704430400434533223700018028180
29801751704430580434533223700018028180
29891751704430760434533223700018028180
29971751704430940434533223700018028180
30081751704431120434533223700018028180
30181751704431300434533223700018028180
30271751704431481434533223700018028181
30361751704431660434533223700018028179
30451751704431840434533223700018028180
30551751704432020434533223700018028180
30661751704432200434533223700018028180
30771751704432380434533223700018028180
30861751704432560434533223700018028180
30951751704432740434533223700018028180
31051751704432920434533223700018028180
31131751704433100434533223700018028180
31221751704433280434533223700018028180
31321751704433460434533223700018028180
31401751704433640434533223700018028180
31491751704433820434533223700018028180
31571751704434000434533223700018028180
31661751704434180434533223700018028180
31741751704434360434533223700018028180
31821751704434540434533223700018028180
31911751704434720434533223700018028180
32011751704434899434533223700018028179
32091751704435080434533223700018028181
32181751704435260434533223700018028180
32271751704435440434533223700018028180
32361751704435620434533223700018028180
32441751704435800434533223700018028180
32531751704435980434533223700018028180
32651751704436160434533223700018028180
32731751704436339434533223700018028179
32841751704436520434533223700018028181
32941751704436700434533223700018028180
33021751704436879434533223700018028179
33121751704437060434533223700018028181
33211751704437240434533223700018028180
33311751704437420434533223700018028180
33411751704437600434533223700018028180
33511751704437780434533223700018028180
33611751704437960434533223700018028180
33701751704438140434533223700018028180
33801751704438320434533223700018028180
33901751704438500434533223700018028180
34001751704438681434533223700018028181
34091751704438860434533223700018028179
34201751704439040434533223700018028180
34311751704439220434533223700018028180
34391751704439399434533223700018028179
34491751704439580434533223700018028181
34581751704439759434533223700018028179
34691751704439940434533223700018028181
34781751704440120434533223700018028180
34881751704440300434533223700018028180
34981751704440480434533223700018028180
35061751704440659434533223700018028179
35161751704440840434533223700018028181
35261751704441019434533223700018028179
35361751704441200434533223700018028181
35451751704441380434533223700018028180
35571751704441560434533223700018028180
35661751704441740434533223700018028180
35751751704441920434533223700018028180
35841751704442100434533223700018028180
35941751704442280434533223700018028180
36031751704442459434533223700018028179
36111751704442640434533223700018028181
36231751704442820434533223700018028180
36311751704443000434533223700018028180
36391751704443180434533223700018028180
36481751704443360434533223700018028180
36581751704443540434533223700018028180
36691751704443720434533223700018028180
36781751704443900434533223700018028180
36901751704444080434533223700018028180
36981751704444260434533223700018028180
37061751704444360434533223700018028100
37161751704444541434533223700018028181
37241751704444720434533223700018028179
37341751704444900434533223700018028180
37461751704445081434533223700018028181
37551751704445260434533223700018028179
37631751704445440434533223700018028180
37741751704445620434533223700018028180
37831751704445800434533223700018028180
37951751704445980434533223700018028180
38031751704446159434533223700018028179
38131751704446340434533223700018028181
38231751704446520434533223700018028180
38321751704446700434533223700018028180
38431751704446880434533223700018028180
38521751704447059434533223700018028179
38621751704447250464837184100019018191
38731751704447441464837184100019018191
38821751704447630464837184100019018189
38931751704447821464837184100019018191
39021751704448010464837184100019018189
39121751704448200464837184100019018190
39211751704448390464837184100019018190
39311751704448580464837184100019018190
39411751704448770464837184100019018190
39511751704448960464837184100019018190
39621751704449150464837184100019018190
39701751704449340464837184100019018190
39801751704449530464837184100019018190
39901751704449720464837184100019018190
40001751704449910464837184100019018190
40101751704450101464837184100019018191
40201751704450290464837184100019018189
40291751704450480464837184100019018190
40391751704450670464837184100019018190
40491751704450860464837184100019018190
40571751704451050464837184100019018190
40671751704451240464837184100019018190
40771751704451430464837184100019018190
40861751704451620464837184100019018190
40971751704451810464837184100019018190
41071751704452000464837184100019018190
41161751704452190464837184100019018190
41251751704452380464837184100019018190
41351751704452570464837184100019018190
41441751704452760464837184100019018190
41541751704452950464837184100019018190
41641751704453140464837184100019018190
41741751704453330464837184100019018190
41841751704453520464837184100019018190
41931751704453710464837184100019018190
42021751704453899464837184100019018189
42121751704454090464837184100019018191
42201751704454280464837184100019018190
42311751704454470464837184100019018190
42401751704454660464837184100019018190
42501751704454849464837184100019018189
42611751704455040464837184100019018191
42691751704455230464837184100019018190
42791751704455419464837184100019018189
42881751704455610464837184100019018191
42971751704455800464837184100019018190
43081751704455989464837184100019018189
43171751704456180464837184100019018191
43271751704456370464837184100019018190
43361751704456560464837184100019018190
43471751704456750464837184100019018190
43571751704456940464837184100019018190
43681751704457130464837184100019018190
43771751704457320464837184100019018190
43871751704457510464837184100019018190
43961751704457700464837184100019018190
44051751704457890464837184100019018190
44171751704458080464837184100019018190
44271751704458270464837184100019018190
44351751704458460464837184100019018190
44471751704458650464837184100019018190
44561751704458840464837184100019018190
44651751704459030464837184100019018190
44761751704459220464837184100019018190
44841751704459410464837184100019018190
44931751704459600464837184100019018190
45041751704459791464837184100019018191
45131751704459980464837184100019018189
45241751704460170464837184100019018190
45351751704460361464837184100019018191
45441751704460550464837184100019018189
45551751704460740464837184100019018190
45631751704460930464837184100019018190
45731751704461120464837184100019018190
45841751704461310464837184100019018190
45931751704461500464837184100019018190
46031751704461690464837184100019018190
46121751704461880464837184100019018190
46241751704462070464837184100019018190
46321751704462260464837184100019018190
46431751704462451464837184100019018191
46521751704462640464837184100019018189
46611751704462830464837184100019018190
46721751704463020464837184100019018190
46821751704463210464837184100019018190
46911751704463400464837184100019018190
47021751704463590464837184100019018190
47111751704463781464837184100019018191
47211751704463970464837184100019018189
47311751704464160464837184100019018190
47411751704464350464837184100019018190
47501751704464540464837184100019018190
47601751704464730464837184100019018190
47701751704464920464837184100019018190
47811751704465110464837184100019018190
47901751704465300464837184100019018190
47981751704465490464837184100019018190
48091751704465680464837184100019018190
48171751704465870464837184100019018190
48261751704466060464837184100019018190
48381751704466250464837184100019018190
48471751704466439464837184100019018189
48591751704466630464837184100019018191
\n", "
" ], "text/plain": [ " inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n", "17 175 1704380721 37 39 25 30 29 0 \n", "26 175 1704380880 37 39 25 30 29 0 \n", "37 175 1704381040 37 39 25 30 29 0 \n", "46 175 1704381200 37 39 25 30 29 0 \n", "55 175 1704381360 37 39 25 30 29 0 \n", "69 175 1704381520 37 39 25 30 29 0 \n", "78 175 1704381680 37 39 25 30 29 0 \n", "88 175 1704381840 37 39 25 30 29 0 \n", "98 175 1704382000 37 39 25 30 29 0 \n", "107 175 1704382159 37 39 25 30 29 0 \n", "117 175 1704382320 37 39 25 30 29 0 \n", "127 175 1704382480 37 39 25 30 29 0 \n", "137 175 1704382640 37 39 25 30 29 0 \n", "152 175 1704382801 37 39 25 30 29 0 \n", "162 175 1704382960 37 39 25 30 29 0 \n", "171 175 1704383120 37 39 25 30 29 0 \n", "181 175 1704383280 37 39 25 30 29 0 \n", "191 175 1704383440 37 39 25 30 29 0 \n", "200 175 1704383599 37 39 25 30 29 0 \n", "211 175 1704383760 37 39 25 30 29 0 \n", "223 175 1704383920 37 39 25 30 29 0 \n", "232 175 1704384080 37 39 25 30 29 0 \n", "242 175 1704384241 37 39 25 30 29 0 \n", "252 175 1704384400 37 39 25 30 29 0 \n", "261 175 1704384561 37 39 25 30 29 0 \n", "270 175 1704384720 37 39 25 30 29 0 \n", "284 175 1704384880 37 39 25 30 29 0 \n", "293 175 1704385040 37 39 25 30 29 0 \n", "302 175 1704385200 37 39 25 30 29 0 \n", "315 175 1704385360 37 39 25 30 29 0 \n", "325 175 1704385520 37 39 25 30 29 0 \n", "334 175 1704385679 37 39 25 30 29 0 \n", "345 175 1704385840 37 39 25 30 29 0 \n", "355 175 1704386000 37 39 25 30 29 0 \n", "367 175 1704386160 37 39 25 30 29 0 \n", "377 175 1704386320 37 39 25 30 29 0 \n", "386 175 1704386480 37 39 25 30 29 0 \n", "395 175 1704386572 37 39 25 30 29 0 \n", "404 175 1704386730 37 39 25 30 29 0 \n", "415 175 1704386889 37 39 25 30 29 0 \n", "424 175 1704387050 37 39 25 30 29 0 \n", "433 175 1704387210 37 39 25 30 29 0 \n", "444 175 1704387370 37 39 25 30 29 0 \n", "453 175 1704387530 37 39 25 30 29 0 \n", "465 175 1704387690 37 39 25 30 29 0 \n", "477 175 1704387850 37 39 25 30 29 0 \n", "486 175 1704388010 37 39 25 30 29 0 \n", "495 175 1704388170 37 39 25 30 29 0 \n", "506 175 1704388330 37 39 25 30 29 0 \n", "515 175 1704388490 37 39 25 30 29 0 \n", "524 175 1704388650 37 39 25 30 29 0 \n", "539 175 1704388810 37 39 25 30 29 0 \n", "549 175 1704388970 37 39 25 30 29 0 \n", "558 175 1704389130 37 39 25 30 29 0 \n", "569 175 1704389290 37 39 25 30 29 0 \n", "578 175 1704389450 37 39 25 30 29 0 \n", "587 175 1704389610 37 39 25 30 29 0 \n", "598 175 1704389770 37 39 25 30 29 0 \n", "610 175 1704389930 37 39 25 30 29 0 \n", "619 175 1704390090 37 39 25 30 29 0 \n", "631 175 1704390250 37 39 25 30 29 0 \n", "640 175 1704390410 37 39 25 30 29 0 \n", "649 175 1704390570 37 39 25 30 29 0 \n", "660 175 1704390731 37 39 25 30 29 0 \n", "668 175 1704390890 37 39 25 30 29 0 \n", "681 175 1704391051 37 39 25 30 29 0 \n", "693 175 1704391210 37 39 25 30 29 0 \n", "702 175 1704391370 37 39 25 30 29 0 \n", "712 175 1704391530 37 39 25 30 29 0 \n", "723 175 1704391690 37 39 25 30 29 0 \n", "732 175 1704391850 37 39 25 30 29 0 \n", "741 175 1704392010 37 39 25 30 29 0 \n", "755 175 1704392170 37 39 25 30 29 0 \n", "764 175 1704392330 37 39 25 30 29 0 \n", "773 175 1704392490 37 39 25 30 29 0 \n", "784 175 1704392651 37 39 25 30 29 0 \n", "793 175 1704392810 37 39 25 30 29 0 \n", "802 175 1704392970 37 39 25 30 29 0 \n", "813 175 1704393130 37 39 25 30 29 0 \n", "825 175 1704393290 37 39 25 30 29 0 \n", "834 175 1704393450 37 39 25 30 29 0 \n", "846 175 1704393610 37 39 25 30 29 0 \n", "856 175 1704393770 37 39 25 30 29 0 \n", "865 175 1704393930 37 39 25 30 29 0 \n", "876 175 1704394090 37 39 25 30 29 0 \n", "886 175 1704394250 37 39 25 30 29 0 \n", "898 175 1704394410 37 39 25 30 29 0 \n", "909 175 1704394570 37 39 25 30 29 0 \n", "918 175 1704394730 37 39 25 30 29 0 \n", "927 175 1704394890 37 39 25 30 29 0 \n", "938 175 1704395050 37 39 25 30 29 0 \n", "947 175 1704395210 37 39 25 30 29 0 \n", "956 175 1704395370 37 39 25 30 29 0 \n", "970 175 1704395530 37 39 25 30 29 0 \n", "979 175 1704395690 37 39 25 30 29 0 \n", "988 175 1704395850 37 39 25 30 29 0 \n", "999 175 1704396010 37 39 25 30 29 0 \n", "1009 175 1704396170 37 39 25 30 29 0 \n", "1018 175 1704396330 37 39 25 30 29 0 \n", "1030 175 1704396490 37 39 25 30 29 0 \n", "1042 175 1704396650 37 39 25 30 29 0 \n", "1052 175 1704396810 37 39 25 30 29 0 \n", "1063 175 1704396970 37 39 25 30 29 0 \n", "1072 175 1704397130 37 39 25 30 29 0 \n", "1081 175 1704397290 37 39 25 30 29 0 \n", "1093 175 1704397451 37 39 25 30 29 0 \n", "1102 175 1704397610 37 39 25 30 29 0 \n", "1113 175 1704397770 37 39 25 30 29 0 \n", "1124 175 1704397930 37 39 25 30 29 0 \n", "1134 175 1704398089 37 39 25 30 29 0 \n", "1142 175 1704398250 37 39 25 30 29 0 \n", "1154 175 1704398410 37 39 25 30 29 0 \n", "1163 175 1704398570 37 39 25 30 29 0 \n", "1173 175 1704398730 37 39 25 30 29 0 \n", "1186 175 1704398890 37 39 25 30 29 0 \n", "1195 175 1704399050 37 39 25 30 29 0 \n", "1206 175 1704399210 37 39 25 30 29 0 \n", "1217 175 1704399370 37 39 25 30 29 0 \n", "1226 175 1704399530 37 39 25 30 29 0 \n", "1235 175 1704399690 37 39 25 30 29 0 \n", "1247 175 1704399850 37 39 25 30 29 0 \n", "1258 175 1704400010 37 39 25 30 29 0 \n", "1267 175 1704400169 37 39 25 30 29 0 \n", "1279 175 1704400330 37 39 25 30 29 0 \n", "1288 175 1704400490 37 39 25 30 29 0 \n", "1291 175 1704400549 37 39 25 30 29 0 \n", "1305 175 1704400710 37 39 25 30 29 0 \n", "1314 175 1704400870 37 39 25 30 29 0 \n", "1325 175 1704401030 37 39 25 30 29 0 \n", "1336 175 1704401190 37 39 25 30 29 0 \n", "1345 175 1704401350 37 39 25 30 29 0 \n", "1354 175 1704401510 37 39 25 30 29 0 \n", "1365 175 1704401670 37 39 25 30 29 0 \n", "1376 175 1704401830 37 39 25 30 29 0 \n", "1386 175 1704401991 37 39 25 30 29 0 \n", "1397 175 1704402150 37 39 25 30 29 0 \n", "1406 175 1704402310 37 39 25 30 29 0 \n", "1416 175 1704402471 37 39 25 30 29 0 \n", "1428 175 1704402630 37 39 25 30 29 0 \n", "1438 175 1704402790 37 39 25 30 29 0 \n", "1448 175 1704402950 37 39 25 30 29 0 \n", "1460 175 1704403110 37 39 25 30 29 0 \n", "1470 175 1704403270 37 39 25 30 29 0 \n", "1479 175 1704403430 37 39 25 30 29 0 \n", "1489 175 1704403590 37 39 25 30 29 0 \n", "1497 175 1704403750 37 39 25 30 29 0 \n", "1506 175 1704403910 37 39 25 30 29 0 \n", "1517 175 1704404070 37 39 25 30 29 0 \n", "1528 175 1704404230 37 39 25 30 29 0 \n", "1686 175 1704407111 37 39 25 30 29 0 \n", "1695 175 1704407280 40 42 29 26 33 0 \n", "1705 175 1704407449 40 42 29 26 33 0 \n", "1715 175 1704407620 40 42 29 26 33 0 \n", "1725 175 1704407791 40 42 29 26 33 0 \n", "1735 175 1704407960 40 42 29 26 33 0 \n", "1745 175 1704408130 40 42 29 26 33 0 \n", "1754 175 1704408300 40 42 29 26 33 0 \n", "1765 175 1704408470 40 42 29 26 33 0 \n", "1774 175 1704408640 40 42 29 26 33 0 \n", "1783 175 1704408810 40 42 29 26 33 0 \n", "1792 175 1704408980 40 42 29 26 33 0 \n", "1804 175 1704409150 40 42 29 26 33 0 \n", "1813 175 1704409320 40 42 29 26 33 0 \n", "1822 175 1704409490 40 42 29 26 33 0 \n", "1833 175 1704409660 40 42 29 26 33 0 \n", "1843 175 1704409831 40 42 29 26 33 0 \n", "1853 175 1704410000 40 42 29 26 33 0 \n", "1863 175 1704410170 40 42 29 26 33 0 \n", "1872 175 1704410340 40 42 29 26 33 0 \n", "1881 175 1704410510 40 42 29 26 33 0 \n", "1891 175 1704410680 40 42 29 26 33 0 \n", "1902 175 1704410850 40 42 29 26 33 0 \n", "1911 175 1704411020 40 42 29 26 33 0 \n", "1920 175 1704411191 40 42 29 26 33 0 \n", "1930 175 1704411360 40 42 29 26 33 0 \n", "1940 175 1704411530 40 42 29 26 33 0 \n", "1949 175 1704411700 40 42 29 26 33 0 \n", "1959 175 1704411869 40 42 29 26 33 0 \n", "1969 175 1704412040 40 42 29 26 33 0 \n", "1978 175 1704412210 40 42 29 26 33 0 \n", "1989 175 1704412380 40 42 29 26 33 0 \n", "1998 175 1704412550 40 42 29 26 33 0 \n", "2008 175 1704412720 40 42 29 26 33 0 \n", "2018 175 1704412890 40 42 29 26 33 0 \n", "2027 175 1704413070 43 45 33 22 37 0 \n", "2038 175 1704413250 43 45 33 22 37 0 \n", "2047 175 1704413430 43 45 33 22 37 0 \n", "2057 175 1704413610 43 45 33 22 37 0 \n", "2066 175 1704413790 43 45 33 22 37 0 \n", "2075 175 1704413970 43 45 33 22 37 0 \n", "2086 175 1704414150 43 45 33 22 37 0 \n", "2095 175 1704414330 43 45 33 22 37 0 \n", "2104 175 1704414510 43 45 33 22 37 0 \n", "2114 175 1704414690 43 45 33 22 37 0 \n", "2126 175 1704414871 43 45 33 22 37 0 \n", "2136 175 1704415050 43 45 33 22 37 0 \n", "2145 175 1704415230 43 45 33 22 37 0 \n", "2155 175 1704415410 43 45 33 22 37 0 \n", "2165 175 1704415590 43 45 33 22 37 0 \n", "2174 175 1704415770 43 45 33 22 37 0 \n", "2185 175 1704415950 43 45 33 22 37 0 \n", "2195 175 1704416130 43 45 33 22 37 0 \n", "2204 175 1704416310 43 45 33 22 37 0 \n", "2214 175 1704416490 43 45 33 22 37 0 \n", "2224 175 1704416671 43 45 33 22 37 0 \n", "2234 175 1704416850 43 45 33 22 37 0 \n", "2243 175 1704417030 43 45 33 22 37 0 \n", "2252 175 1704417210 43 45 33 22 37 0 \n", "2262 175 1704417390 43 45 33 22 37 0 \n", "2271 175 1704417570 43 45 33 22 37 0 \n", "2281 175 1704417750 43 45 33 22 37 0 \n", "2293 175 1704417930 43 45 33 22 37 0 \n", "2302 175 1704418109 43 45 33 22 37 0 \n", "2311 175 1704418290 43 45 33 22 37 0 \n", "2320 175 1704418470 43 45 33 22 37 0 \n", "2331 175 1704418650 43 45 33 22 37 0 \n", "2341 175 1704418830 43 45 33 22 37 0 \n", "2350 175 1704419010 43 45 33 22 37 0 \n", "2360 175 1704419190 43 45 33 22 37 0 \n", "2370 175 1704419370 43 45 33 22 37 0 \n", "2381 175 1704419550 43 45 33 22 37 0 \n", "2390 175 1704419730 43 45 33 22 37 0 \n", "2400 175 1704419909 43 45 33 22 37 0 \n", "2409 175 1704420090 43 45 33 22 37 0 \n", "2418 175 1704420271 43 45 33 22 37 0 \n", "2429 175 1704420450 43 45 33 22 37 0 \n", "2438 175 1704420630 43 45 33 22 37 0 \n", "2448 175 1704420810 43 45 33 22 37 0 \n", "2458 175 1704420990 43 45 33 22 37 0 \n", "2468 175 1704421170 43 45 33 22 37 0 \n", "2478 175 1704421350 43 45 33 22 37 0 \n", "2487 175 1704421530 43 45 33 22 37 0 \n", "2497 175 1704421710 43 45 33 22 37 0 \n", "2507 175 1704421890 43 45 33 22 37 0 \n", "2510 175 1704421943 43 45 33 22 37 0 \n", "2519 175 1704422120 43 45 33 22 37 0 \n", "2529 175 1704422299 43 45 33 22 37 0 \n", "2538 175 1704422480 43 45 33 22 37 0 \n", "2547 175 1704422660 43 45 33 22 37 0 \n", "2558 175 1704422840 43 45 33 22 37 0 \n", "2567 175 1704423021 43 45 33 22 37 0 \n", "2577 175 1704423200 43 45 33 22 37 0 \n", "2587 175 1704423380 43 45 33 22 37 0 \n", "2596 175 1704423561 43 45 33 22 37 0 \n", "2606 175 1704423740 43 45 33 22 37 0 \n", "2615 175 1704423920 43 45 33 22 37 0 \n", "2626 175 1704424100 43 45 33 22 37 0 \n", "2635 175 1704424280 43 45 33 22 37 0 \n", "2644 175 1704424460 43 45 33 22 37 0 \n", "2655 175 1704424640 43 45 33 22 37 0 \n", "2665 175 1704424820 43 45 33 22 37 0 \n", "2674 175 1704424999 43 45 33 22 37 0 \n", "2683 175 1704425180 43 45 33 22 37 0 \n", "2693 175 1704425360 43 45 33 22 37 0 \n", "2703 175 1704425540 43 45 33 22 37 0 \n", "2712 175 1704425719 43 45 33 22 37 0 \n", "2722 175 1704425900 43 45 33 22 37 0 \n", "2732 175 1704426080 43 45 33 22 37 0 \n", "2742 175 1704426260 43 45 33 22 37 0 \n", "2752 175 1704426440 43 45 33 22 37 0 \n", "2762 175 1704426620 43 45 33 22 37 0 \n", "2772 175 1704426800 43 45 33 22 37 0 \n", "2782 175 1704426980 43 45 33 22 37 0 \n", "2790 175 1704427160 43 45 33 22 37 0 \n", "2802 175 1704427341 43 45 33 22 37 0 \n", "2810 175 1704427520 43 45 33 22 37 0 \n", "2822 175 1704427700 43 45 33 22 37 0 \n", "2831 175 1704427880 43 45 33 22 37 0 \n", "2841 175 1704428060 43 45 33 22 37 0 \n", "2849 175 1704428239 43 45 33 22 37 0 \n", "2858 175 1704428420 43 45 33 22 37 0 \n", "2869 175 1704428600 43 45 33 22 37 0 \n", "2879 175 1704428781 43 45 33 22 37 0 \n", "2889 175 1704428960 43 45 33 22 37 0 \n", "2898 175 1704429140 43 45 33 22 37 0 \n", "2908 175 1704429320 43 45 33 22 37 0 \n", "2918 175 1704429500 43 45 33 22 37 0 \n", "2928 175 1704429680 43 45 33 22 37 0 \n", "2938 175 1704429860 43 45 33 22 37 0 \n", "2947 175 1704430040 43 45 33 22 37 0 \n", "2958 175 1704430220 43 45 33 22 37 0 \n", "2971 175 1704430400 43 45 33 22 37 0 \n", "2980 175 1704430580 43 45 33 22 37 0 \n", "2989 175 1704430760 43 45 33 22 37 0 \n", "2997 175 1704430940 43 45 33 22 37 0 \n", "3008 175 1704431120 43 45 33 22 37 0 \n", "3018 175 1704431300 43 45 33 22 37 0 \n", "3027 175 1704431481 43 45 33 22 37 0 \n", "3036 175 1704431660 43 45 33 22 37 0 \n", "3045 175 1704431840 43 45 33 22 37 0 \n", "3055 175 1704432020 43 45 33 22 37 0 \n", "3066 175 1704432200 43 45 33 22 37 0 \n", "3077 175 1704432380 43 45 33 22 37 0 \n", "3086 175 1704432560 43 45 33 22 37 0 \n", "3095 175 1704432740 43 45 33 22 37 0 \n", "3105 175 1704432920 43 45 33 22 37 0 \n", "3113 175 1704433100 43 45 33 22 37 0 \n", "3122 175 1704433280 43 45 33 22 37 0 \n", "3132 175 1704433460 43 45 33 22 37 0 \n", "3140 175 1704433640 43 45 33 22 37 0 \n", "3149 175 1704433820 43 45 33 22 37 0 \n", "3157 175 1704434000 43 45 33 22 37 0 \n", "3166 175 1704434180 43 45 33 22 37 0 \n", "3174 175 1704434360 43 45 33 22 37 0 \n", "3182 175 1704434540 43 45 33 22 37 0 \n", "3191 175 1704434720 43 45 33 22 37 0 \n", "3201 175 1704434899 43 45 33 22 37 0 \n", "3209 175 1704435080 43 45 33 22 37 0 \n", "3218 175 1704435260 43 45 33 22 37 0 \n", "3227 175 1704435440 43 45 33 22 37 0 \n", "3236 175 1704435620 43 45 33 22 37 0 \n", "3244 175 1704435800 43 45 33 22 37 0 \n", "3253 175 1704435980 43 45 33 22 37 0 \n", "3265 175 1704436160 43 45 33 22 37 0 \n", "3273 175 1704436339 43 45 33 22 37 0 \n", "3284 175 1704436520 43 45 33 22 37 0 \n", "3294 175 1704436700 43 45 33 22 37 0 \n", "3302 175 1704436879 43 45 33 22 37 0 \n", "3312 175 1704437060 43 45 33 22 37 0 \n", "3321 175 1704437240 43 45 33 22 37 0 \n", "3331 175 1704437420 43 45 33 22 37 0 \n", "3341 175 1704437600 43 45 33 22 37 0 \n", "3351 175 1704437780 43 45 33 22 37 0 \n", "3361 175 1704437960 43 45 33 22 37 0 \n", "3370 175 1704438140 43 45 33 22 37 0 \n", "3380 175 1704438320 43 45 33 22 37 0 \n", "3390 175 1704438500 43 45 33 22 37 0 \n", "3400 175 1704438681 43 45 33 22 37 0 \n", "3409 175 1704438860 43 45 33 22 37 0 \n", "3420 175 1704439040 43 45 33 22 37 0 \n", "3431 175 1704439220 43 45 33 22 37 0 \n", "3439 175 1704439399 43 45 33 22 37 0 \n", "3449 175 1704439580 43 45 33 22 37 0 \n", "3458 175 1704439759 43 45 33 22 37 0 \n", "3469 175 1704439940 43 45 33 22 37 0 \n", "3478 175 1704440120 43 45 33 22 37 0 \n", "3488 175 1704440300 43 45 33 22 37 0 \n", "3498 175 1704440480 43 45 33 22 37 0 \n", "3506 175 1704440659 43 45 33 22 37 0 \n", "3516 175 1704440840 43 45 33 22 37 0 \n", "3526 175 1704441019 43 45 33 22 37 0 \n", "3536 175 1704441200 43 45 33 22 37 0 \n", "3545 175 1704441380 43 45 33 22 37 0 \n", "3557 175 1704441560 43 45 33 22 37 0 \n", "3566 175 1704441740 43 45 33 22 37 0 \n", "3575 175 1704441920 43 45 33 22 37 0 \n", "3584 175 1704442100 43 45 33 22 37 0 \n", "3594 175 1704442280 43 45 33 22 37 0 \n", "3603 175 1704442459 43 45 33 22 37 0 \n", "3611 175 1704442640 43 45 33 22 37 0 \n", "3623 175 1704442820 43 45 33 22 37 0 \n", "3631 175 1704443000 43 45 33 22 37 0 \n", "3639 175 1704443180 43 45 33 22 37 0 \n", "3648 175 1704443360 43 45 33 22 37 0 \n", "3658 175 1704443540 43 45 33 22 37 0 \n", "3669 175 1704443720 43 45 33 22 37 0 \n", "3678 175 1704443900 43 45 33 22 37 0 \n", "3690 175 1704444080 43 45 33 22 37 0 \n", "3698 175 1704444260 43 45 33 22 37 0 \n", "3706 175 1704444360 43 45 33 22 37 0 \n", "3716 175 1704444541 43 45 33 22 37 0 \n", "3724 175 1704444720 43 45 33 22 37 0 \n", "3734 175 1704444900 43 45 33 22 37 0 \n", "3746 175 1704445081 43 45 33 22 37 0 \n", "3755 175 1704445260 43 45 33 22 37 0 \n", "3763 175 1704445440 43 45 33 22 37 0 \n", "3774 175 1704445620 43 45 33 22 37 0 \n", "3783 175 1704445800 43 45 33 22 37 0 \n", "3795 175 1704445980 43 45 33 22 37 0 \n", "3803 175 1704446159 43 45 33 22 37 0 \n", "3813 175 1704446340 43 45 33 22 37 0 \n", "3823 175 1704446520 43 45 33 22 37 0 \n", "3832 175 1704446700 43 45 33 22 37 0 \n", "3843 175 1704446880 43 45 33 22 37 0 \n", "3852 175 1704447059 43 45 33 22 37 0 \n", "3862 175 1704447250 46 48 37 18 41 0 \n", "3873 175 1704447441 46 48 37 18 41 0 \n", "3882 175 1704447630 46 48 37 18 41 0 \n", "3893 175 1704447821 46 48 37 18 41 0 \n", "3902 175 1704448010 46 48 37 18 41 0 \n", "3912 175 1704448200 46 48 37 18 41 0 \n", "3921 175 1704448390 46 48 37 18 41 0 \n", "3931 175 1704448580 46 48 37 18 41 0 \n", "3941 175 1704448770 46 48 37 18 41 0 \n", "3951 175 1704448960 46 48 37 18 41 0 \n", "3962 175 1704449150 46 48 37 18 41 0 \n", "3970 175 1704449340 46 48 37 18 41 0 \n", "3980 175 1704449530 46 48 37 18 41 0 \n", "3990 175 1704449720 46 48 37 18 41 0 \n", "4000 175 1704449910 46 48 37 18 41 0 \n", "4010 175 1704450101 46 48 37 18 41 0 \n", "4020 175 1704450290 46 48 37 18 41 0 \n", "4029 175 1704450480 46 48 37 18 41 0 \n", "4039 175 1704450670 46 48 37 18 41 0 \n", "4049 175 1704450860 46 48 37 18 41 0 \n", "4057 175 1704451050 46 48 37 18 41 0 \n", "4067 175 1704451240 46 48 37 18 41 0 \n", "4077 175 1704451430 46 48 37 18 41 0 \n", "4086 175 1704451620 46 48 37 18 41 0 \n", "4097 175 1704451810 46 48 37 18 41 0 \n", "4107 175 1704452000 46 48 37 18 41 0 \n", "4116 175 1704452190 46 48 37 18 41 0 \n", "4125 175 1704452380 46 48 37 18 41 0 \n", "4135 175 1704452570 46 48 37 18 41 0 \n", "4144 175 1704452760 46 48 37 18 41 0 \n", "4154 175 1704452950 46 48 37 18 41 0 \n", "4164 175 1704453140 46 48 37 18 41 0 \n", "4174 175 1704453330 46 48 37 18 41 0 \n", "4184 175 1704453520 46 48 37 18 41 0 \n", "4193 175 1704453710 46 48 37 18 41 0 \n", "4202 175 1704453899 46 48 37 18 41 0 \n", "4212 175 1704454090 46 48 37 18 41 0 \n", "4220 175 1704454280 46 48 37 18 41 0 \n", "4231 175 1704454470 46 48 37 18 41 0 \n", "4240 175 1704454660 46 48 37 18 41 0 \n", "4250 175 1704454849 46 48 37 18 41 0 \n", "4261 175 1704455040 46 48 37 18 41 0 \n", "4269 175 1704455230 46 48 37 18 41 0 \n", "4279 175 1704455419 46 48 37 18 41 0 \n", "4288 175 1704455610 46 48 37 18 41 0 \n", "4297 175 1704455800 46 48 37 18 41 0 \n", "4308 175 1704455989 46 48 37 18 41 0 \n", "4317 175 1704456180 46 48 37 18 41 0 \n", "4327 175 1704456370 46 48 37 18 41 0 \n", "4336 175 1704456560 46 48 37 18 41 0 \n", "4347 175 1704456750 46 48 37 18 41 0 \n", "4357 175 1704456940 46 48 37 18 41 0 \n", "4368 175 1704457130 46 48 37 18 41 0 \n", "4377 175 1704457320 46 48 37 18 41 0 \n", "4387 175 1704457510 46 48 37 18 41 0 \n", "4396 175 1704457700 46 48 37 18 41 0 \n", "4405 175 1704457890 46 48 37 18 41 0 \n", "4417 175 1704458080 46 48 37 18 41 0 \n", "4427 175 1704458270 46 48 37 18 41 0 \n", "4435 175 1704458460 46 48 37 18 41 0 \n", "4447 175 1704458650 46 48 37 18 41 0 \n", "4456 175 1704458840 46 48 37 18 41 0 \n", "4465 175 1704459030 46 48 37 18 41 0 \n", "4476 175 1704459220 46 48 37 18 41 0 \n", "4484 175 1704459410 46 48 37 18 41 0 \n", "4493 175 1704459600 46 48 37 18 41 0 \n", "4504 175 1704459791 46 48 37 18 41 0 \n", "4513 175 1704459980 46 48 37 18 41 0 \n", "4524 175 1704460170 46 48 37 18 41 0 \n", "4535 175 1704460361 46 48 37 18 41 0 \n", "4544 175 1704460550 46 48 37 18 41 0 \n", "4555 175 1704460740 46 48 37 18 41 0 \n", "4563 175 1704460930 46 48 37 18 41 0 \n", "4573 175 1704461120 46 48 37 18 41 0 \n", "4584 175 1704461310 46 48 37 18 41 0 \n", "4593 175 1704461500 46 48 37 18 41 0 \n", "4603 175 1704461690 46 48 37 18 41 0 \n", "4612 175 1704461880 46 48 37 18 41 0 \n", "4624 175 1704462070 46 48 37 18 41 0 \n", "4632 175 1704462260 46 48 37 18 41 0 \n", "4643 175 1704462451 46 48 37 18 41 0 \n", "4652 175 1704462640 46 48 37 18 41 0 \n", "4661 175 1704462830 46 48 37 18 41 0 \n", "4672 175 1704463020 46 48 37 18 41 0 \n", "4682 175 1704463210 46 48 37 18 41 0 \n", "4691 175 1704463400 46 48 37 18 41 0 \n", "4702 175 1704463590 46 48 37 18 41 0 \n", "4711 175 1704463781 46 48 37 18 41 0 \n", "4721 175 1704463970 46 48 37 18 41 0 \n", "4731 175 1704464160 46 48 37 18 41 0 \n", "4741 175 1704464350 46 48 37 18 41 0 \n", "4750 175 1704464540 46 48 37 18 41 0 \n", "4760 175 1704464730 46 48 37 18 41 0 \n", "4770 175 1704464920 46 48 37 18 41 0 \n", "4781 175 1704465110 46 48 37 18 41 0 \n", "4790 175 1704465300 46 48 37 18 41 0 \n", "4798 175 1704465490 46 48 37 18 41 0 \n", "4809 175 1704465680 46 48 37 18 41 0 \n", "4817 175 1704465870 46 48 37 18 41 0 \n", "4826 175 1704466060 46 48 37 18 41 0 \n", "4838 175 1704466250 46 48 37 18 41 0 \n", "4847 175 1704466439 46 48 37 18 41 0 \n", "4859 175 1704466630 46 48 37 18 41 0 \n", "\n", " ddur_7 ddur_8 cycle offset diff \n", "17 0 0 160 57 161 \n", "26 0 0 160 57 159 \n", "37 0 0 160 57 160 \n", "46 0 0 160 57 160 \n", "55 0 0 160 57 160 \n", "69 0 0 160 57 160 \n", "78 0 0 160 57 160 \n", "88 0 0 160 57 160 \n", "98 0 0 160 57 160 \n", "107 0 0 160 57 159 \n", "117 0 0 160 57 161 \n", "127 0 0 160 57 160 \n", "137 0 0 160 57 160 \n", "152 0 0 160 57 161 \n", "162 0 0 160 57 159 \n", "171 0 0 160 57 160 \n", "181 0 0 160 57 160 \n", "191 0 0 160 57 160 \n", "200 0 0 160 57 159 \n", "211 0 0 160 57 161 \n", "223 0 0 160 57 160 \n", "232 0 0 160 57 160 \n", "242 0 0 160 57 161 \n", "252 0 0 160 57 159 \n", "261 0 0 160 57 161 \n", "270 0 0 160 57 159 \n", "284 0 0 160 57 160 \n", "293 0 0 160 57 160 \n", "302 0 0 160 57 160 \n", "315 0 0 160 57 160 \n", "325 0 0 160 57 160 \n", "334 0 0 160 57 159 \n", "345 0 0 160 57 161 \n", "355 0 0 160 57 160 \n", "367 0 0 160 57 160 \n", "377 0 0 160 57 160 \n", "386 0 0 160 57 160 \n", "395 0 0 160 57 92 \n", "404 0 0 160 57 158 \n", "415 0 0 160 57 159 \n", "424 0 0 160 57 161 \n", "433 0 0 160 57 160 \n", "444 0 0 160 57 160 \n", "453 0 0 160 57 160 \n", "465 0 0 160 57 160 \n", "477 0 0 160 57 160 \n", "486 0 0 160 57 160 \n", "495 0 0 160 57 160 \n", "506 0 0 160 57 160 \n", "515 0 0 160 57 160 \n", "524 0 0 160 57 160 \n", "539 0 0 160 57 160 \n", "549 0 0 160 57 160 \n", "558 0 0 160 57 160 \n", "569 0 0 160 57 160 \n", "578 0 0 160 57 160 \n", "587 0 0 160 57 160 \n", "598 0 0 160 57 160 \n", "610 0 0 160 57 160 \n", "619 0 0 160 57 160 \n", "631 0 0 160 57 160 \n", "640 0 0 160 57 160 \n", "649 0 0 160 57 160 \n", "660 0 0 160 57 161 \n", "668 0 0 160 57 159 \n", "681 0 0 160 57 161 \n", "693 0 0 160 57 159 \n", "702 0 0 160 57 160 \n", "712 0 0 160 57 160 \n", "723 0 0 160 57 160 \n", "732 0 0 160 57 160 \n", "741 0 0 160 57 160 \n", "755 0 0 160 57 160 \n", "764 0 0 160 57 160 \n", "773 0 0 160 57 160 \n", "784 0 0 160 57 161 \n", "793 0 0 160 57 159 \n", "802 0 0 160 57 160 \n", "813 0 0 160 57 160 \n", "825 0 0 160 57 160 \n", "834 0 0 160 57 160 \n", "846 0 0 160 57 160 \n", "856 0 0 160 57 160 \n", "865 0 0 160 57 160 \n", "876 0 0 160 57 160 \n", "886 0 0 160 57 160 \n", "898 0 0 160 57 160 \n", "909 0 0 160 57 160 \n", "918 0 0 160 57 160 \n", "927 0 0 160 57 160 \n", "938 0 0 160 57 160 \n", "947 0 0 160 57 160 \n", "956 0 0 160 57 160 \n", "970 0 0 160 57 160 \n", "979 0 0 160 57 160 \n", "988 0 0 160 57 160 \n", "999 0 0 160 57 160 \n", "1009 0 0 160 57 160 \n", "1018 0 0 160 57 160 \n", "1030 0 0 160 57 160 \n", "1042 0 0 160 57 160 \n", "1052 0 0 160 57 160 \n", "1063 0 0 160 57 160 \n", "1072 0 0 160 57 160 \n", "1081 0 0 160 57 160 \n", "1093 0 0 160 57 161 \n", "1102 0 0 160 57 159 \n", "1113 0 0 160 57 160 \n", "1124 0 0 160 57 160 \n", "1134 0 0 160 57 159 \n", "1142 0 0 160 57 161 \n", "1154 0 0 160 57 160 \n", "1163 0 0 160 57 160 \n", "1173 0 0 160 57 160 \n", "1186 0 0 160 57 160 \n", "1195 0 0 160 57 160 \n", "1206 0 0 160 57 160 \n", "1217 0 0 160 57 160 \n", "1226 0 0 160 57 160 \n", "1235 0 0 160 57 160 \n", "1247 0 0 160 57 160 \n", "1258 0 0 160 57 160 \n", "1267 0 0 160 57 159 \n", "1279 0 0 160 57 161 \n", "1288 0 0 160 57 160 \n", "1291 0 0 160 57 59 \n", "1305 0 0 160 57 161 \n", "1314 0 0 160 57 160 \n", "1325 0 0 160 57 160 \n", "1336 0 0 160 57 160 \n", "1345 0 0 160 57 160 \n", "1354 0 0 160 57 160 \n", "1365 0 0 160 57 160 \n", "1376 0 0 160 57 160 \n", "1386 0 0 160 57 161 \n", "1397 0 0 160 57 159 \n", "1406 0 0 160 57 160 \n", "1416 0 0 160 57 161 \n", "1428 0 0 160 57 159 \n", "1438 0 0 160 57 160 \n", "1448 0 0 160 57 160 \n", "1460 0 0 160 57 160 \n", "1470 0 0 160 57 160 \n", "1479 0 0 160 57 160 \n", "1489 0 0 160 57 160 \n", "1497 0 0 160 57 160 \n", "1506 0 0 160 57 160 \n", "1517 0 0 160 57 160 \n", "1528 0 0 160 57 160 \n", "1686 0 0 160 57 2881 \n", "1695 0 0 170 40 169 \n", "1705 0 0 170 40 169 \n", "1715 0 0 170 40 171 \n", "1725 0 0 170 40 171 \n", "1735 0 0 170 40 169 \n", "1745 0 0 170 40 170 \n", "1754 0 0 170 40 170 \n", "1765 0 0 170 40 170 \n", "1774 0 0 170 40 170 \n", "1783 0 0 170 40 170 \n", "1792 0 0 170 40 170 \n", "1804 0 0 170 40 170 \n", "1813 0 0 170 40 170 \n", "1822 0 0 170 40 170 \n", "1833 0 0 170 40 170 \n", "1843 0 0 170 40 171 \n", "1853 0 0 170 40 169 \n", "1863 0 0 170 40 170 \n", "1872 0 0 170 40 170 \n", "1881 0 0 170 40 170 \n", "1891 0 0 170 40 170 \n", "1902 0 0 170 40 170 \n", "1911 0 0 170 40 170 \n", "1920 0 0 170 40 171 \n", "1930 0 0 170 40 169 \n", "1940 0 0 170 40 170 \n", "1949 0 0 170 40 170 \n", "1959 0 0 170 40 169 \n", "1969 0 0 170 40 171 \n", "1978 0 0 170 40 170 \n", "1989 0 0 170 40 170 \n", "1998 0 0 170 40 170 \n", "2008 0 0 170 40 170 \n", "2018 0 0 170 40 170 \n", "2027 0 0 180 28 180 \n", "2038 0 0 180 28 180 \n", "2047 0 0 180 28 180 \n", "2057 0 0 180 28 180 \n", "2066 0 0 180 28 180 \n", "2075 0 0 180 28 180 \n", "2086 0 0 180 28 180 \n", "2095 0 0 180 28 180 \n", "2104 0 0 180 28 180 \n", "2114 0 0 180 28 180 \n", "2126 0 0 180 28 181 \n", "2136 0 0 180 28 179 \n", "2145 0 0 180 28 180 \n", "2155 0 0 180 28 180 \n", "2165 0 0 180 28 180 \n", "2174 0 0 180 28 180 \n", "2185 0 0 180 28 180 \n", "2195 0 0 180 28 180 \n", "2204 0 0 180 28 180 \n", "2214 0 0 180 28 180 \n", "2224 0 0 180 28 181 \n", "2234 0 0 180 28 179 \n", "2243 0 0 180 28 180 \n", "2252 0 0 180 28 180 \n", "2262 0 0 180 28 180 \n", "2271 0 0 180 28 180 \n", "2281 0 0 180 28 180 \n", "2293 0 0 180 28 180 \n", "2302 0 0 180 28 179 \n", "2311 0 0 180 28 181 \n", "2320 0 0 180 28 180 \n", "2331 0 0 180 28 180 \n", "2341 0 0 180 28 180 \n", "2350 0 0 180 28 180 \n", "2360 0 0 180 28 180 \n", "2370 0 0 180 28 180 \n", "2381 0 0 180 28 180 \n", "2390 0 0 180 28 180 \n", "2400 0 0 180 28 179 \n", "2409 0 0 180 28 181 \n", "2418 0 0 180 28 181 \n", "2429 0 0 180 28 179 \n", "2438 0 0 180 28 180 \n", "2448 0 0 180 28 180 \n", "2458 0 0 180 28 180 \n", "2468 0 0 180 28 180 \n", "2478 0 0 180 28 180 \n", "2487 0 0 180 28 180 \n", "2497 0 0 180 28 180 \n", "2507 0 0 180 28 180 \n", "2510 0 0 180 28 53 \n", "2519 0 0 180 28 177 \n", "2529 0 0 180 28 179 \n", "2538 0 0 180 28 181 \n", "2547 0 0 180 28 180 \n", "2558 0 0 180 28 180 \n", "2567 0 0 180 28 181 \n", "2577 0 0 180 28 179 \n", "2587 0 0 180 28 180 \n", "2596 0 0 180 28 181 \n", "2606 0 0 180 28 179 \n", "2615 0 0 180 28 180 \n", "2626 0 0 180 28 180 \n", "2635 0 0 180 28 180 \n", "2644 0 0 180 28 180 \n", "2655 0 0 180 28 180 \n", "2665 0 0 180 28 180 \n", "2674 0 0 180 28 179 \n", "2683 0 0 180 28 181 \n", "2693 0 0 180 28 180 \n", "2703 0 0 180 28 180 \n", "2712 0 0 180 28 179 \n", "2722 0 0 180 28 181 \n", "2732 0 0 180 28 180 \n", "2742 0 0 180 28 180 \n", "2752 0 0 180 28 180 \n", "2762 0 0 180 28 180 \n", "2772 0 0 180 28 180 \n", "2782 0 0 180 28 180 \n", "2790 0 0 180 28 180 \n", "2802 0 0 180 28 181 \n", "2810 0 0 180 28 179 \n", "2822 0 0 180 28 180 \n", "2831 0 0 180 28 180 \n", "2841 0 0 180 28 180 \n", "2849 0 0 180 28 179 \n", "2858 0 0 180 28 181 \n", "2869 0 0 180 28 180 \n", "2879 0 0 180 28 181 \n", "2889 0 0 180 28 179 \n", "2898 0 0 180 28 180 \n", "2908 0 0 180 28 180 \n", "2918 0 0 180 28 180 \n", "2928 0 0 180 28 180 \n", "2938 0 0 180 28 180 \n", "2947 0 0 180 28 180 \n", "2958 0 0 180 28 180 \n", "2971 0 0 180 28 180 \n", "2980 0 0 180 28 180 \n", "2989 0 0 180 28 180 \n", "2997 0 0 180 28 180 \n", "3008 0 0 180 28 180 \n", "3018 0 0 180 28 180 \n", "3027 0 0 180 28 181 \n", "3036 0 0 180 28 179 \n", "3045 0 0 180 28 180 \n", "3055 0 0 180 28 180 \n", "3066 0 0 180 28 180 \n", "3077 0 0 180 28 180 \n", "3086 0 0 180 28 180 \n", "3095 0 0 180 28 180 \n", "3105 0 0 180 28 180 \n", "3113 0 0 180 28 180 \n", "3122 0 0 180 28 180 \n", "3132 0 0 180 28 180 \n", "3140 0 0 180 28 180 \n", "3149 0 0 180 28 180 \n", "3157 0 0 180 28 180 \n", "3166 0 0 180 28 180 \n", "3174 0 0 180 28 180 \n", "3182 0 0 180 28 180 \n", "3191 0 0 180 28 180 \n", "3201 0 0 180 28 179 \n", "3209 0 0 180 28 181 \n", "3218 0 0 180 28 180 \n", "3227 0 0 180 28 180 \n", "3236 0 0 180 28 180 \n", "3244 0 0 180 28 180 \n", "3253 0 0 180 28 180 \n", "3265 0 0 180 28 180 \n", "3273 0 0 180 28 179 \n", "3284 0 0 180 28 181 \n", "3294 0 0 180 28 180 \n", "3302 0 0 180 28 179 \n", "3312 0 0 180 28 181 \n", "3321 0 0 180 28 180 \n", "3331 0 0 180 28 180 \n", "3341 0 0 180 28 180 \n", "3351 0 0 180 28 180 \n", "3361 0 0 180 28 180 \n", "3370 0 0 180 28 180 \n", "3380 0 0 180 28 180 \n", "3390 0 0 180 28 180 \n", "3400 0 0 180 28 181 \n", "3409 0 0 180 28 179 \n", "3420 0 0 180 28 180 \n", "3431 0 0 180 28 180 \n", "3439 0 0 180 28 179 \n", "3449 0 0 180 28 181 \n", "3458 0 0 180 28 179 \n", "3469 0 0 180 28 181 \n", "3478 0 0 180 28 180 \n", "3488 0 0 180 28 180 \n", "3498 0 0 180 28 180 \n", "3506 0 0 180 28 179 \n", "3516 0 0 180 28 181 \n", "3526 0 0 180 28 179 \n", "3536 0 0 180 28 181 \n", "3545 0 0 180 28 180 \n", "3557 0 0 180 28 180 \n", "3566 0 0 180 28 180 \n", "3575 0 0 180 28 180 \n", "3584 0 0 180 28 180 \n", "3594 0 0 180 28 180 \n", "3603 0 0 180 28 179 \n", "3611 0 0 180 28 181 \n", "3623 0 0 180 28 180 \n", "3631 0 0 180 28 180 \n", "3639 0 0 180 28 180 \n", "3648 0 0 180 28 180 \n", "3658 0 0 180 28 180 \n", "3669 0 0 180 28 180 \n", "3678 0 0 180 28 180 \n", "3690 0 0 180 28 180 \n", "3698 0 0 180 28 180 \n", "3706 0 0 180 28 100 \n", "3716 0 0 180 28 181 \n", "3724 0 0 180 28 179 \n", "3734 0 0 180 28 180 \n", "3746 0 0 180 28 181 \n", "3755 0 0 180 28 179 \n", "3763 0 0 180 28 180 \n", "3774 0 0 180 28 180 \n", "3783 0 0 180 28 180 \n", "3795 0 0 180 28 180 \n", "3803 0 0 180 28 179 \n", "3813 0 0 180 28 181 \n", "3823 0 0 180 28 180 \n", "3832 0 0 180 28 180 \n", "3843 0 0 180 28 180 \n", "3852 0 0 180 28 179 \n", "3862 0 0 190 18 191 \n", "3873 0 0 190 18 191 \n", "3882 0 0 190 18 189 \n", "3893 0 0 190 18 191 \n", "3902 0 0 190 18 189 \n", "3912 0 0 190 18 190 \n", "3921 0 0 190 18 190 \n", "3931 0 0 190 18 190 \n", "3941 0 0 190 18 190 \n", "3951 0 0 190 18 190 \n", "3962 0 0 190 18 190 \n", "3970 0 0 190 18 190 \n", "3980 0 0 190 18 190 \n", "3990 0 0 190 18 190 \n", "4000 0 0 190 18 190 \n", "4010 0 0 190 18 191 \n", "4020 0 0 190 18 189 \n", "4029 0 0 190 18 190 \n", "4039 0 0 190 18 190 \n", "4049 0 0 190 18 190 \n", "4057 0 0 190 18 190 \n", "4067 0 0 190 18 190 \n", "4077 0 0 190 18 190 \n", "4086 0 0 190 18 190 \n", "4097 0 0 190 18 190 \n", "4107 0 0 190 18 190 \n", "4116 0 0 190 18 190 \n", "4125 0 0 190 18 190 \n", "4135 0 0 190 18 190 \n", "4144 0 0 190 18 190 \n", "4154 0 0 190 18 190 \n", "4164 0 0 190 18 190 \n", "4174 0 0 190 18 190 \n", "4184 0 0 190 18 190 \n", "4193 0 0 190 18 190 \n", "4202 0 0 190 18 189 \n", "4212 0 0 190 18 191 \n", "4220 0 0 190 18 190 \n", "4231 0 0 190 18 190 \n", "4240 0 0 190 18 190 \n", "4250 0 0 190 18 189 \n", "4261 0 0 190 18 191 \n", "4269 0 0 190 18 190 \n", "4279 0 0 190 18 189 \n", "4288 0 0 190 18 191 \n", "4297 0 0 190 18 190 \n", "4308 0 0 190 18 189 \n", "4317 0 0 190 18 191 \n", "4327 0 0 190 18 190 \n", "4336 0 0 190 18 190 \n", "4347 0 0 190 18 190 \n", "4357 0 0 190 18 190 \n", "4368 0 0 190 18 190 \n", "4377 0 0 190 18 190 \n", "4387 0 0 190 18 190 \n", "4396 0 0 190 18 190 \n", "4405 0 0 190 18 190 \n", "4417 0 0 190 18 190 \n", "4427 0 0 190 18 190 \n", "4435 0 0 190 18 190 \n", "4447 0 0 190 18 190 \n", "4456 0 0 190 18 190 \n", "4465 0 0 190 18 190 \n", "4476 0 0 190 18 190 \n", "4484 0 0 190 18 190 \n", "4493 0 0 190 18 190 \n", "4504 0 0 190 18 191 \n", "4513 0 0 190 18 189 \n", "4524 0 0 190 18 190 \n", "4535 0 0 190 18 191 \n", "4544 0 0 190 18 189 \n", "4555 0 0 190 18 190 \n", "4563 0 0 190 18 190 \n", "4573 0 0 190 18 190 \n", "4584 0 0 190 18 190 \n", "4593 0 0 190 18 190 \n", "4603 0 0 190 18 190 \n", "4612 0 0 190 18 190 \n", "4624 0 0 190 18 190 \n", "4632 0 0 190 18 190 \n", "4643 0 0 190 18 191 \n", "4652 0 0 190 18 189 \n", "4661 0 0 190 18 190 \n", "4672 0 0 190 18 190 \n", "4682 0 0 190 18 190 \n", "4691 0 0 190 18 190 \n", "4702 0 0 190 18 190 \n", "4711 0 0 190 18 191 \n", "4721 0 0 190 18 189 \n", "4731 0 0 190 18 190 \n", "4741 0 0 190 18 190 \n", "4750 0 0 190 18 190 \n", "4760 0 0 190 18 190 \n", "4770 0 0 190 18 190 \n", "4781 0 0 190 18 190 \n", "4790 0 0 190 18 190 \n", "4798 0 0 190 18 190 \n", "4809 0 0 190 18 190 \n", "4817 0 0 190 18 190 \n", "4826 0 0 190 18 190 \n", "4838 0 0 190 18 190 \n", "4847 0 0 190 18 189 \n", "4859 0 0 190 18 191 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hist = history.copy()[history.inter_no==175]\n", "hist['diff'] = hist['end_unix'].diff()\n", "hist = hist[1:]\n", "hist\n", "hist['diff'] = hist['diff'].astype(int)\n", "with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n", " display(hist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. 결측, 이상치 처리" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_B8cyclepstart_unix
017517043804003739552900003739255900001601704380400
117517044056004042553300004042295900001701704405600
217517044128004345553700004345335900001801704412800
317517044470004648554100004648375900001901704447000
4176170438040037734000000377340000001501704380400
5176170440560037934000000379340000001701704405600
617617044128003710340000003710340000001801704412800
717617044470003711340000003711340000001901704447000
817717043804003620682600003620682600001501704380400
917717044056004025713400004025713400001701704405600
\n", "
" ], "text/plain": [ " inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 dura_A6 \\\n", "0 175 1704380400 37 39 55 29 0 0 \n", "1 175 1704405600 40 42 55 33 0 0 \n", "2 175 1704412800 43 45 55 37 0 0 \n", "3 175 1704447000 46 48 55 41 0 0 \n", "4 176 1704380400 37 73 40 0 0 0 \n", "5 176 1704405600 37 93 40 0 0 0 \n", "6 176 1704412800 37 103 40 0 0 0 \n", "7 176 1704447000 37 113 40 0 0 0 \n", "8 177 1704380400 36 20 68 26 0 0 \n", "9 177 1704405600 40 25 71 34 0 0 \n", "\n", " dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 dura_B6 \\\n", "0 0 0 37 39 25 59 0 0 \n", "1 0 0 40 42 29 59 0 0 \n", "2 0 0 43 45 33 59 0 0 \n", "3 0 0 46 48 37 59 0 0 \n", "4 0 0 37 73 40 0 0 0 \n", "5 0 0 37 93 40 0 0 0 \n", "6 0 0 37 103 40 0 0 0 \n", "7 0 0 37 113 40 0 0 0 \n", "8 0 0 36 20 68 26 0 0 \n", "9 0 0 40 25 71 34 0 0 \n", "\n", " dura_B7 dura_B8 cycle pstart_unix \n", "0 0 0 160 1704380400 \n", "1 0 0 170 1704405600 \n", "2 0 0 180 1704412800 \n", "3 0 0 190 1704447000 \n", "4 0 0 150 1704380400 \n", "5 0 0 170 1704405600 \n", "6 0 0 180 1704412800 \n", "7 0 0 190 1704447000 \n", "8 0 0 150 1704380400 \n", "9 0 0 170 1704405600 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "planned = plan.copy()\n", "planned['start_unix'] = planned['start_hour'] * 3600 +planned['start_minute'] * 60 + midnight\n", "start_unixes = planned.start_unix.unique()\n", "planned['pstart_unix'] = planned['start_unix'].apply(lambda x:start_unixes[sum(start_unixes <= x) - 1]) # the unix time when the program started\n", "planned = planned[['inter_no', 'start_unix'] + [f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)] + ['cycle', 'pstart_unix']]\n", "planned.head(10)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([177, 176, 202, 178, 211, 201, 206, 210, 175], dtype=int64)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "make_histid(100).inter_no.unique()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_hourstart_minuteddur_1ddur_2ddur_3ddur_4ddur_5ddur_6ddur_7ddur_8cycleoffset
017500373925302900016057
117570404229263300017040
217590434533223700018028
31751830464837184100019018
41760037734000000150131
51767037934000000170153
617690371034000000180169
71761830371134000000190185
81770036206826000015035
91777040257134000017033
\n", "
" ], "text/plain": [ " inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n", "0 175 0 0 37 39 25 30 29 \n", "1 175 7 0 40 42 29 26 33 \n", "2 175 9 0 43 45 33 22 37 \n", "3 175 18 30 46 48 37 18 41 \n", "4 176 0 0 37 73 40 0 0 \n", "5 176 7 0 37 93 40 0 0 \n", "6 176 9 0 37 103 40 0 0 \n", "7 176 18 30 37 113 40 0 0 \n", "8 177 0 0 36 20 68 26 0 \n", "9 177 7 0 40 25 71 34 0 \n", "\n", " ddur_6 ddur_7 ddur_8 cycle offset \n", "0 0 0 0 160 57 \n", "1 0 0 0 170 40 \n", "2 0 0 0 180 28 \n", "3 0 0 0 190 18 \n", "4 0 0 0 150 131 \n", "5 0 0 0 170 153 \n", "6 0 0 0 180 169 \n", "7 0 0 0 190 185 \n", "8 0 0 0 150 35 \n", "9 0 0 0 170 33 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pland = plan.copy() # A, B가 통합된 plan (plan detailed)\n", "cums_A = np.array(pland[[f'dura_A{k}' for k in range(1,9)]].cumsum(axis=1))\n", "cums_B = np.array(pland[[f'dura_B{k}' for k in range(1,9)]].cumsum(axis=1))\n", "detailed_cums = []\n", "i = 0\n", "for row_A, row_B in zip(cums_A, cums_B):\n", " combined_row = np.unique(np.concatenate((row_A, row_B)))\n", " ddur = np.concatenate(([combined_row[0]], np.diff(combined_row)))\n", " ddur = np.pad(ddur, (0, 8 - len(ddur)), constant_values=(0))\n", " detailed_cums.append(ddur)\n", " for j in range(8):\n", " pland.at[i, f'ddur_{j+1}'] = ddur[j]\n", " i+=1\n", "pland = pland[['inter_no', 'start_hour', 'start_minute'] + [f'ddur_{i}' for i in range(1,9)] + ['cycle', 'offset']] # plan detailed\n", "pland[[f'ddur_{i}' for i in range(1,9)]] = pland[[f'ddur_{i}' for i in range(1,9)]].astype(int)\n", "pland[:10]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "histid = make_histid(25)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_Bdurationinc_edge_Ainc_edge_Bout_edge_Aout_edge_Bdiff
start_unix
17043844001751137-571542797_02-571500487_01571500487_01571542797_020
17043844001752239-571500487_01-571542797_02571545870_01571510153_010
17043844001753325571545870_02571545870_02571510153_01571542797_020
17043844001753430571545870_02571510153_02571510153_01571545870_010
17043844001754429571510153_02571510153_02571500487_01571545870_010
17043845611751137-571542797_02-571500487_01571500487_01571542797_02161
17043845611752239-571500487_01-571542797_02571545870_01571510153_010
17043845611753325571545870_02571545870_02571510153_01571542797_020
17043845611753430571545870_02571510153_02571510153_01571545870_010
17043845611754429571510153_02571510153_02571500487_01571545870_010
17043847201751137-571542797_02-571500487_01571500487_01571542797_02159
17043847201752239-571500487_01-571542797_02571545870_01571510153_010
17043847201753325571545870_02571545870_02571510153_01571542797_020
17043847201753430571545870_02571510153_02571510153_01571545870_010
17043847201754429571510153_02571510153_02571500487_01571545870_010
17043848801751137-571542797_02-571500487_01571500487_01571542797_02160
17043848801752239-571500487_01-571542797_02571545870_01571510153_010
17043848801753325571545870_02571545870_02571510153_01571542797_020
17043848801753430571545870_02571510153_02571510153_01571545870_010
17043848801754429571510153_02571510153_02571500487_01571545870_010
\n", "
" ], "text/plain": [ " inter_no phas_A phas_B duration inc_edge_A inc_edge_B \\\n", "start_unix \n", "1704384400 175 1 1 37 -571542797_02 -571500487_01 \n", "1704384400 175 2 2 39 -571500487_01 -571542797_02 \n", "1704384400 175 3 3 25 571545870_02 571545870_02 \n", "1704384400 175 3 4 30 571545870_02 571510153_02 \n", "1704384400 175 4 4 29 571510153_02 571510153_02 \n", "1704384561 175 1 1 37 -571542797_02 -571500487_01 \n", "1704384561 175 2 2 39 -571500487_01 -571542797_02 \n", "1704384561 175 3 3 25 571545870_02 571545870_02 \n", "1704384561 175 3 4 30 571545870_02 571510153_02 \n", "1704384561 175 4 4 29 571510153_02 571510153_02 \n", "1704384720 175 1 1 37 -571542797_02 -571500487_01 \n", "1704384720 175 2 2 39 -571500487_01 -571542797_02 \n", "1704384720 175 3 3 25 571545870_02 571545870_02 \n", "1704384720 175 3 4 30 571545870_02 571510153_02 \n", "1704384720 175 4 4 29 571510153_02 571510153_02 \n", "1704384880 175 1 1 37 -571542797_02 -571500487_01 \n", "1704384880 175 2 2 39 -571500487_01 -571542797_02 \n", "1704384880 175 3 3 25 571545870_02 571545870_02 \n", "1704384880 175 3 4 30 571545870_02 571510153_02 \n", "1704384880 175 4 4 29 571510153_02 571510153_02 \n", "\n", " out_edge_A out_edge_B diff \n", "start_unix \n", "1704384400 571500487_01 571542797_02 0 \n", "1704384400 571545870_01 571510153_01 0 \n", "1704384400 571510153_01 571542797_02 0 \n", "1704384400 571510153_01 571545870_01 0 \n", "1704384400 571500487_01 571545870_01 0 \n", "1704384561 571500487_01 571542797_02 161 \n", "1704384561 571545870_01 571510153_01 0 \n", "1704384561 571510153_01 571542797_02 0 \n", "1704384561 571510153_01 571545870_01 0 \n", "1704384561 571500487_01 571545870_01 0 \n", "1704384720 571500487_01 571542797_02 159 \n", "1704384720 571545870_01 571510153_01 0 \n", "1704384720 571510153_01 571542797_02 0 \n", "1704384720 571510153_01 571545870_01 0 \n", "1704384720 571500487_01 571545870_01 0 \n", "1704384880 571500487_01 571542797_02 160 \n", "1704384880 571545870_01 571510153_01 0 \n", "1704384880 571510153_01 571542797_02 0 \n", "1704384880 571510153_01 571545870_01 0 \n", "1704384880 571500487_01 571545870_01 0 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inter_no = 175\n", "hist = histid.copy()[histid.inter_no==inter_no]\n", "hist = hist.reset_index(drop=True)\n", "hist['diff'] = hist['start_unix'].diff().fillna(0).astype(int)\n", "hist = hist.set_index('start_unix')\n", "with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n", " display(hist[:20])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "unexpected EOF while parsing (1849903921.py, line 15)", "output_type": "error", "traceback": [ "\u001b[1;36m Cell \u001b[1;32mIn[27], line 15\u001b[1;36m\u001b[0m\n\u001b[1;33m else:\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n" ] } ], "source": [ "inter_no = 175\n", "hist = histid.copy()[histid.inter_no==inter_no]\n", "hist = hist.reset_index(drop=True)\n", "hist['diff'] = hist['start_unix'].diff().fillna(0).astype(int)\n", "hist = hist.set_index('start_unix')\n", "start_unixes = hist.index.unique()\n", "for n in range(1, len(start_unixes)):\n", " ind = (timetable['start_seconds'] <= start_unixes[n]).sum() - 1 \n", " start_hour = timetable.iloc[ind].start_hour\n", " start_minute = timetable.iloc[ind].start_minute\n", " prow = pland[(pland.inter_no == inter_no)&(pland.start_hour == start_hour)&(pland.start_minute == start_minute)].iloc[0] # planned row\n", " cycle = prow.cycle\n", " if start_unixes[n] - start_unixes[n-1] < 2 * cycle:\n", " pass\n", " else:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hist" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "matching" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "n = 3\n", "ind = (timetable['start_seconds'] <= start_unixes[n]).sum() - 1 \n", "start_hour = timetable.iloc[ind].start_hour\n", "start_minute = timetable.iloc[ind].start_minute\n", "prow = pland[(pland.inter_no == inter_no)&(pland.start_hour == start_hour)&(pland.start_minute == start_minute)].iloc[0] # planned row\n", "cycle = prow.cycle\n", "print(start_unixes[n] - start_unixes[n-1] < 2 * cycle)\n", "ddurs = [f'ddur_{j}' for j in range(1, 9)]\n", "print(prow[ddurs])\n", "ndphase = (prow[ddurs]!=0).sum() # the number of (detailed) phases\n", "isplit = isplits[(inter_no,start_hour,start_minute)]\n", "print(isplit)\n", "inter_nos = [inter_no] * ndphase\n", "phas_As = [isplit[i][0] for i in isplit.keys()]\n", "phas_Bs = [isplit[i][1] for i in isplit.keys()]\n", "durations = prow[ddurs][prow[ddurs]!=0]\n", "# new_rows = pd.DataFrame()" ] } ], "metadata": { "kernelspec": { "display_name": "rts", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }