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

7526 lines
263 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import sumolib\n",
"import random\n",
"from tqdm import tqdm\n",
"from datetime import datetime"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# A. 이동류 매칭"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 17281/17281 [00:13<00:00, 1257.14it/s]\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>move_A</th>\n",
" <th>move_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>176</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>176</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>177</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>177</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no phas_A phas_B move_A move_B\n",
"0 175 1 1 8 4\n",
"1 175 2 2 7 3\n",
"2 175 3 3 6 1\n",
"3 175 3 4 6 2\n",
"4 175 4 4 5 2\n",
"5 176 1 1 8 4\n",
"6 176 2 2 8 3\n",
"7 176 3 3 5 18\n",
"8 177 1 1 8 4\n",
"9 177 2 2 7 3"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# [이동류번호] 불러오기 (약 1분의 소요시간)\n",
"path_moves = '../../Data/tables/moves/'\n",
"csv_moves = os.listdir('../../Data/tables/moves/')\n",
"moves = [pd.read_csv(path_moves + csv_move, index_col=0) for csv_move in tqdm(csv_moves)]\n",
"match1 = pd.concat(moves).drop_duplicates().sort_values(by=['inter_no','phas_A','phas_B']).reset_index(drop=True)\n",
"match1.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>phase_no</th>\n",
" <th>ring_type</th>\n",
" <th>move_no</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>A</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>2</td>\n",
" <td>B</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>A</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>3</td>\n",
" <td>B</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>A</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>B</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>A</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>B</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no phase_no ring_type move_no\n",
"0 175 1 A 8\n",
"0 175 1 B 4\n",
"1 175 2 A 7\n",
"1 175 2 B 3\n",
"2 175 3 A 6\n",
"2 175 3 B 1\n",
"4 175 4 A 5\n",
"3 175 4 B 2\n",
"5 176 1 A 8\n",
"5 176 1 B 4"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 계층화 (inter_no, phas_A, phas_B, move_A, move_B) -> ('inter_no', 'phase_no', 'ring_type', 'move_no')\n",
"matchA = match1[['inter_no', 'phas_A', 'move_A']].copy()\n",
"matchA.columns = ['inter_no', 'phase_no', 'move_no']\n",
"matchA['ring_type'] = 'A'\n",
"matchB = match1[['inter_no', 'phas_B', 'move_B']].copy()\n",
"matchB.columns = ['inter_no', 'phase_no', 'move_no']\n",
"matchB['ring_type'] = 'B'\n",
"match2 = pd.concat([matchA, matchB]).drop_duplicates()\n",
"match2 = match2[['inter_no', 'phase_no', 'ring_type', 'move_no']]\n",
"match2 = match2.sort_values(by=list(match2.columns))\n",
"match2.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"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": 45,
"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": 46,
"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": 46,
"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": 47,
"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": 47,
"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": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['u00', 'u20', 'u30', 'u31', 'u32', 'u60'], dtype=object)"
]
},
"execution_count": 48,
"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": 49,
"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": 50,
"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": 51,
"metadata": {},
"outputs": [],
"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"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"# # 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": 53,
"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": 54,
"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": 54,
"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": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-01-05 03: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>start_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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>178</td>\n",
" <td>1704388800</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>201</td>\n",
" <td>1704388800</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>202</td>\n",
" <td>1704388800</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>206</td>\n",
" <td>1704388800</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>177</td>\n",
" <td>1704388801</td>\n",
" <td>36</td>\n",
" <td>20</td>\n",
" <td>68</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>36</td>\n",
" <td>20</td>\n",
" <td>68</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</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",
" <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>78</th>\n",
" <td>210</td>\n",
" <td>1704392159</td>\n",
" <td>43</td>\n",
" <td>29</td>\n",
" <td>56</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>48</td>\n",
" <td>56</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>178</td>\n",
" <td>1704392160</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>39</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>201</td>\n",
" <td>1704392160</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>24</td>\n",
" <td>17</td>\n",
" <td>58</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>206</td>\n",
" <td>1704392160</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>33</td>\n",
" <td>35</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>202</td>\n",
" <td>1704392211</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>39</td>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>140</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>194 rows × 19 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no start_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n",
"60 178 1704388800 38 39 40 23 0 \n",
"60 201 1704388800 24 24 17 58 17 \n",
"60 202 1704388800 39 101 0 0 0 \n",
"70 206 1704388800 33 35 26 26 0 \n",
"56 177 1704388801 36 20 68 26 0 \n",
".. ... ... ... ... ... ... ... \n",
"78 210 1704392159 43 29 56 22 0 \n",
"84 178 1704392160 38 39 40 23 0 \n",
"84 201 1704392160 24 24 17 58 17 \n",
"98 206 1704392160 33 35 26 26 0 \n",
"84 202 1704392211 39 101 0 0 0 \n",
"\n",
" dura_A6 dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n",
"60 0 0 0 38 39 40 23 0 \n",
"60 0 0 0 24 24 17 58 17 \n",
"60 0 0 0 39 101 0 0 0 \n",
"70 0 0 0 33 35 26 26 0 \n",
"56 0 0 0 36 20 68 26 0 \n",
".. ... ... ... ... ... ... ... ... \n",
"78 0 0 0 24 48 56 22 0 \n",
"84 0 0 0 38 39 40 23 0 \n",
"84 0 0 0 24 24 17 58 17 \n",
"98 0 0 0 33 35 26 26 0 \n",
"84 0 0 0 39 101 0 0 0 \n",
"\n",
" dura_B6 dura_B7 dura_B8 cycle \n",
"60 0 0 0 140 \n",
"60 0 0 0 140 \n",
"60 0 0 0 140 \n",
"70 0 0 0 120 \n",
"56 0 0 0 150 \n",
".. ... ... ... ... \n",
"78 0 0 0 150 \n",
"84 0 0 0 140 \n",
"84 0 0 0 140 \n",
"98 0 0 0 120 \n",
"84 0 0 0 140 \n",
"\n",
"[194 rows x 19 columns]"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = 40\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",
"# 1. 조회시점의 유닉스 타임 이전의 신호이력 수집\n",
"rhistory = history.copy() # recent history\n",
"rhistory = rhistory[(rhistory.end_unix < present_time)]\n",
"# 2. 시작 유닉스 타임컬럼 생성 후 종류 유닉스 타임에서 현시별 현시기간 컬럼의 합을 뺀 값으로 입력\n",
"# - 현시시간의 합을 뺀 시간의 +- 10초 이내에 이전 주기정보가 존재하면 그 유닉스 시간을 시작 유닉스시간 값으로 하고, 존재하지 않으면 현시시간의 합을 뺀 유닉스 시간을 시작 유닉스 시간으로 지정\n",
"for i, row in rhistory.iterrows():\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",
" # 이전 유닉스 존재하지 않음 : 현시시간 합의 차\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",
" # 이전 유닉스 존재, abs < 10 : 이전 유닉스\n",
" if abs(pre_unix - start_unix) < 10:\n",
" start_unix = pre_unix\n",
" # 이전 유닉스 존재, abs >=10 : 현시시간 합의 차\n",
" else:\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[['inter_no', 'start_unix', 'cycle']][rhistory.inter_no==175]\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",
"# 2-1. 참값 판단 프로세스\n",
"hours = np.array(range(midnight, next_day + 1, 3600)) # 정각에 해당하는 시각들 목록\n",
"\n",
"def calculate_DS(rhist, curr_unix):\n",
" ghour_lt_curr_unix = hours[hours <= curr_unix].max() # the greatest hour less than (or equal to) curr_unix\n",
" start_unixes = rhist.start_unix.unique()\n",
" start_unixes_lt_ghour = np.sort(start_unixes[start_unixes < ghour_lt_curr_unix]) # start unixes less than ghour_lt_curr_unix\n",
" # 기준유닉스(base_unix) : curr_unix보다 작은 hour 중에서 가장 큰 값으로부터 다섯 번째로 작은 start_unix\n",
" if list(start_unixes_lt_ghour):\n",
" base_unix = start_unixes_lt_ghour[-5]\n",
" # start_unixes_lt_ghour가 비었을 경우에는 맨 앞 start_unix로 base_unix를 지정\n",
" else:\n",
" base_unix = rhist.start_unix.min()\n",
" D_n = curr_unix - base_unix\n",
" S_n_durs = rhist[(rhist.start_unix > base_unix) & (rhist.start_unix <= curr_unix)] \\\n",
" [[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]]\n",
" S_n = S_n_durs.values.sum() // 2\n",
" return D_n, S_n\n",
"\n",
"rhists = []\n",
"for inter_no in sorted(rhistory.inter_no.unique()):\n",
" rhist = rhistory.copy()[rhistory.inter_no==inter_no]\n",
" rhist = rhist.drop_duplicates(subset=['start_unix']).reset_index(drop=True)\n",
"\n",
" # D_n 및 S_n 값 정의\n",
" rhist['D_n'] = 0 # D_n : 시간차이\n",
" rhist['S_n'] = 0 # S_n : 현시시간합\n",
" for n in range(len(rhist)):\n",
" curr_unix = rhist.iloc[n].start_unix # current start_unix\n",
" rhist.loc[n, ['D_n', 'S_n']] = calculate_DS(rhist, curr_unix)\n",
"\n",
" # 이전시각, 현재시각\n",
" prev_unix = rhist.loc[0, 'start_unix'] # previous start_unix\n",
" curr_unix = rhist.loc[1, 'start_unix'] # current start_unix\n",
"\n",
" # rhist의 마지막 행에 도달할 때까지 반복\n",
" while True:\n",
" n = rhist[rhist.start_unix==curr_unix].index[0]\n",
" cycle = rhist.loc[n, 'cycle']\n",
" D_n = rhist.loc[n, 'D_n']\n",
" S_n = rhist.loc[n, 'S_n']\n",
" # 참값인 경우\n",
" if (abs(D_n - S_n) <= 5):\n",
" pass\n",
" # 참값이 아닌 경우\n",
" else:\n",
" # 2-1-1. 결측치 처리 : 인접한 두 start_unix의 차이가 계획된 주기의 두 배보다 크면 결측이 일어났다고 판단, 신호계획의 현시시간으로 \"대체\"\n",
" if curr_unix - prev_unix >= 2 * cycle:\n",
" # prev_unix를 계획된 주기만큼 늘려가면서 한 행씩 채워나간다.\n",
" # (curr_unix와의 차이가 계획된 주기보다 작거나 같아질 때까지)\n",
" new_rows = []\n",
" while curr_unix - prev_unix > cycle:\n",
" prev_unix += cycle\n",
" # 신호 계획(prow) 불러오기\n",
" start_seconds = np.array(timetable.start_seconds)\n",
" idx = (start_seconds <= prev_unix).sum() - 1\n",
" start_hour = timetable.iloc[idx].start_hour\n",
" start_minute = timetable.iloc[idx].start_minute\n",
" prow = plan.copy()[(plan.inter_no==inter_no) & (plan.start_hour==start_hour) & (plan.start_minute==start_minute)] # planned row\n",
" # prow에서 필요한 부분을 rhist에 추가\n",
" prow['start_unix'] = prev_unix\n",
" prow = prow.drop(['start_hour', 'start_minute', 'offset'], axis=1)\n",
" cycle = prow.iloc[0].cycle\n",
" rhist = pd.concat([rhist, prow])\n",
" rhist = rhist.sort_values(by='start_unix').reset_index(drop=True)\n",
" n += 1\n",
"\n",
" # 2-1-2. 이상치 처리 : 비율에 따라 해당 행을 \"삭제\"(R_n <= 0.5) 또는 \"조정\"(R_n > 0.5)한다\n",
" R_n = (curr_unix - prev_unix) / cycle # R_n : 비율\n",
" # R_n이 0.5보다 작거나 같으면 해당 행을 삭제\n",
" if R_n <= 0.5:\n",
" rhist = rhist.drop(index=n).reset_index(drop=True)\n",
" # 행삭제에 따른 curr_unix, R_n 재정의\n",
" curr_unix = rhist.loc[n, 'start_unix']\n",
" R_n = (curr_unix - prev_unix) / cycle # R_n : 비율\n",
"\n",
" # R_n이 0.5보다 크면 해당 행 조정 (비율을 유지한 채로 현시시간 대체)\n",
" if R_n > 0.5:\n",
" # 신호 계획(prow) 불러오기\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에 R_n을 곱하고 정수로 바꿈)\n",
" adjusted_dur = prow.copy()[[f'dura_{alph}{j}' for alph in ['A', 'B'] for j in range(1,9)]] * R_n\n",
" int_parts = adjusted_dur.iloc[0].apply(lambda x: int(x))\n",
" frac_parts = adjusted_dur.iloc[0] - int_parts\n",
" difference = round(adjusted_dur.iloc[0].sum()) - int_parts.sum()\n",
" for _ in range(difference): # 소수 부분이 가장 큰 상위 '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에 조정된 현시시간을 반영\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().sum() // 2\n",
"\n",
" if n == rhist.index[-1]:\n",
" break\n",
" prev_unix = curr_unix\n",
" curr_unix = rhist.loc[n+1, 'start_unix']\n",
" # rhist['start_dt'] = rhist['start_unix'].map(lambda x:datetime.fromtimestamp(x))\n",
"\n",
" # 생략해도 무방할 코드\n",
" rhist = rhist.reset_index(drop=True)\n",
" rhist = rhist.sort_values(by=['start_unix'])\n",
"\n",
" # D_n 및 S_n 값 재정의\n",
" for n in range(len(rhist)):\n",
" curr_unix = rhist.iloc[n].start_unix # current start_unix\n",
" rhist.loc[n, ['D_n', 'S_n']] = calculate_DS(rhist, curr_unix)\n",
" rhists.append(rhist)\n",
"rhists = pd.concat(rhists).sort_values(by=['start_unix','inter_no'])\n",
"rhists = rhists[rhists.start_unix >= present_time - 3600]\n",
"rhists = rhists.drop(columns=['D_n', 'S_n'])\n",
"rhists"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"# file_path = '../../Data/tables/movements/'\n",
"# movements = [pd.read_csv(file_path + file, index_col=0) for file in tqdm(os.listdir(file_path))]\n",
"# movements = pd.concat(movements).drop_duplicates()\n",
"# movements.to_csv(file_path + 'movements.csv')"
]
},
{
"cell_type": "code",
"execution_count": 57,
"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>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>8</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>15</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>20</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>24</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>26</th>\n",
" <td>175</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no phas_A phas_B move_A move_B\n",
"8 175 1 1 8 4\n",
"15 175 2 2 7 3\n",
"20 175 3 3 6 1\n",
"24 175 3 4 6 2\n",
"26 175 4 4 5 2"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"movements = pd.read_csv('../../Data/tables/movements/movements.csv', index_col=0)\n",
"movements_wo_start_unix_list = [] # movements without start_unix\n",
"for inter_no in sorted(movements.inter_no.unique()):\n",
" movements_wo_start_unix = movements[movements.inter_no==inter_no]\n",
" movements_wo_start_unix = movements_wo_start_unix[['inter_no', 'phas_A', 'phas_B', 'move_A', 'move_B']]\n",
" movements_wo_start_unix = movements_wo_start_unix.drop_duplicates().sort_values(by=['phas_A','phas_B'])\n",
" movements_wo_start_unix_list.append(movements_wo_start_unix)\n",
"movements_wo_start_unix = pd.concat(movements_wo_start_unix_list)\n",
"movements_wo_start_unix.head()"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>start_unix</th>\n",
" <th>phas_A</th>\n",
" <th>phas_B</th>\n",
" <th>duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>178</td>\n",
" <td>1704388800</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>38</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>178</td>\n",
" <td>1704388800</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>178</td>\n",
" <td>1704388800</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>178</td>\n",
" <td>1704388800</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>23</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>201</td>\n",
" <td>1704388800</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>767</th>\n",
" <td>206</td>\n",
" <td>1704392160</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>768</th>\n",
" <td>206</td>\n",
" <td>1704392160</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>769</th>\n",
" <td>206</td>\n",
" <td>1704392160</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>770</th>\n",
" <td>202</td>\n",
" <td>1704392211</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>771</th>\n",
" <td>202</td>\n",
" <td>1704392211</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>101</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>772 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no start_unix phas_A phas_B duration\n",
"0 178 1704388800 1 1 38\n",
"1 178 1704388800 2 2 39\n",
"2 178 1704388800 3 3 40\n",
"3 178 1704388800 4 4 23\n",
"4 201 1704388800 1 1 24\n",
".. ... ... ... ... ...\n",
"767 206 1704392160 2 2 35\n",
"768 206 1704392160 3 3 26\n",
"769 206 1704392160 4 4 26\n",
"770 202 1704392211 1 1 39\n",
"771 202 1704392211 2 2 101\n",
"\n",
"[772 rows x 5 columns]"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 계층화된 형태로 변환\n",
"hrhists = [] # hierarchied recent history\n",
"for i, row in rhists.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",
" hrhists.append(new_rows)\n",
"hrhists = pd.concat(hrhists)\n",
"hrhists = hrhists.sort_values(by = ['start_unix', 'inter_no', 'phas_A', 'phas_B']).reset_index(drop=True)\n",
"hrhists"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"movement = pd.read_csv(f'../../Data/tables/movements/movements_{present_time}.csv', index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"# 중복을 제거하고 (inter_no, start_unix) 쌍을 만듭니다.\n",
"hrhists_inter_unix = set(hrhists[['inter_no', 'start_unix']].drop_duplicates().itertuples(index=False, name=None))\n",
"movement_inter_unix = set(movement[['inter_no', 'start_unix']].drop_duplicates().itertuples(index=False, name=None))\n",
"\n",
"# hrhists에는 있지만 movement에는 없는 (inter_no, start_unix) 쌍을 찾습니다.\n",
"missing_in_movement = hrhists_inter_unix - movement_inter_unix\n",
"\n",
"# 새로운 행들을 생성합니다.\n",
"new_rows = []\n",
"for inter_no, start_unix in missing_in_movement:\n",
" # movements_wo_start_unix에서 해당 inter_no의 데이터를 찾습니다.\n",
" new_row = movements_wo_start_unix[movements_wo_start_unix['inter_no'] == inter_no].copy()\n",
" # start_unix 값을 설정합니다.\n",
" new_row['start_unix'] = start_unix\n",
" new_rows.append(new_row)\n",
"\n",
"# 새로운 데이터프레임을 생성하고 기존 movement 데이터프레임과 합칩니다.\n",
"new_movement = pd.concat(new_rows, ignore_index=True)\n",
"movement_updated = pd.concat([movement, new_movement], ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"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>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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>177</td>\n",
" <td>i2</td>\n",
" <td>1704388801</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>36</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>571542811_02</td>\n",
" <td>571542809_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>177</td>\n",
" <td>i2</td>\n",
" <td>1704388801</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>20</td>\n",
" <td>571542811_02</td>\n",
" <td>571542107_01</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542809_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>177</td>\n",
" <td>i2</td>\n",
" <td>1704388801</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>68</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>177</td>\n",
" <td>i2</td>\n",
" <td>1704388801</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>-571542809_01</td>\n",
" <td>571542811_01</td>\n",
" <td>571542107_02</td>\n",
" <td>571542809_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>176</td>\n",
" <td>i1</td>\n",
" <td>1704388850</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542810_01</td>\n",
" <td>-571542797_02.99</td>\n",
" <td>571542797_02.99</td>\n",
" <td>571542810_01</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",
" </tr>\n",
" <tr>\n",
" <th>748</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704392160</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>35</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>749</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704392160</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>-571511538_02</td>\n",
" <td>571542073_02</td>\n",
" <td>571542073_01</td>\n",
" <td>571511538_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>750</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704392160</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>751</th>\n",
" <td>202</td>\n",
" <td>i9</td>\n",
" <td>1704392211</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>39</td>\n",
" <td>571510152_02</td>\n",
" <td>-571510152_01</td>\n",
" <td>571510152_01</td>\n",
" <td>571510152_01.65</td>\n",
" </tr>\n",
" <tr>\n",
" <th>752</th>\n",
" <td>202</td>\n",
" <td>i9</td>\n",
" <td>1704392211</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>101</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>757 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B duration inc_edge_A \\\n",
"0 177 i2 1704388801 1 1 36 -571542809_01 \n",
"1 177 i2 1704388801 2 2 20 571542811_02 \n",
"2 177 i2 1704388801 3 3 68 NaN \n",
"3 177 i2 1704388801 4 4 26 -571542809_01 \n",
"4 176 i1 1704388850 1 1 37 -571542810_01 \n",
".. ... ... ... ... ... ... ... \n",
"748 206 i7 1704392160 2 2 35 NaN \n",
"749 206 i7 1704392160 3 3 26 -571511538_02 \n",
"750 206 i7 1704392160 4 4 26 NaN \n",
"751 202 i9 1704392211 1 1 39 571510152_02 \n",
"752 202 i9 1704392211 2 2 101 NaN \n",
"\n",
" out_edge_A inc_edge_B out_edge_B \n",
"0 571542811_01 571542811_02 571542809_01 \n",
"1 571542107_01 -571542809_01 571542809_01 \n",
"2 NaN NaN NaN \n",
"3 571542811_01 571542107_02 571542809_01 \n",
"4 -571542797_02.99 571542797_02.99 571542810_01 \n",
".. ... ... ... \n",
"748 NaN NaN NaN \n",
"749 571542073_02 571542073_01 571511538_02 \n",
"750 NaN NaN NaN \n",
"751 -571510152_01 571510152_01 571510152_01.65 \n",
"752 NaN NaN NaN \n",
"\n",
"[757 rows x 10 columns]"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"movedur = pd.merge(movement_updated, hrhists, 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",
"histid"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-01-05 03: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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704388880</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704388880</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704388880</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704388880</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704388880</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389040</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389040</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389040</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389040</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389040</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389200</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389200</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389200</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389200</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389200</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389360</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389360</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389360</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389360</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389360</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>155</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389520</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>156</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389520</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>157</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389520</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>158</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389520</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>159</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389520</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>191</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389680</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>192</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389680</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>193</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389680</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>194</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389680</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>195</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389680</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>223</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389839</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389839</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>225</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389839</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>226</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389839</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>227</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704389839</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>255</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390000</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>256</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390000</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>257</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390000</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>258</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390000</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>259</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390000</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>295</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390160</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>296</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390160</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>297</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390160</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>298</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390160</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>299</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390160</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>325</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390320</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>326</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390320</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>327</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390320</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>328</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390320</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>329</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390320</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>355</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390480</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>356</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390480</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>357</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390480</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>358</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390480</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>359</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390480</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>400</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390640</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>37</td>\n",
" <td>-571542797_02</td>\n",
" <td>571500487_01</td>\n",
" <td>-571500487_01</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>401</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390640</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>39</td>\n",
" <td>-571500487_01</td>\n",
" <td>571545870_01</td>\n",
" <td>-571542797_02</td>\n",
" <td>571510153_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>402</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390640</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>25</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571545870_02</td>\n",
" <td>571542797_02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>403</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390640</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>30</td>\n",
" <td>571545870_02</td>\n",
" <td>571510153_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>404</th>\n",
" <td>175</td>\n",
" <td>i0</td>\n",
" <td>1704390640</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>571510153_02</td>\n",
" <td>571500487_01</td>\n",
" <td>571510153_02</td>\n",
" <td>571545870_01</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",
"12 175 i0 1704388880 1 1 37 -571542797_02 \n",
"13 175 i0 1704388880 2 2 39 -571500487_01 \n",
"14 175 i0 1704388880 3 3 25 571545870_02 \n",
"15 175 i0 1704388880 3 4 30 571545870_02 \n",
"16 175 i0 1704388880 4 4 29 571510153_02 \n",
"44 175 i0 1704389040 1 1 37 -571542797_02 \n",
"45 175 i0 1704389040 2 2 39 -571500487_01 \n",
"46 175 i0 1704389040 3 3 25 571545870_02 \n",
"47 175 i0 1704389040 3 4 30 571545870_02 \n",
"48 175 i0 1704389040 4 4 29 571510153_02 \n",
"80 175 i0 1704389200 1 1 37 -571542797_02 \n",
"81 175 i0 1704389200 2 2 39 -571500487_01 \n",
"82 175 i0 1704389200 3 3 25 571545870_02 \n",
"83 175 i0 1704389200 3 4 30 571545870_02 \n",
"84 175 i0 1704389200 4 4 29 571510153_02 \n",
"117 175 i0 1704389360 1 1 37 -571542797_02 \n",
"118 175 i0 1704389360 2 2 39 -571500487_01 \n",
"119 175 i0 1704389360 3 3 25 571545870_02 \n",
"120 175 i0 1704389360 3 4 30 571545870_02 \n",
"121 175 i0 1704389360 4 4 29 571510153_02 \n",
"155 175 i0 1704389520 1 1 37 -571542797_02 \n",
"156 175 i0 1704389520 2 2 39 -571500487_01 \n",
"157 175 i0 1704389520 3 3 25 571545870_02 \n",
"158 175 i0 1704389520 3 4 30 571545870_02 \n",
"159 175 i0 1704389520 4 4 29 571510153_02 \n",
"191 175 i0 1704389680 1 1 37 -571542797_02 \n",
"192 175 i0 1704389680 2 2 39 -571500487_01 \n",
"193 175 i0 1704389680 3 3 25 571545870_02 \n",
"194 175 i0 1704389680 3 4 30 571545870_02 \n",
"195 175 i0 1704389680 4 4 29 571510153_02 \n",
"223 175 i0 1704389839 1 1 37 -571542797_02 \n",
"224 175 i0 1704389839 2 2 39 -571500487_01 \n",
"225 175 i0 1704389839 3 3 25 571545870_02 \n",
"226 175 i0 1704389839 3 4 30 571545870_02 \n",
"227 175 i0 1704389839 4 4 29 571510153_02 \n",
"255 175 i0 1704390000 1 1 37 -571542797_02 \n",
"256 175 i0 1704390000 2 2 39 -571500487_01 \n",
"257 175 i0 1704390000 3 3 25 571545870_02 \n",
"258 175 i0 1704390000 3 4 30 571545870_02 \n",
"259 175 i0 1704390000 4 4 29 571510153_02 \n",
"295 175 i0 1704390160 1 1 37 -571542797_02 \n",
"296 175 i0 1704390160 2 2 39 -571500487_01 \n",
"297 175 i0 1704390160 3 3 25 571545870_02 \n",
"298 175 i0 1704390160 3 4 30 571545870_02 \n",
"299 175 i0 1704390160 4 4 29 571510153_02 \n",
"325 175 i0 1704390320 1 1 37 -571542797_02 \n",
"326 175 i0 1704390320 2 2 39 -571500487_01 \n",
"327 175 i0 1704390320 3 3 25 571545870_02 \n",
"328 175 i0 1704390320 3 4 30 571545870_02 \n",
"329 175 i0 1704390320 4 4 29 571510153_02 \n",
"355 175 i0 1704390480 1 1 37 -571542797_02 \n",
"356 175 i0 1704390480 2 2 39 -571500487_01 \n",
"357 175 i0 1704390480 3 3 25 571545870_02 \n",
"358 175 i0 1704390480 3 4 30 571545870_02 \n",
"359 175 i0 1704390480 4 4 29 571510153_02 \n",
"400 175 i0 1704390640 1 1 37 -571542797_02 \n",
"401 175 i0 1704390640 2 2 39 -571500487_01 \n",
"402 175 i0 1704390640 3 3 25 571545870_02 \n",
"403 175 i0 1704390640 3 4 30 571545870_02 \n",
"404 175 i0 1704390640 4 4 29 571510153_02 \n",
"\n",
" out_edge_A inc_edge_B out_edge_B \n",
"12 571500487_01 -571500487_01 571542797_02 \n",
"13 571545870_01 -571542797_02 571510153_01 \n",
"14 571510153_01 571545870_02 571542797_02 \n",
"15 571510153_01 571510153_02 571545870_01 \n",
"16 571500487_01 571510153_02 571545870_01 \n",
"44 571500487_01 -571500487_01 571542797_02 \n",
"45 571545870_01 -571542797_02 571510153_01 \n",
"46 571510153_01 571545870_02 571542797_02 \n",
"47 571510153_01 571510153_02 571545870_01 \n",
"48 571500487_01 571510153_02 571545870_01 \n",
"80 571500487_01 -571500487_01 571542797_02 \n",
"81 571545870_01 -571542797_02 571510153_01 \n",
"82 571510153_01 571545870_02 571542797_02 \n",
"83 571510153_01 571510153_02 571545870_01 \n",
"84 571500487_01 571510153_02 571545870_01 \n",
"117 571500487_01 -571500487_01 571542797_02 \n",
"118 571545870_01 -571542797_02 571510153_01 \n",
"119 571510153_01 571545870_02 571542797_02 \n",
"120 571510153_01 571510153_02 571545870_01 \n",
"121 571500487_01 571510153_02 571545870_01 \n",
"155 571500487_01 -571500487_01 571542797_02 \n",
"156 571545870_01 -571542797_02 571510153_01 \n",
"157 571510153_01 571545870_02 571542797_02 \n",
"158 571510153_01 571510153_02 571545870_01 \n",
"159 571500487_01 571510153_02 571545870_01 \n",
"191 571500487_01 -571500487_01 571542797_02 \n",
"192 571545870_01 -571542797_02 571510153_01 \n",
"193 571510153_01 571545870_02 571542797_02 \n",
"194 571510153_01 571510153_02 571545870_01 \n",
"195 571500487_01 571510153_02 571545870_01 \n",
"223 571500487_01 -571500487_01 571542797_02 \n",
"224 571545870_01 -571542797_02 571510153_01 \n",
"225 571510153_01 571545870_02 571542797_02 \n",
"226 571510153_01 571510153_02 571545870_01 \n",
"227 571500487_01 571510153_02 571545870_01 \n",
"255 571500487_01 -571500487_01 571542797_02 \n",
"256 571545870_01 -571542797_02 571510153_01 \n",
"257 571510153_01 571545870_02 571542797_02 \n",
"258 571510153_01 571510153_02 571545870_01 \n",
"259 571500487_01 571510153_02 571545870_01 \n",
"295 571500487_01 -571500487_01 571542797_02 \n",
"296 571545870_01 -571542797_02 571510153_01 \n",
"297 571510153_01 571545870_02 571542797_02 \n",
"298 571510153_01 571510153_02 571545870_01 \n",
"299 571500487_01 571510153_02 571545870_01 \n",
"325 571500487_01 -571500487_01 571542797_02 \n",
"326 571545870_01 -571542797_02 571510153_01 \n",
"327 571510153_01 571545870_02 571542797_02 \n",
"328 571510153_01 571510153_02 571545870_01 \n",
"329 571500487_01 571510153_02 571545870_01 \n",
"355 571500487_01 -571500487_01 571542797_02 \n",
"356 571545870_01 -571542797_02 571510153_01 \n",
"357 571510153_01 571545870_02 571542797_02 \n",
"358 571510153_01 571510153_02 571545870_01 \n",
"359 571500487_01 571510153_02 571545870_01 \n",
"400 571500487_01 -571500487_01 571542797_02 \n",
"401 571545870_01 -571542797_02 571510153_01 \n",
"402 571510153_01 571545870_02 571542797_02 \n",
"403 571510153_01 571510153_02 571545870_01 \n",
"404 571500487_01 571510153_02 571545870_01 "
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(datetime.fromtimestamp(present_time))\n",
"histid[histid.inter_no==175][:60]"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>start_hour</th>\n",
" <th>start_minute</th>\n",
" <th>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>...</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>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>175</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>175</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>42</td>\n",
" <td>55</td>\n",
" <td>33</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>42</td>\n",
" <td>29</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>170</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>43</td>\n",
" <td>45</td>\n",
" <td>55</td>\n",
" <td>37</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>43</td>\n",
" <td>45</td>\n",
" <td>33</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>180</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>175</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>4 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no start_hour start_minute dura_A1 dura_A2 dura_A3 dura_A4 \\\n",
"0 175 0 0 37 39 55 29 \n",
"1 175 7 0 40 42 55 33 \n",
"2 175 9 0 43 45 55 37 \n",
"3 175 18 30 46 48 55 41 \n",
"\n",
" dura_A5 dura_A6 dura_A7 ... dura_B1 dura_B2 dura_B3 dura_B4 \\\n",
"0 0 0 0 ... 37 39 25 59 \n",
"1 0 0 0 ... 40 42 29 59 \n",
"2 0 0 0 ... 43 45 33 59 \n",
"3 0 0 0 ... 46 48 37 59 \n",
"\n",
" dura_B5 dura_B6 dura_B7 dura_B8 cycle offset \n",
"0 0 0 0 0 160 57 \n",
"1 0 0 0 0 170 40 \n",
"2 0 0 0 0 180 28 \n",
"3 0 0 0 0 190 18 \n",
"\n",
"[4 rows x 21 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>inter_no</th>\n",
" <th>end_unix</th>\n",
" <th>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>offset</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>175</td>\n",
" <td>1704380561</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>175</td>\n",
" <td>1704380720</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>175</td>\n",
" <td>1704380881</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>175</td>\n",
" <td>1704381040</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>175</td>\n",
" <td>1704381200</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>55</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>25</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>160</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</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",
" <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>3844</th>\n",
" <td>175</td>\n",
" <td>1704466010</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3852</th>\n",
" <td>175</td>\n",
" <td>1704466200</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3860</th>\n",
" <td>175</td>\n",
" <td>1704466390</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3868</th>\n",
" <td>175</td>\n",
" <td>1704466580</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3876</th>\n",
" <td>175</td>\n",
" <td>1704466769</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>55</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>46</td>\n",
" <td>48</td>\n",
" <td>37</td>\n",
" <td>59</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>190</td>\n",
" <td>18</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>496 rows × 20 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no end_unix dura_A1 dura_A2 dura_A3 dura_A4 dura_A5 \\\n",
"6 175 1704380561 37 39 55 29 0 \n",
"14 175 1704380720 37 39 55 29 0 \n",
"22 175 1704380881 37 39 55 29 0 \n",
"31 175 1704381040 37 39 55 29 0 \n",
"39 175 1704381200 37 39 55 29 0 \n",
"... ... ... ... ... ... ... ... \n",
"3844 175 1704466010 46 48 55 41 0 \n",
"3852 175 1704466200 46 48 55 41 0 \n",
"3860 175 1704466390 46 48 55 41 0 \n",
"3868 175 1704466580 46 48 55 41 0 \n",
"3876 175 1704466769 46 48 55 41 0 \n",
"\n",
" dura_A6 dura_A7 dura_A8 dura_B1 dura_B2 dura_B3 dura_B4 dura_B5 \\\n",
"6 0 0 0 37 39 25 59 0 \n",
"14 0 0 0 37 39 25 59 0 \n",
"22 0 0 0 37 39 25 59 0 \n",
"31 0 0 0 37 39 25 59 0 \n",
"39 0 0 0 37 39 25 59 0 \n",
"... ... ... ... ... ... ... ... ... \n",
"3844 0 0 0 46 48 37 59 0 \n",
"3852 0 0 0 46 48 37 59 0 \n",
"3860 0 0 0 46 48 37 59 0 \n",
"3868 0 0 0 46 48 37 59 0 \n",
"3876 0 0 0 46 48 37 59 0 \n",
"\n",
" dura_B6 dura_B7 dura_B8 cycle offset \n",
"6 0 0 0 160 57 \n",
"14 0 0 0 160 57 \n",
"22 0 0 0 160 57 \n",
"31 0 0 0 160 57 \n",
"39 0 0 0 160 57 \n",
"... ... ... ... ... ... \n",
"3844 0 0 0 190 18 \n",
"3852 0 0 0 190 18 \n",
"3860 0 0 0 190 18 \n",
"3868 0 0 0 190 18 \n",
"3876 0 0 0 190 18 \n",
"\n",
"[496 rows x 20 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(plan[plan.inter_no==175])\n",
"display(history[history.inter_no==175])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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
}