신호생성 repo (24. 1. 5 ~).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

10367 lines
352 KiB

{
"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:58<00:00, 294.84it/s]\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>move_A</th>\n",
" <th>move_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>176</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>176</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>177</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>177</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phase_no</th>\n",
" <th>ring_type</th>\n",
" <th>move_no</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>B</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>A</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phase_no</th>\n",
" <th>ring_type</th>\n",
" <th>move_no</th>\n",
" <th>inc_dir</th>\n",
" <th>out_dir</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>17</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>18</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir\n",
"0 175 1 A 8 남 북\n",
"1 175 1 B 4 북 남\n",
"2 175 2 A 7 북 동\n",
"3 175 2 B 3 남 서\n",
"4 175 3 A 6 동 서\n",
".. ... ... ... ... ... ...\n",
"59 210 4 B 3 남 서\n",
"60 211 1 A 6 동 서\n",
"61 211 1 B 2 서 동\n",
"62 211 2 A 17 NaN NaN\n",
"63 211 2 B 18 NaN NaN\n",
"\n",
"[64 rows x 6 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [nema 이동류목록] 불러오기 및 병합\n",
"nema = pd.read_csv('../../Data/tables/nema.csv', encoding='cp949')\n",
"match3 = pd.merge(match2, nema, how='left', on='move_no').drop_duplicates()\n",
"match3"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phase_no</th>\n",
" <th>ring_type</th>\n",
" <th>move_no</th>\n",
" <th>inc_dir</th>\n",
" <th>out_dir</th>\n",
" <th>inc_angle</th>\n",
" <th>out_angle</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>179</td>\n",
" <td>004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>003</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>001</td>\n",
" <td>095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>179</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>090</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>180</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>090</td>\n",
" <td>270</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>211</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>270</td>\n",
" <td>090</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>17</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>18</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n",
"0 175 1 A 8 남 북 179 004\n",
"1 175 1 B 4 북 남 003 176\n",
"2 175 2 A 7 북 동 001 095\n",
"3 175 2 B 3 남 서 179 270\n",
"4 175 3 A 6 동 서 090 270\n",
".. ... ... ... ... ... ... ... ...\n",
"59 210 4 B 3 남 서 180 270\n",
"60 211 1 A 6 동 서 090 270\n",
"61 211 1 B 2 서 동 270 090\n",
"62 211 2 A 17 NaN NaN NaN NaN\n",
"63 211 2 B 18 NaN NaN NaN NaN\n",
"\n",
"[64 rows x 8 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [방위각정보] 불러오기, 계층화, 병합\n",
"# 불러오기\n",
"dtype_dict = {f'angle_{alph}{j}':'str' for alph in ['A', 'B'] for j in range(1,9)}\n",
"angle_original = pd.read_csv('../../Data/tables/angle.csv', index_col=0, dtype = dtype_dict)\n",
"# 계층화\n",
"angle = []\n",
"for i, row in angle_original.iterrows():\n",
" angle_codes = row[[f'angle_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
" new = pd.DataFrame({'inter_no':[row.inter_no] * 16, 'phase_no':list(range(1, 9))*2, 'ring_type':['A'] * 8 + ['B'] * 8, 'angle_code':angle_codes.to_list()})\n",
" angle.append(new)\n",
"angle = pd.concat(angle)\n",
"angle = angle.dropna().reset_index(drop=True)\n",
"# 병합\n",
"six_chars = angle.angle_code.apply(lambda x:len(x)==6)\n",
"angle.loc[six_chars,'inc_angle'] = angle.angle_code.apply(lambda x:x[:3])\n",
"angle.loc[six_chars,'out_angle'] = angle.angle_code.apply(lambda x:x[3:])\n",
"angle = angle.drop('angle_code', axis=1)\n",
"match4 = pd.merge(match3, angle, how='left', left_on=['inter_no', 'phase_no', 'ring_type'],\n",
" right_on=['inter_no', 'phase_no', 'ring_type']).drop_duplicates()\n",
"match4"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# [네트워크], [교차로-노드 매칭], [교차로정보] 불러오기 \n",
"net = sumolib.net.readNet('../../Data/networks/SN_sample.net.xml')\n",
"inter_node = pd.read_csv('../../Data/tables/inter_node.csv', index_col=0)\n",
"inter_info = pd.read_csv('../../Data/tables/inter_info.csv', index_col=0)\n",
"\n",
"inter_node1 = inter_node[inter_node.inter_type == 'parent'].drop('inter_type', axis=1)\n",
"inter_info1 = inter_info[['inter_no', 'inter_lat', 'inter_lon']]\n",
"inter = pd.merge(inter_node1, inter_info1, how='left', left_on=['inter_no'],\n",
" right_on=['inter_no']).drop_duplicates()\n",
"\n",
"inter2node = dict(zip(inter['inter_no'], inter['node_id']))\n",
"\n",
"match5 = match4.copy()\n",
"# 진입진출ID 매칭\n",
"for index, row in match5.iterrows():\n",
" node_id = inter2node[row.inter_no]\n",
" node = net.getNode(node_id)\n",
" # 교차로의 모든 (from / to) edges\n",
" inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges\n",
" out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges\n",
" # 교차로의 모든 (from / to) directions\n",
" inc_dirs = []\n",
" for inc_edge in inc_edges:\n",
" start = inc_edge.getShape()[-2]\n",
" end = inc_edge.getShape()[-1]\n",
" inc_dir = np.array(end) - np.array(start)\n",
" inc_dir = inc_dir / (inc_dir ** 2).sum() ** 0.5\n",
" inc_dirs.append(inc_dir)\n",
" out_dirs = []\n",
" for out_edge in out_edges:\n",
" start = out_edge.getShape()[0]\n",
" end = out_edge.getShape()[1]\n",
" out_dir = np.array(end) - np.array(start)\n",
" out_dir = out_dir / (out_dir ** 2).sum() ** 0.5\n",
" out_dirs.append(out_dir)\n",
" # 진입각, 진출각 불러오기\n",
" if not pd.isna(row.inc_angle):\n",
" inc_angle = int(row.inc_angle)\n",
" out_angle = int(row.out_angle)\n",
" # 방위각을 일반각으로 가공, 라디안 변환, 단위벡터로 변환\n",
" inc_angle = (-90 - inc_angle) % 360\n",
" inc_angle = inc_angle * np.pi / 180.\n",
" inc_dir_true = np.array([np.cos(inc_angle), np.sin(inc_angle)])\n",
" out_angle = (90 - out_angle) % 360\n",
" out_angle = out_angle * np.pi / 180.\n",
" out_dir_true = np.array([np.cos(out_angle), np.sin(out_angle)])\n",
" # 매칭 엣지 반환\n",
" inc_index = np.array([np.dot(inc_dir, inc_dir_true) for inc_dir in inc_dirs]).argmax()\n",
" out_index = np.array([np.dot(out_dir, out_dir_true) for out_dir in out_dirs]).argmax()\n",
" inc_edge_id = inc_edges[inc_index].getID()\n",
" out_edge_id = out_edges[out_index].getID()\n",
" match5.at[index, 'inc_edge'] = inc_edge_id\n",
" match5.at[index, 'out_edge'] = out_edge_id\n",
"match5['node_id'] = match5['inter_no'].map(inter2node)\n",
"# match5 = match5[['inter_no', 'node_id', 'move_no', 'inc_edge', 'out_edge']]\n",
"match5 = match5.sort_values(by=['inter_no', 'move_no']).reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>move_no</th>\n",
" <th>inc_dir</th>\n",
" <th>out_dir</th>\n",
" <th>inc_edge</th>\n",
" <th>out_edge</th>\n",
" <th>node_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>175</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>175</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>175</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>175</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>175</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>-571500487_01</td>\n",
" <td>571510153_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571510153_02</td>\n",
" <td>571542797_02</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571542797_02</td>\n",
" <td>571545870_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>175</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571545870_02</td>\n",
" <td>571500487_01</td>\n",
" <td>i0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>176</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542810_01</td>\n",
" <td>571543469_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>176</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571542810_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>176</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571543469_02</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>176</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>176</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>176</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>176</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571543469_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>176</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571543469_02</td>\n",
" <td>571542810_01</td>\n",
" <td>i1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>177</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571542107_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>177</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>177</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>177</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542811_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>177</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>177</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571542107_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>177</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571542811_02</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>177</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>177</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>177</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571542811_02</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542809_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542107_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>177</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571542107_02</td>\n",
" <td>571542811_01</td>\n",
" <td>i2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>-571500475_01</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>178</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>571540304_02</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>178</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571556450_02</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>178</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>178</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>-571500475_01</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>178</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571556450_02</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>178</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>571540304_02</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>178</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>178</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571556450_02</td>\n",
" <td>571540303_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571540303_02.21</td>\n",
" <td>571540304_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>571540304_02</td>\n",
" <td>571500475_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>178</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>-571500475_01</td>\n",
" <td>571556450_01</td>\n",
" <td>i3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>201</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>571500617_02</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>201</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571500618_02</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>201</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>201</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571500583_01</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>201</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571500618_02</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>201</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571500617_02</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>201</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571500583_01</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>201</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>201</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>201</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571500583_01</td>\n",
" <td>571500618_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571500618_02</td>\n",
" <td>571500569_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>-571500569_01</td>\n",
" <td>571500617_01</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>201</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>571500617_02</td>\n",
" <td>571500583_02</td>\n",
" <td>i8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>64</th>\n",
" <td>202</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571510152_01</td>\n",
" <td>571510152_01.65</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>65</th>\n",
" <td>202</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571510152_02</td>\n",
" <td>-571510152_01</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66</th>\n",
" <td>202</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>67</th>\n",
" <td>202</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>68</th>\n",
" <td>206</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571542073_01</td>\n",
" <td>571511538_02</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>206</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>-571511538_02</td>\n",
" <td>571542073_02</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>206</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>206</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>210</td>\n",
" <td>1</td>\n",
" <td>동</td>\n",
" <td>남</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>210</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>210</td>\n",
" <td>3</td>\n",
" <td>남</td>\n",
" <td>서</td>\n",
" <td>571500585_02</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>210</td>\n",
" <td>4</td>\n",
" <td>북</td>\n",
" <td>남</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>210</td>\n",
" <td>5</td>\n",
" <td>서</td>\n",
" <td>북</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>210</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>-571542115_01</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>210</td>\n",
" <td>7</td>\n",
" <td>북</td>\n",
" <td>동</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>210</td>\n",
" <td>8</td>\n",
" <td>남</td>\n",
" <td>북</td>\n",
" <td>571500585_02</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>210</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>210</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>북</td>\n",
" <td>서</td>\n",
" <td>571511538_02.121</td>\n",
" <td>571500535_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>서</td>\n",
" <td>남</td>\n",
" <td>571500535_02.18</td>\n",
" <td>571500585_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>남</td>\n",
" <td>동</td>\n",
" <td>571500585_02</td>\n",
" <td>571542115_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>210</td>\n",
" <td>21</td>\n",
" <td>동</td>\n",
" <td>북</td>\n",
" <td>-571542115_01</td>\n",
" <td>571511538_01</td>\n",
" <td>i6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>211</td>\n",
" <td>2</td>\n",
" <td>서</td>\n",
" <td>동</td>\n",
" <td>571542116_02.96</td>\n",
" <td>571542116_02.164</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>211</td>\n",
" <td>6</td>\n",
" <td>동</td>\n",
" <td>서</td>\n",
" <td>571542116_01</td>\n",
" <td>-571542116_02.96</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>211</td>\n",
" <td>17</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>211</td>\n",
" <td>18</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>c30</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no move_no inc_dir out_dir inc_edge out_edge \\\n",
"0 175 1 동 남 571545870_02 571542797_02 \n",
"1 175 2 서 동 571510153_02 571545870_01 \n",
"2 175 3 남 서 -571542797_02 571510153_01 \n",
"3 175 4 북 남 -571500487_01 571542797_02 \n",
"4 175 5 서 북 571510153_02 571500487_01 \n",
"5 175 6 동 서 571545870_02 571510153_01 \n",
"6 175 7 북 동 -571500487_01 571545870_01 \n",
"7 175 8 남 북 -571542797_02 571500487_01 \n",
"8 175 17 None None None None \n",
"9 175 18 None None None None \n",
"10 175 21 북 서 -571500487_01 571510153_01 \n",
"11 175 21 서 남 571510153_02 571542797_02 \n",
"12 175 21 남 동 -571542797_02 571545870_01 \n",
"13 175 21 동 북 571545870_02 571500487_01 \n",
"14 176 3 남 서 -571542810_01 571543469_01 \n",
"15 176 4 북 남 571542797_02.99 571542810_01 \n",
"16 176 5 서 북 571543469_02 -571542797_02.99 \n",
"17 176 8 남 북 -571542810_01 -571542797_02.99 \n",
"18 176 17 None None None None \n",
"19 176 18 None None None None \n",
"20 176 21 북 서 571542797_02.99 571543469_01 \n",
"21 176 21 서 남 571543469_02 571542810_01 \n",
"22 177 1 동 남 571542107_02 571542809_01 \n",
"23 177 2 서 동 -571542809_01 571542107_01 \n",
"24 177 3 남 서 -571542809_01 571542809_01 \n",
"25 177 4 북 남 571542811_02 571542809_01 \n",
"26 177 5 서 북 -571542809_01 571542811_01 \n",
"27 177 6 동 서 571542107_02 571542809_01 \n",
"28 177 7 북 동 571542811_02 571542107_01 \n",
"29 177 8 남 북 -571542809_01 571542811_01 \n",
"30 177 17 None None None None \n",
"31 177 18 None None None None \n",
"32 177 21 북 서 571542811_02 571542809_01 \n",
"33 177 21 서 남 -571542809_01 571542809_01 \n",
"34 177 21 남 동 -571542809_01 571542107_01 \n",
"35 177 21 동 북 571542107_02 571542811_01 \n",
"36 178 1 동 남 -571500475_01 571540304_01 \n",
"37 178 2 서 동 571540303_02.21 571500475_01 \n",
"38 178 3 남 서 571540304_02 571540303_01 \n",
"39 178 4 북 남 571556450_02 571540304_01 \n",
"40 178 5 서 북 571540303_02.21 571556450_01 \n",
"41 178 6 동 서 -571500475_01 571540303_01 \n",
"42 178 7 북 동 571556450_02 571500475_01 \n",
"43 178 8 남 북 571540304_02 571556450_01 \n",
"44 178 17 None None None None \n",
"45 178 18 None None None None \n",
"46 178 21 북 서 571556450_02 571540303_01 \n",
"47 178 21 서 남 571540303_02.21 571540304_01 \n",
"48 178 21 남 동 571540304_02 571500475_01 \n",
"49 178 21 동 북 -571500475_01 571556450_01 \n",
"50 201 1 동 남 571500617_02 571500569_01 \n",
"51 201 2 서 동 571500618_02 571500617_01 \n",
"52 201 3 남 서 -571500569_01 571500618_01 \n",
"53 201 4 북 남 571500583_01 571500569_01 \n",
"54 201 5 서 북 571500618_02 571500583_02 \n",
"55 201 6 동 서 571500617_02 571500618_01 \n",
"56 201 7 북 동 571500583_01 571500617_01 \n",
"57 201 8 남 북 -571500569_01 571500583_02 \n",
"58 201 17 None None None None \n",
"59 201 18 None None None None \n",
"60 201 21 북 서 571500583_01 571500618_01 \n",
"61 201 21 서 남 571500618_02 571500569_01 \n",
"62 201 21 남 동 -571500569_01 571500617_01 \n",
"63 201 21 동 북 571500617_02 571500583_02 \n",
"64 202 2 서 동 571510152_01 571510152_01.65 \n",
"65 202 6 동 서 571510152_02 -571510152_01 \n",
"66 202 17 None None None None \n",
"67 202 18 None None None None \n",
"68 206 4 북 남 571542073_01 571511538_02 \n",
"69 206 8 남 북 -571511538_02 571542073_02 \n",
"70 206 17 None None None None \n",
"71 206 18 None None None None \n",
"72 210 1 동 남 -571542115_01 571500585_01 \n",
"73 210 2 서 동 571500535_02.18 571542115_01 \n",
"74 210 3 남 서 571500585_02 571500535_01 \n",
"75 210 4 북 남 571511538_02.121 571500585_01 \n",
"76 210 5 서 북 571500535_02.18 571511538_01 \n",
"77 210 6 동 서 -571542115_01 571500535_01 \n",
"78 210 7 북 동 571511538_02.121 571542115_01 \n",
"79 210 8 남 북 571500585_02 571511538_01 \n",
"80 210 17 None None None None \n",
"81 210 18 None None None None \n",
"82 210 21 북 서 571511538_02.121 571500535_01 \n",
"83 210 21 서 남 571500535_02.18 571500585_01 \n",
"84 210 21 남 동 571500585_02 571542115_01 \n",
"85 210 21 동 북 -571542115_01 571511538_01 \n",
"86 211 2 서 동 571542116_02.96 571542116_02.164 \n",
"87 211 6 동 서 571542116_01 -571542116_02.96 \n",
"88 211 17 None None None None \n",
"89 211 18 None None None None \n",
"\n",
" node_id \n",
"0 i0 \n",
"1 i0 \n",
"2 i0 \n",
"3 i0 \n",
"4 i0 \n",
"5 i0 \n",
"6 i0 \n",
"7 i0 \n",
"8 i0 \n",
"9 i0 \n",
"10 i0 \n",
"11 i0 \n",
"12 i0 \n",
"13 i0 \n",
"14 i1 \n",
"15 i1 \n",
"16 i1 \n",
"17 i1 \n",
"18 i1 \n",
"19 i1 \n",
"20 i1 \n",
"21 i1 \n",
"22 i2 \n",
"23 i2 \n",
"24 i2 \n",
"25 i2 \n",
"26 i2 \n",
"27 i2 \n",
"28 i2 \n",
"29 i2 \n",
"30 i2 \n",
"31 i2 \n",
"32 i2 \n",
"33 i2 \n",
"34 i2 \n",
"35 i2 \n",
"36 i3 \n",
"37 i3 \n",
"38 i3 \n",
"39 i3 \n",
"40 i3 \n",
"41 i3 \n",
"42 i3 \n",
"43 i3 \n",
"44 i3 \n",
"45 i3 \n",
"46 i3 \n",
"47 i3 \n",
"48 i3 \n",
"49 i3 \n",
"50 i8 \n",
"51 i8 \n",
"52 i8 \n",
"53 i8 \n",
"54 i8 \n",
"55 i8 \n",
"56 i8 \n",
"57 i8 \n",
"58 i8 \n",
"59 i8 \n",
"60 i8 \n",
"61 i8 \n",
"62 i8 \n",
"63 i8 \n",
"64 i9 \n",
"65 i9 \n",
"66 i9 \n",
"67 i9 \n",
"68 i7 \n",
"69 i7 \n",
"70 i7 \n",
"71 i7 \n",
"72 i6 \n",
"73 i6 \n",
"74 i6 \n",
"75 i6 \n",
"76 i6 \n",
"77 i6 \n",
"78 i6 \n",
"79 i6 \n",
"80 i6 \n",
"81 i6 \n",
"82 i6 \n",
"83 i6 \n",
"84 i6 \n",
"85 i6 \n",
"86 c30 \n",
"87 c30 \n",
"88 c30 \n",
"89 c30 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 이동류 매칭\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": [
"100%|██████████| 17280/17280 [02:00<00:00, 143.08it/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": "markdown",
"metadata": {},
"source": [
"# C. 5분 간격으로 신호이력 수집 및 통합테이블 생성"
]
},
{
"cell_type": "code",
"execution_count": 267,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>start_hour</th>\n",
" <th>start_minute</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>42</td>\n",
" <td>29</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>45</td>\n",
" <td>33</td>\n",
" <td>22</td>\n",
" <td>37</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>18</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>176</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>73</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>131</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>206</td>\n",
" <td>1704380520</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>211</td>\n",
" <td>1704380525</td>\n",
" <td>28</td>\n",
" <td>97</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>125</td>\n",
" <td>45</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704380540</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>201</td>\n",
" <td>1704380540</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202</td>\n",
" <td>1704380540</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" <td>103</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": 268,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>723</th>\n",
" <td>175</td>\n",
" <td>1704391690</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>732</th>\n",
" <td>175</td>\n",
" <td>1704391850</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>741</th>\n",
" <td>175</td>\n",
" <td>1704392010</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>755</th>\n",
" <td>175</td>\n",
" <td>1704392170</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>764</th>\n",
" <td>175</td>\n",
" <td>1704392330</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>773</th>\n",
" <td>175</td>\n",
" <td>1704392490</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>784</th>\n",
" <td>175</td>\n",
" <td>1704392651</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>793</th>\n",
" <td>175</td>\n",
" <td>1704392810</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>159</td>\n",
" </tr>\n",
" <tr>\n",
" <th>802</th>\n",
" <td>175</td>\n",
" <td>1704392970</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>813</th>\n",
" <td>175</td>\n",
" <td>1704393130</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>825</th>\n",
" <td>175</td>\n",
" <td>1704393290</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>834</th>\n",
" <td>175</td>\n",
" <td>1704393450</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>846</th>\n",
" <td>175</td>\n",
" <td>1704393610</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>856</th>\n",
" <td>175</td>\n",
" <td>1704393770</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>865</th>\n",
" <td>175</td>\n",
" <td>1704393930</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>876</th>\n",
" <td>175</td>\n",
" <td>1704394090</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>175</td>\n",
" <td>1704394250</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>898</th>\n",
" <td>175</td>\n",
" <td>1704394410</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>909</th>\n",
" <td>175</td>\n",
" <td>1704394570</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>918</th>\n",
" <td>175</td>\n",
" <td>1704394730</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": 268,
"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": 269,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>start_hour</th>\n",
" <th>start_minute</th>\n",
" <th>start_seconds</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1704380400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>1704405600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>1704412800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>1704447000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": 269,
"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": 270,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[175, 176, 177, 178, 201, 202, 206, 210, 211]"
]
},
"execution_count": 270,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted(history.inter_no.unique())"
]
},
{
"cell_type": "code",
"execution_count": 271,
"metadata": {},
"outputs": [],
"source": [
"# inter_no == 178, end_unix ==1704460864"
]
},
{
"cell_type": "code",
"execution_count": 295,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4264</th>\n",
" <td>178</td>\n",
" <td>1704455140</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4273</th>\n",
" <td>178</td>\n",
" <td>1704455320</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4282</th>\n",
" <td>178</td>\n",
" <td>1704455500</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4291</th>\n",
" <td>178</td>\n",
" <td>1704455680</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4301</th>\n",
" <td>178</td>\n",
" <td>1704455860</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4310</th>\n",
" <td>178</td>\n",
" <td>1704456040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4319</th>\n",
" <td>178</td>\n",
" <td>1704456220</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4330</th>\n",
" <td>178</td>\n",
" <td>1704456400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4339</th>\n",
" <td>178</td>\n",
" <td>1704456580</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4348</th>\n",
" <td>178</td>\n",
" <td>1704456759</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4358</th>\n",
" <td>178</td>\n",
" <td>1704456940</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4366</th>\n",
" <td>178</td>\n",
" <td>1704457120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4375</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4384</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4394</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4403</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4411</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4420</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4431</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4441</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4450</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4460</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4468</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4477</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4487</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4497</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4506</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4516</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4526</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4533</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4559</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>504</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4569</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4577</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4586</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4597</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4606</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4615</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4625</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"4264 178 1704455140 38 39 44 36 23 0 \n",
"4273 178 1704455320 38 39 44 36 23 0 \n",
"4282 178 1704455500 38 39 44 36 23 0 \n",
"4291 178 1704455680 38 39 44 36 23 0 \n",
"4301 178 1704455860 38 39 44 36 23 0 \n",
"4310 178 1704456040 38 39 44 36 23 0 \n",
"4319 178 1704456220 38 39 44 36 23 0 \n",
"4330 178 1704456400 38 39 44 36 23 0 \n",
"4339 178 1704456580 38 39 44 36 23 0 \n",
"4348 178 1704456759 38 39 44 36 23 0 \n",
"4358 178 1704456940 38 39 44 36 23 0 \n",
"4366 178 1704457120 38 39 44 36 23 0 \n",
"4375 178 1704457300 38 39 44 36 23 0 \n",
"4384 178 1704457480 38 39 44 36 23 0 \n",
"4394 178 1704457660 38 39 44 36 23 0 \n",
"4403 178 1704457840 38 39 44 36 23 0 \n",
"4411 178 1704458020 38 39 44 36 23 0 \n",
"4420 178 1704458201 38 39 44 36 23 0 \n",
"4431 178 1704458380 38 39 44 36 23 0 \n",
"4441 178 1704458560 38 39 44 36 23 0 \n",
"4450 178 1704458740 38 39 44 36 23 0 \n",
"4460 178 1704458920 38 39 44 36 23 0 \n",
"4468 178 1704459100 38 39 44 36 23 0 \n",
"4477 178 1704459280 38 39 44 36 23 0 \n",
"4487 178 1704459460 38 39 44 36 23 0 \n",
"4497 178 1704459640 38 39 44 36 23 0 \n",
"4506 178 1704459820 38 39 44 36 23 0 \n",
"4516 178 1704460000 38 39 44 36 23 0 \n",
"4526 178 1704460180 38 39 44 36 23 0 \n",
"4533 178 1704460360 38 39 44 36 23 0 \n",
"4559 178 1704460864 38 39 44 36 23 0 \n",
"4569 178 1704461040 38 39 44 36 23 0 \n",
"4577 178 1704461219 38 39 44 36 23 0 \n",
"4586 178 1704461400 38 39 44 36 23 0 \n",
"4597 178 1704461579 38 39 44 36 23 0 \n",
"4606 178 1704461760 38 39 44 36 23 0 \n",
"4615 178 1704461939 38 39 44 36 23 0 \n",
"4625 178 1704462120 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"4264 0 0 180 75 0 \n",
"4273 0 0 180 75 180 \n",
"4282 0 0 180 75 180 \n",
"4291 0 0 180 75 180 \n",
"4301 0 0 180 75 180 \n",
"4310 0 0 180 75 180 \n",
"4319 0 0 180 75 180 \n",
"4330 0 0 180 75 180 \n",
"4339 0 0 180 75 180 \n",
"4348 0 0 180 75 179 \n",
"4358 0 0 180 75 181 \n",
"4366 0 0 180 75 180 \n",
"4375 0 0 180 75 180 \n",
"4384 0 0 180 75 180 \n",
"4394 0 0 180 75 180 \n",
"4403 0 0 180 75 180 \n",
"4411 0 0 180 75 180 \n",
"4420 0 0 180 75 181 \n",
"4431 0 0 180 75 179 \n",
"4441 0 0 180 75 180 \n",
"4450 0 0 180 75 180 \n",
"4460 0 0 180 75 180 \n",
"4468 0 0 180 75 180 \n",
"4477 0 0 180 75 180 \n",
"4487 0 0 180 75 180 \n",
"4497 0 0 180 75 180 \n",
"4506 0 0 180 75 180 \n",
"4516 0 0 180 75 180 \n",
"4526 0 0 180 75 180 \n",
"4533 0 0 180 75 180 \n",
"4559 0 0 180 75 504 \n",
"4569 0 0 180 75 176 \n",
"4577 0 0 180 75 179 \n",
"4586 0 0 180 75 181 \n",
"4597 0 0 180 75 179 \n",
"4606 0 0 180 75 181 \n",
"4615 0 0 180 75 179 \n",
"4625 0 0 180 75 181 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>1704460540</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"15 178 38 39 44 36 23 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"15 180 75 1704460540 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>1704460720</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"15 178 38 39 44 36 23 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"15 180 75 1704460720 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704455140</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704455320</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704455500</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704455680</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704455860</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704456040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>178</td>\n",
" <td>1704456220</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>178</td>\n",
" <td>1704456400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>178</td>\n",
" <td>1704456580</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>178</td>\n",
" <td>1704456759</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>178</td>\n",
" <td>1704456940</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>178</td>\n",
" <td>1704457120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460540</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460720</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704455140 38 39 44 36 23 0 \n",
"1 178 1704455320 38 39 44 36 23 0 \n",
"2 178 1704455500 38 39 44 36 23 0 \n",
"3 178 1704455680 38 39 44 36 23 0 \n",
"4 178 1704455860 38 39 44 36 23 0 \n",
"5 178 1704456040 38 39 44 36 23 0 \n",
"6 178 1704456220 38 39 44 36 23 0 \n",
"7 178 1704456400 38 39 44 36 23 0 \n",
"8 178 1704456580 38 39 44 36 23 0 \n",
"9 178 1704456759 38 39 44 36 23 0 \n",
"10 178 1704456940 38 39 44 36 23 0 \n",
"11 178 1704457120 38 39 44 36 23 0 \n",
"12 178 1704457300 38 39 44 36 23 0 \n",
"13 178 1704457480 38 39 44 36 23 0 \n",
"14 178 1704457660 38 39 44 36 23 0 \n",
"15 178 1704457840 38 39 44 36 23 0 \n",
"16 178 1704458020 38 39 44 36 23 0 \n",
"17 178 1704458201 38 39 44 36 23 0 \n",
"18 178 1704458380 38 39 44 36 23 0 \n",
"19 178 1704458560 38 39 44 36 23 0 \n",
"20 178 1704458740 38 39 44 36 23 0 \n",
"21 178 1704458920 38 39 44 36 23 0 \n",
"22 178 1704459100 38 39 44 36 23 0 \n",
"23 178 1704459280 38 39 44 36 23 0 \n",
"24 178 1704459460 38 39 44 36 23 0 \n",
"25 178 1704459640 38 39 44 36 23 0 \n",
"26 178 1704459820 38 39 44 36 23 0 \n",
"27 178 1704460000 38 39 44 36 23 0 \n",
"28 178 1704460180 38 39 44 36 23 0 \n",
"29 178 1704460360 38 39 44 36 23 0 \n",
"15 178 1704460540 38 39 44 36 23 0 \n",
"15 178 1704460720 38 39 44 36 23 0 \n",
"30 178 1704460864 38 39 44 36 23 0 \n",
"31 178 1704461040 38 39 44 36 23 0 \n",
"32 178 1704461219 38 39 44 36 23 0 \n",
"33 178 1704461400 38 39 44 36 23 0 \n",
"34 178 1704461579 38 39 44 36 23 0 \n",
"35 178 1704461760 38 39 44 36 23 0 \n",
"36 178 1704461939 38 39 44 36 23 0 \n",
"37 178 1704462120 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"0 0 0 180 75 0 \n",
"1 0 0 180 75 180 \n",
"2 0 0 180 75 180 \n",
"3 0 0 180 75 180 \n",
"4 0 0 180 75 180 \n",
"5 0 0 180 75 180 \n",
"6 0 0 180 75 180 \n",
"7 0 0 180 75 180 \n",
"8 0 0 180 75 180 \n",
"9 0 0 180 75 179 \n",
"10 0 0 180 75 181 \n",
"11 0 0 180 75 180 \n",
"12 0 0 180 75 180 \n",
"13 0 0 180 75 180 \n",
"14 0 0 180 75 180 \n",
"15 0 0 180 75 180 \n",
"16 0 0 180 75 180 \n",
"17 0 0 180 75 181 \n",
"18 0 0 180 75 179 \n",
"19 0 0 180 75 180 \n",
"20 0 0 180 75 180 \n",
"21 0 0 180 75 180 \n",
"22 0 0 180 75 180 \n",
"23 0 0 180 75 180 \n",
"24 0 0 180 75 180 \n",
"25 0 0 180 75 180 \n",
"26 0 0 180 75 180 \n",
"27 0 0 180 75 180 \n",
"28 0 0 180 75 180 \n",
"29 0 0 180 75 180 \n",
"15 0 0 180 75 180 \n",
"15 0 0 180 75 180 \n",
"30 0 0 180 75 144 \n",
"31 0 0 180 75 176 \n",
"32 0 0 180 75 179 \n",
"33 0 0 180 75 181 \n",
"34 0 0 180 75 179 \n",
"35 0 0 180 75 181 \n",
"36 0 0 180 75 179 \n",
"37 0 0 180 75 181 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
"m = 273 # ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n",
"present_time = fmins[m] # 현재시점\n",
"# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
"# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 2시간 이내인 데이터 수집\n",
"rhistory = history.copy() # recent history 1704393231\n",
"rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 7200)]\n",
"hours = np.array(range(midnight, next_day + 1, 3600))\n",
"rhist = rhistory.copy()[rhistory.inter_no == 178]\n",
"hist = history.copy()[history.inter_no == 178]\n",
"end_unixes = hist.end_unix.unique()\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(rhist_diff) # 결측치 처리 전\n",
"rhist = rhist.reset_index(drop=True)\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",
" 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",
" if next_unix - curr_unix >= 2 * cycle:\n",
" # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
" #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
" while next_unix - curr_unix > cycle:\n",
" curr_unix += cycle\n",
" # print(curr_unix)\n",
" prow = pland[(pland.inter_no==178) & (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",
" display(prow)\n",
" new_rows.append(prow)\n",
"\n",
"rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(rhist_diff) # 결측치 처리 후\n",
"rhist = rhist.reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 294,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704460540</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704460720</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704460360 38 39 44 36 23 0 \n",
"1 178 1704460540 38 39 44 36 23 0 \n",
"2 178 1704460720 38 39 44 36 23 0 \n",
"3 178 1704460864 38 39 44 36 23 0 \n",
"4 178 1704461040 38 39 44 36 23 0 \n",
"5 178 1704461219 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"0 0 0 180 75 0 \n",
"1 0 0 180 75 180 \n",
"2 0 0 180 75 180 \n",
"3 0 0 180 75 144 \n",
"4 0 0 180 75 176 \n",
"5 0 0 180 75 179 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n",
"1704460360\n",
"1704458740\n",
"1620\n",
"1620\n",
"0\n",
"1.0\n",
"1704460540\n",
"1704458740\n",
"1800\n",
"1800\n",
"0\n",
"0.8\n",
"1704460720\n",
"1704458740\n",
"1980\n",
"1980\n",
"0\n",
"0.9777777777777777\n",
"1704460864\n",
"1704458740\n",
"2124\n",
"2160\n",
"-36\n",
"0.9944444444444445\n",
"1704461040\n",
"1704458740\n",
"2300\n",
"2340\n",
"-40\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704460540</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704460720</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>37</td>\n",
" <td>38</td>\n",
" <td>43</td>\n",
" <td>35</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>175</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>37</td>\n",
" <td>38</td>\n",
" <td>43</td>\n",
" <td>35</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>175</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704460360 38 39 44 36 23 0 \n",
"1 178 1704460540 38 39 44 36 23 0 \n",
"2 178 1704460720 38 39 44 36 23 0 \n",
"3 178 1704460864 37 38 43 35 22 0 \n",
"4 178 1704461040 37 38 43 35 22 0 \n",
"5 178 1704461219 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset \n",
"0 0 0 180 75 \n",
"1 0 0 180 75 \n",
"2 0 0 180 75 \n",
"3 0 0 175 75 \n",
"4 0 0 175 75 \n",
"5 0 0 180 75 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Rhist = rhist.copy() # recent history 1704393231\n",
"Rhist = rhist[(rhist.end_unix < present_time) & (rhist.end_unix >= present_time - 1200)]\n",
"Rhist = Rhist.reset_index(drop=True)\n",
"Rhist_diff = Rhist.copy()\n",
"Rhist_diff['diff'] = Rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(Rhist_diff)\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 # current end_unix\n",
" cycle = rhist.iloc[n].cycle\n",
" R_n = (next_unix - curr_unix) / cycle\n",
" print(R_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",
" print(curr_unix)\n",
" ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\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",
" print(base_unix)\n",
" # D_n : 시간차이\n",
" D_n = curr_unix - base_unix\n",
" print(D_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 : 현시시간합\n",
" S_n = ddurations.values.sum()\n",
" print(S_n)\n",
" print(D_n - S_n)\n",
" if (abs(D_n - S_n) > 10) & (R_n > 0.5):\n",
" prow = pland[(pland.inter_no==178) & (pland.start_hour==start_hour) & (pland.start_minute==start_minute)].copy() # planned row\n",
" adjusted_row = prow.loc[15, ['ddur_1', 'ddur_2', 'ddur_3', 'ddur_4', 'ddur_5', 'ddur_6', 'ddur_7', 'ddur_8']] * R_n\n",
" adjusted_row = adjusted_row.astype(int)\n",
" Rhist.loc[n, ['ddur_1', 'ddur_2', 'ddur_3', 'ddur_4', 'ddur_5', 'ddur_6', 'ddur_7', 'ddur_8']] = adjusted_row.values\n",
" Rhist.loc[n, 'cycle'] = adjusted_row.sum()\n",
" pass\n",
"\n",
"display(Rhist)"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1704454239\n",
"1704452400\n",
"[]\n"
]
},
{
"ename": "IndexError",
"evalue": "index -5 is out of bounds for axis 0 with size 0",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[257], line 12\u001b[0m\n\u001b[0;32m 10\u001b[0m end_unixes_lt_ghour \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39msort(end_unixes[end_unixes \u001b[38;5;241m<\u001b[39m ghour_lt_end_unix]) \u001b[38;5;66;03m# end unixes less than ghour_lt_end_unix\u001b[39;00m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28mprint\u001b[39m(end_unixes_lt_ghour)\n\u001b[1;32m---> 12\u001b[0m base_unix \u001b[38;5;241m=\u001b[39m \u001b[43mend_unixes_lt_ghour\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;66;03m# 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\u001b[39;00m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;28mprint\u001b[39m(base_unix)\n",
"\u001b[1;31mIndexError\u001b[0m: index -5 is out of bounds for axis 0 with size 0"
]
}
],
"source": [
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"# display(rhist_diff) # 이상치 처리 전\n",
"end_unixes = rhist.end_unix.unique()\n",
"n = 0\n",
"curr_unix = rhist.iloc[n].end_unix # current end_unix\n",
"print(curr_unix)\n",
"ghour_lt_end_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n",
"print(ghour_lt_end_unix)\n",
"end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_end_unix]) # end unixes less than ghour_lt_end_unix\n",
"print(end_unixes_lt_ghour)\n",
"base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n",
"print(base_unix)"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4375</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4384</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4394</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4403</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4411</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4420</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4431</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4441</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4450</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4460</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4468</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4477</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4487</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4497</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4506</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4516</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4526</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4533</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4559</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>504</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4569</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4577</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4586</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4597</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4606</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4615</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4625</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4635</th>\n",
" <td>178</td>\n",
" <td>1704462300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4644</th>\n",
" <td>178</td>\n",
" <td>1704462480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4653</th>\n",
" <td>178</td>\n",
" <td>1704462660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4663</th>\n",
" <td>178</td>\n",
" <td>1704462840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4674</th>\n",
" <td>178</td>\n",
" <td>1704463021</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4681</th>\n",
" <td>178</td>\n",
" <td>1704463200</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4690</th>\n",
" <td>178</td>\n",
" <td>1704463381</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4700</th>\n",
" <td>178</td>\n",
" <td>1704463560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4709</th>\n",
" <td>178</td>\n",
" <td>1704463741</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4717</th>\n",
" <td>178</td>\n",
" <td>1704463920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4726</th>\n",
" <td>178</td>\n",
" <td>1704464100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4737</th>\n",
" <td>178</td>\n",
" <td>1704464280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"4375 178 1704457300 38 39 44 36 23 0 \n",
"4384 178 1704457480 38 39 44 36 23 0 \n",
"4394 178 1704457660 38 39 44 36 23 0 \n",
"4403 178 1704457840 38 39 44 36 23 0 \n",
"4411 178 1704458020 38 39 44 36 23 0 \n",
"4420 178 1704458201 38 39 44 36 23 0 \n",
"4431 178 1704458380 38 39 44 36 23 0 \n",
"4441 178 1704458560 38 39 44 36 23 0 \n",
"4450 178 1704458740 38 39 44 36 23 0 \n",
"4460 178 1704458920 38 39 44 36 23 0 \n",
"4468 178 1704459100 38 39 44 36 23 0 \n",
"4477 178 1704459280 38 39 44 36 23 0 \n",
"4487 178 1704459460 38 39 44 36 23 0 \n",
"4497 178 1704459640 38 39 44 36 23 0 \n",
"4506 178 1704459820 38 39 44 36 23 0 \n",
"4516 178 1704460000 38 39 44 36 23 0 \n",
"4526 178 1704460180 38 39 44 36 23 0 \n",
"4533 178 1704460360 38 39 44 36 23 0 \n",
"4559 178 1704460864 38 39 44 36 23 0 \n",
"4569 178 1704461040 38 39 44 36 23 0 \n",
"4577 178 1704461219 38 39 44 36 23 0 \n",
"4586 178 1704461400 38 39 44 36 23 0 \n",
"4597 178 1704461579 38 39 44 36 23 0 \n",
"4606 178 1704461760 38 39 44 36 23 0 \n",
"4615 178 1704461939 38 39 44 36 23 0 \n",
"4625 178 1704462120 38 39 44 36 23 0 \n",
"4635 178 1704462300 38 39 44 36 23 0 \n",
"4644 178 1704462480 38 39 44 36 23 0 \n",
"4653 178 1704462660 38 39 44 36 23 0 \n",
"4663 178 1704462840 38 39 44 36 23 0 \n",
"4674 178 1704463021 38 39 44 36 23 0 \n",
"4681 178 1704463200 38 39 44 36 23 0 \n",
"4690 178 1704463381 38 39 44 36 23 0 \n",
"4700 178 1704463560 38 39 44 36 23 0 \n",
"4709 178 1704463741 38 39 44 36 23 0 \n",
"4717 178 1704463920 38 39 44 36 23 0 \n",
"4726 178 1704464100 38 39 44 36 23 0 \n",
"4737 178 1704464280 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"4375 0 0 180 75 0 \n",
"4384 0 0 180 75 180 \n",
"4394 0 0 180 75 180 \n",
"4403 0 0 180 75 180 \n",
"4411 0 0 180 75 180 \n",
"4420 0 0 180 75 181 \n",
"4431 0 0 180 75 179 \n",
"4441 0 0 180 75 180 \n",
"4450 0 0 180 75 180 \n",
"4460 0 0 180 75 180 \n",
"4468 0 0 180 75 180 \n",
"4477 0 0 180 75 180 \n",
"4487 0 0 180 75 180 \n",
"4497 0 0 180 75 180 \n",
"4506 0 0 180 75 180 \n",
"4516 0 0 180 75 180 \n",
"4526 0 0 180 75 180 \n",
"4533 0 0 180 75 180 \n",
"4559 0 0 180 75 504 \n",
"4569 0 0 180 75 176 \n",
"4577 0 0 180 75 179 \n",
"4586 0 0 180 75 181 \n",
"4597 0 0 180 75 179 \n",
"4606 0 0 180 75 181 \n",
"4615 0 0 180 75 179 \n",
"4625 0 0 180 75 181 \n",
"4635 0 0 180 75 180 \n",
"4644 0 0 180 75 180 \n",
"4653 0 0 180 75 180 \n",
"4663 0 0 180 75 180 \n",
"4674 0 0 180 75 181 \n",
"4681 0 0 180 75 179 \n",
"4690 0 0 180 75 181 \n",
"4700 0 0 180 75 179 \n",
"4709 0 0 180 75 181 \n",
"4717 0 0 180 75 179 \n",
"4726 0 0 180 75 180 \n",
"4737 0 0 180 75 180 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>1704460540</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"0 175 37 39 25 30 29 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"0 160 57 1704460540 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>1704460720</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"0 175 37 39 25 30 29 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"0 160 57 1704460720 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1704460540</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1704460720</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>178</td>\n",
" <td>1704462300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>178</td>\n",
" <td>1704462480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>178</td>\n",
" <td>1704462660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>178</td>\n",
" <td>1704462840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>178</td>\n",
" <td>1704463021</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>178</td>\n",
" <td>1704463200</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>178</td>\n",
" <td>1704463381</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>178</td>\n",
" <td>1704463560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>178</td>\n",
" <td>1704463741</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>178</td>\n",
" <td>1704463920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1704464100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>1704464280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704457300 38 39 44 36 23 0 \n",
"1 178 1704457480 38 39 44 36 23 0 \n",
"2 178 1704457660 38 39 44 36 23 0 \n",
"3 178 1704457840 38 39 44 36 23 0 \n",
"4 178 1704458020 38 39 44 36 23 0 \n",
"5 178 1704458201 38 39 44 36 23 0 \n",
"6 178 1704458380 38 39 44 36 23 0 \n",
"7 178 1704458560 38 39 44 36 23 0 \n",
"8 178 1704458740 38 39 44 36 23 0 \n",
"9 178 1704458920 38 39 44 36 23 0 \n",
"10 178 1704459100 38 39 44 36 23 0 \n",
"11 178 1704459280 38 39 44 36 23 0 \n",
"12 178 1704459460 38 39 44 36 23 0 \n",
"13 178 1704459640 38 39 44 36 23 0 \n",
"14 178 1704459820 38 39 44 36 23 0 \n",
"15 178 1704460000 38 39 44 36 23 0 \n",
"16 178 1704460180 38 39 44 36 23 0 \n",
"17 178 1704460360 38 39 44 36 23 0 \n",
"0 175 1704460540 37 39 25 30 29 0 \n",
"0 175 1704460720 37 39 25 30 29 0 \n",
"18 178 1704460864 38 39 44 36 23 0 \n",
"19 178 1704461040 38 39 44 36 23 0 \n",
"20 178 1704461219 38 39 44 36 23 0 \n",
"21 178 1704461400 38 39 44 36 23 0 \n",
"22 178 1704461579 38 39 44 36 23 0 \n",
"23 178 1704461760 38 39 44 36 23 0 \n",
"24 178 1704461939 38 39 44 36 23 0 \n",
"25 178 1704462120 38 39 44 36 23 0 \n",
"26 178 1704462300 38 39 44 36 23 0 \n",
"27 178 1704462480 38 39 44 36 23 0 \n",
"28 178 1704462660 38 39 44 36 23 0 \n",
"29 178 1704462840 38 39 44 36 23 0 \n",
"30 178 1704463021 38 39 44 36 23 0 \n",
"31 178 1704463200 38 39 44 36 23 0 \n",
"32 178 1704463381 38 39 44 36 23 0 \n",
"33 178 1704463560 38 39 44 36 23 0 \n",
"34 178 1704463741 38 39 44 36 23 0 \n",
"35 178 1704463920 38 39 44 36 23 0 \n",
"36 178 1704464100 38 39 44 36 23 0 \n",
"37 178 1704464280 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"0 0 0 180 75 0 \n",
"1 0 0 180 75 180 \n",
"2 0 0 180 75 180 \n",
"3 0 0 180 75 180 \n",
"4 0 0 180 75 180 \n",
"5 0 0 180 75 181 \n",
"6 0 0 180 75 179 \n",
"7 0 0 180 75 180 \n",
"8 0 0 180 75 180 \n",
"9 0 0 180 75 180 \n",
"10 0 0 180 75 180 \n",
"11 0 0 180 75 180 \n",
"12 0 0 180 75 180 \n",
"13 0 0 180 75 180 \n",
"14 0 0 180 75 180 \n",
"15 0 0 180 75 180 \n",
"16 0 0 180 75 180 \n",
"17 0 0 180 75 180 \n",
"0 0 0 160 57 180 \n",
"0 0 0 160 57 180 \n",
"18 0 0 180 75 144 \n",
"19 0 0 180 75 176 \n",
"20 0 0 180 75 179 \n",
"21 0 0 180 75 181 \n",
"22 0 0 180 75 179 \n",
"23 0 0 180 75 181 \n",
"24 0 0 180 75 179 \n",
"25 0 0 180 75 181 \n",
"26 0 0 180 75 180 \n",
"27 0 0 180 75 180 \n",
"28 0 0 180 75 180 \n",
"29 0 0 180 75 180 \n",
"30 0 0 180 75 181 \n",
"31 0 0 180 75 179 \n",
"32 0 0 180 75 181 \n",
"33 0 0 180 75 179 \n",
"34 0 0 180 75 181 \n",
"35 0 0 180 75 179 \n",
"36 0 0 180 75 180 \n",
"37 0 0 180 75 180 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>175</td>\n",
" <td>1704460540</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>175</td>\n",
" <td>1704460720</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>178</td>\n",
" <td>1704462300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>178</td>\n",
" <td>1704462480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>178</td>\n",
" <td>1704462660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>178</td>\n",
" <td>1704462840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>178</td>\n",
" <td>1704463021</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>178</td>\n",
" <td>1704463200</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>178</td>\n",
" <td>1704463381</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>178</td>\n",
" <td>1704463560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1704463741</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>1704463920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>178</td>\n",
" <td>1704464100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>178</td>\n",
" <td>1704464280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704457300 38 39 44 36 23 0 \n",
"1 178 1704457480 38 39 44 36 23 0 \n",
"2 178 1704457660 38 39 44 36 23 0 \n",
"3 178 1704457840 38 39 44 36 23 0 \n",
"4 178 1704458020 38 39 44 36 23 0 \n",
"5 178 1704458201 38 39 44 36 23 0 \n",
"6 178 1704458380 38 39 44 36 23 0 \n",
"7 178 1704458560 38 39 44 36 23 0 \n",
"8 178 1704458740 38 39 44 36 23 0 \n",
"9 178 1704458920 38 39 44 36 23 0 \n",
"10 178 1704459100 38 39 44 36 23 0 \n",
"11 178 1704459280 38 39 44 36 23 0 \n",
"12 178 1704459460 38 39 44 36 23 0 \n",
"13 178 1704459640 38 39 44 36 23 0 \n",
"14 178 1704459820 38 39 44 36 23 0 \n",
"15 178 1704460000 38 39 44 36 23 0 \n",
"16 178 1704460180 38 39 44 36 23 0 \n",
"17 178 1704460360 38 39 44 36 23 0 \n",
"18 175 1704460540 37 39 25 30 29 0 \n",
"19 175 1704460720 37 39 25 30 29 0 \n",
"20 178 1704460864 38 39 44 36 23 0 \n",
"21 178 1704461040 38 39 44 36 23 0 \n",
"22 178 1704461219 38 39 44 36 23 0 \n",
"23 178 1704461400 38 39 44 36 23 0 \n",
"24 178 1704461579 38 39 44 36 23 0 \n",
"25 178 1704461760 38 39 44 36 23 0 \n",
"26 178 1704461939 38 39 44 36 23 0 \n",
"27 178 1704462120 38 39 44 36 23 0 \n",
"28 178 1704462300 38 39 44 36 23 0 \n",
"29 178 1704462480 38 39 44 36 23 0 \n",
"30 178 1704462660 38 39 44 36 23 0 \n",
"31 178 1704462840 38 39 44 36 23 0 \n",
"32 178 1704463021 38 39 44 36 23 0 \n",
"33 178 1704463200 38 39 44 36 23 0 \n",
"34 178 1704463381 38 39 44 36 23 0 \n",
"35 178 1704463560 38 39 44 36 23 0 \n",
"36 178 1704463741 38 39 44 36 23 0 \n",
"37 178 1704463920 38 39 44 36 23 0 \n",
"38 178 1704464100 38 39 44 36 23 0 \n",
"39 178 1704464280 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset \n",
"0 0 0 180 75 \n",
"1 0 0 180 75 \n",
"2 0 0 180 75 \n",
"3 0 0 180 75 \n",
"4 0 0 180 75 \n",
"5 0 0 180 75 \n",
"6 0 0 180 75 \n",
"7 0 0 180 75 \n",
"8 0 0 180 75 \n",
"9 0 0 180 75 \n",
"10 0 0 180 75 \n",
"11 0 0 180 75 \n",
"12 0 0 180 75 \n",
"13 0 0 180 75 \n",
"14 0 0 180 75 \n",
"15 0 0 180 75 \n",
"16 0 0 180 75 \n",
"17 0 0 180 75 \n",
"18 0 0 160 57 \n",
"19 0 0 160 57 \n",
"20 0 0 180 75 \n",
"21 0 0 180 75 \n",
"22 0 0 180 75 \n",
"23 0 0 180 75 \n",
"24 0 0 180 75 \n",
"25 0 0 180 75 \n",
"26 0 0 180 75 \n",
"27 0 0 180 75 \n",
"28 0 0 180 75 \n",
"29 0 0 180 75 \n",
"30 0 0 180 75 \n",
"31 0 0 180 75 \n",
"32 0 0 180 75 \n",
"33 0 0 180 75 \n",
"34 0 0 180 75 \n",
"35 0 0 180 75 \n",
"36 0 0 180 75 \n",
"37 0 0 180 75 \n",
"38 0 0 180 75 \n",
"39 0 0 180 75 "
]
},
"execution_count": 176,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
"m = 280 # ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n",
"present_time = fmins[m] # 현재시점\n",
"# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
"# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 2시간 이내인 데이터 수집\n",
"rhistory = history.copy() # recent history 1704393231\n",
"rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 7200)]\n",
"hours = np.array(range(midnight, next_day + 1, 3600))\n",
"rhist = rhistory.copy()[rhistory.inter_no == 178]\n",
"hist = history.copy()[history.inter_no == 178]\n",
"end_unixes = rhist.end_unix.unique()\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(rhist_diff) # 결측치 처리 전\n",
"rhist = rhist.reset_index(drop=True)\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",
" start_seconds = np.array(timetable.start_seconds)\n",
" idx = (start_seconds <= 1704396909).sum() - 1\n",
" start_hour = timetable.iloc[idx].start_hour\n",
" start_minute = timetable.iloc[idx].start_minute\n",
" if next_unix - curr_unix >= 2 * cycle:\n",
" # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
" #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
" while next_unix - curr_unix > cycle:\n",
" curr_unix += cycle\n",
" # print(curr_unix)\n",
" prow = pland[(pland.inter_no==175) & (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",
" display(prow)\n",
" new_rows.append(prow)\n",
"\n",
"rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(rhist_diff) # 결측치 처리 후\n",
"rhist = rhist.reset_index(drop=True)\n",
"rhist"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>1704460540</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"0 175 37 39 25 30 29 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"0 160 57 1704460540 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>end_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>1704460720</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 ddur_7 ddur_8 \\\n",
"0 175 37 39 25 30 29 0 0 0 \n",
"\n",
" cycle offset end_unix \n",
"0 160 57 1704460720 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"curr_unix:1704460720\n",
"2024-01-05 22:00:00\n",
"ghour_lt_end_unix:1704459600\n",
"base_unix:1704458740\n",
"1980\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4450</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"4450 178 1704458740 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset \n",
"4450 0 0 180 75 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>178</td>\n",
" <td>1704462300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>178</td>\n",
" <td>1704462480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>178</td>\n",
" <td>1704462660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>178</td>\n",
" <td>1704462840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>178</td>\n",
" <td>1704463021</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>178</td>\n",
" <td>1704463200</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>178</td>\n",
" <td>1704463381</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>178</td>\n",
" <td>1704463560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>178</td>\n",
" <td>1704463741</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>178</td>\n",
" <td>1704463920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1704464100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>1704464280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"8 178 1704458740 38 39 44 36 23 0 \n",
"9 178 1704458920 38 39 44 36 23 0 \n",
"10 178 1704459100 38 39 44 36 23 0 \n",
"11 178 1704459280 38 39 44 36 23 0 \n",
"12 178 1704459460 38 39 44 36 23 0 \n",
"13 178 1704459640 38 39 44 36 23 0 \n",
"14 178 1704459820 38 39 44 36 23 0 \n",
"15 178 1704460000 38 39 44 36 23 0 \n",
"16 178 1704460180 38 39 44 36 23 0 \n",
"17 178 1704460360 38 39 44 36 23 0 \n",
"18 178 1704460864 38 39 44 36 23 0 \n",
"19 178 1704461040 38 39 44 36 23 0 \n",
"20 178 1704461219 38 39 44 36 23 0 \n",
"21 178 1704461400 38 39 44 36 23 0 \n",
"22 178 1704461579 38 39 44 36 23 0 \n",
"23 178 1704461760 38 39 44 36 23 0 \n",
"24 178 1704461939 38 39 44 36 23 0 \n",
"25 178 1704462120 38 39 44 36 23 0 \n",
"26 178 1704462300 38 39 44 36 23 0 \n",
"27 178 1704462480 38 39 44 36 23 0 \n",
"28 178 1704462660 38 39 44 36 23 0 \n",
"29 178 1704462840 38 39 44 36 23 0 \n",
"30 178 1704463021 38 39 44 36 23 0 \n",
"31 178 1704463200 38 39 44 36 23 0 \n",
"32 178 1704463381 38 39 44 36 23 0 \n",
"33 178 1704463560 38 39 44 36 23 0 \n",
"34 178 1704463741 38 39 44 36 23 0 \n",
"35 178 1704463920 38 39 44 36 23 0 \n",
"36 178 1704464100 38 39 44 36 23 0 \n",
"37 178 1704464280 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset \n",
"8 0 0 180 75 \n",
"9 0 0 180 75 \n",
"10 0 0 180 75 \n",
"11 0 0 180 75 \n",
"12 0 0 180 75 \n",
"13 0 0 180 75 \n",
"14 0 0 180 75 \n",
"15 0 0 180 75 \n",
"16 0 0 180 75 \n",
"17 0 0 180 75 \n",
"18 0 0 180 75 \n",
"19 0 0 180 75 \n",
"20 0 0 180 75 \n",
"21 0 0 180 75 \n",
"22 0 0 180 75 \n",
"23 0 0 180 75 \n",
"24 0 0 180 75 \n",
"25 0 0 180 75 \n",
"26 0 0 180 75 \n",
"27 0 0 180 75 \n",
"28 0 0 180 75 \n",
"29 0 0 180 75 \n",
"30 0 0 180 75 \n",
"31 0 0 180 75 \n",
"32 0 0 180 75 \n",
"33 0 0 180 75 \n",
"34 0 0 180 75 \n",
"35 0 0 180 75 \n",
"36 0 0 180 75 \n",
"37 0 0 180 75 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704457300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704457480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704457660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704457840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>178</td>\n",
" <td>1704458020</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>178</td>\n",
" <td>1704458201</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>178</td>\n",
" <td>1704458380</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>178</td>\n",
" <td>1704458560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>178</td>\n",
" <td>1704458740</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>178</td>\n",
" <td>1704458920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>178</td>\n",
" <td>1704459100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>178</td>\n",
" <td>1704459280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>178</td>\n",
" <td>1704459460</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>178</td>\n",
" <td>1704459640</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>178</td>\n",
" <td>1704459820</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>178</td>\n",
" <td>1704460000</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>178</td>\n",
" <td>1704460180</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>178</td>\n",
" <td>1704460360</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1704460540</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1704460720</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>178</td>\n",
" <td>1704460864</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>178</td>\n",
" <td>1704461040</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>178</td>\n",
" <td>1704461219</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>178</td>\n",
" <td>1704461400</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>178</td>\n",
" <td>1704461579</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>178</td>\n",
" <td>1704461760</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>178</td>\n",
" <td>1704461939</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>178</td>\n",
" <td>1704462120</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>178</td>\n",
" <td>1704462300</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>178</td>\n",
" <td>1704462480</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>178</td>\n",
" <td>1704462660</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>178</td>\n",
" <td>1704462840</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>178</td>\n",
" <td>1704463021</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>178</td>\n",
" <td>1704463200</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>178</td>\n",
" <td>1704463381</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>178</td>\n",
" <td>1704463560</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>178</td>\n",
" <td>1704463741</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>178</td>\n",
" <td>1704463920</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>178</td>\n",
" <td>1704464100</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>178</td>\n",
" <td>1704464280</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>44</td>\n",
" <td>36</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>75</td>\n",
" <td>180</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"0 178 1704457300 38 39 44 36 23 0 \n",
"1 178 1704457480 38 39 44 36 23 0 \n",
"2 178 1704457660 38 39 44 36 23 0 \n",
"3 178 1704457840 38 39 44 36 23 0 \n",
"4 178 1704458020 38 39 44 36 23 0 \n",
"5 178 1704458201 38 39 44 36 23 0 \n",
"6 178 1704458380 38 39 44 36 23 0 \n",
"7 178 1704458560 38 39 44 36 23 0 \n",
"8 178 1704458740 38 39 44 36 23 0 \n",
"9 178 1704458920 38 39 44 36 23 0 \n",
"10 178 1704459100 38 39 44 36 23 0 \n",
"11 178 1704459280 38 39 44 36 23 0 \n",
"12 178 1704459460 38 39 44 36 23 0 \n",
"13 178 1704459640 38 39 44 36 23 0 \n",
"14 178 1704459820 38 39 44 36 23 0 \n",
"15 178 1704460000 38 39 44 36 23 0 \n",
"16 178 1704460180 38 39 44 36 23 0 \n",
"17 178 1704460360 38 39 44 36 23 0 \n",
"0 175 1704460540 37 39 25 30 29 0 \n",
"0 175 1704460720 37 39 25 30 29 0 \n",
"18 178 1704460864 38 39 44 36 23 0 \n",
"19 178 1704461040 38 39 44 36 23 0 \n",
"20 178 1704461219 38 39 44 36 23 0 \n",
"21 178 1704461400 38 39 44 36 23 0 \n",
"22 178 1704461579 38 39 44 36 23 0 \n",
"23 178 1704461760 38 39 44 36 23 0 \n",
"24 178 1704461939 38 39 44 36 23 0 \n",
"25 178 1704462120 38 39 44 36 23 0 \n",
"26 178 1704462300 38 39 44 36 23 0 \n",
"27 178 1704462480 38 39 44 36 23 0 \n",
"28 178 1704462660 38 39 44 36 23 0 \n",
"29 178 1704462840 38 39 44 36 23 0 \n",
"30 178 1704463021 38 39 44 36 23 0 \n",
"31 178 1704463200 38 39 44 36 23 0 \n",
"32 178 1704463381 38 39 44 36 23 0 \n",
"33 178 1704463560 38 39 44 36 23 0 \n",
"34 178 1704463741 38 39 44 36 23 0 \n",
"35 178 1704463920 38 39 44 36 23 0 \n",
"36 178 1704464100 38 39 44 36 23 0 \n",
"37 178 1704464280 38 39 44 36 23 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"0 0 0 180 75 0 \n",
"1 0 0 180 75 180 \n",
"2 0 0 180 75 180 \n",
"3 0 0 180 75 180 \n",
"4 0 0 180 75 180 \n",
"5 0 0 180 75 181 \n",
"6 0 0 180 75 179 \n",
"7 0 0 180 75 180 \n",
"8 0 0 180 75 180 \n",
"9 0 0 180 75 180 \n",
"10 0 0 180 75 180 \n",
"11 0 0 180 75 180 \n",
"12 0 0 180 75 180 \n",
"13 0 0 180 75 180 \n",
"14 0 0 180 75 180 \n",
"15 0 0 180 75 180 \n",
"16 0 0 180 75 180 \n",
"17 0 0 180 75 180 \n",
"0 0 0 160 57 180 \n",
"0 0 0 160 57 180 \n",
"18 0 0 180 75 144 \n",
"19 0 0 180 75 176 \n",
"20 0 0 180 75 179 \n",
"21 0 0 180 75 181 \n",
"22 0 0 180 75 179 \n",
"23 0 0 180 75 181 \n",
"24 0 0 180 75 179 \n",
"25 0 0 180 75 181 \n",
"26 0 0 180 75 180 \n",
"27 0 0 180 75 180 \n",
"28 0 0 180 75 180 \n",
"29 0 0 180 75 180 \n",
"30 0 0 180 75 181 \n",
"31 0 0 180 75 179 \n",
"32 0 0 180 75 181 \n",
"33 0 0 180 75 179 \n",
"34 0 0 180 75 181 \n",
"35 0 0 180 75 179 \n",
"36 0 0 180 75 180 \n",
"37 0 0 180 75 180 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 1704460864\n",
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
"m = 280 # ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n",
"present_time = fmins[m] # 현재시점\n",
"# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
"# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 2시간 이내인 데이터 수집\n",
"rhistory = history.copy() # recent history 1704393231\n",
"rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 7200)]\n",
"hours = np.array(range(midnight, next_day + 1, 3600))\n",
"rhist = rhistory.copy()[rhistory.inter_no == 178]\n",
"hist = history.copy()[history.inter_no == 178]\n",
"end_unixes = rhist.end_unix.unique()\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"# display(rhist_diff.reset_index(drop=True))\n",
"# display(rhist_diff)\n",
"rhist = rhist.reset_index(drop=True)\n",
"new_rows = []\n",
"# n = 16 : 정상\n",
"# n = 17 : 비정상\n",
"n = 17\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",
"start_seconds = np.array(timetable.start_seconds)\n",
"idx = (start_seconds <= 1704396909).sum() - 1\n",
"start_hour = timetable.iloc[idx].start_hour\n",
"start_minute = timetable.iloc[idx].start_minute\n",
"# 1-1. 결측치 처리 : 인접한 두 end_unix의 차이가 계획된 주기의 두 배보다 크면 결측이 일어났다고 판단\n",
"if next_unix - curr_unix >= 2 * cycle:\n",
" # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
" #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
" while next_unix - curr_unix > cycle:\n",
" curr_unix += cycle\n",
" # print(curr_unix)\n",
" prow = pland[(pland.inter_no==175) & (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",
" display(prow)\n",
" new_rows.append(prow)\n",
"# 1-2. 이상치 처리 : D_n(시간차이)과 S_n(현시시간합)의 차이가 10보다 크면 이상치가 발생했다고 판단\n",
"ghour_lt_end_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n",
"end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_end_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",
"print(f\"curr_unix:{curr_unix}\")\n",
"print(datetime.fromtimestamp(ghour_lt_end_unix))\n",
"print(f\"ghour_lt_end_unix:{ghour_lt_end_unix}\")\n",
"print(f\"base_unix:{base_unix}\")\n",
"print(D_n)\n",
"display(history[history.end_unix==base_unix])\n",
"# display(hist[495:]) # max 538\n",
"# display(hist[(hist.end_unix >= base_unix) & (hist.end_unix <= curr_unix)])\n",
"display(rhist[(rhist.end_unix >= base_unix)])# & (rhist.end_unix <= curr_unix)])\n",
"# datetime.utcfromtimestamp(unix_timestamp)\n",
"\n",
"rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\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": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>ddur_1</th>\n",
" <th>ddur_2</th>\n",
" <th>ddur_3</th>\n",
" <th>ddur_4</th>\n",
" <th>ddur_5</th>\n",
" <th>ddur_6</th>\n",
" <th>ddur_7</th>\n",
" <th>ddur_8</th>\n",
" <th>cycle</th>\n",
" <th>offset</th>\n",
" <th>diff</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>693</th>\n",
" <td>175</td>\n",
" <td>1704391210</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>702</th>\n",
" <td>175</td>\n",
" <td>1704391370</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>712</th>\n",
" <td>175</td>\n",
" <td>1704391530</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>723</th>\n",
" <td>175</td>\n",
" <td>1704391690</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>732</th>\n",
" <td>175</td>\n",
" <td>1704391850</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>741</th>\n",
" <td>175</td>\n",
" <td>1704392010</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>755</th>\n",
" <td>175</td>\n",
" <td>1704392170</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>764</th>\n",
" <td>175</td>\n",
" <td>1704392330</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>773</th>\n",
" <td>175</td>\n",
" <td>1704392490</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>784</th>\n",
" <td>175</td>\n",
" <td>1704392651</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>793</th>\n",
" <td>175</td>\n",
" <td>1704392810</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>159</td>\n",
" </tr>\n",
" <tr>\n",
" <th>802</th>\n",
" <td>175</td>\n",
" <td>1704392970</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>813</th>\n",
" <td>175</td>\n",
" <td>1704393130</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>825</th>\n",
" <td>175</td>\n",
" <td>1704393290</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>834</th>\n",
" <td>175</td>\n",
" <td>1704393450</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>846</th>\n",
" <td>175</td>\n",
" <td>1704393610</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>856</th>\n",
" <td>175</td>\n",
" <td>1704393770</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>865</th>\n",
" <td>175</td>\n",
" <td>1704393930</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>876</th>\n",
" <td>175</td>\n",
" <td>1704394090</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>175</td>\n",
" <td>1704394250</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>898</th>\n",
" <td>175</td>\n",
" <td>1704394410</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>909</th>\n",
" <td>175</td>\n",
" <td>1704394570</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>918</th>\n",
" <td>175</td>\n",
" <td>1704394730</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>927</th>\n",
" <td>175</td>\n",
" <td>1704394890</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>938</th>\n",
" <td>175</td>\n",
" <td>1704395050</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>947</th>\n",
" <td>175</td>\n",
" <td>1704395210</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>956</th>\n",
" <td>175</td>\n",
" <td>1704395370</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>970</th>\n",
" <td>175</td>\n",
" <td>1704395530</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>979</th>\n",
" <td>175</td>\n",
" <td>1704395690</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>988</th>\n",
" <td>175</td>\n",
" <td>1704395850</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>999</th>\n",
" <td>175</td>\n",
" <td>1704396010</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1009</th>\n",
" <td>175</td>\n",
" <td>1704396170</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1018</th>\n",
" <td>175</td>\n",
" <td>1704396330</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030</th>\n",
" <td>175</td>\n",
" <td>1704396490</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1042</th>\n",
" <td>175</td>\n",
" <td>1704396650</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1052</th>\n",
" <td>175</td>\n",
" <td>1704396810</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1063</th>\n",
" <td>175</td>\n",
" <td>1704396970</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1072</th>\n",
" <td>175</td>\n",
" <td>1704397130</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1081</th>\n",
" <td>175</td>\n",
" <td>1704397290</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1093</th>\n",
" <td>175</td>\n",
" <td>1704397451</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1102</th>\n",
" <td>175</td>\n",
" <td>1704397610</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>159</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1113</th>\n",
" <td>175</td>\n",
" <td>1704397770</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1124</th>\n",
" <td>175</td>\n",
" <td>1704397930</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1134</th>\n",
" <td>175</td>\n",
" <td>1704398089</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>159</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1142</th>\n",
" <td>175</td>\n",
" <td>1704398250</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" <td>161</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\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",
"\n",
" ddur_7 ddur_8 cycle offset diff \n",
"693 0 0 160 57 0 \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 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"ename": "IndexError",
"evalue": "index -5 is out of bounds for axis 0 with size 0",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[110], line 39\u001b[0m\n\u001b[0;32m 37\u001b[0m ghour_lt_end_unix \u001b[38;5;241m=\u001b[39m hours[hours \u001b[38;5;241m<\u001b[39m curr_unix]\u001b[38;5;241m.\u001b[39mmax() \u001b[38;5;66;03m# the greatest hour less than end_unix\u001b[39;00m\n\u001b[0;32m 38\u001b[0m end_unixes_lt_ghour \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39msort(end_unixes[end_unixes \u001b[38;5;241m<\u001b[39m ghour_lt_end_unix]) \u001b[38;5;66;03m# end unixes less than ghour_lt_end_unix\u001b[39;00m\n\u001b[1;32m---> 39\u001b[0m base_unix \u001b[38;5;241m=\u001b[39m \u001b[43mend_unixes_lt_ghour\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;66;03m# 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\u001b[39;00m\n\u001b[0;32m 40\u001b[0m \u001b[38;5;66;03m# D_n : 시간차이\u001b[39;00m\n\u001b[0;32m 41\u001b[0m D_n \u001b[38;5;241m=\u001b[39m curr_unix \u001b[38;5;241m-\u001b[39m base_unix\n",
"\u001b[1;31mIndexError\u001b[0m: index -5 is out of bounds for axis 0 with size 0"
]
}
],
"source": [
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
"m = 60 # ranges from 0 to 287, but 0 makes an error where 288 = 86400//300\n",
"present_time = fmins[m] # 현재시점\n",
"# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
"# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 2시간 이내인 데이터 수집\n",
"rhistory = history.copy() # recent history 1704393231\n",
"rhistory = rhistory[(rhistory.end_unix < present_time) & (rhistory.end_unix >= present_time - 7200)]\n",
"end_unixes = rhistory.end_unix.unique()\n",
"hours = np.array(range(midnight, next_day + 1, 3600))\n",
"rhist = rhistory.copy()[rhistory.inter_no == 175]\n",
"rhist_diff = rhist.copy()\n",
"rhist_diff['diff'] = rhist_diff['end_unix'].diff().fillna(0).astype(int)\n",
"display(rhist_diff)\n",
"rhist = rhist.reset_index(drop=True)\n",
"new_rows = []\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",
" start_seconds = np.array(timetable.start_seconds)\n",
" idx = (start_seconds <= 1704396909).sum() - 1\n",
" start_hour = timetable.iloc[idx].start_hour\n",
" start_minute = timetable.iloc[idx].start_minute\n",
" # 1-1. 결측치 처리 : 인접한 두 end_unix의 차이가 계획된 주기의 두 배보다 크면 결측이 일어났다고 판단\n",
" if next_unix - curr_unix >= 2 * cycle:\n",
" # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
" #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
" while next_unix - curr_unix > cycle:\n",
" curr_unix += cycle\n",
" # print(curr_unix)\n",
" prow = pland[(pland.inter_no==175) & (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",
" display(prow)\n",
" new_rows.append(prow)\n",
" # 1-2. 이상치 처리 : D_n(시간차이)과 S_n(현시시간합)의 차이가 10보다 크면 이상치가 발생했다고 판단\n",
" ghour_lt_end_unix = hours[hours < curr_unix].max() # the greatest hour less than end_unix\n",
" end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_end_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",
"\n",
"rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\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": [],
"source": [
"print(present_time)\n",
"print(midnight)\n",
"print(rhistory.end_unix.max() - rhistory.end_unix.min())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"# 주어진 배열\n",
"A = np.array([1, 3, 2, 5, 7])\n",
"\n",
"# 배열이 정렬되었는지 확인하는 간단한 방법\n",
"is_sorted = np.sort(A) is A\n",
"\n",
"is_sorted\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"L = np.array([1,4,6,10,14,25,31,38])\n",
"L[-4]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"end_unixes = rhistory.end_unix.unique()\n",
"end_unix = end_unixes[300] # 0 ~ 338\n",
"ghour_lt_end_unix = hours[hours < end_unix].max() # the greatest hour less than end_unix\n",
"end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_end_unix]) # end unixes less than ghour_lt_end_unix\n",
"base_unix = end_unixes_lt_ghour[-5]\n",
"D_n = end_unix - base_unix\n",
"print(f'D_n : {D_n}')\n",
"print(base_unix)\n",
"print(end_unix)\n",
"print(hours)\n",
"S_n = rhistory.loc[(rhistory.end_unix > base_unix) & (rhistory.end_unix <= end_unix)][[f'ddur_{j}' for j in range(1,9)]].values.shape#sum()\n",
"print(S_n)\n",
"# 이 두 값이 같아야 하는데 같지 않다. 2024. 1. 12 금 : 퇴근하면서"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"rhistory"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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",
"# 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": [],
"source": [
"make_histid(200).inter_no.unique()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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": [],
"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": [],
"source": [
"make_histid(100).inter_no.unique()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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": [],
"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)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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
}