{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"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": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100%|██████████| 17280/17280 [00:15<00:00, 1105.34it/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": 4,
|
|
"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": 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",
|
|
" </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": 5,
|
|
"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": 6,
|
|
"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>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>176</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>9</th>\n",
|
|
" <td>176</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>10</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>176</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>12</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>177</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>15</th>\n",
|
|
" <td>177</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>16</th>\n",
|
|
" <td>177</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>17</th>\n",
|
|
" <td>177</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>18</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>17</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>19</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>178</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>23</th>\n",
|
|
" <td>178</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>24</th>\n",
|
|
" <td>178</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>25</th>\n",
|
|
" <td>178</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>26</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>28</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>30</th>\n",
|
|
" <td>201</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>31</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>32</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>33</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>34</th>\n",
|
|
" <td>201</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>35</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>37</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>38</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>39</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>40</th>\n",
|
|
" <td>202</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>41</th>\n",
|
|
" <td>202</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>42</th>\n",
|
|
" <td>202</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>43</th>\n",
|
|
" <td>202</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>44</th>\n",
|
|
" <td>206</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>45</th>\n",
|
|
" <td>206</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>46</th>\n",
|
|
" <td>206</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>47</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>48</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>49</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>17</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>210</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>53</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>56</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>57</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>58</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</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",
|
|
" </tbody>\n",
|
|
"</table>\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",
|
|
"5 175 3 B 1 동 남\n",
|
|
"6 175 4 A 5 서 북\n",
|
|
"7 175 4 B 2 서 동\n",
|
|
"8 176 1 A 8 남 북\n",
|
|
"9 176 1 B 4 북 남\n",
|
|
"10 176 2 A 8 남 북\n",
|
|
"11 176 2 B 3 남 서\n",
|
|
"12 176 3 A 5 서 북\n",
|
|
"13 176 3 B 18 NaN NaN\n",
|
|
"14 177 1 A 8 남 북\n",
|
|
"15 177 1 B 4 북 남\n",
|
|
"16 177 2 A 7 북 동\n",
|
|
"17 177 2 B 3 남 서\n",
|
|
"18 177 3 A 17 NaN NaN\n",
|
|
"19 177 3 B 18 NaN NaN\n",
|
|
"20 177 4 A 5 서 북\n",
|
|
"21 177 4 B 1 동 남\n",
|
|
"22 178 1 A 8 남 북\n",
|
|
"23 178 1 B 4 북 남\n",
|
|
"24 178 2 A 7 북 동\n",
|
|
"25 178 2 B 3 남 서\n",
|
|
"26 178 3 A 5 서 북\n",
|
|
"27 178 3 B 2 서 동\n",
|
|
"28 178 4 A 6 동 서\n",
|
|
"29 178 4 B 1 동 남\n",
|
|
"30 201 1 A 8 남 북\n",
|
|
"31 201 1 B 3 남 서\n",
|
|
"32 201 2 A 5 서 북\n",
|
|
"33 201 2 B 2 서 동\n",
|
|
"34 201 3 A 6 동 서\n",
|
|
"35 201 3 B 2 서 동\n",
|
|
"36 201 4 A 6 동 서\n",
|
|
"37 201 4 B 1 동 남\n",
|
|
"38 201 5 A 7 북 동\n",
|
|
"39 201 5 B 4 북 남\n",
|
|
"40 202 1 A 6 동 서\n",
|
|
"41 202 1 B 2 서 동\n",
|
|
"42 202 2 A 17 NaN NaN\n",
|
|
"43 202 2 B 18 NaN NaN\n",
|
|
"44 206 1 A 8 남 북\n",
|
|
"45 206 1 B 4 북 남\n",
|
|
"46 206 2 A 17 NaN NaN\n",
|
|
"47 206 2 B 18 NaN NaN\n",
|
|
"48 206 3 A 8 남 북\n",
|
|
"49 206 3 B 4 북 남\n",
|
|
"50 206 4 A 17 NaN NaN\n",
|
|
"51 206 4 B 18 NaN NaN\n",
|
|
"52 210 1 A 6 동 서\n",
|
|
"53 210 1 B 18 NaN NaN\n",
|
|
"54 210 2 A 5 서 북\n",
|
|
"55 210 2 B 2 서 동\n",
|
|
"56 210 3 A 7 북 동\n",
|
|
"57 210 3 B 4 북 남\n",
|
|
"58 210 4 A 8 남 북\n",
|
|
"59 210 4 B 3 남 서"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"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": 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>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>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</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>8</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</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>12</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>356</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</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",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>001</td>\n",
|
|
" <td>176</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>17</th>\n",
|
|
" <td>177</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>18</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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>19</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</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>26</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</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>28</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</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>29</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>30</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>31</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</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>32</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>33</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</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>34</th>\n",
|
|
" <td>201</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>35</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>3</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>36</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</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>37</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>38</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>39</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>40</th>\n",
|
|
" <td>202</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>41</th>\n",
|
|
" <td>202</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>42</th>\n",
|
|
" <td>202</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>43</th>\n",
|
|
" <td>202</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",
|
|
" <tr>\n",
|
|
" <th>44</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>45</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>46</th>\n",
|
|
" <td>206</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>47</th>\n",
|
|
" <td>206</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",
|
|
" <tr>\n",
|
|
" <th>48</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>49</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</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>51</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</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",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>210</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>53</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</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",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</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>56</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>090</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>57</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>58</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</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",
|
|
" </tbody>\n",
|
|
"</table>\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",
|
|
"5 175 3 B 1 동 남 090 180\n",
|
|
"6 175 4 A 5 서 북 268 000\n",
|
|
"7 175 4 B 2 서 동 270 090\n",
|
|
"8 176 1 A 8 남 북 180 000\n",
|
|
"9 176 1 B 4 북 남 359 180\n",
|
|
"10 176 2 A 8 남 북 180 000\n",
|
|
"11 176 2 B 3 남 서 180 270\n",
|
|
"12 176 3 A 5 서 북 270 356\n",
|
|
"13 176 3 B 18 NaN NaN NaN NaN\n",
|
|
"14 177 1 A 8 남 북 180 000\n",
|
|
"15 177 1 B 4 북 남 001 176\n",
|
|
"16 177 2 A 7 북 동 000 090\n",
|
|
"17 177 2 B 3 남 서 179 270\n",
|
|
"18 177 3 A 17 NaN NaN NaN NaN\n",
|
|
"19 177 3 B 18 NaN NaN NaN NaN\n",
|
|
"20 177 4 A 5 서 북 268 000\n",
|
|
"21 177 4 B 1 동 남 090 180\n",
|
|
"22 178 1 A 8 남 북 180 000\n",
|
|
"23 178 1 B 4 북 남 000 180\n",
|
|
"24 178 2 A 7 북 동 000 090\n",
|
|
"25 178 2 B 3 남 서 180 270\n",
|
|
"26 178 3 A 5 서 북 270 000\n",
|
|
"27 178 3 B 2 서 동 270 090\n",
|
|
"28 178 4 A 6 동 서 090 270\n",
|
|
"29 178 4 B 1 동 남 090 180\n",
|
|
"30 201 1 A 8 남 북 180 000\n",
|
|
"31 201 1 B 3 남 서 180 270\n",
|
|
"32 201 2 A 5 서 북 270 000\n",
|
|
"33 201 2 B 2 서 동 270 090\n",
|
|
"34 201 3 A 6 동 서 090 270\n",
|
|
"35 201 3 B 2 서 동 270 090\n",
|
|
"36 201 4 A 6 동 서 090 270\n",
|
|
"37 201 4 B 1 동 남 090 180\n",
|
|
"38 201 5 A 7 북 동 000 090\n",
|
|
"39 201 5 B 4 북 남 000 180\n",
|
|
"40 202 1 A 6 동 서 090 270\n",
|
|
"41 202 1 B 2 서 동 270 090\n",
|
|
"42 202 2 A 17 NaN NaN NaN NaN\n",
|
|
"43 202 2 B 18 NaN NaN NaN NaN\n",
|
|
"44 206 1 A 8 남 북 180 000\n",
|
|
"45 206 1 B 4 북 남 000 180\n",
|
|
"46 206 2 A 17 NaN NaN NaN NaN\n",
|
|
"47 206 2 B 18 NaN NaN NaN NaN\n",
|
|
"48 206 3 A 8 남 북 180 000\n",
|
|
"49 206 3 B 4 북 남 000 180\n",
|
|
"50 206 4 A 17 NaN NaN NaN NaN\n",
|
|
"51 206 4 B 18 NaN NaN NaN NaN\n",
|
|
"52 210 1 A 6 동 서 090 270\n",
|
|
"53 210 1 B 18 NaN NaN NaN NaN\n",
|
|
"54 210 2 A 5 서 북 268 000\n",
|
|
"55 210 2 B 2 서 동 270 090\n",
|
|
"56 210 3 A 7 북 동 359 090\n",
|
|
"57 210 3 B 4 북 남 000 180\n",
|
|
"58 210 4 A 8 남 북 180 000\n",
|
|
"59 210 4 B 3 남 서 180 270"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"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": 8,
|
|
"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",
|
|
" <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>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>179</td>\n",
|
|
" <td>004</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>i0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>i0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>i0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>i0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571542797_02.99</td>\n",
|
|
" <td>571542810_01</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>-571542810_01</td>\n",
|
|
" <td>571543469_01</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>356</td>\n",
|
|
" <td>571543469_02</td>\n",
|
|
" <td>-571542797_02.99</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>176</td>\n",
|
|
" <td>3</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542811_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>001</td>\n",
|
|
" <td>176</td>\n",
|
|
" <td>571542811_02</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571542811_02</td>\n",
|
|
" <td>571542107_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>17</th>\n",
|
|
" <td>177</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",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>18</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>19</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>20</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571542809_01</td>\n",
|
|
" <td>571542811_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571542107_02</td>\n",
|
|
" <td>571542809_01</td>\n",
|
|
" <td>i2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571540304_02</td>\n",
|
|
" <td>571556450_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571556450_02</td>\n",
|
|
" <td>571540304_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571556450_02</td>\n",
|
|
" <td>571500475_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>571540304_02</td>\n",
|
|
" <td>571540303_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>26</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571540303_02.21</td>\n",
|
|
" <td>571556450_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571540303_02.21</td>\n",
|
|
" <td>571500475_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>28</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>-571500475_01</td>\n",
|
|
" <td>571540303_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>-571500475_01</td>\n",
|
|
" <td>571540304_01</td>\n",
|
|
" <td>i3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>30</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571500569_01</td>\n",
|
|
" <td>571500583_02</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>31</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>-571500569_01</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>32</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500583_02</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>33</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>34</th>\n",
|
|
" <td>201</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",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>35</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500618_02</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500618_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>37</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571500617_02</td>\n",
|
|
" <td>571500569_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>38</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500583_01</td>\n",
|
|
" <td>571500617_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>39</th>\n",
|
|
" <td>201</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571500583_01</td>\n",
|
|
" <td>571500569_01</td>\n",
|
|
" <td>i8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>40</th>\n",
|
|
" <td>202</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",
|
|
" <td>571510152_02</td>\n",
|
|
" <td>-571510152_01</td>\n",
|
|
" <td>i9</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>41</th>\n",
|
|
" <td>202</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",
|
|
" <td>571510152_01</td>\n",
|
|
" <td>571510152_01.65</td>\n",
|
|
" <td>i9</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>42</th>\n",
|
|
" <td>202</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i9</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>43</th>\n",
|
|
" <td>202</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i9</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>44</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571511538_02</td>\n",
|
|
" <td>571542073_02</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>45</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571542073_01</td>\n",
|
|
" <td>571511538_02</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>46</th>\n",
|
|
" <td>206</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>47</th>\n",
|
|
" <td>206</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>48</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>-571511538_02</td>\n",
|
|
" <td>571542073_02</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>49</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571542073_01</td>\n",
|
|
" <td>571511538_02</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>206</td>\n",
|
|
" <td>4</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i7</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>210</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",
|
|
" <td>-571542115_01</td>\n",
|
|
" <td>571500535_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571500535_02.18</td>\n",
|
|
" <td>571511538_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500535_02.18</td>\n",
|
|
" <td>571542115_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>56</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571511538_02.121</td>\n",
|
|
" <td>571542115_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>57</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571511538_02.121</td>\n",
|
|
" <td>571500585_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>58</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571500585_02</td>\n",
|
|
" <td>571511538_01</td>\n",
|
|
" <td>i6</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",
|
|
" <td>571500585_02</td>\n",
|
|
" <td>571500535_01</td>\n",
|
|
" <td>i6</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\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",
|
|
"5 175 3 B 1 동 남 090 180 \n",
|
|
"6 175 4 A 5 서 북 268 000 \n",
|
|
"7 175 4 B 2 서 동 270 090 \n",
|
|
"8 176 1 A 8 남 북 180 000 \n",
|
|
"9 176 1 B 4 북 남 359 180 \n",
|
|
"10 176 2 A 8 남 북 180 000 \n",
|
|
"11 176 2 B 3 남 서 180 270 \n",
|
|
"12 176 3 A 5 서 북 270 356 \n",
|
|
"13 176 3 B 18 NaN NaN NaN NaN \n",
|
|
"14 177 1 A 8 남 북 180 000 \n",
|
|
"15 177 1 B 4 북 남 001 176 \n",
|
|
"16 177 2 A 7 북 동 000 090 \n",
|
|
"17 177 2 B 3 남 서 179 270 \n",
|
|
"18 177 3 A 17 NaN NaN NaN NaN \n",
|
|
"19 177 3 B 18 NaN NaN NaN NaN \n",
|
|
"20 177 4 A 5 서 북 268 000 \n",
|
|
"21 177 4 B 1 동 남 090 180 \n",
|
|
"22 178 1 A 8 남 북 180 000 \n",
|
|
"23 178 1 B 4 북 남 000 180 \n",
|
|
"24 178 2 A 7 북 동 000 090 \n",
|
|
"25 178 2 B 3 남 서 180 270 \n",
|
|
"26 178 3 A 5 서 북 270 000 \n",
|
|
"27 178 3 B 2 서 동 270 090 \n",
|
|
"28 178 4 A 6 동 서 090 270 \n",
|
|
"29 178 4 B 1 동 남 090 180 \n",
|
|
"30 201 1 A 8 남 북 180 000 \n",
|
|
"31 201 1 B 3 남 서 180 270 \n",
|
|
"32 201 2 A 5 서 북 270 000 \n",
|
|
"33 201 2 B 2 서 동 270 090 \n",
|
|
"34 201 3 A 6 동 서 090 270 \n",
|
|
"35 201 3 B 2 서 동 270 090 \n",
|
|
"36 201 4 A 6 동 서 090 270 \n",
|
|
"37 201 4 B 1 동 남 090 180 \n",
|
|
"38 201 5 A 7 북 동 000 090 \n",
|
|
"39 201 5 B 4 북 남 000 180 \n",
|
|
"40 202 1 A 6 동 서 090 270 \n",
|
|
"41 202 1 B 2 서 동 270 090 \n",
|
|
"42 202 2 A 17 NaN NaN NaN NaN \n",
|
|
"43 202 2 B 18 NaN NaN NaN NaN \n",
|
|
"44 206 1 A 8 남 북 180 000 \n",
|
|
"45 206 1 B 4 북 남 000 180 \n",
|
|
"46 206 2 A 17 NaN NaN NaN NaN \n",
|
|
"47 206 2 B 18 NaN NaN NaN NaN \n",
|
|
"48 206 3 A 8 남 북 180 000 \n",
|
|
"49 206 3 B 4 북 남 000 180 \n",
|
|
"50 206 4 A 17 NaN NaN NaN NaN \n",
|
|
"51 206 4 B 18 NaN NaN NaN NaN \n",
|
|
"52 210 1 A 6 동 서 090 270 \n",
|
|
"53 210 1 B 18 NaN NaN NaN NaN \n",
|
|
"54 210 2 A 5 서 북 268 000 \n",
|
|
"55 210 2 B 2 서 동 270 090 \n",
|
|
"56 210 3 A 7 북 동 359 090 \n",
|
|
"57 210 3 B 4 북 남 000 180 \n",
|
|
"58 210 4 A 8 남 북 180 000 \n",
|
|
"59 210 4 B 3 남 서 180 270 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 -571542797_02 571500487_01 i0 \n",
|
|
"1 -571500487_01 571542797_02 i0 \n",
|
|
"2 -571500487_01 571545870_01 i0 \n",
|
|
"3 -571542797_02 571510153_01 i0 \n",
|
|
"4 571545870_02 571510153_01 i0 \n",
|
|
"5 571545870_02 571542797_02 i0 \n",
|
|
"6 571510153_02 571500487_01 i0 \n",
|
|
"7 571510153_02 571545870_01 i0 \n",
|
|
"8 -571542810_01 -571542797_02.99 i1 \n",
|
|
"9 571542797_02.99 571542810_01 i1 \n",
|
|
"10 -571542810_01 -571542797_02.99 i1 \n",
|
|
"11 -571542810_01 571543469_01 i1 \n",
|
|
"12 571543469_02 -571542797_02.99 i1 \n",
|
|
"13 NaN NaN i1 \n",
|
|
"14 -571542809_01 571542811_01 i2 \n",
|
|
"15 571542811_02 571542809_01 i2 \n",
|
|
"16 571542811_02 571542107_01 i2 \n",
|
|
"17 -571542809_01 571542809_01 i2 \n",
|
|
"18 NaN NaN i2 \n",
|
|
"19 NaN NaN i2 \n",
|
|
"20 -571542809_01 571542811_01 i2 \n",
|
|
"21 571542107_02 571542809_01 i2 \n",
|
|
"22 571540304_02 571556450_01 i3 \n",
|
|
"23 571556450_02 571540304_01 i3 \n",
|
|
"24 571556450_02 571500475_01 i3 \n",
|
|
"25 571540304_02 571540303_01 i3 \n",
|
|
"26 571540303_02.21 571556450_01 i3 \n",
|
|
"27 571540303_02.21 571500475_01 i3 \n",
|
|
"28 -571500475_01 571540303_01 i3 \n",
|
|
"29 -571500475_01 571540304_01 i3 \n",
|
|
"30 -571500569_01 571500583_02 i8 \n",
|
|
"31 -571500569_01 571500618_01 i8 \n",
|
|
"32 571500618_02 571500583_02 i8 \n",
|
|
"33 571500618_02 571500617_01 i8 \n",
|
|
"34 571500617_02 571500618_01 i8 \n",
|
|
"35 571500618_02 571500617_01 i8 \n",
|
|
"36 571500617_02 571500618_01 i8 \n",
|
|
"37 571500617_02 571500569_01 i8 \n",
|
|
"38 571500583_01 571500617_01 i8 \n",
|
|
"39 571500583_01 571500569_01 i8 \n",
|
|
"40 571510152_02 -571510152_01 i9 \n",
|
|
"41 571510152_01 571510152_01.65 i9 \n",
|
|
"42 NaN NaN i9 \n",
|
|
"43 NaN NaN i9 \n",
|
|
"44 -571511538_02 571542073_02 i7 \n",
|
|
"45 571542073_01 571511538_02 i7 \n",
|
|
"46 NaN NaN i7 \n",
|
|
"47 NaN NaN i7 \n",
|
|
"48 -571511538_02 571542073_02 i7 \n",
|
|
"49 571542073_01 571511538_02 i7 \n",
|
|
"50 NaN NaN i7 \n",
|
|
"51 NaN NaN i7 \n",
|
|
"52 -571542115_01 571500535_01 i6 \n",
|
|
"53 NaN NaN i6 \n",
|
|
"54 571500535_02.18 571511538_01 i6 \n",
|
|
"55 571500535_02.18 571542115_01 i6 \n",
|
|
"56 571511538_02.121 571542115_01 i6 \n",
|
|
"57 571511538_02.121 571500585_01 i6 \n",
|
|
"58 571500585_02 571511538_01 i6 \n",
|
|
"59 571500585_02 571500535_01 i6 "
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"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.sort_values(by=['inter_no','phase_no','ring_type']).reset_index(drop=True)\n",
|
|
"match5"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array(['u00', 'u20', 'u30', 'u31', 'u32', 'u60'], dtype=object)"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 유턴/연동교차로에 대하여 진입ID, 진출ID 부여\n",
|
|
"node2inter = dict(zip(inter_node['node_id'], inter_node['inter_no']))\n",
|
|
"\n",
|
|
"uturn = pd.read_csv('../../Data/tables/child_uturn.csv')\n",
|
|
"coord = pd.read_csv('../../Data/tables/child_coord.csv')\n",
|
|
"\n",
|
|
"child_ids = inter_node[inter_node.inter_type=='child'].node_id.unique()\n",
|
|
"ch2pa = {} # child to parent\n",
|
|
"for child_id in child_ids:\n",
|
|
" parent_no = inter_node[inter_node.node_id==child_id].inter_no.iloc[0]\n",
|
|
" sub_inter_node = inter_node[inter_node.inter_no==parent_no]\n",
|
|
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
|
|
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n",
|
|
"u_ids = uturn.child_id.unique()\n",
|
|
"u_ids"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u00 i0 좌회전시 북\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>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",
|
|
" <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>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>179</td>\n",
|
|
" <td>004</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>001</td>\n",
|
|
" <td>095</td>\n",
|
|
" <td>571500487_02</td>\n",
|
|
" <td>571500487_01.32</td>\n",
|
|
" <td>u00</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u00</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\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 19 북 동 001 095 \n",
|
|
"3 175 2 B 3 남 서 179 270 \n",
|
|
"4 175 3 A 6 동 서 090 270 \n",
|
|
"5 175 3 B 1 동 남 090 180 \n",
|
|
"6 175 4 A 5 서 북 268 000 \n",
|
|
"7 175 4 B 2 서 동 270 090 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 NaN NaN u00 \n",
|
|
"1 NaN NaN u00 \n",
|
|
"2 571500487_02 571500487_01.32 u00 \n",
|
|
"3 NaN NaN u00 \n",
|
|
"4 NaN NaN u00 \n",
|
|
"5 NaN NaN u00 \n",
|
|
"6 NaN NaN u00 \n",
|
|
"7 NaN NaN u00 "
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u20 i2 보행신호시 북\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>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",
|
|
" <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>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>001</td>\n",
|
|
" <td>176</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>177</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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",
|
|
" <td>571542810_01.51</td>\n",
|
|
" <td>571542810_02</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>3</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u20</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
|
|
"0 177 1 A 8 남 북 180 000 \n",
|
|
"1 177 1 B 4 북 남 001 176 \n",
|
|
"2 177 2 A 7 북 동 000 090 \n",
|
|
"3 177 2 B 3 남 서 179 270 \n",
|
|
"4 177 3 A 17 NaN NaN NaN NaN \n",
|
|
"5 177 3 B 18 NaN NaN NaN NaN \n",
|
|
"6 177 4 A 5 서 북 268 000 \n",
|
|
"7 177 4 B 1 동 남 090 180 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 NaN NaN u20 \n",
|
|
"1 NaN NaN u20 \n",
|
|
"2 NaN NaN u20 \n",
|
|
"3 NaN NaN u20 \n",
|
|
"4 571542810_01.51 571542810_02 u20 \n",
|
|
"5 NaN NaN u20 \n",
|
|
"6 NaN NaN u20 \n",
|
|
"7 NaN NaN u20 "
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u30 i3 보행신호시 북\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>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",
|
|
" <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>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>571556452_01</td>\n",
|
|
" <td>571556452_02</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u30</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
|
|
"0 178 1 A 8 남 북 180 000 \n",
|
|
"1 178 1 B 4 북 남 000 180 \n",
|
|
"2 178 2 A 7 북 동 000 090 \n",
|
|
"3 178 2 B 3 남 서 180 270 \n",
|
|
"4 178 3 A 5 서 북 270 000 \n",
|
|
"5 178 3 B 2 서 동 270 090 \n",
|
|
"6 178 4 A 19 동 서 090 270 \n",
|
|
"7 178 4 B 1 동 남 090 180 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 NaN NaN u30 \n",
|
|
"1 NaN NaN u30 \n",
|
|
"2 NaN NaN u30 \n",
|
|
"3 NaN NaN u30 \n",
|
|
"4 NaN NaN u30 \n",
|
|
"5 NaN NaN u30 \n",
|
|
"6 571556452_01 571556452_02 u30 \n",
|
|
"7 NaN NaN u30 "
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u31 i3 보행신호시 동\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>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",
|
|
" <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>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571500475_02</td>\n",
|
|
" <td>571500475_01.26</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u31</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
|
|
"0 178 1 A 19 남 북 180 000 \n",
|
|
"1 178 1 B 4 북 남 000 180 \n",
|
|
"2 178 2 A 7 북 동 000 090 \n",
|
|
"3 178 2 B 3 남 서 180 270 \n",
|
|
"4 178 3 A 5 서 북 270 000 \n",
|
|
"5 178 3 B 2 서 동 270 090 \n",
|
|
"6 178 4 A 6 동 서 090 270 \n",
|
|
"7 178 4 B 1 동 남 090 180 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 571500475_02 571500475_01.26 u31 \n",
|
|
"1 NaN NaN u31 \n",
|
|
"2 NaN NaN u31 \n",
|
|
"3 NaN NaN u31 \n",
|
|
"4 NaN NaN u31 \n",
|
|
"5 NaN NaN u31 \n",
|
|
"6 NaN NaN u31 \n",
|
|
"7 NaN NaN u31 "
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u32 i3 보행신호시 서\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>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",
|
|
" <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>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>571540303_02</td>\n",
|
|
" <td>-571540303_02</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u32</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
|
|
"0 178 1 A 8 남 북 180 000 \n",
|
|
"1 178 1 B 19 북 남 000 180 \n",
|
|
"2 178 2 A 7 북 동 000 090 \n",
|
|
"3 178 2 B 3 남 서 180 270 \n",
|
|
"4 178 3 A 5 서 북 270 000 \n",
|
|
"5 178 3 B 2 서 동 270 090 \n",
|
|
"6 178 4 A 6 동 서 090 270 \n",
|
|
"7 178 4 B 1 동 남 090 180 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 NaN NaN u32 \n",
|
|
"1 571540303_02 -571540303_02 u32 \n",
|
|
"2 NaN NaN u32 \n",
|
|
"3 NaN NaN u32 \n",
|
|
"4 NaN NaN u32 \n",
|
|
"5 NaN NaN u32 \n",
|
|
"6 NaN NaN u32 \n",
|
|
"7 NaN NaN u32 "
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"u60 i6 직좌시 서\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>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",
|
|
" <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>210</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>1</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>268</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>571500535_02</td>\n",
|
|
" <td>-571500535_02</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500535_02</td>\n",
|
|
" <td>-571500535_02</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
|
|
"0 210 1 A 6 동 서 090 270 \n",
|
|
"1 210 1 B 18 NaN NaN NaN NaN \n",
|
|
"2 210 2 A 19 서 북 268 000 \n",
|
|
"3 210 2 B 19 서 동 270 090 \n",
|
|
"4 210 3 A 7 북 동 359 090 \n",
|
|
"5 210 3 B 4 북 남 000 180 \n",
|
|
"6 210 4 A 8 남 북 180 000 \n",
|
|
"7 210 4 B 3 남 서 180 270 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 NaN NaN u60 \n",
|
|
"1 NaN NaN u60 \n",
|
|
"2 571500535_02 -571500535_02 u60 \n",
|
|
"3 571500535_02 -571500535_02 u60 \n",
|
|
"4 NaN NaN u60 \n",
|
|
"5 NaN NaN u60 \n",
|
|
"6 NaN NaN u60 \n",
|
|
"7 NaN NaN u60 "
|
|
]
|
|
},
|
|
"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>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",
|
|
" <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>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_01</td>\n",
|
|
" <td>-571542116_02.96</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>571542116_02.96</td>\n",
|
|
" <td>571542116_02.164</td>\n",
|
|
" <td>c30</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no phase_no ring_type move_no inc_dir out_dir inc_angle \\\n",
|
|
"0 178 1 A 20 NaN NaN NaN \n",
|
|
"1 178 1 B 20 NaN NaN NaN \n",
|
|
"2 178 2 A 20 NaN NaN NaN \n",
|
|
"3 178 2 B 20 NaN NaN NaN \n",
|
|
"4 178 3 A 20 NaN NaN NaN \n",
|
|
"5 178 3 B 20 NaN NaN NaN \n",
|
|
"6 178 4 A 20 NaN NaN NaN \n",
|
|
"7 178 4 B 20 NaN NaN NaN \n",
|
|
"\n",
|
|
" out_angle inc_edge out_edge node_id \n",
|
|
"0 NaN NaN NaN c30 \n",
|
|
"1 NaN NaN NaN c30 \n",
|
|
"2 NaN 571542116_01 -571542116_02.96 c30 \n",
|
|
"3 NaN 571542116_02.96 571542116_02.164 c30 \n",
|
|
"4 NaN 571542116_01 -571542116_02.96 c30 \n",
|
|
"5 NaN 571542116_02.96 571542116_02.164 c30 \n",
|
|
"6 NaN 571542116_01 -571542116_02.96 c30 \n",
|
|
"7 NaN 571542116_02.96 571542116_02.164 c30 "
|
|
]
|
|
},
|
|
"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>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",
|
|
" <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>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>179</td>\n",
|
|
" <td>004</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>i0</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",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" <td>...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>서</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>270</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>571500535_02</td>\n",
|
|
" <td>-571500535_02</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>동</td>\n",
|
|
" <td>359</td>\n",
|
|
" <td>090</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>B</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>A</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>남</td>\n",
|
|
" <td>북</td>\n",
|
|
" <td>180</td>\n",
|
|
" <td>000</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</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",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>u60</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>116 rows × 11 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",
|
|
"3 210 2 B 19 서 동 270 090 \n",
|
|
"4 210 3 A 7 북 동 359 090 \n",
|
|
"5 210 3 B 4 북 남 000 180 \n",
|
|
"6 210 4 A 8 남 북 180 000 \n",
|
|
"7 210 4 B 3 남 서 180 270 \n",
|
|
"\n",
|
|
" inc_edge out_edge node_id \n",
|
|
"0 -571542797_02 571500487_01 i0 \n",
|
|
"1 -571500487_01 571542797_02 i0 \n",
|
|
"2 -571500487_01 571545870_01 i0 \n",
|
|
"3 -571542797_02 571510153_01 i0 \n",
|
|
"4 571545870_02 571510153_01 i0 \n",
|
|
".. ... ... ... \n",
|
|
"3 571500535_02 -571500535_02 u60 \n",
|
|
"4 NaN NaN u60 \n",
|
|
"5 NaN NaN u60 \n",
|
|
"6 NaN NaN u60 \n",
|
|
"7 NaN NaN u60 \n",
|
|
"\n",
|
|
"[116 rows x 11 columns]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 유턴/연동교차로에 대하여 진입ID, 진출ID 부여\n",
|
|
"node2inter = dict(zip(inter_node['node_id'], inter_node['inter_no']))\n",
|
|
"\n",
|
|
"uturn = pd.read_csv('../../Data/tables/child_uturn.csv')\n",
|
|
"coord = pd.read_csv('../../Data/tables/child_coord.csv')\n",
|
|
"child_ids = inter_node[inter_node.inter_type=='child'].node_id.unique()\n",
|
|
"ch2pa = {} # child to parent\n",
|
|
"for child_id in child_ids:\n",
|
|
" parent_no = inter_node[inter_node.node_id==child_id].inter_no.iloc[0]\n",
|
|
" sub_inter_node = inter_node[inter_node.inter_no==parent_no]\n",
|
|
" ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n",
|
|
"directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n",
|
|
"u_ids = uturn.child_id.unique()\n",
|
|
"# 각 child uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
|
|
"cmatches = []\n",
|
|
"for _, row in uturn.iterrows():\n",
|
|
" child_id = row.child_id\n",
|
|
" parent_id = row.parent_id\n",
|
|
" direction = row.direction\n",
|
|
" condition = row.condition\n",
|
|
" inc_edge_id = row.inc_edge\n",
|
|
" out_edge_id = row.out_edge\n",
|
|
" ind = directions.index(direction)\n",
|
|
" if condition == \"좌회전시\":\n",
|
|
" print(child_id, parent_id, condition, direction)\n",
|
|
" inc_dire = direction\n",
|
|
" out_dire_A = out_dire_B = directions[(ind + 2) % len(directions)]\n",
|
|
" elif condition == \"직진시\":\n",
|
|
" print(child_id, parent_id, condition, direction)\n",
|
|
" inc_dire = direction\n",
|
|
" out_dire_A = out_dire_B = directions[(ind + 4) % len(directions)]\n",
|
|
" elif condition == \"직좌시\":\n",
|
|
" print(child_id, parent_id, condition, direction)\n",
|
|
" inc_dire = direction\n",
|
|
" out_dire_A = directions[(ind + 2) % len(directions)]\n",
|
|
" out_dire_B = directions[(ind + 4) % len(directions)]\n",
|
|
" elif condition == \"보행신호시\":\n",
|
|
" print(child_id, parent_id, condition, direction)\n",
|
|
" inc_dire = directions[(ind + 2) % len(directions)]\n",
|
|
" out_dire_A = directions[(ind - 2) % len(directions)]\n",
|
|
" out_dire_B = directions[(ind - 2) % len(directions)]\n",
|
|
" cmatch = match5.copy()[match5.node_id==parent_id] # match dataframe for a child node\n",
|
|
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
|
|
" cmatch['node_id'] = child_id\n",
|
|
" cmatch[['inc_edge', 'out_edge']] = np.nan\n",
|
|
" if condition == '직좌시':\n",
|
|
" ap = cmatch[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A)].phase_no.iloc[0]\n",
|
|
" bp = cmatch[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B)].phase_no.iloc[0]\n",
|
|
" # 직진과 좌회전이 같은 현시에 있는 경우에만 (inc_edge_id, out_edge_id)를 부여한다.\n",
|
|
" if ap == bp:\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" elif condition == '보행신호시':\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n",
|
|
" cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" else:\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n",
|
|
" # 유턴신호의 이동류번호를 19로 부여한다.\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), 'move_no'] = 19\n",
|
|
" cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), 'move_no'] = 19\n",
|
|
" display(cmatch)\n",
|
|
" cmatches.append(cmatch)\n",
|
|
"\n",
|
|
"# 각 child coordination node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
|
|
"coord['inter_no'] = coord['parent_id'].map(node2inter)\n",
|
|
"coord = coord.rename(columns={'child_id':'node_id'})\n",
|
|
"coord[['inc_dir', 'out_dir', 'inc_angle','out_angle']] = np.nan\n",
|
|
"coord['move_no'] = 20\n",
|
|
"coord = coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dir', 'out_dir', 'inc_angle','out_angle', 'inc_edge', 'out_edge', 'node_id']]\n",
|
|
"# display(coord)\n",
|
|
"cmatches = pd.concat(cmatches)\n",
|
|
"display(coord)\n",
|
|
"match6 = pd.concat([match5, cmatches, coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])\n",
|
|
"# with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n",
|
|
"match6.to_csv('../../Data/tables/matching/match6.csv')\n",
|
|
"display(match6)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"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>...</th>\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>69</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>70</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>71</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>72</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>73</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",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>74 rows × 7 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n",
|
|
"0 175 1 동 남 571545870_02 571542797_02 i0\n",
|
|
"1 175 2 서 동 571510153_02 571545870_01 i0\n",
|
|
"2 175 3 남 서 -571542797_02 571510153_01 i0\n",
|
|
"3 175 4 북 남 -571500487_01 571542797_02 i0\n",
|
|
"4 175 5 서 북 571510153_02 571500487_01 i0\n",
|
|
".. ... ... ... ... ... ... ...\n",
|
|
"69 210 8 남 북 571500585_02 571511538_01 i6\n",
|
|
"70 210 21 북 서 571511538_02.121 571500535_01 i6\n",
|
|
"71 210 21 서 남 571500535_02.18 571500585_01 i6\n",
|
|
"72 210 21 남 동 571500585_02 571542115_01 i6\n",
|
|
"73 210 21 동 북 -571542115_01 571511538_01 i6\n",
|
|
"\n",
|
|
"[74 rows x 7 columns]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 이동류 매칭\n",
|
|
"# 각 교차로에 대하여, 가능한 모든 이동류(1~18, 21)에 대한 진입·진출엣지ID를 지정한다.\n",
|
|
"# 모든 이동류에 대해 지정하므로, 시차제시 이전과 다른 이동류가 등장하더라도 항상 진입·진출 엣지 ID를 지정할 수 있다.\n",
|
|
"match7 = match6.copy()\n",
|
|
"match7 = match7[['inter_no', 'move_no', 'inc_dir', 'out_dir', 'inc_edge', 'out_edge', 'node_id']]\n",
|
|
"\n",
|
|
"parent_ids = sorted(inter_node[inter_node.inter_type=='parent'].node_id.unique())\n",
|
|
"child_ids = sorted(inter_node[inter_node.inter_type=='child'].node_id.unique())\n",
|
|
"\n",
|
|
"# (1) 가능한 (진입방향, 진출방향) 목록\n",
|
|
"flows = nema.dropna().apply(lambda row: (row['inc_dir'], row['out_dir']), axis=1).tolist()\n",
|
|
"# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
|
|
"pdires = {}\n",
|
|
"for node_id in parent_ids:\n",
|
|
" dires = match7[match7.node_id == node_id][['inc_dir','out_dir']].values.flatten()\n",
|
|
" dires = {dire for dire in dires if type(dire)==str}\n",
|
|
" pdires[node_id] = dires\n",
|
|
"# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
|
|
"inc2id = {}\n",
|
|
"for node_id in parent_ids:\n",
|
|
" for inc_dir in pdires[node_id]:\n",
|
|
" df = match7[(match7.node_id==node_id) & (match7.inc_dir==inc_dir)]\n",
|
|
" inc2id[(node_id, inc_dir)] = df.inc_edge.iloc[0]\n",
|
|
"# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
|
|
"out2id = {}\n",
|
|
"for node_id in parent_ids:\n",
|
|
" for out_dir in pdires[node_id]:\n",
|
|
" df = match7[(match7.node_id==node_id) & (match7.out_dir==out_dir)]\n",
|
|
" out2id[(node_id, out_dir)] = df.out_edge.iloc[0]\n",
|
|
"# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
|
|
"pflow = {}\n",
|
|
"for node_id in parent_ids:\n",
|
|
" pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n",
|
|
"# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
|
|
"node2inter = dict(zip(match7['node_id'], match7['inter_no']))\n",
|
|
"dires_right = ['북', '서', '남', '동', '북'] # ex (북, 서), (서, 남) 등은 우회전 flow\n",
|
|
"matching = []\n",
|
|
"for node_id in parent_ids:\n",
|
|
" inter_no = node2inter[node_id]\n",
|
|
" # 좌회전과 직진(1 ~ 16)\n",
|
|
" for (inc_dir, out_dir) in pflow[node_id]:\n",
|
|
" move_no = nema[(nema.inc_dir==inc_dir) & (nema.out_dir==out_dir)].move_no.iloc[0]\n",
|
|
" inc_edge = inc2id[(node_id, inc_dir)]\n",
|
|
" out_edge = out2id[(node_id, 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[node_id]):\n",
|
|
" inc_edge = inc2id[(node_id, inc_dir)]\n",
|
|
" out_edge = out2id[(node_id, 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.append(match7[match7.node_id.isin(child_ids)])\n",
|
|
"matching = pd.concat(matching)\n",
|
|
"matching = matching.dropna().sort_values(by=['inter_no', 'node_id', 'move_no']).reset_index(drop=True)\n",
|
|
"matching['move_no'] = matching['move_no'].astype(int)\n",
|
|
"matching.to_csv('../../Data/tables/matching/matching.csv')\n",
|
|
"display(matching)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# B. 5초 간격으로 이동류번호 수집"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" 0%| | 0/17280 [00:00<?, ?it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100%|██████████| 17280/17280 [02:18<00:00, 124.47it/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",
|
|
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\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",
|
|
" move = pd.read_csv(f'../../Data/tables/moves/move_{fsec}.csv', index_col=0)\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",
|
|
" 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": 13,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plan = pd.read_csv('../../Data/tables/plan.csv', index_col=0)\n",
|
|
"history = pd.read_csv('../../Data/tables/history.csv', index_col=0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"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": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# split, isplit : A,B 분리 혹은 통합시 사용될 수 있는 딕셔너리\n",
|
|
"splits = {} # splits maps (inter_no, start_hour, start_minute) to split\n",
|
|
"for i, row in plan.iterrows():\n",
|
|
" inter_no = row.inter_no\n",
|
|
" start_hour = row.start_hour\n",
|
|
" start_minute = row.start_minute\n",
|
|
" cycle = row.cycle\n",
|
|
" cums_A = row[[f'dura_A{j}' for j in range(1,9)]].cumsum()\n",
|
|
" cums_B = row[[f'dura_B{j}' for j in range(1,9)]].cumsum()\n",
|
|
" splits[(inter_no, start_hour, start_minute)] = {} # split maps (phas_A, phas_B) to k\n",
|
|
" k = 0\n",
|
|
" for t in range(cycle):\n",
|
|
" new_phas_A = len(cums_A[cums_A < t]) + 1\n",
|
|
" new_phas_B = len(cums_B[cums_B < t]) + 1\n",
|
|
" if k == 0 or ((new_phas_A, new_phas_B) != (phas_A, phas_B)):\n",
|
|
" k += 1\n",
|
|
" phas_A = new_phas_A\n",
|
|
" phas_B = new_phas_B\n",
|
|
" splits[(inter_no, start_hour, start_minute)][(phas_A, phas_B)] = k\n",
|
|
"\n",
|
|
"isplits = {} # the inverse of splits\n",
|
|
"for i in splits:\n",
|
|
" isplits[i] = {splits[i][k]:k for k in splits[i]} # isplit maps k to (phas_A, phas_B)\n",
|
|
"\n",
|
|
"# timetable\n",
|
|
"timetable = plan[['start_hour', 'start_minute']].drop_duplicates()\n",
|
|
"timetable['start_seconds'] = midnight + timetable['start_hour'] * 3600 + timetable['start_minute'] * 60\n",
|
|
"timetable"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def make_rhistory(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",
|
|
" + fmins[m-2] : 시뮬레이션 시작시점\n",
|
|
" + fmins[m-1] : 시뮬레이션 종료시점\n",
|
|
" output : rhistory\n",
|
|
" - recent history\n",
|
|
" - 현재시각(present_time) 이전 1시간 동안의 신호이력에 대하여 결측치 및 이상치를 처리한 결과\n",
|
|
" - 교차로번호(inter_no), 종료유닉스(end_unix), 현시시간(dur_Aj, dur_Bj), 주기(cycle), 옵셋(offset)\n",
|
|
" '''\n",
|
|
" fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
|
|
" present_time = fmins[m] # 현재시점\n",
|
|
" print(datetime.fromtimestamp(present_time))\n",
|
|
"\n",
|
|
" Rhists = [] # Recent history (1시간 이내)\n",
|
|
" for inter_no in history.inter_no.unique():\n",
|
|
" # - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
|
|
" # 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 1시간 이내인(Rhist) 데이터 수집\n",
|
|
" rhistory = history.copy() # recent history\n",
|
|
" rhistory = rhistory[(rhistory.end_unix < present_time)]\n",
|
|
" hours = np.array(range(midnight, next_day + 1, 3600))\n",
|
|
" rhist = rhistory.copy()[rhistory.inter_no == inter_no] # 특정한 inter_no\n",
|
|
" rhist = rhist.reset_index(drop=True)\n",
|
|
" new_rows = []\n",
|
|
" # 1-1. 결측치 처리 : 인접한 두 end_unix의 차이가 계획된 주기의 두 배보다 크면 결측이 일어났다고 판단\n",
|
|
" for n in range(len(rhist) - 1):\n",
|
|
" curr_unix = rhist.iloc[n].end_unix # current end_unix\n",
|
|
" next_unix = rhist.iloc[n+1].end_unix # next end_unix\n",
|
|
" cycle = rhist.iloc[n].cycle\n",
|
|
" if next_unix - curr_unix >= 2 * cycle:\n",
|
|
" # 현재 unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
|
|
" #(다음 unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
|
|
" while next_unix - curr_unix > cycle:\n",
|
|
" curr_unix += cycle\n",
|
|
" start_seconds = np.array(timetable.start_seconds)\n",
|
|
" idx = (start_seconds <= curr_unix).sum() - 1\n",
|
|
" start_hour = timetable.iloc[idx].start_hour\n",
|
|
" start_minute = timetable.iloc[idx].start_minute\n",
|
|
" prow = plan[(plan.inter_no==inter_no) & (plan.start_hour==start_hour) & (plan.start_minute==start_minute)] # planned row\n",
|
|
" prow = prow.drop(['start_hour', 'start_minute'], axis=1)\n",
|
|
" prow['end_unix'] = curr_unix\n",
|
|
" cycle = prow.iloc[0].cycle\n",
|
|
" new_rows.append(prow)\n",
|
|
" rhist = pd.concat([rhist] + new_rows).sort_values(['end_unix'])\n",
|
|
" rhist = rhist.reset_index(drop=True)\n",
|
|
"\n",
|
|
" # 1-2. 이상치 처리 : 기준유닉스로부터의 시간차이와 현시시간합이 11 이상 차이나면 이상치가 발생했다고 판단\n",
|
|
" Rhist = rhist.copy() # recent history 1704393231\n",
|
|
" Rhist = Rhist[(Rhist.end_unix >= present_time - 3600)] # Recent history (1시간 이내)\n",
|
|
" Rhist = Rhist.reset_index(drop=True)\n",
|
|
" Rhist['D_n'] = 0\n",
|
|
" Rhist['S_n'] = 0\n",
|
|
" for n in range(len(Rhist)):\n",
|
|
" curr_unix = Rhist.iloc[n].end_unix # current end_unix\n",
|
|
" cycle = Rhist.iloc[n].cycle\n",
|
|
" ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n",
|
|
" end_unixes = rhist.end_unix.unique()\n",
|
|
" end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n",
|
|
" base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n",
|
|
" # D_n : 시간차이\n",
|
|
" D_n = curr_unix - base_unix\n",
|
|
" ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
|
|
" # S_n : 현시시간합\n",
|
|
" S_n = ddurations.values.sum() // 2\n",
|
|
" Rhist.loc[n, ['D_n', 'S_n']] = [D_n, S_n]\n",
|
|
" n = 1\n",
|
|
" while n < len(Rhist):\n",
|
|
" prev_unix = Rhist[Rhist.index==n-1]['end_unix'].iloc[0] # previous end_unix\n",
|
|
" curr_unix = Rhist[Rhist.index==n]['end_unix'].iloc[0] # current end_unix\n",
|
|
" R_n = (curr_unix - prev_unix) / cycle\n",
|
|
" ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n",
|
|
" end_unixes = rhist.end_unix.unique()\n",
|
|
" end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n",
|
|
" base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n",
|
|
" # D_n : 시간차이\n",
|
|
" D_n = curr_unix - base_unix\n",
|
|
" # S_n : 현시시간합\n",
|
|
" ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
|
|
" S_n = ddurations.values.sum() // 2\n",
|
|
" # 비율이 0.5보다 작거나 같으면 해당 행을 삭제\n",
|
|
" if (abs(D_n - S_n) > 10) & (R_n <= 0.5):\n",
|
|
" # print(\"lt\", inter_no, curr_unix, round(R_n,2), D_n, S_n)\n",
|
|
" # display(Rhist.iloc[n])\n",
|
|
" Rhist = Rhist.drop(index=n)\n",
|
|
" n += 1\n",
|
|
" # 행삭제에 따른 curr_unix, D_n, S_n 등 재정의\n",
|
|
" if not Rhist[Rhist.index==n]['end_unix'].empty: # 마지막 행을 삭제하여 뒤의 행이 없을 때를 대비\n",
|
|
" curr_unix = Rhist[Rhist.index==n]['end_unix'].iloc[0] # current end_unix\n",
|
|
" R_n = (curr_unix - prev_unix) / cycle\n",
|
|
" ghour_lt_curr_unix = hours[hours < curr_unix].max() # the greatest hour less than curr_unix\n",
|
|
" end_unixes = rhist.end_unix.unique()\n",
|
|
" end_unixes_lt_ghour = np.sort(end_unixes[end_unixes < ghour_lt_curr_unix]) # end unixes less than ghour_lt_end_unix\n",
|
|
" base_unix = end_unixes_lt_ghour[-5] # 기준유닉스 : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 end_unix\n",
|
|
" # D_n : 시간차이\n",
|
|
" D_n = curr_unix - base_unix\n",
|
|
" # S_n : 현시시간합\n",
|
|
" ddurations = rhist[(rhist.end_unix > base_unix) & (rhist.end_unix <= curr_unix)][[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
|
|
" S_n = ddurations.values.sum() // 2\n",
|
|
" # 비율이 0.5보다 크면 해당 행 조정 (비율을 유지한 채로 현시시간 대체)\n",
|
|
" if (abs(D_n - S_n) > 10) & (R_n > 0.5):\n",
|
|
" start_seconds = np.array(timetable.start_seconds)\n",
|
|
" idx = (start_seconds <= curr_unix).sum() - 1\n",
|
|
" start_hour = timetable.iloc[idx].start_hour\n",
|
|
" start_minute = timetable.iloc[idx].start_minute\n",
|
|
" prow = plan[(plan.inter_no==inter_no) & (plan.start_hour==start_hour) & (plan.start_minute==start_minute)].copy().reset_index(drop=True).iloc[0] # planned row\n",
|
|
" adjusted_dur = prow[[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]] * R_n\n",
|
|
" # 조정된 현시시간을 정수로 바꿈\n",
|
|
" int_parts = adjusted_dur.apply(lambda x: int(x))\n",
|
|
" frac_parts = adjusted_dur - int_parts\n",
|
|
" difference = int(round(adjusted_dur.sum())) - int_parts.sum()\n",
|
|
" # 소수 부분이 가장 큰 상위 'difference'개의 값에 대해 올림 처리\n",
|
|
" for _ in range(difference):\n",
|
|
" max_frac_index = frac_parts.idxmax()\n",
|
|
" int_parts[max_frac_index] += 1\n",
|
|
" frac_parts[max_frac_index] = 0 # 이미 처리된 항목은 0으로 설정\n",
|
|
" Rhist.loc[n, [f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]] = int_parts.values\n",
|
|
" Rhist.loc[n, 'cycle'] = int_parts.sum() // 2\n",
|
|
" # print(\"gt\", inter_no, curr_unix, round(R_n,2), D_n, S_n)\n",
|
|
" n += 1\n",
|
|
" Rhist = Rhist.drop(columns=['offset', 'D_n', 'S_n'])\n",
|
|
" Rhists.append(Rhist)\n",
|
|
" Rhists = pd.concat(Rhists)\n",
|
|
" Rhists = Rhists.sort_values(by=['end_unix', 'inter_no']).reset_index(drop=True)\n",
|
|
" return Rhists"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 184,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2024-01-05 08:20:00\n",
|
|
"1704410180\n",
|
|
"1704380400\n",
|
|
"29780\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"m = 100\n",
|
|
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
|
|
"present_time = fmins[m] # 현재시점\n",
|
|
"print(datetime.fromtimestamp(present_time))\n",
|
|
"\n",
|
|
"# - 5분마다 신호이력 데이터 수집해서 통합테이블 생성할때\n",
|
|
"# 1. 조회시점의 유닉스 타임을 기준으로 신호이력의 유닉스 타임이 1시간 이내인(Rhist) 데이터 수집 <- 나중을 위해, 그냥 현재시점 이전의 데이터를 수집.\n",
|
|
"rhistory = history.copy() # recent history\n",
|
|
"rhistory = rhistory[(rhistory.end_unix < present_time)]\n",
|
|
"\n",
|
|
"# 2. 시작 유닉스 타임컬럼 생성 후 종류 유닉스 타임에서 현시별 현시기간 컬럼의 합을 뺀 값으로 입력\n",
|
|
"# - 현시시간의 합을 뺀 시간의 +- 10초 이내에 이전 주기정보가 존재하면 그 유닉스 시간을 시작 유닉스시간 값으로 하고, 존재하지 않으면 현시시간의 합을 뺀 유닉스 시간을 시작 유닉스 시간으로 지정\n",
|
|
"for i, row in rhistory.iterrows():\n",
|
|
" # 이전 유닉스 존재하지 않음 => 현시시간 합의 차\n",
|
|
" # 이전 유닉스 존재, abs < 10 => 이전 유닉스\n",
|
|
" # 이전 유닉스 존재, abs >=10 => 현시시간 합의 차\n",
|
|
" inter_no = row.inter_no\n",
|
|
" end_unix = row.end_unix\n",
|
|
" elapsed_time = row[[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]].sum() // 2 # 현시시간 합\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",
|
|
"rhistory = rhistory[['inter_no', 'start_unix'] + [f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)] + ['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",
|
|
"\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",
|
|
" phas_As = [isplit[j][0] for j in isplit.keys()]\n",
|
|
" phas_Bs = [isplit[j][1] for j in isplit.keys()]\n",
|
|
" durs_A = row[[f'dura_A{j}' for j in range(1,9)]]\n",
|
|
" durs_B = row[[f'dura_B{j}' for j in range(1,9)]]\n",
|
|
" durations = []\n",
|
|
" for j in range(1, len(isplit)+1):\n",
|
|
" ja = isplit[j][0]\n",
|
|
" jb = isplit[j][1]\n",
|
|
" if ja == jb:\n",
|
|
" durations.append(min(durs_A[ja-1], durs_B[jb-1]))\n",
|
|
" else:\n",
|
|
" durations.append(abs(durs_A[ja-1] - durs_B[ja-1]))\n",
|
|
" new_rows = pd.DataFrame({'inter_no':[inter_no] * len(durations), 'start_unix':[start_unix] * len(durations),\n",
|
|
" 'phas_A':phas_As, 'phas_B':phas_Bs, 'duration':durations})\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",
|
|
"print(hrhistory.start_unix.max())\n",
|
|
"print(hrhistory.start_unix.min())\n",
|
|
"print(hrhistory.start_unix.max() - hrhistory.start_unix.min())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 186,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1704410340\n",
|
|
"1704406820\n",
|
|
"3520\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"movement = time2movement[present_time]\n",
|
|
"print(movement.start_unix.max())\n",
|
|
"print(movement.start_unix.min())\n",
|
|
"print(movement.start_unix.max() - movement.start_unix.min())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"\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']) # 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",
|
|
"\n",
|
|
"# # 이동류 매칭 테이블에서 진입id, 진출id를 가져와서 붙임.\n",
|
|
"# for i, row in movedur.iterrows():\n",
|
|
"# inter_no = row.inter_no\n",
|
|
"# start_unix = row.start_unix\n",
|
|
"# # incoming and outgoing edges A\n",
|
|
"# move_A = row.move_A\n",
|
|
"# if move_A in [17, 18]:\n",
|
|
"# inc_edge_A = np.nan\n",
|
|
"# out_edge_A = np.nan\n",
|
|
"# else:\n",
|
|
"# match_A = matching[(matching.inter_no == inter_no) & (matching.move_no == move_A)].iloc[0]\n",
|
|
"# inc_edge_A = match_A.inc_edge\n",
|
|
"# out_edge_A = match_A.out_edge\n",
|
|
"# movedur.loc[i, ['inc_edge_A', 'out_edge_A']] = [inc_edge_A, out_edge_A]\n",
|
|
"# # incoming and outgoing edges B\n",
|
|
"# move_B = row.move_B\n",
|
|
"# if move_B in [17, 18]:\n",
|
|
"# inc_edge_B = np.nan\n",
|
|
"# out_edge_B = np.nan\n",
|
|
"# else:\n",
|
|
"# match_B = matching[(matching.inter_no == inter_no) & (matching.move_no == move_B)].iloc[0]\n",
|
|
"# inc_edge_B = match_B.inc_edge\n",
|
|
"# out_edge_B = match_B.out_edge\n",
|
|
"# movedur.loc[i, ['inc_edge_B', 'out_edge_B']] = [inc_edge_B, out_edge_B]\n",
|
|
"\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",
|
|
"# histid['node_id'] = histid['inter_no'].map(inter2node)\n",
|
|
"# histid = histid[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'duration', 'inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']]\n",
|
|
"# histid = histid[histid.start_unix > present_time - 3600]\n",
|
|
"# # 시뮬레이션 시작시각 : 현재시각 - 600\n",
|
|
"# # 시뮬레이션 종료시각 : 현재시각 - 300\n",
|
|
"# # 현재시각 : present_time, PT\n",
|
|
"# # PT-900 ... PT-600 ... PT-300 ... PT\n",
|
|
"# histid[:60]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 179,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2024-01-05 08:20:00\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>dura_A1</th>\n",
|
|
" <th>dura_A2</th>\n",
|
|
" <th>dura_A3</th>\n",
|
|
" <th>dura_A4</th>\n",
|
|
" <th>dura_A5</th>\n",
|
|
" <th>dura_A6</th>\n",
|
|
" <th>dura_A7</th>\n",
|
|
" <th>dura_A8</th>\n",
|
|
" <th>dura_B1</th>\n",
|
|
" <th>dura_B2</th>\n",
|
|
" <th>dura_B3</th>\n",
|
|
" <th>dura_B4</th>\n",
|
|
" <th>dura_B5</th>\n",
|
|
" <th>dura_B6</th>\n",
|
|
" <th>dura_B7</th>\n",
|
|
" <th>dura_B8</th>\n",
|
|
" <th>cycle</th>\n",
|
|
" <th>diff</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704406830</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407000</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407170</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407341</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>171</td>\n",
|
|
" <td>171.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407510</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>70</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>70</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>169.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407680</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>43</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704407850</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408020</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>57</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408191</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>171</td>\n",
|
|
" <td>171.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>64</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408360</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>70</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>70</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>169.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>71</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408530</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>78</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408700</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>85</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704408870</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>94</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409041</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>72</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>171</td>\n",
|
|
" <td>171.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>101</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409210</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>169.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>108</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409380</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>116</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409551</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>171.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>123</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409720</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>169.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>130</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704409890</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>137</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704410060</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>144</th>\n",
|
|
" <td>177</td>\n",
|
|
" <td>1704410230</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>71</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>170</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no end_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n",
|
|
"1 177 1704406830 40 25 71 34 0 \n",
|
|
"8 177 1704407000 40 25 71 34 0 \n",
|
|
"15 177 1704407170 40 25 71 34 0 \n",
|
|
"22 177 1704407341 40 25 72 34 0 \n",
|
|
"29 177 1704407510 40 25 70 34 0 \n",
|
|
"36 177 1704407680 40 25 71 34 0 \n",
|
|
"43 177 1704407850 40 25 71 34 0 \n",
|
|
"50 177 1704408020 40 25 71 34 0 \n",
|
|
"57 177 1704408191 40 25 72 34 0 \n",
|
|
"64 177 1704408360 40 25 70 34 0 \n",
|
|
"71 177 1704408530 40 25 71 34 0 \n",
|
|
"78 177 1704408700 40 25 71 34 0 \n",
|
|
"85 177 1704408870 40 25 71 34 0 \n",
|
|
"94 177 1704409041 40 25 72 34 0 \n",
|
|
"101 177 1704409210 40 25 71 34 0 \n",
|
|
"108 177 1704409380 40 25 71 34 0 \n",
|
|
"116 177 1704409551 40 25 71 34 0 \n",
|
|
"123 177 1704409720 40 25 71 34 0 \n",
|
|
"130 177 1704409890 40 25 71 34 0 \n",
|
|
"137 177 1704410060 40 25 71 34 0 \n",
|
|
"144 177 1704410230 40 25 71 34 0 \n",
|
|
"\n",
|
|
" dura_A6 dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n",
|
|
"1 0 0 0 40 25 71 34 0 \n",
|
|
"8 0 0 0 40 25 71 34 0 \n",
|
|
"15 0 0 0 40 25 71 34 0 \n",
|
|
"22 0 0 0 40 25 72 34 0 \n",
|
|
"29 0 0 0 40 25 70 34 0 \n",
|
|
"36 0 0 0 40 25 71 34 0 \n",
|
|
"43 0 0 0 40 25 71 34 0 \n",
|
|
"50 0 0 0 40 25 71 34 0 \n",
|
|
"57 0 0 0 40 25 72 34 0 \n",
|
|
"64 0 0 0 40 25 70 34 0 \n",
|
|
"71 0 0 0 40 25 71 34 0 \n",
|
|
"78 0 0 0 40 25 71 34 0 \n",
|
|
"85 0 0 0 40 25 71 34 0 \n",
|
|
"94 0 0 0 40 25 72 34 0 \n",
|
|
"101 0 0 0 40 25 71 34 0 \n",
|
|
"108 0 0 0 40 25 71 34 0 \n",
|
|
"116 0 0 0 40 25 71 34 0 \n",
|
|
"123 0 0 0 40 25 71 34 0 \n",
|
|
"130 0 0 0 40 25 71 34 0 \n",
|
|
"137 0 0 0 40 25 71 34 0 \n",
|
|
"144 0 0 0 40 25 71 34 0 \n",
|
|
"\n",
|
|
" dura_B6 dura_B7 dura_B8 cycle diff \n",
|
|
"1 0 0 0 170 NaN \n",
|
|
"8 0 0 0 170 170.0 \n",
|
|
"15 0 0 0 170 170.0 \n",
|
|
"22 0 0 0 171 171.0 \n",
|
|
"29 0 0 0 169 169.0 \n",
|
|
"36 0 0 0 170 170.0 \n",
|
|
"43 0 0 0 170 170.0 \n",
|
|
"50 0 0 0 170 170.0 \n",
|
|
"57 0 0 0 171 171.0 \n",
|
|
"64 0 0 0 169 169.0 \n",
|
|
"71 0 0 0 170 170.0 \n",
|
|
"78 0 0 0 170 170.0 \n",
|
|
"85 0 0 0 170 170.0 \n",
|
|
"94 0 0 0 171 171.0 \n",
|
|
"101 0 0 0 170 169.0 \n",
|
|
"108 0 0 0 170 170.0 \n",
|
|
"116 0 0 0 170 171.0 \n",
|
|
"123 0 0 0 170 169.0 \n",
|
|
"130 0 0 0 170 170.0 \n",
|
|
"137 0 0 0 170 170.0 \n",
|
|
"144 0 0 0 170 170.0 "
|
|
]
|
|
},
|
|
"execution_count": 179,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"m = 100\n",
|
|
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
|
|
"present_time = fmins[m]\n",
|
|
"rhistory = make_rhistory(100)\n",
|
|
"\n",
|
|
"inter_no = 177\n",
|
|
"rh_diff = rhistory.copy()[rhistory.inter_no==inter_no]\n",
|
|
"rh_diff['diff'] = rh_diff['end_unix'].diff()\n",
|
|
"rh_diff"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def make_histid(m):\n",
|
|
" fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
|
|
" present_time = fmins[m]\n",
|
|
" rhistory = make_rhistory(m)\n",
|
|
" # 2. 시작 유닉스 타임컬럼 생성 후 종류 유닉스 타임에서 현시별 현시기간 컬럼의 합을 뺀 값으로 입력\n",
|
|
" # - 현시시간의 합을 뺀 시간의 +- 10초 이내에 이전 주기정보가 존재하면 그 유닉스 시간을 시작 유닉스시간 값으로 하고, 존재하지 않으면 현시시간의 합을 뺀 유닉스 시간을 시작 유닉스 시간으로 지정\n",
|
|
" for i, row in rhistory.iterrows():\n",
|
|
" # 이전 유닉스 존재하지 않음 => 현시시간 합의 차\n",
|
|
" # 이전 유닉스 존재, abs < 10 => 이전 유닉스\n",
|
|
" # 이전 유닉스 존재, abs >=10 => 현시시간 합의 차\n",
|
|
" inter_no = row.inter_no\n",
|
|
" end_unix = row.end_unix\n",
|
|
" elapsed_time = row[[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]].sum() // 2 # 현시시간 합\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'] + [f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)] + ['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",
|
|
"\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",
|
|
" phas_As = [isplit[j][0] for j in isplit.keys()]\n",
|
|
" phas_Bs = [isplit[j][1] for j in isplit.keys()]\n",
|
|
" durs_A = row[[f'dura_A{j}' for j in range(1,9)]]\n",
|
|
" durs_B = row[[f'dura_B{j}' for j in range(1,9)]]\n",
|
|
" durations = []\n",
|
|
" for j in range(1, len(isplit)+1):\n",
|
|
" ja = isplit[j][0]\n",
|
|
" jb = isplit[j][1]\n",
|
|
" if ja == jb:\n",
|
|
" durations.append(min(durs_A[ja-1], durs_B[jb-1]))\n",
|
|
" else:\n",
|
|
" durations.append(abs(durs_A[ja-1] - durs_B[ja-1]))\n",
|
|
" new_rows = pd.DataFrame({'inter_no':[inter_no] * len(durations), 'start_unix':[start_unix] * len(durations),\n",
|
|
" 'phas_A':phas_As, 'phas_B':phas_Bs, 'duration':durations})\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']) # 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",
|
|
"\n",
|
|
" # 이동류 매칭 테이블에서 진입id, 진출id를 가져와서 붙임.\n",
|
|
" for i, row in movedur.iterrows():\n",
|
|
" inter_no = row.inter_no\n",
|
|
" start_unix = row.start_unix\n",
|
|
" # incoming and outgoing edges A\n",
|
|
" move_A = row.move_A\n",
|
|
" if move_A in [17, 18]:\n",
|
|
" inc_edge_A = np.nan\n",
|
|
" out_edge_A = np.nan\n",
|
|
" else:\n",
|
|
" match_A = matching[(matching.inter_no == inter_no) & (matching.move_no == move_A)].iloc[0]\n",
|
|
" inc_edge_A = match_A.inc_edge\n",
|
|
" out_edge_A = match_A.out_edge\n",
|
|
" movedur.loc[i, ['inc_edge_A', 'out_edge_A']] = [inc_edge_A, out_edge_A]\n",
|
|
" # incoming and outgoing edges B\n",
|
|
" move_B = row.move_B\n",
|
|
" if move_B in [17, 18]:\n",
|
|
" inc_edge_B = np.nan\n",
|
|
" out_edge_B = np.nan\n",
|
|
" else:\n",
|
|
" match_B = matching[(matching.inter_no == inter_no) & (matching.move_no == move_B)].iloc[0]\n",
|
|
" inc_edge_B = match_B.inc_edge\n",
|
|
" out_edge_B = match_B.out_edge\n",
|
|
" movedur.loc[i, ['inc_edge_B', 'out_edge_B']] = [inc_edge_B, out_edge_B]\n",
|
|
"\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",
|
|
" histid['node_id'] = histid['inter_no'].map(inter2node)\n",
|
|
" histid = histid[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'duration', 'inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']]\n",
|
|
" histid = histid[histid.start_unix > present_time - 3600]\n",
|
|
" # 시뮬레이션 시작시각 : 현재시각 - 600\n",
|
|
" # 시뮬레이션 종료시각 : 현재시각 - 300\n",
|
|
" # 현재시각 : present_time, PT\n",
|
|
" # PT-900 ... PT-600 ... PT-300 ... PT\n",
|
|
" return histid"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 174,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2024-01-05 10:00:00\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"m = 120\n",
|
|
"fmins = range(midnight, next_day, 300) # fmins : unix time by Five MINuteS\n",
|
|
"present_time = fmins[m]\n",
|
|
"rhistory = make_rhistory(m)\n",
|
|
"# 2. 시작 유닉스 타임컬럼 생성 후 종류 유닉스 타임에서 현시별 현시기간 컬럼의 합을 뺀 값으로 입력\n",
|
|
"# - 현시시간의 합을 뺀 시간의 +- 10초 이내에 이전 주기정보가 존재하면 그 유닉스 시간을 시작 유닉스시간 값으로 하고, 존재하지 않으면 현시시간의 합을 뺀 유닉스 시간을 시작 유닉스 시간으로 지정\n",
|
|
"for i, row in rhistory.iterrows():\n",
|
|
" # 이전 유닉스 존재하지 않음 => 현시시간 합의 차\n",
|
|
" # 이전 유닉스 존재, abs < 10 => 이전 유닉스\n",
|
|
" # 이전 유닉스 존재, abs >=10 => 현시시간 합의 차\n",
|
|
" inter_no = row.inter_no\n",
|
|
" end_unix = row.end_unix\n",
|
|
" elapsed_time = row[[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]].sum() // 2 # 현시시간 합\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'] + [f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)] + ['cycle']]\n",
|
|
"\n",
|
|
"# rhistoryy = rhistory.copy()[rhistory.inter_no==175]\n",
|
|
"# rhistoryy['diff'] = rhistoryy['start_unix'].diff()\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",
|
|
"\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",
|
|
" phas_As = [isplit[j][0] for j in isplit.keys()]\n",
|
|
" phas_Bs = [isplit[j][1] for j in isplit.keys()]\n",
|
|
" durs_A = row[[f'dura_A{j}' for j in range(1,9)]]\n",
|
|
" durs_B = row[[f'dura_B{j}' for j in range(1,9)]]\n",
|
|
" durations = []\n",
|
|
" for j in range(1, len(isplit)+1):\n",
|
|
" ja = isplit[j][0]\n",
|
|
" jb = isplit[j][1]\n",
|
|
" if ja == jb:\n",
|
|
" durations.append(min(durs_A[ja-1], durs_B[jb-1]))\n",
|
|
" else:\n",
|
|
" durations.append(abs(durs_A[ja-1] - durs_B[ja-1]))\n",
|
|
" new_rows = pd.DataFrame({'inter_no':[inter_no] * len(durations), 'start_unix':[start_unix] * len(durations),\n",
|
|
" 'phas_A':phas_As, 'phas_B':phas_Bs, 'duration':durations})\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",
|
|
"hrhistoryy = rhistory.copy()[rhistory.inter_no==175]\n",
|
|
"hrhistoryy['diff'] = hrhistoryy['start_unix'].diff()\n",
|
|
"\n",
|
|
"# display(hrhistoryy[:60])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 175,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"175\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGvCAYAAACJsNWPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApbElEQVR4nO3de3hU9Z3H8U8uZAgPJAFjLsAIKgooAoFIGrmoy9TUC17WtYgUkGVxcbFLTb0QBaJ2JYjK0hYKBUXcZ22hqKy0IF02CgXNggRQEBpEwKTABCgyE1ATyPz2D5aBIQlkaIYfZ3i/nmeeh5zzO9/z/fFT5+OZcyYxxhgjAAAAS2JtNwAAAC5thBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVsXbbqAxAoGA9u7dq1atWikmJsZ2OwAAoBGMMaqqqlLbtm0VG9vw9Q9HhJG9e/fK7XbbbgMAAJyHiooKtW/fvsH9jggjrVq1knRiMklJSZa7AQAAjeH3++V2u4Pv4w1xRBg5+dFMUlISYQQAAIc51y0W3MAKAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsMoRX3oWEbW10urV0r59Umam1L+/FBd36dWNZG0n9hzJ2k7sOZK16dn5tek5OmpfDEyYVq1aZe666y6TmZlpJJnFixef85gPP/zQZGVlmYSEBHP11VebN954I6xz+nw+I8n4fL5w263fO+8Y0769MdKpV/v2J7ZfSnXp+cLVdmLPkaxNz86vTc/RUTvCGvv+HXYYWbZsmXn22WfNu+++26gwsnPnTtOiRQuTn59vtm7dan75y1+auLg4s3z58kafs0nDyDvvGBMTE7qo0oltMTHnv7hOq0vPF662E3uOZG16dn5teo6O2hdAxMJIyMGNCCNPPfWUuf7660O2DR482OTl5TX6PE0WRo4fr5suz1xct/vEuGiuS88XrrYTe45kbXp2fm16jo7aF0hj378jfgNrSUmJPB5PyLa8vDyVlJQ0eEx1dbX8fn/Iq0msXi395S8N7zdGqqg4MS6a60aythN7jmRtJ/Ycydr07Pza9BwdtS8yEQ8jXq9X6enpIdvS09Pl9/v17bff1ntMUVGRkpOTgy+32900zezb17TjnFo3krWd2HMkazux50jWpmfn16bn6Kh9kbkoH+0tKCiQz+cLvioqKpqmcGZm045zat1I1nZiz5Gs7cSeI1mbnp1fm56jo/bF5m/5LEg69z0j/fv3N+PGjQvZNm/ePJOUlNTo8zT5PSP13QzUFJ9HOqUuPV+42k7sOZK16dn5tek5OmpfIBfVDazdunUL2TZkyBA7N7Aac+rO5DMXt6nu1HZKXXq+cLWd2HMka9Oz82vTc3TUvgAiFkaqqqrMxo0bzcaNG40kM23aNLNx40bz1VdfGWOMGT9+vBk2bFhw/MlHe5988kmzbds2M3PmTLuP9hpT/zPbbndknmG/mOvS84Wr7cSeI1mbnp1fm56jo3aENfb9O8YYY8L5WGflypW69dZb62wfMWKE5s+fr4cffli7d+/WypUrQ455/PHHtXXrVrVv314TJ07Uww8/3Ohz+v1+JScny+fzKSkpKZx2G+a0b/dz4jf7ObHnSNZ2Ys+RrE3Pzq9Nz9FRO4Ia+/4ddhixISJhBAAARFRj378vyqdpAADApYMwAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALDqvMLIzJkz1bFjRzVv3lw5OTlat27dWcdPnz5dnTt3VmJiotxutx5//HF9991359UwAACILmGHkYULFyo/P1+FhYXasGGDevTooby8PO3fv7/e8b/5zW80fvx4FRYWatu2bXr99de1cOFCPfPMM39z8wAAwPnCDiPTpk3T6NGjNXLkSF133XWaPXu2WrRooXnz5tU7/uOPP1bfvn310EMPqWPHjrrttts0ZMiQc15NAQAAl4awwkhNTY1KS0vl8XhOFYiNlcfjUUlJSb3H3HTTTSotLQ2Gj507d2rZsmW64447GjxPdXW1/H5/yAsAAESn+HAGHzx4ULW1tUpPTw/Znp6erj//+c/1HvPQQw/p4MGD6tevn4wxOn78uMaMGXPWj2mKior0/PPPh9MaAABwqIg/TbNy5UpNnjxZv/rVr7Rhwwa9++67Wrp0qX72s581eExBQYF8Pl/wVVFREek2AQCAJWFdGUlNTVVcXJwqKytDtldWViojI6PeYyZOnKhhw4bpn/7pnyRJN9xwg44ePapHHnlEzz77rGJj6+Yhl8sll8sVTmsAAMChwroykpCQoN69e6u4uDi4LRAIqLi4WLm5ufUe880339QJHHFxcZIkY0y4/QIAgCgT1pURScrPz9eIESOUnZ2tPn36aPr06Tp69KhGjhwpSRo+fLjatWunoqIiSdKgQYM0bdo0ZWVlKScnRzt27NDEiRM1aNCgYCgBAACXrrDDyODBg3XgwAFNmjRJXq9XPXv21PLly4M3tZaXl4dcCZkwYYJiYmI0YcIE7dmzR5dffrkGDRqkF198selmAQAAHCvGOOCzEr/fr+TkZPl8PiUlJdluBwAANEJj37/53TQAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAq84rjMycOVMdO3ZU8+bNlZOTo3Xr1p11/OHDhzV27FhlZmbK5XLp2muv1bJly86rYQAAEF3iwz1g4cKFys/P1+zZs5WTk6Pp06crLy9PZWVlSktLqzO+pqZG3//+95WWlqa3335b7dq101dffaWUlJSm6B8AADhcjDHGhHNATk6ObrzxRs2YMUOSFAgE5Ha79eMf/1jjx4+vM3727Nl6+eWX9ec//1nNmjU7ryb9fr+Sk5Pl8/mUlJR0XjUAAMCF1dj377A+pqmpqVFpaak8Hs+pArGx8ng8KikpqfeYJUuWKDc3V2PHjlV6erq6deumyZMnq7a2tsHzVFdXy+/3h7wAAEB0CiuMHDx4ULW1tUpPTw/Znp6eLq/XW+8xO3fu1Ntvv63a2lotW7ZMEydO1Kuvvqp/+7d/a/A8RUVFSk5ODr7cbnc4bQIAAAeJ+NM0gUBAaWlpmjNnjnr37q3Bgwfr2Wef1ezZsxs8pqCgQD6fL/iqqKiIdJsAAMCSsG5gTU1NVVxcnCorK0O2V1ZWKiMjo95jMjMz1axZM8XFxQW3de3aVV6vVzU1NUpISKhzjMvlksvlCqc1AADgUGFdGUlISFDv3r1VXFwc3BYIBFRcXKzc3Nx6j+nbt6927NihQCAQ3LZ9+3ZlZmbWG0QAAMClJeyPafLz8zV37ly9+eab2rZtmx599FEdPXpUI0eOlCQNHz5cBQUFwfGPPvqoDh06pHHjxmn79u1aunSpJk+erLFjxzbdLAAAgGOF/T0jgwcP1oEDBzRp0iR5vV717NlTy5cvD97UWl5ertjYUxnH7Xbrj3/8ox5//HF1795d7dq107hx4/T000833SwAAIBjhf09IzbwPSMAADhPRL5nBAAAoKkRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYdV5hZObMmerYsaOaN2+unJwcrVu3rlHHLViwQDExMbr33nvP57QAACAKhR1GFi5cqPz8fBUWFmrDhg3q0aOH8vLytH///rMet3v3bj3xxBPq37//eTcLAACiT9hhZNq0aRo9erRGjhyp6667TrNnz1aLFi00b968Bo+pra3V0KFD9fzzz+uqq676mxoGAADRJawwUlNTo9LSUnk8nlMFYmPl8XhUUlLS4HEvvPCC0tLSNGrUqEadp7q6Wn6/P+QFAACiU1hh5ODBg6qtrVV6enrI9vT0dHm93nqPWbNmjV5//XXNnTu30ecpKipScnJy8OV2u8NpEwAAOEhEn6apqqrSsGHDNHfuXKWmpjb6uIKCAvl8vuCroqIigl0CAACb4sMZnJqaqri4OFVWVoZsr6ysVEZGRp3xX375pXbv3q1BgwYFtwUCgRMnjo9XWVmZrr766jrHuVwuuVyucFoDAAAOFdaVkYSEBPXu3VvFxcXBbYFAQMXFxcrNza0zvkuXLtq8ebM2bdoUfN1999269dZbtWnTJj5+AQAA4V0ZkaT8/HyNGDFC2dnZ6tOnj6ZPn66jR49q5MiRkqThw4erXbt2KioqUvPmzdWtW7eQ41NSUiSpznYAAHBpCjuMDB48WAcOHNCkSZPk9XrVs2dPLV++PHhTa3l5uWJj+WJXAADQODHGGGO7iXPx+/1KTk6Wz+dTUlKS7XYAAEAjNPb9m0sYAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKvOK4zMnDlTHTt2VPPmzZWTk6N169Y1OHbu3Lnq37+/WrdurdatW8vj8Zx1PAAAuLSEHUYWLlyo/Px8FRYWasOGDerRo4fy8vK0f//+esevXLlSQ4YM0YcffqiSkhK53W7ddttt2rNnz9/cPAAAcL4YY4wJ54CcnBzdeOONmjFjhiQpEAjI7Xbrxz/+scaPH3/O42tra9W6dWvNmDFDw4cPb9Q5/X6/kpOT5fP5lJSUFE67AADAksa+f4d1ZaSmpkalpaXyeDynCsTGyuPxqKSkpFE1vvnmGx07dkxt2rRpcEx1dbX8fn/ICwAARKewwsjBgwdVW1ur9PT0kO3p6enyer2NqvH000+rbdu2IYHmTEVFRUpOTg6+3G53OG0CAAAHuaBP00yZMkULFizQ4sWL1bx58wbHFRQUyOfzBV8VFRUXsEsAAHAhxYczODU1VXFxcaqsrAzZXllZqYyMjLMe+8orr2jKlCn6n//5H3Xv3v2sY10ul1wuVzitAQAAhwrrykhCQoJ69+6t4uLi4LZAIKDi4mLl5uY2eNzUqVP1s5/9TMuXL1d2dvb5dwsAAKJOWFdGJCk/P18jRoxQdna2+vTpo+nTp+vo0aMaOXKkJGn48OFq166dioqKJEkvvfSSJk2apN/85jfq2LFj8N6Sli1bqmXLlk04FQAA4ERhh5HBgwfrwIEDmjRpkrxer3r27Knly5cHb2otLy9XbOypCy6zZs1STU2N/uEf/iGkTmFhoZ577rm/rXsAAOB4YX/PiA18zwgAAM4Tke8ZAQAAaGqEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYFW+7gWhTWyutXi3t2ydlZkr9+0txcRdvXafWpmfn16Zn59emZ+fXjmTPYTHnYcaMGaZDhw7G5XKZPn36mLVr1551/O9+9zvTuXNn43K5TLdu3czSpUvDOp/P5zOSjM/nO592L5h33jGmfXtjpFOv9u1PbL8Y6zq1Nj07vzY9O782PTu/diR7Pqmx799hh5EFCxaYhIQEM2/ePPP555+b0aNHm5SUFFNZWVnv+I8++sjExcWZqVOnmq1bt5oJEyaYZs2amc2bNzf6nE4II++8Y0xMTOiiSie2xcSc/+JGqq5Ta9Oz82vTs/Nr07Pza0ey59NFLIz06dPHjB07NvhzbW2tadu2rSkqKqp3/A9/+ENz5513hmzLyckx//zP/9zoc17sYeT48brp8szFdbtPjLsY6jq1Nj07vzY9O782PTu/diR7PlNj37/DuoG1pqZGpaWl8ng8wW2xsbHyeDwqKSmp95iSkpKQ8ZKUl5fX4HhJqq6ult/vD3ldzFavlv7yl4b3GyNVVJwYdzHUdWptenZ+bXp2fm16dn7tSPZ8vsIKIwcPHlRtba3S09NDtqenp8vr9dZ7jNfrDWu8JBUVFSk5OTn4crvd4bR5we3b17TjIl3XqbXp2fm16dn5tenZ+bUj2fP5uigf7S0oKJDP5wu+KioqbLd0VpmZTTsu0nWdWpuenV+bnp1fm56dXzuSPZ+3cD77qa6uNnFxcWbx4sUh24cPH27uvvvueo9xu93m3//930O2TZo0yXTv3r3R53XKPSP13QzUFJ/rNXVdp9amZ+fXpmfn16Zn59eOZM9niugNrI899ljw59raWtOuXbuz3sB61113hWzLzc2NqhtYjTl1Z/KZi9tUdzw3dV2n1qZn59emZ+fXpmfn145kz6eL6KO9LpfLzJ8/32zdutU88sgjJiUlxXi9XmOMMcOGDTPjx48Pjv/oo49MfHy8eeWVV8y2bdtMYWFhVD7aa0z9z2y73ZF5Frwp6jq1Nj07vzY9O782PTu/diR7Pqmx798xxhgT7kc7M2bM0Msvvyyv16uePXvqF7/4hXJyciRJt9xyizp27Kj58+cHxy9atEgTJkzQ7t27dc0112jq1Km64447Gn0+v9+v5ORk+Xw+JSUlhdvuBeXEb8lzYm16dn5tenZ+bXp2fu1IfwNrY9+/zyuMXGhOCiMAAOCExr5/X5RP0wAAgEsHYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgVbztBhrj5JfE+v1+y50AAIDGOvm+fa4ve3dEGKmqqpIkud1uy50AAIBwVVVVKTk5ucH9jvjdNIFAQHv37lWrVq0UExMjv98vt9utioqKS+p31Vyq85aYO3O/tOZ+qc5bYu7RNndjjKqqqtS2bVvFxjZ8Z4gjrozExsaqffv2dbYnJSVFzYKF41Kdt8Tcmful5VKdt8Tco2nuZ7sichI3sAIAAKsIIwAAwCpHhhGXy6XCwkK5XC7brVxQl+q8JebO3C+tuV+q85aY+6U6d0fcwAoAAKKXI6+MAACA6EEYAQAAVhFGAACAVYQRAABglZUwUlRUpBtvvFGtWrVSWlqa7r33XpWVlYWMueWWWxQTExPyGjNmTMiY8vJy3XnnnWrRooXS0tL05JNP6vjx4yFjVq5cqV69esnlcqlTp06aP39+pKd3VrNmzVL37t2DX2qTm5ur999/P7j/u+++09ixY3XZZZepZcuWuv/++1VZWRlSw4nzls4992hd8zNNmTJFMTEx+slPfhLcFs3rfrr65h6t6/7cc8/VmVeXLl2C+6N5zc8192hdc0nas2ePfvSjH+myyy5TYmKibrjhBq1fvz643xijSZMmKTMzU4mJifJ4PPriiy9Cahw6dEhDhw5VUlKSUlJSNGrUKB05ciRkzGeffab+/furefPmcrvdmjp16gWZX8QYC/Ly8swbb7xhtmzZYjZt2mTuuOMOc8UVV5gjR44Ex9x8881m9OjRZt++fcGXz+cL7j9+/Ljp1q2b8Xg8ZuPGjWbZsmUmNTXVFBQUBMfs3LnTtGjRwuTn55utW7eaX/7ylyYuLs4sX778gs73dEuWLDFLly4127dvN2VlZeaZZ54xzZo1M1u2bDHGGDNmzBjjdrtNcXGxWb9+vfne975nbrrppuDxTp23Meeee7Su+enWrVtnOnbsaLp3727GjRsX3B7N635SQ3OP1nUvLCw0119/fci8Dhw4ENwfzWt+rrlH65ofOnTIdOjQwTz88MNm7dq1ZufOneaPf/yj2bFjR3DMlClTTHJysvmv//ov8+mnn5q7777bXHnllebbb78NjvnBD35gevToYf73f//XrF692nTq1MkMGTIkuN/n85n09HQzdOhQs2XLFvPb3/7WJCYmml//+tcXdL5NyUoYOdP+/fuNJLNq1argtptvvjnkP1hnWrZsmYmNjTVerze4bdasWSYpKclUV1cbY4x56qmnzPXXXx9y3ODBg01eXl7TTuBv1Lp1a/Paa6+Zw4cPm2bNmplFixYF923bts1IMiUlJcaY6Jq3Mafmbkz0r3lVVZW55pprzIoVK0Lmeimse0NzNyZ6172wsND06NGj3n3RvuZnm7sx0bvmTz/9tOnXr1+D+wOBgMnIyDAvv/xycNvhw4eNy+Uyv/3tb40xxmzdutVIMp988klwzPvvv29iYmLMnj17jDHG/OpXvzKtW7cO/l2cPHfnzp2bekoXzEVxz4jP55MktWnTJmT7W2+9pdTUVHXr1k0FBQX65ptvgvtKSkp0ww03KD09PbgtLy9Pfr9fn3/+eXCMx+MJqZmXl6eSkpJITSUstbW1WrBggY4eParc3FyVlpbq2LFjIT136dJFV1xxRbDnaJi3VHfuJ0Xzmo8dO1Z33nlnnf4uhXVvaO4nReu6f/HFF2rbtq2uuuoqDR06VOXl5ZIujTVvaO4nReOaL1myRNnZ2XrggQeUlpamrKwszZ07N7h/165d8nq9IX0nJycrJycnZN1TUlKUnZ0dHOPxeBQbG6u1a9cGxwwYMEAJCQnBMXl5eSorK9PXX38d6WlGhPVflBcIBPSTn/xEffv2Vbdu3YLbH3roIXXo0EFt27bVZ599pqefflplZWV69913JUlerzfkH1RJwZ+9Xu9Zx/j9fn377bdKTEyM5NQatHnzZuXm5uq7775Ty5YttXjxYl133XXatGmTEhISlJKSUqfnc83p5L6zjbE9b6nhuUvRveYLFizQhg0b9Mknn9TZ5/V6o3rdzzZ3KXrXPScnR/Pnz1fnzp21b98+Pf/88+rfv7+2bNkS9Wt+trm3atUqatd8586dmjVrlvLz8/XMM8/ok08+0b/+678qISFBI0aMCPZeX9+nzystLS1kf3x8vNq0aRMy5sorr6xT4+S+1q1bR2R+kWQ9jIwdO1ZbtmzRmjVrQrY/8sgjwT/fcMMNyszM1MCBA/Xll1/q6quvvtBtNqnOnTtr06ZN8vl8evvttzVixAitWrXKdlsXRENzv+6666J2zSsqKjRu3DitWLFCzZs3t93OBdWYuUfrut9+++3BP3fv3l05OTnq0KGDfve731n9H4IL4WxzHzVqVNSueSAQUHZ2tiZPnixJysrK0pYtWzR79myNGDHCcncXN6sf0zz22GP6wx/+oA8//FDt27c/69icnBxJ0o4dOyRJGRkZde48P/lzRkbGWcckJSVZ/Y9BQkKCOnXqpN69e6uoqEg9evTQz3/+c2VkZKimpkaHDx8OGV9ZWXnOOZ3cd7YxtuctNTz3+kTLmpeWlmr//v3q1auX4uPjFR8fr1WrVukXv/iF4uPjlZ6eHrXrfq6519bW1jkmWtb9TCkpKbr22mu1Y8eOS+Lf9dOdPvf6RMuaZ2ZmBq/0ntS1a9fgR1Qne6+v79PntX///pD9x48f16FDh8L6Z8NprIQRY4wee+wxLV68WB988EGdy0312bRpk6QTiy1Jubm52rx5c8iirVixQklJScF/GHJzc1VcXBxSZ8WKFSH3KFwMAoGAqqur1bt3bzVr1iyk57KyMpWXlwd7jqZ5S6fmXp9oWfOBAwdq8+bN2rRpU/CVnZ2toUOHBv8cret+rrnHxcXVOSZa1v1MR44c0ZdffqnMzMxL7t/10+den2hZ8759+9b5mort27erQ4cOkqQrr7xSGRkZIX37/X6tXbs2ZN0PHz6s0tLS4JgPPvhAgUAgGNpyc3P1pz/9SceOHQuOWbFihTp37uzIj2gk2Xm099FHHzXJyclm5cqVIY92ffPNN8YYY3bs2GFeeOEFs379erNr1y7z3nvvmauuusoMGDAgWOPko1+33Xab2bRpk1m+fLm5/PLL633068knnzTbtm0zM2fOtP7o1/jx482qVavMrl27zGeffWbGjx9vYmJizH//938bY0487nfFFVeYDz74wKxfv97k5uaa3Nzc4PFOnbcxZ597NK95fc58miCa1/1Mp889mtf9pz/9qVm5cqXZtWuX+eijj4zH4zGpqalm//79xpjoXvOzzT2a13zdunUmPj7evPjii+aLL74wb731lmnRooX5z//8z+CYKVOmmJSUFPPee++Zzz77zNxzzz31PtqblZVl1q5da9asWWOuueaakEd7Dx8+bNLT082wYcPMli1bzIIFC0yLFi14tDfsk0r1vt544w1jjDHl5eVmwIABpk2bNsblcplOnTqZJ598MuQ5dGOM2b17t7n99ttNYmKiSU1NNT/96U/NsWPHQsZ8+OGHpmfPniYhIcFcddVVwXPY8o//+I+mQ4cOJiEhwVx++eVm4MCBwSBijDHffvut+Zd/+RfTunVr06JFC3PfffeZffv2hdRw4ryNOfvco3nN63NmGInmdT/T6XOP5nUfPHiwyczMNAkJCaZdu3Zm8ODBId83Ec1rfra5R/OaG2PM73//e9OtWzfjcrlMly5dzJw5c0L2BwIBM3HiRJOenm5cLpcZOHCgKSsrCxnz17/+1QwZMsS0bNnSJCUlmZEjR5qqqqqQMZ9++qnp16+fcblcpl27dmbKlCkRn1skxRhjjM0rMwAA4NJ2UXzPCAAAuHQRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAIDz8OKLL+qmm25SixYt6vwG5obExMTU+3r55ZeDYw4dOqShQ4cqKSlJKSkpGjVqlI4cOVJvvR07dqhVq1ZnPf+CBQsUExOje++9N2T7u+++q9tuu02XXXaZYmJigl/LH66ZM2eqa9euSkxMVOfOnfUf//EfYdcgjAAA0IBbbrlF8+fPr3dfTU2NHnjgAT366KONrrdv376Q17x58xQTE6P7778/OGbo0KH6/PPPtWLFCv3hD3/Qn/70p5DfdHzSsWPHNGTIEPXv37/B8+3evVtPPPFEvWOOHj2qfv366aWXXmp0/2eaNWuWCgoK9Nxzz+nzzz/X888/r7Fjx+r3v/99eIVsfwUsAAAXq5tvvvmcXzP/xhtvmOTk5POqf88995i/+7u/C/68detWI8l88sknwW3vv/++iYmJMXv27Ak59qmnnjI/+tGPGjz/8ePHzU033WRee+01M2LECHPPPffU28OuXbuMJLNx48Y6+77++mszatQok5qaalq1amVuvfVWs2nTpuD+3Nxc88QTT4Qck5+fb/r27duI2Z/ClREAACyorKzU0qVLNWrUqOC2kpISpaSkKDs7O7jN4/EoNjZWa9euDW774IMPtGjRIs2cObPB+i+88ILS0tJC6ofrgQce0P79+/X++++rtLRUvXr10sCBA3Xo0CFJUnV1tZo3bx5yTGJiotatWxfyW4XPhTACAIAFb775plq1aqW///u/D27zer1KS0sLGRcfH682bdrI6/VKkv7617/q4Ycf1vz585WUlFRv7TVr1uj111/X3Llzz7u/NWvWaN26dVq0aJGys7N1zTXX6JVXXlFKSorefvttSVJeXp5ee+01lZaWyhij9evX67XXXtOxY8d08ODBRp+LMAIAwP+bPHmyWrZsGXytXr1aY8aMCdlWXl7eJOeaN2+ehg4dWufKwrmMHj1aDz30kAYMGFDv/qqqKg0bNkxz585Vamrqeff36aef6siRI7rssstC5r9r1y59+eWXkqSJEyfq9ttv1/e+9z01a9ZM99xzj0aMGCFJio1tfMSIP+8uAQCIMmPGjNEPf/jD4M9Dhw7V/fffH3L1om3btn/zeVavXq2ysjItXLgwZHtGRob2798fsu348eM6dOiQMjIyJJ34iGbJkiV65ZVXJEnGGAUCAcXHx2vOnDnq1auXdu/erUGDBgVrBAIBSSeuspSVlenqq68+Z49HjhxRZmamVq5cWWffyad3EhMTNW/ePP36179WZWWlMjMzNWfOHLVq1UqXX355o/8+CCMAAPy/Nm3aqE2bNsGfExMTlZaWpk6dOjXpeV5//XX17t1bPXr0CNmem5urw4cPq7S0VL1795Z0InwEAgHl5ORIOnFfSW1tbfCY9957Ty+99JI+/vhjtWvXTomJidq8eXNI3QkTJqiqqko///nP5Xa7G9Vjr1695PV6FR8fr44dO551bLNmzdS+fXtJJx4lvuuuu7gyAgBApJWXl+vQoUMqLy9XbW1t8Hs6OnXqpJYtW0qSunTpoqKiIt13333B4/x+vxYtWqRXX321Ts2uXbvqBz/4gUaPHq3Zs2fr2LFjeuyxx/Tggw8Gr8h07do15Jj169crNjZW3bp1C247/c/SqSsZp28/2fvevXslSWVlZZJOXJ3JyMiQx+NRbm6u7r33Xk2dOlXXXnut9u7dq6VLl+q+++5Tdna2tm/frnXr1iknJ0dff/21pk2bpi1btujNN98M6++Se0YAADgPkyZNUlZWlgoLC3XkyBFlZWUpKytL69evD44pKyuTz+cLOW7BggUyxmjIkCH11n3rrbfUpUsXDRw4UHfccYf69eunOXPmNHn/S5YsUVZWlu68805J0oMPPqisrCzNnj1b0okvaFu2bJkGDBigkSNH6tprr9WDDz6or776Sunp6ZKk2tpavfrqq+rRo4e+//3v67vvvtPHH398zispZ4oxxpgmnR0AAEAYuDICAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACw6v8AuaddNlKFMD4AAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"176\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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n8thAQBACxR1GFmyZIny8/NVWFioDRs2qE+fPsrLy9P+/fvPuN/u3bv14IMPatCgQefcLAAAaHmiDiMzZ87UuHHjNGbMGF155ZWaN2+e2rRpo4ULFza4T21trUaMGKEnnnhCl1566TdqGAAAtCxRhZGamhqVlpbK5/N9XSAuTj6fTyUlJQ3u9+STTyo9PV1jx45t1HGqq6sVDAYjFgAA0DJFFUYOHjyo2tpaeTyeiPUej0d+v7/efd5991298MILWrBgQaOPU1RUpJSUlPDi9XqjaRMAADhITJ+mqaqq0siRI7VgwQKlpaU1er+CggIFAoHwUlFREcMuAQCATQnRDE5LS1N8fLwqKysj1ldWViojI+O08Z9++ql2796toUOHhteFQqETB05IUFlZmS677LLT9nO73XK73dG0BgAAHCqqKyOJiYnq37+/iouLw+tCoZCKi4uVm5t72vgePXpo8+bN2rRpU3i59dZbdf3112vTpk18/QIAAKK7MiJJ+fn5Gj16tLKzszVgwADNmjVLR48e1ZgxYyRJo0aNUqdOnVRUVKTWrVurV69eEfunpqZK0mnrAQDAhSnqMDJs2DAdOHBAU6dOld/vV9++fbVy5crwTa3l5eWKi+PFrgAAoHFcxhhju4mzCQaDSklJUSAQUHJysu12AABAIzT285tLGAAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrzimMzJkzR127dlXr1q2Vk5OjdevWNTh2wYIFGjRokNq3b6/27dvL5/OdcTwAALiwRB1GlixZovz8fBUWFmrDhg3q06eP8vLytH///nrHr169WsOHD9fbb7+tkpISeb1e3XDDDdqzZ883bh4AADifyxhjotkhJydH3/72tzV79mxJUigUktfr1U9+8hNNmjTprPvX1taqffv2mj17tkaNGtWoYwaDQaWkpCgQCCg5OTmadgEAgCWN/fyO6spITU2NSktL5fP5vi4QFyefz6eSkpJG1fjiiy907NgxdejQocEx1dXVCgaDEQsAAGiZogojBw8eVG1trTweT8R6j8cjv9/fqBqPPPKIOnbsGBFoTlVUVKSUlJTw4vV6o2kTAAA4SLM+TTN9+nQtXrxYr7/+ulq3bt3guIKCAgUCgfBSUVHRjF0CAIDmlBDN4LS0NMXHx6uysjJifWVlpTIyMs6477PPPqvp06frf/7nf9S7d+8zjnW73XK73dG0BgAAHCqqKyOJiYnq37+/iouLw+tCoZCKi4uVm5vb4H4zZszQz372M61cuVLZ2dnn3i0AAGhxoroyIkn5+fkaPXq0srOzNWDAAM2aNUtHjx7VmDFjJEmjRo1Sp06dVFRUJEl6+umnNXXqVP3mN79R165dw/eWtG3bVm3btm3CqQAAACeKOowMGzZMBw4c0NSpU+X3+9W3b1+tXLkyfFNreXm54uK+vuAyd+5c1dTU6Ac/+EFEncLCQj3++OPfrHsAAOB4Ub9nxAbeMwIAgPPE5D0jAAAATY0wAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrEmw30NLU1kpr1kj79kmZmdKgQVJ8/PlbN5a1ndhzLGvTs/Nr07Pza9Nz89WOijkHs2fPNl26dDFut9sMGDDArF27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uV4I572huRvTcs97YWGh6dOnT73bWvo5P9PcjWm55/yRRx4xAwcObHB7KBQyGRkZ5plnngmvO3z4sHG73ea3v/2tMcaYrVu3Gknmgw8+CI958803jcvlMnv27DHGGPOrX/3KtG/fPvxnUXfs7t27N/WUrOJrmmZSW1urxYsX6+jRo8rNzVVpaamOHTsmn88XHtOjRw9961vfUklJiSSppKREV199tTweT3hMXl6egsGgPv744/CYk2vUjamrcT44de51Xn75ZaWlpalXr14qKCjQF198Ed7m9LlPmDBBN99882n9XQjnvaG512mp5/2TTz5Rx44ddemll2rEiBEqLy+XdGGc84bmXqclnvNly5YpOztbd911l9LT05WVlaUFCxaEt+/atUt+vz+i75SUFOXk5ESc99TUVGVnZ4fH+Hw+xcXFae3ateExgwcPVmJiYnhMXl6eysrK9Pnnn8d6ms3GET8oz8k2b96s3NxcffXVV2rbtq1ef/11XXnlldq0aZMSExOVmpoaMd7j8cjv90uS/H5/xD/Quu112840JhgM6ssvv1RSUlKMZnZ2Dc1dku655x516dJFHTt21EcffaRHHnlEZWVleu211yQ5e+6LFy/Whg0b9MEHH5y2ze/3t+jzfqa5Sy33vOfk5GjRokXq3r279u3bpyeeeEKDBg3Sli1bWvw5P9Pc27Vr12LP+c6dOzV37lzl5+fr0Ucf1QcffKB/+7d/U2JiokaPHh3uvb6+T55Xenp6xPaEhAR16NAhYswll1xyWo26be3bt4/J/JobYSTGunfvrk2bNikQCOiVV17R6NGj9c4779huq1k0NPcrr7xS9913X3jc1VdfrczMTA0ZMkSffvqpLrvsMotdfzMVFRWaOHGiVq1apdatW9tup1k1Zu4t9bzfeOON4V/37t1bOTk56tKli373u99Z/R+C5nCmuY8dO7bFnvNQKKTs7GxNmzZNkpSVlaUtW7Zo3rx5Gj16tOXunIevaWIsMTFR3bp1U//+/VVUVKQ+ffro5z//uTIyMlRTU6PDhw9HjK+srFRGRoYkKSMj47Q77ut+f7YxycnJ1v8j2NDc65OTkyNJ2rFjhyTnzr20tFT79+9Xv379lJCQoISEBL3zzjv6xS9+oYSEBHk8nhZ73s8299ra2tP2aSnn/VSpqam64oortGPHjgvi3/rJTp57fVrKOc/MzAxf6a3Ts2fP8FdUdb3X1/fJ89q/f3/E9uPHj+vQoUNR/d1oCQgjzSwUCqm6ulr9+/dXq1atVFxcHN5WVlam8vLy8H0Vubm52rx5c8Rf1lWrVik5OTn8jyA3NzeiRt2Yk+/NOF/Uzb0+mzZtknTiH7jk3LkPGTJEmzdv1qZNm8JLdna2RowYEf51Sz3vZ5t7fHz8afu0lPN+qiNHjujTTz9VZmbmBfdv/eS516elnPNrr71WZWVlEeu2b9+uLl26SJIuueQSZWRkRPQdDAa1du3aiPN++PBhlZaWhse89dZbCoVC4dCWm5urv/zlLzp27Fh4zKpVq9S9e/cW8xWNJB7tjaVJkyaZd955x+zatct89NFHZtKkScblcpk///nPxpgTj/t961vfMm+99ZZZv369yc3NNbm5ueH96x55u+GGG8ymTZvMypUrzcUXX1zvI28PPfSQ2bZtm5kzZ471R96MOfPcd+zYYZ588kmzfv16s2vXLvPGG2+YSy+91AwePDi8v5PnfqpTnyZoyef9VCfPvSWf95/+9Kdm9erVZteuXea9994zPp/PpKWlmf379xtjWvY5P9PcW/I5X7dunUlISDBPPfWU+eSTT8zLL79s2rRpY/77v/87PGb69OkmNTXVvPHGG+ajjz4yt912W72P9mZlZZm1a9ead99911x++eURj/YePnzYeDweM3LkSLNlyxazePFi06ZNGx7tReP90z/9k+nSpYtJTEw0F198sRkyZEg4iBhjzJdffmn+9V//1bRv3960adPG3HHHHWbfvn0RNXbv3m1uvPFGk5SUZNLS0sxPf/pTc+zYsYgxb7/9tunbt69JTEw0l156qXnxxRebY3pndKa5l5eXm8GDB5sOHToYt9ttunXrZh566KGIdw8Y49y5n+rUMNKSz/upTp57Sz7vw4YNM5mZmSYxMdF06tTJDBs2LOJ9Ey35nJ9p7i35nBtjzB/+8AfTq1cv43a7TY8ePcz8+fMjtodCITNlyhTj8XiM2+02Q4YMMWVlZRFj/v73v5vhw4ebtm3bmuTkZDNmzBhTVVUVMebDDz80AwcONG6323Tq1MlMnz495nNrbi5jjLF9dQYAAFy4uGcEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAzsFTTz2la665Rm3atDntpzI3xOVy1bs888wz4TGHDh3SiBEjlJycrNTUVI0dO1ZHjhypt96OHTvUrl27Mx5/8eLFcrlcuv322yPWv/baa7rhhht00UUXyeVyhV/VH605c+aoZ8+eSkpKUvfu3fVf//VfUdcgjAAA0IDrrrtOixYtqndbTU2N7rrrLt1///2Nrrdv376IZeHChXK5XLrzzjvDY0aMGKGPP/5Yq1at0h//+Ef95S9/ifjpx3WOHTum4cOHa9CgQQ0eb/fu3XrwwQfrHXP06FENHDhQTz/9dKP7P9XcuXNVUFCgxx9/XB9//LGeeOIJTZgwQX/4wx+iK2T7FbAAAJyvvvvd75711fMvvviiSUlJOaf6t912m/mHf/iH8O+3bt1qJJkPPvggvO7NN980LpfL7NmzJ2Lfhx9+2PzoRz9q8PjHjx8311xzjXn++efN6NGjzW233VZvD7t27TKSzMaNG0/b9vnnn5uxY8eatLQ0065dO3P99debTZs2hbfn5uaaBx98MGKf/Px8c+211zZi9l/jyggAABZUVlZq+fLlGjt2bHhdSUmJUlNTlZ2dHV7n8/kUFxentWvXhte99dZbWrp0qebMmdNg/SeffFLp6ekR9aN11113af/+/XrzzTdVWlqqfv36aciQITp06JAkqbq6Wq1bt47YJykpSevWrYv4ScNnQxgBAMCCl156Se3atdM//uM/htf5/X6lp6dHjEtISFCHDh3k9/slSX//+9917733atGiRUpOTq639rvvvqsXXnhBCxYsOOf+3n33Xa1bt05Lly5Vdna2Lr/8cj377LNKTU3VK6+8IknKy8vT888/r9LSUhljtH79ej3//PM6duyYDh482OhjEUYAAPh/06ZNU9u2bcPLmjVrNH78+Ih15eXlTXKshQsXasSIEaddWTibcePG6Z577tHgwYPr3V5VVaWRI0dqwYIFSktLO+f+PvzwQx05ckQXXXRRxPx37dqlTz/9VJI0ZcoU3XjjjfrOd76jVq1a6bbbbtPo0aMlSXFxjY8YCefcJQAALcz48eP1wx/+MPz7ESNG6M4774y4etGxY8dvfJw1a9aorKxMS5YsiVifkZGh/fv3R6w7fvy4Dh06pIyMDEknvqJZtmyZnn32WUmSMUahUEgJCQmaP3+++vXrp927d2vo0KHhGqFQSNKJqyxlZWW67LLLztrjkSNHlJmZqdWrV5+2re7pnaSkJC1cuFC//vWvVVlZqczMTM2fP1/t2rXTxRdf3Og/D8IIAAD/r0OHDurQoUP490lJSUpPT1e3bt2a9DgvvPCC+vfvrz59+kSsz83N1eHDh1VaWqr+/ftLOhE+QqGQcnJyJJ24r6S2tja8zxtvvKGnn35a77//vjp16qSkpCRt3rw5ou7kyZNVVVWln//85/J6vY3qsV+/fvL7/UpISFDXrl3POLZVq1bq3LmzpBOPEt9yyy1cGQEAINbKy8t16NAhlZeXq7a2Nvyejm7duqlt27aSpB49eqioqEh33HFHeL9gMKilS5fqueeeO61mz5499f3vf1/jxo3TvHnzdOzYMf34xz/W3XffHb4i07Nnz4h91q9fr7i4OPXq1Su87uRfS19fyTh5fV3ve/fulSSVlZVJOnF1JiMjQz6fT7m5ubr99ts1Y8YMXXHFFdq7d6+WL1+uO+64Q9nZ2dq+fbvWrVunnJwcff7555o5c6a2bNmil156Kao/S+4ZAQDgHEydOlVZWVkqLCzUkSNHlJWVpaysLK1fvz48pqysTIFAIGK/xYsXyxij4cOH11v35ZdfVo8ePTRkyBDddNNNGjhwoObPn9/k/S9btkxZWVm6+eabJUl33323srKyNG/ePEknXtC2YsUKDR48WGPGjNEVV1yhu+++W5999pk8Ho8kqba2Vs8995z69Omj733ve/rqq6/0/vvvn/VKyqlcxhjTpLMDAACIAldGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVv0flm5em/bg92UAAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"177\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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hg8fHnDuT5w4EVCnoeZOePmOWrdubV566SVz8uRJ06xZM7Nq1Sr/tt27dxtJJj8/3xhjzNq1a01ERITxeDz+MYsWLTKxsbGmrKzMGGPMo48+am644YaAY4waNcpkZmY2wGyCUzV3Y87/h3bhm9rFwmHupaWlplu3bmb9+vUB8w33c1/TvI0J7/Oek5Nj+vbtW+22cD7nl5u3MeF9zh977DEzaNCgGrdXVlaapKQk89xzz/nXnTx50jidTvP73//eGGPMrl27jCTz8ccf+8e88847xuFwmEOHDhljjPnNb35jWrdu7f/7qDp29+7d63tKtXaluRtzPryMHDmyxu0NOXc+NqqjiooKrVixQqdPn1Z6eroKCgp09uxZZWRk+Mf06NFD3/ve95Sfny9Jys/PV+/eveVyufxjMjMz5fP59Nlnn/nHXFijakxVjavBxXOv8tprrykhIUG9evVSdna2vv76a/+2cJj71KlTdfvtt1/SY7if+5rmXSWcz/vnn3+udu3aqXPnzhozZoyKiookhf85r2neVcL1nK9evVqpqam69957lZiYqJSUFC1dutS//cCBA/J4PAG9x8XFKS0tLeC8x8fHKzU11T8mIyNDERER2rRpk3/MkCFDFB0d7R+TmZmpwsJCffXVV6GeZrWuNPcqGzZsUGJiorp3764HH3xQX375pX9bQ87dil/MeDXZsWOH0tPTdebMGbVs2VJvvfWWrr/+em3fvl3R0dGKj48PGO9yueTxeCRJHo8n4B901faqbZcb4/P59M033ygmJiZEM7uymuYuSffff786duyodu3a6dNPP9Vjjz2mwsJCvfnmm5Lsn/uKFSu0detWffzxx5ds83g8YXvuLzdvKbzPe1pampYvX67u3bvryJEjeuqppzR48GDt3LkzrM/55ebdqlWrsD7n+/fv16JFi5SVlaXHH39cH3/8sf7lX/5F0dHRGj9+vL//6nq/cG6JiYkB26OiotSmTZuAMddee+0lNaq2tW7dOiTzu5wrzV2Shg8frh//+Me69tprtW/fPj3++OO69dZblZ+fr8jIyAadO+ElSN27d9f27dvl9Xr1+uuva/z48Xr//fcbu60GUdPcr7/+ej3wwAP+cb1791ZycrKGDh2qffv2qUuXLo3Y9XdXXFysadOmaf369WrevHljt9NgajPvcD7vt956q//Pffr0UVpamjp27Kg//OEPjRqkQ+1y8540aVJYn/PKykqlpqZq9uzZkqSUlBTt3LlTixcv9r+Bh6vazP2+++7zj+/du7f69OmjLl26aMOGDRo6dGiD9svHRkGKjo5W165dNWDAAOXm5qpv37568cUXlZSUpPLycp08eTJgfElJiZKSkiRJSUlJlzyNUPXzlcbExsY2+n+YNc29OmlpaZKkvXv3SrJ77gUFBTp69Kj69++vqKgoRUVF6f3339evfvUrRUVFyeVyheW5v9K8KyoqLtknnM77xeLj43Xddddp7969TeLfe5UL512dcDrnycnJ/qvJVXr27On/2Kyq/+p6v3BuR48eDdh+7tw5nThxIqjXRkO70tyr07lzZyUkJASc+4aaO+HlO6qsrFRZWZkGDBigZs2aKS8vz7+tsLBQRUVF/vtC0tPTtWPHjoCTu379esXGxvpfNOnp6QE1qsZceG/J1aJq7tXZvn27pPP/ICS75z506FDt2LFD27dv9y+pqakaM2aM/8/heO6vNO/IyMhL9gmn836xU6dOad++fUpOTm5S/94vnHd1wumc33TTTSosLAxYt2fPHnXs2FGSdO211yopKSmgd5/Pp02bNgWc95MnT6qgoMA/5t1331VlZaU/6KWnp+svf/mLzp496x+zfv16de/evVE+MpKuPPfq/O1vf9OXX34ZcO4bbO5B3d7bxE2fPt28//775sCBA+bTTz8106dPNw6Hw/zP//yPMeb8o5Pf+973zLvvvmu2bNli0tPTTXp6un//qkcIhw0bZrZv327WrVtn2rZtW+0jhI888ojZvXu3Wbhw4VXxCOHl5r53717z9NNPmy1btpgDBw6Yt99+23Tu3NkMGTLEv7/Nc6/OxU9chPO5v9CF8w738/6LX/zCbNiwwRw4cMB8+OGHJiMjwyQkJJijR48aY8L3nF9u3uF+zjdv3myioqLMM888Yz7//HPz2muvmRYtWpj//M//9I+ZM2eOiY+PN2+//bb59NNPzciRI6t9VDolJcVs2rTJfPDBB6Zbt24BjwufPHnSuFwuM3bsWLNz506zYsUK06JFi0Z9VPpKcy8tLTUPP/ywyc/PNwcOHDB//vOfTf/+/U23bt3MmTNn/HUaau6ElyD8wz/8g+nYsaOJjo42bdu2NUOHDvUHF2OM+eabb8w///M/m9atW5sWLVqYu+++2xw5ciSgxsGDB82tt95qYmJiTEJCgvnFL35hzp49GzDmvffeM/369TPR0dGmc+fO5pVXXmmI6V3W5eZeVFRkhgwZYtq0aWOcTqfp2rWreeSRRwK++8EYe+denYvDSzif+wtdOO9wP++jRo0yycnJJjo62rRv396MGjUq4DsvwvWcX27e4X7OjTHmj3/8o+nVq5dxOp2mR48eZsmSJQHbKysrzcyZM43L5TJOp9MMHTrUFBYWBoz58ssvzejRo03Lli1NbGysmThxoiktLQ0Y88knn5hBgwYZp9Np2rdvb+bMmRPyuV3J5eb+9ddfm2HDhpm2bduaZs2amY4dO5rJkycHPBJvTMPN3WGMMbW/TgMAANC4uOcFAABYhfACAACsQngBAABWIbwAAACrEF4AAIBVCC8AAMAqhBcAAGAVwgsAAHXwzDPP6MYbb1SLFi0u+Q3jNXE4HNUuzz33nH/MiRMnNGbMGMXGxio+Pl6TJk3SqVOnqq23d+9etWrV6rLHX7FihRwOh+66666A9W+++aaGDRuma665Rg6Hw/+rHoK1cOFC9ezZUzExMerevbv+4z/+o051gkF4AQCgBjfffLOWL19e7bby8nLde++9evDBB2td78iRIwHLsmXL5HA4dM899/jHjBkzRp999pnWr1+v//7v/9Zf/vKXgN/mXeXs2bMaPXq0Bg8eXOPxDh48qIcffrjaMadPn9agQYP07LPP1rr/iy1atEjZ2dl68skn9dlnn+mpp57S1KlT9cc//rHONWulLl8hDABAU/DDH/7wir+64JVXXjFxcXF1qj9y5Ejzd3/3d/6fd+3aZSSZjz/+2L/unXfeMQ6Hwxw6dChg30cffdT89Kc/rfH4586dMzfeeKN56aWXzPjx483IkSOr7eHAgQNGktm2bdsl27766iszadIkk5CQYFq1amVuueUWs337dv/29PR08/DDDwfsk5WVZW666aZazL7uuPICAEAjKCkp0Zo1azRp0iT/uvz8fMXHxys1NdW/LiMjQxEREdq0aZN/3bvvvqtVq1Zp4cKFNdZ/+umnlZiYGFA/WPfee6+OHj2qd955RwUFBerfv7+GDh2qEydOSJLKysrUvHnzgH1iYmK0efPmgN8cXd8ILwAANIJXX31VrVq10o9//GP/Oo/Ho8TExIBxUVFRatOmjTwejyTpyy+/1IQJE7R8+XLFxsZWW/uDDz7Qyy+/rKVLl9a5vw8++ECbN2/WqlWrlJqaqm7duun5559XfHy8Xn/9dUlSZmamXnrpJRUUFMgYoy1btuill17S2bNndfz48Tof+0oILwAA/L/Zs2erZcuW/mXjxo2aMmVKwLqioqJ6OdayZcs0ZsyYS65cXMnkyZN1//33a8iQIdVuLy0t1dixY7V06VIlJCTUub9PPvlEp06d0jXXXBMw/wMHDmjfvn2SpJkzZ+rWW2/VD37wAzVr1kwjR47U+PHjJUkREaGLGFEhqwwAgGWmTJmin/zkJ/6fx4wZo3vuuSfg6ki7du2+83E2btyowsJCrVy5MmB9UlKSjh49GrDu3LlzOnHihJKSkiSd/8ho9erVev755yVJxhhVVlYqKipKS5YsUf/+/XXw4EGNGDHCX6OyslLS+as4hYWF6tKlyxV7PHXqlJKTk7Vhw4ZLtlU93RQTE6Nly5bpt7/9rUpKSpScnKwlS5aoVatWatu2ba3/PoJFeAEA4P+1adNGbdq08f8cExOjxMREde3atV6P8/LLL2vAgAHq27dvwPr09HSdPHlSBQUFGjBggKTzYaWyslJpaWmSzt8XU1FR4d/n7bff1rPPPquPPvpI7du3V0xMjHbs2BFQd8aMGSotLdWLL74ot9tdqx779+8vj8ejqKgoderU6bJjmzVrpg4dOkg6/2j2HXfcwZUXAACuNkVFRTpx4oSKiopUUVHh/56Url27qmXLlpKkHj16KDc3V3fffbd/P5/Pp1WrVumFF164pGbPnj01fPhwTZ48WYsXL9bZs2f1s5/9TPfdd5//ik/Pnj0D9tmyZYsiIiLUq1cv/7oL/yx9e6XkwvVVvR8+fFiSVFhYKOn81Z+kpCRlZGQoPT1dd911l+bOnavrrrtOhw8f1po1a3T33XcrNTVVe/bs0ebNm5WWlqavvvpK8+bN086dO/Xqq6/W5a+01rjnBQCAOpg1a5ZSUlKUk5OjU6dOKSUlRSkpKdqyZYt/TGFhobxeb8B+K1askDFGo0ePrrbua6+9ph49emjo0KG67bbbNGjQIC1ZsqTe+1+9erVSUlJ0++23S5Luu+8+paSkaPHixZLOf6He2rVrNWTIEE2cOFHXXXed7rvvPn3xxRdyuVySpIqKCr3wwgvq27evfvSjH+nMmTP66KOPrnil5rtyGGNMSI8AAABQj7jyAgAArEJ4AQAAViG8AAAAqxBeAACAVQgvAADAKoQXAABgFcILAACwCuEFAABYhfACAACsQngBAABWIbwAAACrEF4AAIBV/g86eGfYjdYC6gAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"178\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGvCAYAAACJsNWPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAoEklEQVR4nO3df3hU1Z3H8c8kIUN4IAkYMwkwJSoKKAIhKWkUqC6pqT/wx7o2YgrIsri4tMua+oMoELWVICpLWygUFHGftYXij5UuSJeNYlGzRAIoCA0iYLLABCgyE1ACZM7+wTIykEAGMznM5P16nvs85txzz/0eDjif5869Nw5jjBEAAIAlMbYLAAAAbRthBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVcbYLaA6/3689e/aoU6dOcjgctssBAADNYIxRXV2dunbtqpiYpq9/REQY2bNnj9xut+0yAADABaipqVH37t2b3B8RYaRTp06STk4mMTHRcjUAAKA5fD6f3G534HO8KRERRk59NZOYmEgYAQAgwpzvFgtuYAUAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYFREvPQuLhgZpzRpp714pPV0aMkSKjW0bY1IrtVIrtUbauNQavnEvBiZE7733nrnttttMenq6kWTefPPN8x7z7rvvmszMTBMfH2+uuOIK8/LLL4d0Tq/XayQZr9cbarmNe/11Y7p3N0b6Zuve/WR7tI9JrdRKrdQaaeNSa/jGDbPmfn6HHEZWrFhhnnjiCfPGG280K4zs2LHDdOjQwRQVFZktW7aYX//61yY2NtasXLmy2eds0TDy+uvGOBzBCyqdbHM4LmxhI2VMaqVWaqXWSBuXWsM3bisIWxgJOrgZYeTRRx8111xzTVBbQUGByc/Pb/Z5WiyMnDhxdrI8c2Hd7pP9om1MaqVWaqXWSBuXWsM3bitp7ud32G9gLS8vV15eXlBbfn6+ysvLmzymvr5ePp8vaGsRa9ZI//u/Te83RqqpOdkv2sYM17jUSq3USq3hGpdawzfuRSbsYcTj8cjlcgW1uVwu+Xw+ff31140eU1paqqSkpMDmdrtbppi9e1u2XySNGa5xqZVaqZVawzUutYZv3IvMRflob3Fxsbxeb2CrqalpmYHT01u2XySNGa5xqZVaqZVawzUutYZv3IvNt/kuSDr/PSNDhgwxEydODGpbuHChSUxMbPZ5WvyekcZuBPq23xNe7GNSK7VSK7VG2rjUGr5xW8lFdQNr3759g9pGjBhh5wZWY765K/nMhW2JO6gv9jGplVqplVojbVxqDd+4rSBsYaSurs5s2LDBbNiwwUgyM2fONBs2bDBffPGFMcaYSZMmmZEjRwb6n3q095FHHjFbt241c+bMsftorzGNP6/tdrf8s+UX45jUSq3USq2RNi61hm/cMGvu57fDGGNC+Vpn9erVuvHGG89qHz16tBYtWqT7779fu3bt0urVq4OOeeihh7RlyxZ1795dU6ZM0f3339/sc/p8PiUlJcnr9SoxMTGUcpsWKW/di6Q3+VErtVIrtYZrXGqNyDewNvfzO+QwYkNYwggAAAir5n5+X5RP0wAAgLaDMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACw6oLCyJw5c5SRkaH27dsrJydHFRUV5+w/a9Ys9erVSwkJCXK73XrooYd09OjRCyoYAABEl5DDyJIlS1RUVKSSkhKtX79e/fv3V35+vvbt29do/9/97neaNGmSSkpKtHXrVr300ktasmSJHn/88W9dPAAAiHwhh5GZM2dq3LhxGjNmjK6++mrNmzdPHTp00MKFCxvt/+GHH+r666/Xfffdp4yMDN10000aMWLEea+mAACAtiGkMHLs2DFVVlYqLy/vmwFiYpSXl6fy8vJGj7nuuutUWVkZCB87duzQihUrdMsttzR5nvr6evl8vqANAABEp7hQOh84cEAN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8x7f0NCgzp07a/bs2Ro1alSzzunz+ZSUlCSv16vExMRQygUAAJY09/M7pCsjx44dU2VlpfLy8r4ZICZGeXl5Ki8vb9YYX331lY4fP64uXbo02ae+vl4+ny9oAwAA0SmkMHLgwAE1NDTI5XIFtbtcLnk8nmaN8dhjj6lr165BgeZMpaWlSkpKCmxutzuUMgEAQARp1adppk+frsWLF+vNN99U+/btm+xXXFwsr9cb2GpqalqxSgAA0JriQumckpKi2NhY1dbWBrXX1tYqLS3tnMc+//zzmj59uv77v/9b/fr1O2dfp9Mpp9MZSmkAACBChXRlJD4+XllZWSorKwu0+f1+lZWVKTc3t8njZsyYoZ///OdauXKlsrOzL7xaAAAQdUK6MiJJRUVFGj16tLKzszVo0CDNmjVLR44c0ZgxYyRJo0aNUrdu3VRaWipJevbZZzV16lT97ne/U0ZGRuDeko4dO6pjx44tOBUAABCJQg4jBQUF2r9/v6ZOnSqPx6MBAwZo5cqVgZtaq6urFRPzzQWXuXPn6tixY/q7v/u7oHFKSkr05JNPfrvqAQBAxAv5PSM28J4RAAAiT1jeMwIAANDSCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsCrOdgHRpKFBWrNG2rtXSk+XhgyRYmMvvjGplVqplVojbVxqjaxaQ2YuwOzZs02PHj2M0+k0gwYNMmvXrj1n/z/84Q+mV69exul0mr59+5rly5eHdD6v12skGa/XeyHltorXXzeme3djpG+27t1Ptl9MY1IrtVIrtUbauNQaWbWerrmf3yGHkcWLF5v4+HizcOFC8+mnn5px48aZ5ORkU1tb22j/Dz74wMTGxpoZM2aYLVu2mMmTJ5t27dqZTZs2NfucF3sYef11YxyO4AWVTrY5HBe2sOEYk1qplVqpNdLGpdbIqvVMYQsjgwYNMhMmTAj83NDQYLp27WpKS0sb7f+jH/3I3HrrrUFtOTk55h//8R+bfc6LOYycOHF2sjxzYd3uk/1sjkmt1Eqt1Bpp41JrZNXamLCEkfr6ehMbG2vefPPNoPZRo0aZ22+/vdFj3G63+dd//degtqlTp5p+/fo1eZ6jR48ar9cb2Gpqai7aMPLuu00v6Onbu+/aHZNaqZVaqTXSxqXWyKq1Mc0NIyE9TXPgwAE1NDTI5XIFtbtcLnk8nkaP8Xg8IfWXpNLSUiUlJQU2t9sdSpmtau/elu0XrjHDNS61Uiu1Umu4xqXWyKr127goH+0tLi6W1+sNbDU1NbZLalJ6esv2C9eY4RqXWqmVWqk1XONSa2TV+q2Ecrmltb6mOVMk3DPS2I1A0rf7Pq8lx6RWaqVWao20cak1smptTFhvYP3JT34S+LmhocF069btnDew3nbbbUFtubm5UXMDqzHf3JV85sK2xJ3OLTkmtVIrtVJrpI1LrZFV65nC+miv0+k0ixYtMlu2bDEPPPCASU5ONh6PxxhjzMiRI82kSZMC/T/44AMTFxdnnn/+ebN161ZTUlISdY/2GtP489pud8s/A/5tx6RWaqVWao20cak1smo9XXM/vx3GGBPqVzuzZ8/Wc889J4/HowEDBuhXv/qVcnJyJEk33HCDMjIytGjRokD/pUuXavLkydq1a5euvPJKzZgxQ7fcckuzz+fz+ZSUlCSv16vExMRQy201kfR2PGqlVmql1kgal1ojq9ZTmvv5fUFhpLVFShgBAADfaO7n90X5NA0AAGg7CCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAq+JsF9Acp14S6/P5LFcCAACa69Tn9vle9h4RYaSurk6S5Ha7LVcCAABCVVdXp6SkpCb3R8TvpvH7/dqzZ486deokh8Nhu5yw8vl8crvdqqmpaXO/h6ctz11q2/Nn7m1z7lLbnn9bmLsxRnV1deratatiYpq+MyQirozExMSoe/futstoVYmJiVH7l/N82vLcpbY9f+beNucute35R/vcz3VF5BRuYAUAAFYRRgAAgFWEkYuM0+lUSUmJnE6n7VJaXVueu9S258/c2+bcpbY9/7Y89zNFxA2sAAAgenFlBAAAWEUYAQAAVhFGAACAVYQRAABgFWEkDObOnat+/foFXmSTm5urt99+O7D/6NGjmjBhgi655BJ17NhRd999t2pra4PGqK6u1q233qoOHTooNTVVjzzyiE6cOBHUZ/Xq1Ro4cKCcTqd69uypRYsWtcb0zul8c7/hhhvkcDiCtvHjxweNEalzP9P06dPlcDj0L//yL4G2aF770zU292he+yeffPKsufXu3TuwP5rX/Xxzj+Z1l6Tdu3frxz/+sS655BIlJCTo2muv1bp16wL7jTGaOnWq0tPTlZCQoLy8PH322WdBYxw8eFCFhYVKTExUcnKyxo4dq8OHDwf1+eSTTzRkyBC1b99ebrdbM2bMaJX5tRqDFrds2TKzfPlys23bNlNVVWUef/xx065dO7N582ZjjDHjx483brfblJWVmXXr1pnvfe975rrrrgscf+LECdO3b1+Tl5dnNmzYYFasWGFSUlJMcXFxoM+OHTtMhw4dTFFRkdmyZYv59a9/bWJjY83KlStbfb6nO9/cv//975tx48aZvXv3Bjav1xs4PpLnfrqKigqTkZFh+vXrZyZOnBhoj+a1P6WpuUfz2peUlJhrrrkmaG779+8P7I/mdT/f3KN53Q8ePGh69Ohh7r//frN27VqzY8cO86c//cls37490Gf69OkmKSnJ/Md//If5+OOPze23324uu+wy8/XXXwf6/PCHPzT9+/c3//M//2PWrFljevbsaUaMGBHY7/V6jcvlMoWFhWbz5s3m97//vUlISDC//e1vW3W+4UQYaSWdO3c2L774ojl06JBp166dWbp0aWDf1q1bjSRTXl5ujDFmxYoVJiYmxng8nkCfuXPnmsTERFNfX2+MMebRRx8111xzTdA5CgoKTH5+fivMJjSn5m7Myf8xnf4BdaZomHtdXZ258sorzapVq4Lm2xbWvqm5GxPda19SUmL69+/f6L5oX/dzzd2Y6F73xx57zAwePLjJ/X6/36SlpZnnnnsu0Hbo0CHjdDrN73//e2OMMVu2bDGSzEcffRTo8/bbbxuHw2F2795tjDHmN7/5jencuXPgz+PUuXv16tXSU7KGr2nCrKGhQYsXL9aRI0eUm5uryspKHT9+XHl5eYE+vXv31ne+8x2Vl5dLksrLy3XttdfK5XIF+uTn58vn8+nTTz8N9Dl9jFN9To1xMThz7qe8+uqrSklJUd++fVVcXKyvvvoqsC8a5j5hwgTdeuutZ9XYFta+qbmfEs1r/9lnn6lr1666/PLLVVhYqOrqakltY92bmvsp0bruy5YtU3Z2tu655x6lpqYqMzNTCxYsCOzfuXOnPB5PUO1JSUnKyckJWvvk5GRlZ2cH+uTl5SkmJkZr164N9Bk6dKji4+MDffLz81VVVaUvv/wy3NNsFRHxi/Ii0aZNm5Sbm6ujR4+qY8eOevPNN3X11Vdr48aNio+PV3JyclB/l8slj8cjSfJ4PEH/ME/tP7XvXH18Pp++/vprJSQkhGlm59fU3CXpvvvuU48ePdS1a1d98skneuyxx1RVVaU33nhDUuTPffHixVq/fr0++uijs/Z5PJ6oXvtzzV2K7rXPycnRokWL1KtXL+3du1dPPfWUhgwZos2bN0f9up9r7p06dYrqdd+xY4fmzp2roqIiPf744/roo4/0z//8z4qPj9fo0aMD9TdW++lzS01NDdofFxenLl26BPW57LLLzhrj1L7OnTuHZX6tiTASJr169dLGjRvl9Xr12muvafTo0Xrvvfdsl9Uqmpr71VdfrQceeCDQ79prr1V6erqGDRumzz//XFdccYXFqr+9mpoaTZw4UatWrVL79u1tl9OqmjP3aF77m2++OfDf/fr1U05Ojnr06KE//OEPVsNxazjX3MeOHRvV6+73+5Wdna1p06ZJkjIzM7V582bNmzdPo0ePtlxdZOFrmjCJj49Xz549lZWVpdLSUvXv31+//OUvlZaWpmPHjunQoUNB/Wtra5WWliZJSktLO+tO+1M/n69PYmKi9f/5NTX3xuTk5EiStm/fLimy515ZWal9+/Zp4MCBiouLU1xcnN577z396le/UlxcnFwuV9Su/fnm3tDQcNYx0bT2Z0pOTtZVV12l7du3t4l/86c7fe6NiaZ1T09PD1z1PaVPnz6Br6lO1d9Y7afPbd++fUH7T5w4oYMHD4b09yPSEUZaid/vV319vbKystSuXTuVlZUF9lVVVam6ujpwX0Vubq42bdoU9Bd01apVSkxMDPzFz83NDRrjVJ/T7824WJyae2M2btwo6eQ/aimy5z5s2DBt2rRJGzduDGzZ2dkqLCwM/He0rv355h4bG3vWMdG09mc6fPiwPv/8c6Wnp7e5f/Onz70x0bTu119/vaqqqoLatm3bph49ekiSLrvsMqWlpQXV7vP5tHbt2qC1P3TokCorKwN93nnnHfn9/kBwy83N1Z///GcdP3480GfVqlXq1atXVHxFI4lHe8Nh0qRJ5r333jM7d+40n3zyiZk0aZJxOBzmv/7rv4wxJx/z+853vmPeeecds27dOpObm2tyc3MDx5961O2mm24yGzduNCtXrjSXXnppo4+6PfLII2br1q1mzpw5F8Wjbuea+/bt283TTz9t1q1bZ3bu3Gneeustc/nll5uhQ4cGjo/kuTfmzCcJonntz3T63KN97X/2s5+Z1atXm507d5oPPvjA5OXlmZSUFLNv3z5jTHSv+7nmHu3rXlFRYeLi4swzzzxjPvvsM/Pqq6+aDh06mH//938P9Jk+fbpJTk42b731lvnkk0/MHXfc0eijvZmZmWbt2rXm/fffN1deeWXQo72HDh0yLpfLjBw50mzevNksXrzYdOjQgUd7cW5///d/b3r06GHi4+PNpZdeaoYNGxYIIsYY8/XXX5t/+qd/Mp07dzYdOnQwd911l9m7d2/QGLt27TI333yzSUhIMCkpKeZnP/uZOX78eFCfd9991wwYMMDEx8ebyy+/3Lz88sutMb1zOtfcq6urzdChQ02XLl2M0+k0PXv2NI888kjQOweMidy5N+bMMBLNa3+m0+ce7WtfUFBg0tPTTXx8vOnWrZspKCgIetdENK/7ueYe7etujDF//OMfTd++fY3T6TS9e/c28+fPD9rv9/vNlClTjMvlMk6n0wwbNsxUVVUF9fnrX/9qRowYYTp27GgSExPNmDFjTF1dXVCfjz/+2AwePNg4nU7TrVs3M3369LDPrTU5jDHG9tUZAADQdnHPCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAFyAZ555Rtddd506dOhw1m9lborD4Wh0e+655wJ9Dh48qMLCQiUmJio5OVljx47V4cOHGx1v+/bt6tSp0znPv3jxYjkcDt15551B7W+88YZuuukmXXLJJXI4HIFX9Ydqzpw56tOnjxISEtSrVy/927/9W8hjEEYAAGjCDTfcoEWLFjW679ixY7rnnnv04IMPNnu8vXv3Bm0LFy6Uw+HQ3XffHehTWFioTz/9VKtWrdJ//ud/6s9//nPQbz8+5fjx4xoxYoSGDBnS5Pl27dqlhx9+uNE+R44c0eDBg/Xss882u/4zzZ07V8XFxXryySf16aef6qmnntKECRP0xz/+MbSBbL8CFgCAi9X3v//98756/uWXXzZJSUkXNP4dd9xh/uZv/ibw85YtW4wk89FHHwXa3n77beNwOMzu3buDjn300UfNj3/84ybPf+LECXPdddeZF1980YwePdrccccdjdawc+dOI8ls2LDhrH1ffvmlGTt2rElJSTGdOnUyN954o9m4cWNgf25urnn44YeDjikqKjLXX399M2b/Da6MAABgQW1trZYvX66xY8cG2srLy5WcnKzs7OxAW15enmJiYrR27dpA2zvvvKOlS5dqzpw5TY7/9NNPKzU1NWj8UN1zzz3at2+f3n77bVVWVmrgwIEaNmyYDh48KEmqr69X+/btg45JSEhQRUVF0G8ZPh/CCAAAFrzyyivq1KmT/vZv/zbQ5vF4lJqaGtQvLi5OXbp0kcfjkST99a9/1f33369FixYpMTGx0bHff/99vfTSS1qwYMEF1/f++++roqJCS5cuVXZ2tq688ko9//zzSk5O1muvvSZJys/P14svvqjKykoZY7Ru3Tq9+OKLOn78uA4cONDscxFGAAD4f9OmTVPHjh0D25o1azR+/Pigturq6hY518KFC1VYWHjWlYXzGTdunO677z4NHTq00f11dXUaOXKkFixYoJSUlAuu7+OPP9bhw4d1ySWXBM1/586d+vzzzyVJU6ZM0c0336zvfe97ateune644w6NHj1akhQT0/yIEXfBVQIAEGXGjx+vH/3oR4GfCwsLdffddwddvejateu3Ps+aNWtUVVWlJUuWBLWnpaVp3759QW0nTpzQwYMHlZaWJunkVzTLli3T888/L0kyxsjv9ysuLk7z58/XwIEDtWvXLg0fPjwwht/vl3TyKktVVZWuuOKK89Z4+PBhpaena/Xq1WftO/X0TkJCghYuXKjf/va3qq2tVXp6uubPn69OnTrp0ksvbfafB2EEAID/16VLF3Xp0iXwc0JCglJTU9WzZ88WPc9LL72krKws9e/fP6g9NzdXhw4dUmVlpbKysiSdDB9+v185OTmSTt5X0tDQEDjmrbfe0rPPPqsPP/xQ3bp1U0JCgjZt2hQ07uTJk1VXV6df/vKXcrvdzapx4MCB8ng8iouLU0ZGxjn7tmvXTt27d5d08lHi2267jSsjAACEW3V1tQ4ePKjq6mo1NDQE3tPRs2dPdezYUZLUu3dvlZaW6q677goc5/P5tHTpUr3wwgtnjdmnTx/98Ic/1Lhx4zRv3jwdP35cP/nJT3TvvfcGrsj06dMn6Jh169YpJiZGffv2DbSd/t/SN1cyTm8/VfuePXskSVVVVZJOXp1JS0tTXl6ecnNzdeedd2rGjBm66qqrtGfPHi1fvlx33XWXsrOztW3bNlVUVCgnJ0dffvmlZs6cqc2bN+uVV14J6c+Se0YAALgAU6dOVWZmpkpKSnT48GFlZmYqMzNT69atC/SpqqqS1+sNOm7x4sUyxmjEiBGNjvvqq6+qd+/eGjZsmG655RYNHjxY8+fPb/H6ly1bpszMTN16662SpHvvvVeZmZmaN2+epJMvaFuxYoWGDh2qMWPG6KqrrtK9996rL774Qi6XS5LU0NCgF154Qf3799cPfvADHT16VB9++OF5r6ScyWGMMS06OwAAgBBwZQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGDV/wET7+5pqjyxFgAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"201\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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f+befuZ+tisijbiBFQAAWEUYAQAAVhFGLHM6nSotLZXT6bTdihXtef7MvX3OXWrf82fu7XPu5xIWN7ACAIDIxZURAABgFWEEAABYRRgBAABWEUYAAIBVhJFWMGfOHPXr1y/wIpvc3Fy9/fbbge1Hjx7V+PHjdckll6hjx466++67VVtbG1Sjurpat956qxISEpSamqpHHnlEJ06cCBqzatUqDRw4UE6nUz179tTChQsvxPTO6lxzv+GGG+RwOIKWcePGBdUI17mfbtq0aXI4HPqXf/mXwLpIPvenamrukXzun3zyyTPm1rt378D2SD7v55p7JJ/3Rrt379aPf/xjXXLJJYqPj9e1116rdevWBbYbYzRlyhSlp6crPj5eeXl5+uyzz4JqHDx4UIWFhUpMTFRycrLGjBmjw4cPB4355JNPNGTIEMXFxcntdmv69OkXZH5WGHxrS5cuNcuWLTPbtm0zVVVV5vHHHzcdOnQwmzdvNsYYM27cOON2u015eblZt26d+d73vmeuu+66wP4nTpwwffv2NXl5eWbDhg1m+fLlJiUlxZSUlATG7NixwyQkJJji4mKzZcsW8+tf/9pER0ebFStWXPD5nupcc//+979vxo4da/bu3RtYvF5vYP9wnvup1q5da3r06GH69etnJkyYEFgfyee+UXNzj+RzX1paaq655pqgue3fvz+wPZLP+7nmHsnn3RhjDh48aLp3727uv/9+s2bNGrNjxw7zpz/9yWzfvj0wZtq0aSYpKcn8x3/8h/n444/N7bffbi677DLz9ddfB8b88Ic/NP379zf/8z//Y1avXm169uxpRowYEdju9XqNy+UyhYWFZvPmzeb3v/+9iY+PN7/97W8v6HwvFMJIG+ncubN58cUXzaFDh0yHDh3MkiVLAtu2bt1qJJmKigpjjDHLly83UVFRxuPxBMbMmTPHJCYmmvr6emOMMY8++qi55pprgo5RUFBg8vPzL8BsQtM4d2NO/o/p1A+o00XC3Ovq6syVV15pVq5cGTTf9nDum5u7MZF97ktLS03//v2b3Bbp5/1sczcmss+7McY89thjZvDgwc1u9/v9Ji0tzTz33HOBdYcOHTJOp9P8/ve/N8YYs2XLFiPJfPTRR4Exb7/9tnE4HGb37t3GGGN+85vfmM6dOwf+TBqP3atXr9ae0kWBr2laWUNDgxYtWqQj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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"202\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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z2/dunXasGGDlixZooEDB6pHjx6aNWuWkpKS9M4770iSsrOz9frrr6u4uFjGGG3cuFGvv/66jh8/rgMHDjT52KejrAAA8P+ee+45dejQIbisXbtWDzzwQMi6srKyZjnWggULNGbMmDpXJs5m0qRJuvfee3XDDTfU+3hlZaXGjh2r+fPnKzk5ucnz+8tf/qLDhw/r4osvDsm/e/du7dq1S5I0bdo03Xbbbbr22mvVrl073XnnnRo/frwkKSqq+SpGTLPtCQCAVu6BBx7QT37yk+Dfx4wZo5EjR4Zc/ejates5H2ft2rUqLS3V4sWLQ9anpqZq//79IetOnDihgwcPKjU1VVLtj4CWLVumWbNmSZKMMQoEAoqJidFrr72mAQMGaM+ePRo+fHhwH4FAQFLtVZrS0lJdfvnlZ53j4cOH1aVLF61Zs6bOYyfvPoqPj9eCBQv06quvqqKiQl26dNFrr72mjh076pJLLmn0v8fZUFYAAPh/nTt3VufOnYN/j4+PV0pKirp3796sx3njjTeUkZGhvn37hqz3eDw6dOiQiouLlZGRIam2nAQCAWVmZkqqfV9LTU1NcJv/+q//0gsvvKCPP/5Y3bp1U3x8vLZu3Rqy36lTp6qyslIvv/yy3G53o+Y4YMAAeb1excTEKD09/Yxj27Vrp7S0NEm1t0r/8Ic/5MoKAAAtraysTAcPHlRZWZlqamqCn1PSvXt3dejQQZJ05ZVXKi8vT3fddVdwO7/fryVLluill16qs89evXrp1ltv1aRJkzRv3jwdP35cDz30kO65557gFZ1evXqFbLNx40ZFRUWpd+/ewXWn/ln67krIqetPzn3v3r2SpNLSUkm1V3dSU1OVlZUlj8ejESNGaObMmbriiiu0d+9eLV++XHfddZcGDhyoHTt2aMOGDcrMzNQ333yj2bNnq6SkRG+++WZT/kkbxHtWAABogunTp6t///6aMWOGDh8+rP79+6t///7auHFjcExpaal8Pl/IdgUFBTLGaPTo0fXu9ze/+Y2uvPJKDR06VLfffruuv/56vfbaa80+/2XLlql///664447JEn33HOP+vfvr3nz5kmq/QC7FStW6IYbbtCECRN0xRVX6J577tGXX34pl8slSaqpqdFLL72kvn376pZbbtGxY8f08ccfn/VKTLgcxhjTrHsEAABoRlxZAQAAVqOsAAAAq1FWAACA1SgrAADAapQVAABgNcoKAACwGmUFAABYjbICAACsRlkBAABWo6wAAACrUVYAAIDVKCsAAMBq/wd/WYIZ2maXdQAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"206\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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S1Pnzp31hz/8odH+R6EhXK3vyZMnh+S5liSv16vU1FTNmTNHkpScnKxdu3ZpyZIlvjfwUFObnu+77z7f+L59+6pfv37q1q2bNm7cqGHDhjVovXw8FCRRUVHq3r27UlJSlJubq/79++vFF19UYmKiysvLderUKb/xJSUlSkxMlCQlJiZe8cRB5c81jYmJiWnUfzyr67sqaWlpkqR9+/ZJsrPvgoICHTt2TAMHDlRkZKQiIyP1wQcf6KWXXlJkZKScTmdInu+a+q6oqLhin1A435eLi4vTDTfcoH379oX83+1LXdp3VULlXCclJfmuFFfq3bu376OxytqrqvvSvo4dO+a3/cKFCzp58mRA/100lJp6rkrXrl0VHx/vd74bqmdCSz3xer06d+6cUlJS1KJFC+Xl5fm2FRYWqqioyHfvR3p6unbu3Ol30jds2KCYmBjff0zp6el+c1SOufT+kaagsu+q7NixQ9LFvySSnX0PGzZMO3fu1I4dO3xLamqqxo4d6/tzKJ7vmvqOiIi4Yp9QON+XO336tPbv36+kpKRm9Xf70r6rEirn+pZbblFhYaHfur1796pz586SpOuvv16JiYl+dZeWlmrz5s1+5/zUqVMqKCjwjXnvvffk9Xp94S49PV1/+ctfdP78ed+YDRs2qGfPng360ZBUc89V+dvf/qavvvrK73w3WM8B3baLKs2YMcN88MEH5uDBg+azzz4zM2bMMGFhYeZ//ud/jDEXH4v83ve+Z9577z2zdetWk56ebtLT0337Vz4eOHz4cLNjxw6zfv160759+yofD3zkkUfMnj17zKJFixr98cCr9b1v3z7z9NNPm61bt5qDBw+ad955x3Tt2tUMHTrUt7+tfV/u8icpQvV8X+7SvkP1fP/yl780GzduNAcPHjQfffSRycjIMPHx8ebYsWPGmNA911frO1TPtTEXH+ePjIw0zzzzjPniiy/M66+/blq1amX+8z//0zdm7ty5Ji4uzrzzzjvms88+M6NGjarykefk5GSzefNm8+GHH5oePXr4Pf576tQp43Q6zbhx48yuXbvMypUrTatWrRrlkeeaei4rKzMPP/ywyc/PNwcPHjR//vOfzcCBA02PHj3M2bNnG7xnQksQ/MM//IPp3LmziYqKMu3btzfDhg3zBRZjjPn222/NP//zP5u2bduaVq1ambvvvtscPXrU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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"210\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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DofDdjvtwu/3y+12q7q6+qL7eTzMnblfTHO/WOctMfeLYe7GGNXW1qpbt26KiWn+zpCIuDISExOj7t27227DiqSkpKj+i3o2zJ25X0wu1nlLzD3a5362KyKNuIEVAABYRRgBAABWEUYuUE6nU8XFxXI6nbZbaXfMnblfTC7WeUvM/WKde1Mi4gZWAAAQvbgyAgAArCKMAAAAqwgjAADAKsIIAACwijDShubPn6/+/fsHX2qTl5ent99+O7j9m2++0aRJk3TJJZeoU6dOuvvuu1VTUxNSo6qqSrfeeqsSExOVlpamRx55RCdOnAgZs3btWg0aNEhOp1O9evXSkiVL2mN6Z3Wuud9www1yOBwhy8SJE0NqROrcTzVz5kw5HA79y7/8S3BdNJ/3UzU192g9708++eQZ8+rTp09wezSf83PNPVrPuSTt3btXP/7xj3XJJZcoISFB1157rTZs2BDcbozR9OnTlZGRoYSEBHk8Hn322WchNQ4fPqzRo0crKSlJKSkpGj9+vI4ePRoy5pNPPtHQoUPVsWNHud1uzZo1q13m164M2syKFSvMypUrzY4dO0xlZaV5/PHHTYcOHczWrVuNMcZMnDjRuN1uU1paajZs2GC+973vmeuuuy64/4kTJ0y/fv2Mx+MxmzZtMqtWrTKpqammqKgoOGbXrl0mMTHRFBYWmm3btplf/epXJjY21qxevbrd53uqc839+9//vpkwYYLZv39/cPH5fMH9I3nujcrLy03Pnj1N//79zeTJk4Pro/m8N2pu7tF63ouLi80111wTMq+DBw8Gt0fzOT/X3KP1nB8+fNj06NHD3H///Wb9+vVm165d5o9//KPZuXNncMzMmTNNcnKy+c///E/z8ccfm9tvv91cdtll5uuvvw6O+eEPf2gGDBhg/vd//9esW7fO9OrVy4waNSq43efzGZfLZUaPHm22bt1qfve735mEhATzm9/8pl3n29YII+2sS5cu5sUXXzRHjhwxHTp0MMuXLw9u2759u5FkysrKjDHGrFq1ysTExBiv1xscM3/+fJOUlGTq6uqMMcY8+uij5pprrgk5xsiRI01+fn47zCY8jXM35uR/oE79kDpdpM+9trbWXHnllWbNmjUhc70Yzntzczcmes97cXGxGTBgQJPbov2cn23uxkTvOX/sscfMkCFDmt0eCARMenq6ee6554Lrjhw5YpxOp/nd735njDFm27ZtRpL56KOPgmPefvtt43A4zN69e40xxvz61782Xbp0Cf5ZNB67d+/erT0lq/iapp00NDRo6dKlOnbsmPLy8lRRUaHjx4/L4/EEx/Tp00ff+c53VFZWJkkqKyvTtddeK5fLFRyTn58vv9+vTz/9NDjm1BqNYxprXAhOn3ujV199VampqerXr5+Kior01VdfBbdF+twnTZqkW2+99Yz+Lobz3tzcG0Xref/ss8/UrVs3XX755Ro9erSqqqokXRznvLm5N4rGc75ixQrl5OTonnvuUVpamrKysrRo0aLg9t27d8vr9Yb0nZycrNzc3JDznpKSopycnOAYj8ejmJgYrV+/Pjhm2LBhio+PD47Jz89XZWWlvvzyy7aeZruJiB+UF8m2bNmivLw8ffPNN+rUqZPefPNNXX311dq8ebPi4+OVkpISMt7lcsnr9UqSvF5vyD/Qxu2N2842xu/36+uvv1ZCQkIbzezcmpu7JN13333q0aOHunXrpk8++USPPfaYKisr9cYbb0iK7LkvXbpUGzdu1EcffXTGNq/XG9Xn/Wxzl6L3vOfm5mrJkiXq3bu39u/fr6eeekpDhw7V1q1bo/6cn23unTt3jtpzvmvXLs2fP1+FhYV6/PHH9dFHH+mf//mfFR8fr4KCgmDvTfV96rzS0tJCtsfFxalr164hYy677LIzajRu69KlS5vMr70RRtpY7969tXnzZvl8Pr322msqKCjQe++9Z7utdtHc3K+++mo98MADwXHXXnutMjIyNHz4cH3++ee64oorLHb916murtbkyZO1Zs0adezY0XY77aolc4/W837zzTcHf92/f3/l5uaqR48e+v3vf2/1fwjaw9nmPn78+Kg954FAQDk5OZoxY4YkKSsrS1u3btWCBQtUUFBgubvIw9c0bSw+Pl69evVSdna2SkpKNGDAAP3iF79Qenq66uvrdeTIkZDxNTU1Sk9PlySlp6efccd94+/PNSYpKcn6fwSbm3tTcnNzJUk7d+6UFLlzr6io0IEDBzRo0CDFxcUpLi5O7733nn75y18qLi5OLpcras/7uebe0NBwxj7Rct5Pl5KSoquuuko7d+68KP6tn+rUuTclWs55RkZG8Epvo759+wa/omrsvam+T53XgQMHQrafOHFChw8fDuvvRjQgjLSzQCCguro6ZWdnq0OHDiotLQ1uq6ysVFVVVfC+iry8PG3ZsiXkL+uaNWuUlJQU/EeQl5cXUqNxzKn3ZlwoGufelM2bN0s6+Q9city5Dx8+XFu2bNHmzZuDS05OjkaPHh38dbSe93PNPTY29ox9ouW8n+7o0aP6/PPPlZGRcdH9Wz917k2JlnN+/fXXq7KyMmTdjh071KNHD0nSZZddpvT09JC+/X6/1q9fH3Lejxw5ooqKiuCYd955R4FAIBja8vLy9Kc//UnHjx8PjlmzZo169+4dNV/RSOLR3rY0ZcoU895775ndu3ebTz75xEyZMsU4HA7z3//938aYk4/7fec73zHvvPOO2bBhg8nLyzN5eXnB/RsfebvpppvM5s2bzerVq82ll17a5CNvjzzyiNm+fbuZN2+e9UfejDn73Hfu3Gmefvpps2HDBrN7927z1ltvmcsvv9wMGzYsuH8kz/10pz9NEM3n/XSnzj2az/vPfvYzs3btWrN7927zwQcfGI/HY1JTU82BAweMMdF9zs8292g+5+Xl5SYuLs4888wz5rPPPjOvvvqqSUxMNP/xH/8RHDNz5kyTkpJi3nrrLfPJJ5+YO+64o8lHe7Oyssz69evN+++/b6688sqQR3uPHDliXC6XGTNmjNm6datZunSpSUxM5NFetNzf//3fmx49epj4+Hhz6aWXmuHDhweDiDHGfP311+af/umfTJcuXUxiYqK56667zP79+0Nq7Nmzx9x8880mISHBpKammp/97Gfm+PHjIWPeffddM3DgQBMfH28uv/xy8/LLL7fH9M7qbHOvqqoyw4YNM127djVOp9P06tXLPPLIIyHvHjAmcud+utPDSDSf99OdOvdoPu8jR440GRkZJj4+3mRmZpqRI0eGvG8ims/52eYezefcGGP+8Ic/mH79+hmn02n69OljFi5cGLI9EAiYadOmGZfLZZxOpxk+fLiprKwMGfOXv/zFjBo1ynTq1MkkJSWZcePGmdra2pAxH3/8sRkyZIhxOp0mMzPTzJw5s83n1t4cxhhj++oMAAC4eHHPCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAJyHZ555Rtddd50SExPP+KnMzXE4HE0uzz33XHDM4cOHNXr0aCUlJSklJUXjx4/X0aNHm6y3c+dOde7c+azHX7p0qRwOh+68886Q9W+88YZuuukmXXLJJXI4HMFX9Ydr3rx56tu3rxISEtS7d2/9+7//e9g1CCMAADTjhhtu0JIlS5rcVl9fr3vuuUcPPvhgi+vt378/ZFm8eLEcDofuvvvu4JjRo0fr008/1Zo1a/Rf//Vf+tOf/hTy048bHT9+XKNGjdLQoUObPd6ePXv08MMPNznm2LFjGjJkiJ599tkW93+6+fPnq6ioSE8++aQ+/fRTPfXUU5o0aZL+8Ic/hFfI9itgAQC4UH3/+98/56vnX375ZZOcnHxe9e+44w7zN3/zN8Hfb9u2zUgyH330UXDd22+/bRwOh9m7d2/Ivo8++qj58Y9/3OzxT5w4Ya677jrz4osvmoKCAnPHHXc02cPu3buNJLNp06Yztn355Zdm/PjxJjU11XTu3NnceOONZvPmzcHteXl55uGHHw7Zp7Cw0Fx//fUtmP23uDICAIAFNTU1WrlypcaPHx9cV1ZWppSUFOXk5ATXeTwexcTEaP369cF177zzjpYvX6558+Y1W//pp59WWlpaSP1w3XPPPTpw4IDefvttVVRUaNCgQRo+fLgOHz4sSaqrq1PHjh1D9klISFB5eXnITxo+F8IIAAAWvPLKK+rcubP+9m//NrjO6/UqLS0tZFxcXJy6du0qr9crSfrLX/6i+++/X0uWLFFSUlKTtd9//3299NJLWrRo0Xn39/7776u8vFzLly9XTk6OrrzySj3//PNKSUnRa6+9JknKz8/Xiy++qIqKChljtGHDBr344os6fvy4Dh061OJjEUYAAPj/ZsyYoU6dOgWXdevWaeLEiSHrqqqqWuVYixcv1ujRo8+4snAuEyZM0H333adhw4Y1ub22tlZjxozRokWLlJqaet79ffzxxzp69KguueSSkPnv3r1bn3/+uSRp2rRpuvnmm/W9731PHTp00B133KGCggJJUkxMyyNG3Hl3CQBAlJk4caJ+9KMfBX8/evRo3X333SFXL7p16/ZXH2fdunWqrKzUsmXLQtanp6frwIEDIetOnDihw4cPKz09XdLJr2hWrFih559/XpJkjFEgEFBcXJwWLlyoQYMGac+ePRoxYkSwRiAQkHTyKktlZaWuuOKKc/Z49OhRZWRkaO3atWdsa3x6JyEhQYsXL9ZvfvMb1dTUKCMjQwsXLlTnzp116aWXtvjPgzACAMD/17VrV3Xt2jX4+4SEBKWlpalXr16tepyXXnpJ2dnZGjBgQMj6vLw8HTlyRBUVFcrOzpZ0MnwEAgHl5uZKOnlfSUNDQ3Cft956S88++6w+/PBDZWZmKiEhQVu2bAmpO3XqVNXW1uoXv/iF3G53i3ocNGiQvF6v4uLi1LNnz7OO7dChg7p37y7p5KPEt912G1dGAABoa1VVVTp8+LCqqqrU0NAQfE9Hr1691KlTJ0lSnz59VFJSorvuuiu4n9/v1/Lly/XCCy+cUbNv37764Q9/qAkTJmjBggU6fvy4fvKTn+jee+8NXpHp27dvyD4bNmxQTEyM+vXrF1x36q+lb69knLq+sfd9+/ZJkiorKyWdvDqTnp4uj8ejvLw83XnnnZo1a5auuuoq7du3TytXrtRdd92lnJwc7dixQ+Xl5crNzdWXX36p2bNna+vWrXrllVfC+rPknhEAAM7D9OnTlZWVpeLiYh09elRZWVnKysrShg0bgmMqKyvl8/lC9lu6dKmMMRo1alSTdV999VX16dNHw4cP1y233KIhQ4Zo4cKFrd7/ihUrlJWVpVtvvVWSdO+99yorK0sLFiyQdPIFbatWrdKwYcM0btw4XXXVVbr33nv1xRdfyOVySZIaGhr0wgsvaMCAAfrBD36gb775Rh9++OE5r6SczmGMMa06OwAAgDBwZQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGDV/wOWbl6b3QL8egAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"for inter_no in sorted(plan.inter_no.unique()):\n",
|
|
" print(inter_no)\n",
|
|
" movement = time2movement[present_time]\n",
|
|
" movementt = movement.copy()[movement.inter_no==inter_no]\n",
|
|
" hrhistoryy = rhistory.copy()[rhistory.inter_no==inter_no]\n",
|
|
" mdts = sorted(movementt.start_unix.unique())\n",
|
|
" hdts = sorted(hrhistoryy.start_unix.unique())\n",
|
|
" import matplotlib.pyplot as plt\n",
|
|
" plt.scatter(mdts, [0]*len(mdts), c='b')\n",
|
|
" plt.scatter(hdts, [1]*len(hdts), c='r')\n",
|
|
" plt.show()\n",
|
|
" # display(movementt)\n",
|
|
" # display(hrhistoryy)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 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']) # 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",
|
|
"\n",
|
|
"# 이동류 매칭 테이블에서 진입id, 진출id를 가져와서 붙임.\n",
|
|
"for i, row in movedur.iterrows():\n",
|
|
" inter_no = row.inter_no\n",
|
|
" start_unix = row.start_unix\n",
|
|
" # incoming and outgoing edges A\n",
|
|
" move_A = row.move_A\n",
|
|
" if move_A in [17, 18]:\n",
|
|
" inc_edge_A = np.nan\n",
|
|
" out_edge_A = np.nan\n",
|
|
" else:\n",
|
|
" match_A = matching[(matching.inter_no == inter_no) & (matching.move_no == move_A)].iloc[0]\n",
|
|
" inc_edge_A = match_A.inc_edge\n",
|
|
" out_edge_A = match_A.out_edge\n",
|
|
" movedur.loc[i, ['inc_edge_A', 'out_edge_A']] = [inc_edge_A, out_edge_A]\n",
|
|
" # incoming and outgoing edges B\n",
|
|
" move_B = row.move_B\n",
|
|
" if move_B in [17, 18]:\n",
|
|
" inc_edge_B = np.nan\n",
|
|
" out_edge_B = np.nan\n",
|
|
" else:\n",
|
|
" match_B = matching[(matching.inter_no == inter_no) & (matching.move_no == move_B)].iloc[0]\n",
|
|
" inc_edge_B = match_B.inc_edge\n",
|
|
" out_edge_B = match_B.out_edge\n",
|
|
" movedur.loc[i, ['inc_edge_B', 'out_edge_B']] = [inc_edge_B, out_edge_B]\n",
|
|
"\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",
|
|
"histid['node_id'] = histid['inter_no'].map(inter2node)\n",
|
|
"histid = histid[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'duration', 'inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']]\n",
|
|
"histid = histid[histid.start_unix > present_time - 3600]\n",
|
|
"# 시뮬레이션 시작시각 : 현재시각 - 600\n",
|
|
"# 시뮬레이션 종료시각 : 현재시각 - 300\n",
|
|
"# 현재시각 : present_time, PT\n",
|
|
"# PT-900 ... PT-600 ... PT-300 ... PT\n",
|
|
"\n",
|
|
"histidd = histid.copy()[histid.inter_no==175]\n",
|
|
"histidd['diff'] = histidd['start_unix'].diff()\n",
|
|
"histidd[:60]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 140,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2024-01-05 08:20:00\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>node_id</th>\n",
|
|
" <th>start_unix</th>\n",
|
|
" <th>phas_A</th>\n",
|
|
" <th>phas_B</th>\n",
|
|
" <th>duration</th>\n",
|
|
" <th>inc_edge_A</th>\n",
|
|
" <th>out_edge_A</th>\n",
|
|
" <th>inc_edge_B</th>\n",
|
|
" <th>out_edge_B</th>\n",
|
|
" <th>diff</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>26</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>78</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>79</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>80</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>81</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>82</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>148</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>510.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>149</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>150</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>151</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>152</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>176</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>177</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>178</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>179</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>180</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>204</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>205</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>206</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>207</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>208</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>238</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>239</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>240</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>241</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>242</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>266</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>267</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>268</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>269</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>270</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>284</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>285</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>286</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>287</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>288</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>307</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>308</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>309</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>310</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>311</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>331</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>332</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>333</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>334</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>335</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id start_unix phas_A phas_B duration inc_edge_A \\\n",
|
|
"4 175 i0 1704406870 1 1 40 -571542797_02 \n",
|
|
"5 175 i0 1704406870 2 2 42 -571500487_01 \n",
|
|
"6 175 i0 1704406870 3 3 29 571545870_02 \n",
|
|
"7 175 i0 1704406870 3 4 26 571545870_02 \n",
|
|
"8 175 i0 1704406870 4 4 33 571510153_02 \n",
|
|
"22 175 i0 1704407040 1 1 40 -571542797_02 \n",
|
|
"23 175 i0 1704407040 2 2 42 -571500487_01 \n",
|
|
"24 175 i0 1704407040 3 3 29 571545870_02 \n",
|
|
"25 175 i0 1704407040 3 4 26 571545870_02 \n",
|
|
"26 175 i0 1704407040 4 4 33 571510153_02 \n",
|
|
"50 175 i0 1704407210 1 1 40 -571542797_02 \n",
|
|
"51 175 i0 1704407210 2 2 42 -571500487_01 \n",
|
|
"52 175 i0 1704407210 3 3 29 571545870_02 \n",
|
|
"53 175 i0 1704407210 3 4 26 571545870_02 \n",
|
|
"54 175 i0 1704407210 4 4 33 571510153_02 \n",
|
|
"78 175 i0 1704407380 1 1 40 -571542797_02 \n",
|
|
"79 175 i0 1704407380 2 2 42 -571500487_01 \n",
|
|
"80 175 i0 1704407380 3 3 29 571545870_02 \n",
|
|
"81 175 i0 1704407380 3 4 26 571545870_02 \n",
|
|
"82 175 i0 1704407380 4 4 33 571510153_02 \n",
|
|
"148 175 i0 1704407890 1 1 40 -571542797_02 \n",
|
|
"149 175 i0 1704407890 2 2 42 -571500487_01 \n",
|
|
"150 175 i0 1704407890 3 3 29 571545870_02 \n",
|
|
"151 175 i0 1704407890 3 4 26 571545870_02 \n",
|
|
"152 175 i0 1704407890 4 4 33 571510153_02 \n",
|
|
"176 175 i0 1704408060 1 1 40 -571542797_02 \n",
|
|
"177 175 i0 1704408060 2 2 42 -571500487_01 \n",
|
|
"178 175 i0 1704408060 3 3 29 571545870_02 \n",
|
|
"179 175 i0 1704408060 3 4 26 571545870_02 \n",
|
|
"180 175 i0 1704408060 4 4 33 571510153_02 \n",
|
|
"204 175 i0 1704408230 1 1 40 -571542797_02 \n",
|
|
"205 175 i0 1704408230 2 2 42 -571500487_01 \n",
|
|
"206 175 i0 1704408230 3 3 29 571545870_02 \n",
|
|
"207 175 i0 1704408230 3 4 26 571545870_02 \n",
|
|
"208 175 i0 1704408230 4 4 33 571510153_02 \n",
|
|
"238 175 i0 1704408400 1 1 40 -571542797_02 \n",
|
|
"239 175 i0 1704408400 2 2 42 -571500487_01 \n",
|
|
"240 175 i0 1704408400 3 3 29 571545870_02 \n",
|
|
"241 175 i0 1704408400 3 4 26 571545870_02 \n",
|
|
"242 175 i0 1704408400 4 4 33 571510153_02 \n",
|
|
"266 175 i0 1704408570 1 1 40 -571542797_02 \n",
|
|
"267 175 i0 1704408570 2 2 42 -571500487_01 \n",
|
|
"268 175 i0 1704408570 3 3 29 571545870_02 \n",
|
|
"269 175 i0 1704408570 3 4 26 571545870_02 \n",
|
|
"270 175 i0 1704408570 4 4 33 571510153_02 \n",
|
|
"284 175 i0 1704408740 1 1 40 -571542797_02 \n",
|
|
"285 175 i0 1704408740 2 2 42 -571500487_01 \n",
|
|
"286 175 i0 1704408740 3 3 29 571545870_02 \n",
|
|
"287 175 i0 1704408740 3 4 26 571545870_02 \n",
|
|
"288 175 i0 1704408740 4 4 33 571510153_02 \n",
|
|
"307 175 i0 1704408910 1 1 40 -571542797_02 \n",
|
|
"308 175 i0 1704408910 2 2 42 -571500487_01 \n",
|
|
"309 175 i0 1704408910 3 3 29 571545870_02 \n",
|
|
"310 175 i0 1704408910 3 4 26 571545870_02 \n",
|
|
"311 175 i0 1704408910 4 4 33 571510153_02 \n",
|
|
"331 175 i0 1704409080 1 1 40 -571542797_02 \n",
|
|
"332 175 i0 1704409080 2 2 42 -571500487_01 \n",
|
|
"333 175 i0 1704409080 3 3 29 571545870_02 \n",
|
|
"334 175 i0 1704409080 3 4 26 571545870_02 \n",
|
|
"335 175 i0 1704409080 4 4 33 571510153_02 \n",
|
|
"\n",
|
|
" out_edge_A inc_edge_B out_edge_B diff \n",
|
|
"4 571500487_01 -571500487_01 571542797_02 NaN \n",
|
|
"5 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"6 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"7 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"8 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"22 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"23 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"24 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"25 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"26 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"50 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"51 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"52 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"53 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"54 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"78 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"79 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"80 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"81 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"82 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"148 571500487_01 -571500487_01 571542797_02 510.0 \n",
|
|
"149 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"150 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"151 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"152 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"176 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"177 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"178 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"179 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"180 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"204 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"205 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"206 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"207 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"208 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"238 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"239 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"240 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"241 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"242 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"266 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"267 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"268 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"269 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"270 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"284 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"285 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"286 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"287 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"288 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"307 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"308 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"309 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"310 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"311 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"331 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"332 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"333 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"334 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"335 571500487_01 571510153_02 571545870_01 0.0 "
|
|
]
|
|
},
|
|
"execution_count": 140,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"inter_no = 175\n",
|
|
"rhist = make_histid(100)\n",
|
|
"rhis = rhist.copy()[rhist.inter_no==inter_no]\n",
|
|
"rhis['diff'] = rhis['start_unix'].diff()\n",
|
|
"rhis[:60]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 118,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2024-01-05 08:20:00\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>node_id</th>\n",
|
|
" <th>start_unix</th>\n",
|
|
" <th>phas_A</th>\n",
|
|
" <th>phas_B</th>\n",
|
|
" <th>duration</th>\n",
|
|
" <th>inc_edge_A</th>\n",
|
|
" <th>out_edge_A</th>\n",
|
|
" <th>inc_edge_B</th>\n",
|
|
" <th>out_edge_B</th>\n",
|
|
" <th>diff</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704406870</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>26</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407040</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>51</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407210</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>78</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>79</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>80</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>81</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>82</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407380</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>148</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>510.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>149</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>150</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>151</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>152</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704407890</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>176</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>177</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>178</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>179</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>180</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408060</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>204</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>205</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>206</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>207</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>208</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408230</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>238</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>239</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>240</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>241</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>242</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408400</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>266</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>267</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>268</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>269</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>270</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408570</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>284</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>285</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>286</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>287</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>288</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408740</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>307</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>308</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>309</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>310</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>311</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704408910</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>331</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>170.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>332</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>42</td>\n",
|
|
" <td>-571500487_01</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>-571542797_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>333</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>29</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571542797_02</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>334</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>26</td>\n",
|
|
" <td>571545870_02</td>\n",
|
|
" <td>571510153_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>335</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704409080</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571500487_01</td>\n",
|
|
" <td>571510153_02</td>\n",
|
|
" <td>571545870_01</td>\n",
|
|
" <td>0.0</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id start_unix phas_A phas_B duration inc_edge_A \\\n",
|
|
"4 175 i0 1704406870 1 1 40 -571542797_02 \n",
|
|
"5 175 i0 1704406870 2 2 42 -571500487_01 \n",
|
|
"6 175 i0 1704406870 3 3 29 571545870_02 \n",
|
|
"7 175 i0 1704406870 3 4 26 571545870_02 \n",
|
|
"8 175 i0 1704406870 4 4 33 571510153_02 \n",
|
|
"22 175 i0 1704407040 1 1 40 -571542797_02 \n",
|
|
"23 175 i0 1704407040 2 2 42 -571500487_01 \n",
|
|
"24 175 i0 1704407040 3 3 29 571545870_02 \n",
|
|
"25 175 i0 1704407040 3 4 26 571545870_02 \n",
|
|
"26 175 i0 1704407040 4 4 33 571510153_02 \n",
|
|
"50 175 i0 1704407210 1 1 40 -571542797_02 \n",
|
|
"51 175 i0 1704407210 2 2 42 -571500487_01 \n",
|
|
"52 175 i0 1704407210 3 3 29 571545870_02 \n",
|
|
"53 175 i0 1704407210 3 4 26 571545870_02 \n",
|
|
"54 175 i0 1704407210 4 4 33 571510153_02 \n",
|
|
"78 175 i0 1704407380 1 1 40 -571542797_02 \n",
|
|
"79 175 i0 1704407380 2 2 42 -571500487_01 \n",
|
|
"80 175 i0 1704407380 3 3 29 571545870_02 \n",
|
|
"81 175 i0 1704407380 3 4 26 571545870_02 \n",
|
|
"82 175 i0 1704407380 4 4 33 571510153_02 \n",
|
|
"148 175 i0 1704407890 1 1 40 -571542797_02 \n",
|
|
"149 175 i0 1704407890 2 2 42 -571500487_01 \n",
|
|
"150 175 i0 1704407890 3 3 29 571545870_02 \n",
|
|
"151 175 i0 1704407890 3 4 26 571545870_02 \n",
|
|
"152 175 i0 1704407890 4 4 33 571510153_02 \n",
|
|
"176 175 i0 1704408060 1 1 40 -571542797_02 \n",
|
|
"177 175 i0 1704408060 2 2 42 -571500487_01 \n",
|
|
"178 175 i0 1704408060 3 3 29 571545870_02 \n",
|
|
"179 175 i0 1704408060 3 4 26 571545870_02 \n",
|
|
"180 175 i0 1704408060 4 4 33 571510153_02 \n",
|
|
"204 175 i0 1704408230 1 1 40 -571542797_02 \n",
|
|
"205 175 i0 1704408230 2 2 42 -571500487_01 \n",
|
|
"206 175 i0 1704408230 3 3 29 571545870_02 \n",
|
|
"207 175 i0 1704408230 3 4 26 571545870_02 \n",
|
|
"208 175 i0 1704408230 4 4 33 571510153_02 \n",
|
|
"238 175 i0 1704408400 1 1 40 -571542797_02 \n",
|
|
"239 175 i0 1704408400 2 2 42 -571500487_01 \n",
|
|
"240 175 i0 1704408400 3 3 29 571545870_02 \n",
|
|
"241 175 i0 1704408400 3 4 26 571545870_02 \n",
|
|
"242 175 i0 1704408400 4 4 33 571510153_02 \n",
|
|
"266 175 i0 1704408570 1 1 40 -571542797_02 \n",
|
|
"267 175 i0 1704408570 2 2 42 -571500487_01 \n",
|
|
"268 175 i0 1704408570 3 3 29 571545870_02 \n",
|
|
"269 175 i0 1704408570 3 4 26 571545870_02 \n",
|
|
"270 175 i0 1704408570 4 4 33 571510153_02 \n",
|
|
"284 175 i0 1704408740 1 1 40 -571542797_02 \n",
|
|
"285 175 i0 1704408740 2 2 42 -571500487_01 \n",
|
|
"286 175 i0 1704408740 3 3 29 571545870_02 \n",
|
|
"287 175 i0 1704408740 3 4 26 571545870_02 \n",
|
|
"288 175 i0 1704408740 4 4 33 571510153_02 \n",
|
|
"307 175 i0 1704408910 1 1 40 -571542797_02 \n",
|
|
"308 175 i0 1704408910 2 2 42 -571500487_01 \n",
|
|
"309 175 i0 1704408910 3 3 29 571545870_02 \n",
|
|
"310 175 i0 1704408910 3 4 26 571545870_02 \n",
|
|
"311 175 i0 1704408910 4 4 33 571510153_02 \n",
|
|
"331 175 i0 1704409080 1 1 40 -571542797_02 \n",
|
|
"332 175 i0 1704409080 2 2 42 -571500487_01 \n",
|
|
"333 175 i0 1704409080 3 3 29 571545870_02 \n",
|
|
"334 175 i0 1704409080 3 4 26 571545870_02 \n",
|
|
"335 175 i0 1704409080 4 4 33 571510153_02 \n",
|
|
"\n",
|
|
" out_edge_A inc_edge_B out_edge_B diff \n",
|
|
"4 571500487_01 -571500487_01 571542797_02 NaN \n",
|
|
"5 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"6 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"7 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"8 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"22 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"23 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"24 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"25 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"26 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"50 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"51 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"52 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"53 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"54 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"78 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"79 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"80 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"81 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"82 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"148 571500487_01 -571500487_01 571542797_02 510.0 \n",
|
|
"149 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"150 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"151 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"152 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"176 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"177 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"178 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"179 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"180 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"204 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"205 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"206 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"207 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"208 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"238 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"239 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"240 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"241 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"242 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"266 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"267 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"268 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"269 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"270 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"284 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"285 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"286 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"287 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"288 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"307 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"308 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"309 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"310 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"311 571500487_01 571510153_02 571545870_01 0.0 \n",
|
|
"331 571500487_01 -571500487_01 571542797_02 170.0 \n",
|
|
"332 571545870_01 -571542797_02 571510153_01 0.0 \n",
|
|
"333 571510153_01 571545870_02 571542797_02 0.0 \n",
|
|
"334 571510153_01 571510153_02 571545870_01 0.0 \n",
|
|
"335 571500487_01 571510153_02 571545870_01 0.0 "
|
|
]
|
|
},
|
|
"execution_count": 118,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"inter_no = 175\n",
|
|
"histid = make_histid(100)\n",
|
|
"his = histid.copy()[histid.inter_no==inter_no]\n",
|
|
"his['diff'] = his['start_unix'].diff()\n",
|
|
"his[:60]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"30\n",
|
|
"2024-01-05 02:30:00\n",
|
|
"31\n",
|
|
"2024-01-05 02:35:00\n",
|
|
"32\n",
|
|
"2024-01-05 02:40:00\n",
|
|
"33\n",
|
|
"2024-01-05 02:45:00\n",
|
|
"34\n",
|
|
"2024-01-05 02:50:00\n",
|
|
"35\n",
|
|
"2024-01-05 02:55:00\n",
|
|
"36\n",
|
|
"2024-01-05 03:00:00\n",
|
|
"37\n",
|
|
"2024-01-05 03:05:00\n",
|
|
"38\n",
|
|
"2024-01-05 03:10:00\n",
|
|
"39\n",
|
|
"2024-01-05 03:15:00\n",
|
|
"40\n",
|
|
"2024-01-05 03:20:00\n",
|
|
"41\n",
|
|
"2024-01-05 03:25:00\n",
|
|
"42\n",
|
|
"2024-01-05 03:30:00\n",
|
|
"43\n",
|
|
"2024-01-05 03:35:00\n",
|
|
"44\n",
|
|
"2024-01-05 03:40:00\n",
|
|
"45\n",
|
|
"2024-01-05 03:45:00\n",
|
|
"46\n",
|
|
"2024-01-05 03:50:00\n",
|
|
"47\n",
|
|
"2024-01-05 03:55:00\n",
|
|
"48\n",
|
|
"2024-01-05 04:00:00\n",
|
|
"49\n",
|
|
"2024-01-05 04:05:00\n",
|
|
"50\n",
|
|
"2024-01-05 04:10:00\n",
|
|
"51\n",
|
|
"2024-01-05 04:15:00\n",
|
|
"52\n",
|
|
"2024-01-05 04:20:00\n",
|
|
"53\n",
|
|
"2024-01-05 04:25:00\n",
|
|
"54\n",
|
|
"2024-01-05 04:30:00\n",
|
|
"55\n",
|
|
"2024-01-05 04:35:00\n",
|
|
"56\n",
|
|
"2024-01-05 04:40:00\n",
|
|
"57\n",
|
|
"2024-01-05 04:45:00\n",
|
|
"58\n",
|
|
"2024-01-05 04:50:00\n",
|
|
"59\n",
|
|
"2024-01-05 04:55:00\n",
|
|
"60\n",
|
|
"2024-01-05 05:00:00\n",
|
|
"61\n",
|
|
"2024-01-05 05:05:00\n",
|
|
"62\n",
|
|
"2024-01-05 05:10:00\n",
|
|
"63\n",
|
|
"2024-01-05 05:15:00\n",
|
|
"64\n",
|
|
"2024-01-05 05:20:00\n",
|
|
"65\n",
|
|
"2024-01-05 05:25:00\n",
|
|
"66\n",
|
|
"2024-01-05 05:30:00\n",
|
|
"67\n",
|
|
"2024-01-05 05:35:00\n",
|
|
"68\n",
|
|
"2024-01-05 05:40:00\n",
|
|
"69\n",
|
|
"2024-01-05 05:45:00\n",
|
|
"70\n",
|
|
"2024-01-05 05:50:00\n",
|
|
"71\n",
|
|
"2024-01-05 05:55:00\n",
|
|
"72\n",
|
|
"2024-01-05 06:00:00\n",
|
|
"73\n",
|
|
"2024-01-05 06:05:00\n",
|
|
"74\n",
|
|
"2024-01-05 06:10:00\n",
|
|
"75\n",
|
|
"2024-01-05 06:15:00\n",
|
|
"76\n",
|
|
"2024-01-05 06:20:00\n",
|
|
"77\n",
|
|
"2024-01-05 06:25:00\n",
|
|
"78\n",
|
|
"2024-01-05 06:30:00\n",
|
|
"79\n",
|
|
"2024-01-05 06:35:00\n",
|
|
"80\n",
|
|
"2024-01-05 06:40:00\n",
|
|
"81\n",
|
|
"2024-01-05 06:45:00\n",
|
|
"82\n",
|
|
"2024-01-05 06:50:00\n",
|
|
"83\n",
|
|
"2024-01-05 06:55:00\n",
|
|
"84\n",
|
|
"2024-01-05 07:00:00\n",
|
|
"85\n",
|
|
"2024-01-05 07:05:00\n",
|
|
"86\n",
|
|
"2024-01-05 07:10:00\n",
|
|
"87\n",
|
|
"2024-01-05 07:15:00\n",
|
|
"88\n",
|
|
"2024-01-05 07:20:00\n",
|
|
"89\n",
|
|
"2024-01-05 07:25:00\n",
|
|
"90\n",
|
|
"2024-01-05 07:30:00\n",
|
|
"91\n",
|
|
"2024-01-05 07:35:00\n",
|
|
"92\n",
|
|
"2024-01-05 07:40:00\n",
|
|
"93\n",
|
|
"2024-01-05 07:45:00\n",
|
|
"94\n",
|
|
"2024-01-05 07:50:00\n",
|
|
"95\n",
|
|
"2024-01-05 07:55:00\n",
|
|
"96\n",
|
|
"2024-01-05 08:00:00\n",
|
|
"97\n",
|
|
"2024-01-05 08:05:00\n",
|
|
"98\n",
|
|
"2024-01-05 08:10:00\n",
|
|
"99\n",
|
|
"2024-01-05 08:15:00\n",
|
|
"100\n",
|
|
"2024-01-05 08:20:00\n",
|
|
"101\n",
|
|
"2024-01-05 08:25:00\n",
|
|
"102\n",
|
|
"2024-01-05 08:30:00\n",
|
|
"103\n",
|
|
"2024-01-05 08:35:00\n",
|
|
"104\n",
|
|
"2024-01-05 08:40:00\n",
|
|
"105\n",
|
|
"2024-01-05 08:45:00\n",
|
|
"106\n",
|
|
"2024-01-05 08:50:00\n",
|
|
"107\n",
|
|
"2024-01-05 08:55:00\n",
|
|
"108\n",
|
|
"2024-01-05 09:00:00\n",
|
|
"109\n",
|
|
"2024-01-05 09:05:00\n",
|
|
"110\n",
|
|
"2024-01-05 09:10:00\n",
|
|
"111\n",
|
|
"2024-01-05 09:15:00\n",
|
|
"112\n",
|
|
"2024-01-05 09:20:00\n",
|
|
"113\n",
|
|
"2024-01-05 09:25:00\n",
|
|
"114\n",
|
|
"2024-01-05 09:30:00\n",
|
|
"115\n",
|
|
"2024-01-05 09:35:00\n",
|
|
"116\n",
|
|
"2024-01-05 09:40:00\n",
|
|
"117\n",
|
|
"2024-01-05 09:45:00\n",
|
|
"118\n",
|
|
"2024-01-05 09:50:00\n",
|
|
"119\n",
|
|
"2024-01-05 09:55:00\n",
|
|
"120\n",
|
|
"2024-01-05 10:00:00\n",
|
|
"121\n",
|
|
"2024-01-05 10:05:00\n",
|
|
"122\n",
|
|
"2024-01-05 10:10:00\n",
|
|
"123\n",
|
|
"2024-01-05 10:15:00\n",
|
|
"124\n",
|
|
"2024-01-05 10:20:00\n",
|
|
"125\n",
|
|
"2024-01-05 10:25:00\n",
|
|
"126\n",
|
|
"2024-01-05 10:30:00\n",
|
|
"127\n",
|
|
"2024-01-05 10:35:00\n",
|
|
"128\n",
|
|
"2024-01-05 10:40:00\n",
|
|
"129\n",
|
|
"2024-01-05 10:45:00\n",
|
|
"130\n",
|
|
"2024-01-05 10:50:00\n",
|
|
"131\n",
|
|
"2024-01-05 10:55:00\n",
|
|
"132\n",
|
|
"2024-01-05 11:00:00\n",
|
|
"133\n",
|
|
"2024-01-05 11:05:00\n",
|
|
"134\n",
|
|
"2024-01-05 11:10:00\n",
|
|
"135\n",
|
|
"2024-01-05 11:15:00\n",
|
|
"136\n",
|
|
"2024-01-05 11:20:00\n",
|
|
"137\n",
|
|
"2024-01-05 11:25:00\n",
|
|
"138\n",
|
|
"2024-01-05 11:30:00\n",
|
|
"139\n",
|
|
"2024-01-05 11:35:00\n",
|
|
"140\n",
|
|
"2024-01-05 11:40:00\n",
|
|
"141\n",
|
|
"2024-01-05 11:45:00\n",
|
|
"142\n",
|
|
"2024-01-05 11:50:00\n",
|
|
"143\n",
|
|
"2024-01-05 11:55:00\n",
|
|
"144\n",
|
|
"2024-01-05 12:00:00\n",
|
|
"145\n",
|
|
"2024-01-05 12:05:00\n",
|
|
"146\n",
|
|
"2024-01-05 12:10:00\n",
|
|
"147\n",
|
|
"2024-01-05 12:15:00\n",
|
|
"148\n",
|
|
"2024-01-05 12:20:00\n",
|
|
"149\n",
|
|
"2024-01-05 12:25:00\n",
|
|
"150\n",
|
|
"2024-01-05 12:30:00\n",
|
|
"151\n",
|
|
"2024-01-05 12:35:00\n",
|
|
"152\n",
|
|
"2024-01-05 12:40:00\n",
|
|
"153\n",
|
|
"2024-01-05 12:45:00\n",
|
|
"154\n",
|
|
"2024-01-05 12:50:00\n",
|
|
"155\n",
|
|
"2024-01-05 12:55:00\n",
|
|
"156\n",
|
|
"2024-01-05 13:00:00\n",
|
|
"157\n",
|
|
"2024-01-05 13:05:00\n",
|
|
"158\n",
|
|
"2024-01-05 13:10:00\n",
|
|
"159\n",
|
|
"2024-01-05 13:15:00\n",
|
|
"160\n",
|
|
"2024-01-05 13:20:00\n",
|
|
"161\n",
|
|
"2024-01-05 13:25:00\n",
|
|
"162\n",
|
|
"2024-01-05 13:30:00\n",
|
|
"163\n",
|
|
"2024-01-05 13:35:00\n",
|
|
"164\n",
|
|
"2024-01-05 13:40:00\n",
|
|
"165\n",
|
|
"2024-01-05 13:45:00\n",
|
|
"166\n",
|
|
"2024-01-05 13:50:00\n",
|
|
"167\n",
|
|
"2024-01-05 13:55:00\n",
|
|
"168\n",
|
|
"2024-01-05 14:00:00\n",
|
|
"169\n",
|
|
"2024-01-05 14:05:00\n",
|
|
"170\n",
|
|
"2024-01-05 14:10:00\n",
|
|
"171\n",
|
|
"2024-01-05 14:15:00\n",
|
|
"172\n",
|
|
"2024-01-05 14:20:00\n",
|
|
"173\n",
|
|
"2024-01-05 14:25:00\n",
|
|
"174\n",
|
|
"2024-01-05 14:30:00\n",
|
|
"175\n",
|
|
"2024-01-05 14:35:00\n",
|
|
"176\n",
|
|
"2024-01-05 14:40:00\n",
|
|
"177\n",
|
|
"2024-01-05 14:45:00\n",
|
|
"178\n",
|
|
"2024-01-05 14:50:00\n",
|
|
"179\n",
|
|
"2024-01-05 14:55:00\n",
|
|
"180\n",
|
|
"2024-01-05 15:00:00\n",
|
|
"181\n",
|
|
"2024-01-05 15:05:00\n",
|
|
"182\n",
|
|
"2024-01-05 15:10:00\n",
|
|
"183\n",
|
|
"2024-01-05 15:15:00\n",
|
|
"184\n",
|
|
"2024-01-05 15:20:00\n",
|
|
"185\n",
|
|
"2024-01-05 15:25:00\n",
|
|
"186\n",
|
|
"2024-01-05 15:30:00\n",
|
|
"187\n",
|
|
"2024-01-05 15:35:00\n",
|
|
"188\n",
|
|
"2024-01-05 15:40:00\n",
|
|
"189\n",
|
|
"2024-01-05 15:45:00\n",
|
|
"190\n",
|
|
"2024-01-05 15:50:00\n",
|
|
"191\n",
|
|
"2024-01-05 15:55:00\n",
|
|
"192\n",
|
|
"2024-01-05 16:00:00\n",
|
|
"193\n",
|
|
"2024-01-05 16:05:00\n",
|
|
"194\n",
|
|
"2024-01-05 16:10:00\n",
|
|
"195\n",
|
|
"2024-01-05 16:15:00\n",
|
|
"196\n",
|
|
"2024-01-05 16:20:00\n",
|
|
"197\n",
|
|
"2024-01-05 16:25:00\n",
|
|
"198\n",
|
|
"2024-01-05 16:30:00\n",
|
|
"199\n",
|
|
"2024-01-05 16:35:00\n",
|
|
"200\n",
|
|
"2024-01-05 16:40:00\n",
|
|
"201\n",
|
|
"2024-01-05 16:45:00\n",
|
|
"202\n",
|
|
"2024-01-05 16:50:00\n",
|
|
"203\n",
|
|
"2024-01-05 16:55:00\n",
|
|
"204\n",
|
|
"2024-01-05 17:00:00\n",
|
|
"205\n",
|
|
"2024-01-05 17:05:00\n",
|
|
"206\n",
|
|
"2024-01-05 17:10:00\n",
|
|
"207\n",
|
|
"2024-01-05 17:15:00\n",
|
|
"208\n",
|
|
"2024-01-05 17:20:00\n",
|
|
"209\n",
|
|
"2024-01-05 17:25:00\n",
|
|
"210\n",
|
|
"2024-01-05 17:30:00\n",
|
|
"211\n",
|
|
"2024-01-05 17:35:00\n",
|
|
"212\n",
|
|
"2024-01-05 17:40:00\n",
|
|
"213\n",
|
|
"2024-01-05 17:45:00\n",
|
|
"214\n",
|
|
"2024-01-05 17:50:00\n",
|
|
"215\n",
|
|
"2024-01-05 17:55:00\n",
|
|
"216\n",
|
|
"2024-01-05 18:00:00\n",
|
|
"217\n",
|
|
"2024-01-05 18:05:00\n",
|
|
"218\n",
|
|
"2024-01-05 18:10:00\n",
|
|
"219\n",
|
|
"2024-01-05 18:15:00\n",
|
|
"220\n",
|
|
"2024-01-05 18:20:00\n",
|
|
"221\n",
|
|
"2024-01-05 18:25:00\n",
|
|
"222\n",
|
|
"2024-01-05 18:30:00\n",
|
|
"223\n",
|
|
"2024-01-05 18:35:00\n",
|
|
"224\n",
|
|
"2024-01-05 18:40:00\n",
|
|
"225\n",
|
|
"2024-01-05 18:45:00\n",
|
|
"226\n",
|
|
"2024-01-05 18:50:00\n",
|
|
"227\n",
|
|
"2024-01-05 18:55:00\n",
|
|
"228\n",
|
|
"2024-01-05 19:00:00\n",
|
|
"229\n",
|
|
"2024-01-05 19:05:00\n",
|
|
"230\n",
|
|
"2024-01-05 19:10:00\n",
|
|
"231\n",
|
|
"2024-01-05 19:15:00\n",
|
|
"232\n",
|
|
"2024-01-05 19:20:00\n",
|
|
"233\n",
|
|
"2024-01-05 19:25:00\n",
|
|
"234\n",
|
|
"2024-01-05 19:30:00\n",
|
|
"235\n",
|
|
"2024-01-05 19:35:00\n",
|
|
"236\n",
|
|
"2024-01-05 19:40:00\n",
|
|
"237\n",
|
|
"2024-01-05 19:45:00\n",
|
|
"238\n",
|
|
"2024-01-05 19:50:00\n",
|
|
"239\n",
|
|
"2024-01-05 19:55:00\n",
|
|
"240\n",
|
|
"2024-01-05 20:00:00\n",
|
|
"241\n",
|
|
"2024-01-05 20:05:00\n",
|
|
"242\n",
|
|
"2024-01-05 20:10:00\n",
|
|
"243\n",
|
|
"2024-01-05 20:15:00\n",
|
|
"244\n",
|
|
"2024-01-05 20:20:00\n",
|
|
"245\n",
|
|
"2024-01-05 20:25:00\n",
|
|
"246\n",
|
|
"2024-01-05 20:30:00\n",
|
|
"247\n",
|
|
"2024-01-05 20:35:00\n",
|
|
"248\n",
|
|
"2024-01-05 20:40:00\n",
|
|
"249\n",
|
|
"2024-01-05 20:45:00\n",
|
|
"250\n",
|
|
"2024-01-05 20:50:00\n",
|
|
"251\n",
|
|
"2024-01-05 20:55:00\n",
|
|
"252\n",
|
|
"2024-01-05 21:00:00\n",
|
|
"253\n",
|
|
"2024-01-05 21:05:00\n",
|
|
"254\n",
|
|
"2024-01-05 21:10:00\n",
|
|
"255\n",
|
|
"2024-01-05 21:15:00\n",
|
|
"256\n",
|
|
"2024-01-05 21:20:00\n",
|
|
"257\n",
|
|
"2024-01-05 21:25:00\n",
|
|
"258\n",
|
|
"2024-01-05 21:30:00\n",
|
|
"259\n",
|
|
"2024-01-05 21:35:00\n",
|
|
"260\n",
|
|
"2024-01-05 21:40:00\n",
|
|
"261\n",
|
|
"2024-01-05 21:45:00\n",
|
|
"262\n",
|
|
"2024-01-05 21:50:00\n",
|
|
"263\n",
|
|
"2024-01-05 21:55:00\n",
|
|
"264\n",
|
|
"2024-01-05 22:00:00\n",
|
|
"265\n",
|
|
"2024-01-05 22:05:00\n",
|
|
"266\n",
|
|
"2024-01-05 22:10:00\n",
|
|
"267\n",
|
|
"2024-01-05 22:15:00\n",
|
|
"268\n",
|
|
"2024-01-05 22:20:00\n",
|
|
"269\n",
|
|
"2024-01-05 22:25:00\n",
|
|
"270\n",
|
|
"2024-01-05 22:30:00\n",
|
|
"271\n",
|
|
"2024-01-05 22:35:00\n",
|
|
"272\n",
|
|
"2024-01-05 22:40:00\n",
|
|
"273\n",
|
|
"2024-01-05 22:45:00\n",
|
|
"274\n",
|
|
"2024-01-05 22:50:00\n",
|
|
"275\n",
|
|
"2024-01-05 22:55:00\n",
|
|
"276\n",
|
|
"2024-01-05 23:00:00\n",
|
|
"277\n",
|
|
"2024-01-05 23:05:00\n",
|
|
"278\n",
|
|
"2024-01-05 23:10:00\n",
|
|
"279\n",
|
|
"2024-01-05 23:15:00\n",
|
|
"280\n",
|
|
"2024-01-05 23:20:00\n",
|
|
"281\n",
|
|
"2024-01-05 23:25:00\n",
|
|
"282\n",
|
|
"2024-01-05 23:30:00\n",
|
|
"283\n",
|
|
"2024-01-05 23:35:00\n",
|
|
"284\n",
|
|
"2024-01-05 23:40:00\n",
|
|
"285\n",
|
|
"2024-01-05 23:45:00\n",
|
|
"286\n",
|
|
"2024-01-05 23:50:00\n",
|
|
"287\n",
|
|
"2024-01-05 23:55:00\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for m in range(30, 288):\n",
|
|
" print(m)\n",
|
|
" make_histid(m).to_csv(f'../../Data/tables/histids/histids_{fmins[m]}.csv')"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|