신호생성 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.
 
 

1977 lines
62 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"import numpy as np\n",
"import sys\n",
"import copy\n",
"sys.path.append('../../Scripts')\n",
"from preprocess_daily import DailyPreprocessor\n",
"from generate_signals import SignalGenerator"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 준비합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"2. 신호이력 테이블을 변환합니다.\n",
"3. 이동류정보 테이블을 변환합니다.\n",
"4. 통합 테이블을 생성합니다.\n"
]
}
],
"source": [
"self = SignalGenerator()\n",
"self.prepare_data() # 1 \n",
"self.process_history() # 2\n",
"self.process_movement() # 3\n",
"self.make_histids() # 4\n",
"self.set_timepoints() # 5-1\n",
"self.assign_red_yellow() # 5-2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n",
"['u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n",
"['c30']\n"
]
}
],
"source": [
"print(self.parent_ids)\n",
"print(self.uturn_ids)\n",
"print(self.coord_ids)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>1g_1g</td>\n",
" <td>39</td>\n",
" <td>gGGrgrrrgGGGGrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>gyyrgrrrgyyyyrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>2r_2r</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>2g_2g</td>\n",
" <td>40</td>\n",
" <td>grrGgrrrgrrrrGgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>grrygrrrgrrrrygrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3r_3r</td>\n",
" <td>1</td>\n",
" <td>grrrgGGrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3g_3g</td>\n",
" <td>28</td>\n",
" <td>grrrgGGGgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3g_3y</td>\n",
" <td>4</td>\n",
" <td>grrrgGGygrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3g_4r</td>\n",
" <td>1</td>\n",
" <td>grrrgGGrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3g_4g</td>\n",
" <td>17</td>\n",
" <td>grrrgGGrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>3y_4g</td>\n",
" <td>4</td>\n",
" <td>grrrgyyrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>4r_4g</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>4g_4g</td>\n",
" <td>32</td>\n",
" <td>grrrgrrrgrrrrrgGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>i0</td>\n",
" <td>1704418330</td>\n",
" <td>4y_4y</td>\n",
" <td>4</td>\n",
" <td>grrrgrrrgrrrrrgyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>1r_1r</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>1g_1g</td>\n",
" <td>38</td>\n",
" <td>gGGrgrrrgGGGGrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>gyyrgrrrgyyyyrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>2r_2r</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>2g_2g</td>\n",
" <td>40</td>\n",
" <td>grrGgrrrgrrrrGgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>grrygrrrgrrrrygrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3r_3r</td>\n",
" <td>1</td>\n",
" <td>grrrgGGrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3g_3g</td>\n",
" <td>28</td>\n",
" <td>grrrgGGGgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3g_3y</td>\n",
" <td>4</td>\n",
" <td>grrrgGGygrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3g_4r</td>\n",
" <td>1</td>\n",
" <td>grrrgGGrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3g_4g</td>\n",
" <td>17</td>\n",
" <td>grrrgGGrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>3y_4g</td>\n",
" <td>4</td>\n",
" <td>grrrgyyrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>4r_4g</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgGr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>4g_4g</td>\n",
" <td>32</td>\n",
" <td>grrrgrrrgrrrrrgGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>i0</td>\n",
" <td>1704418510</td>\n",
" <td>4y_4y</td>\n",
" <td>4</td>\n",
" <td>grrrgrrrgrrrrrgyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>1r_1r</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>1g_1g</td>\n",
" <td>38</td>\n",
" <td>gGGrgrrrgGGGGrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>gyyrgrrrgyyyyrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>2r_2r</td>\n",
" <td>1</td>\n",
" <td>grrrgrrrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>2g_2g</td>\n",
" <td>40</td>\n",
" <td>grrGgrrrgrrrrGgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>grrygrrrgrrrrygrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>3r_3r</td>\n",
" <td>1</td>\n",
" <td>grrrgGGrgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>3g_3g</td>\n",
" <td>28</td>\n",
" <td>grrrgGGGgrrrrrgrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>i0</td>\n",
" <td>1704418690</td>\n",
" <td>3g_3y</td>\n",
" <td>22</td>\n",
" <td>grrrgGGygrrrrrgrr</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase duration state\n",
"0 i0 1704418330 1g_1g 39 gGGrgrrrgGGGGrgrr\n",
"1 i0 1704418330 1y_1y 4 gyyrgrrrgyyyyrgrr\n",
"2 i0 1704418330 2r_2r 1 grrrgrrrgrrrrrgrr\n",
"3 i0 1704418330 2g_2g 40 grrGgrrrgrrrrGgrr\n",
"4 i0 1704418330 2y_2y 4 grrygrrrgrrrrygrr\n",
"5 i0 1704418330 3r_3r 1 grrrgGGrgrrrrrgrr\n",
"6 i0 1704418330 3g_3g 28 grrrgGGGgrrrrrgrr\n",
"7 i0 1704418330 3g_3y 4 grrrgGGygrrrrrgrr\n",
"8 i0 1704418330 3g_4r 1 grrrgGGrgrrrrrgGr\n",
"9 i0 1704418330 3g_4g 17 grrrgGGrgrrrrrgGr\n",
"10 i0 1704418330 3y_4g 4 grrrgyyrgrrrrrgGr\n",
"11 i0 1704418330 4r_4g 1 grrrgrrrgrrrrrgGr\n",
"12 i0 1704418330 4g_4g 32 grrrgrrrgrrrrrgGG\n",
"13 i0 1704418330 4y_4y 4 grrrgrrrgrrrrrgyy\n",
"14 i0 1704418510 1r_1r 1 grrrgrrrgrrrrrgrr\n",
"15 i0 1704418510 1g_1g 38 gGGrgrrrgGGGGrgrr\n",
"16 i0 1704418510 1y_1y 4 gyyrgrrrgyyyyrgrr\n",
"17 i0 1704418510 2r_2r 1 grrrgrrrgrrrrrgrr\n",
"18 i0 1704418510 2g_2g 40 grrGgrrrgrrrrGgrr\n",
"19 i0 1704418510 2y_2y 4 grrygrrrgrrrrygrr\n",
"20 i0 1704418510 3r_3r 1 grrrgGGrgrrrrrgrr\n",
"21 i0 1704418510 3g_3g 28 grrrgGGGgrrrrrgrr\n",
"22 i0 1704418510 3g_3y 4 grrrgGGygrrrrrgrr\n",
"23 i0 1704418510 3g_4r 1 grrrgGGrgrrrrrgGr\n",
"24 i0 1704418510 3g_4g 17 grrrgGGrgrrrrrgGr\n",
"25 i0 1704418510 3y_4g 4 grrrgyyrgrrrrrgGr\n",
"26 i0 1704418510 4r_4g 1 grrrgrrrgrrrrrgGr\n",
"27 i0 1704418510 4g_4g 32 grrrgrrrgrrrrrgGG\n",
"28 i0 1704418510 4y_4y 4 grrrgrrrgrrrrrgyy\n",
"29 i0 1704418690 1r_1r 1 grrrgrrrgrrrrrgrr\n",
"30 i0 1704418690 1g_1g 38 gGGrgrrrgGGGGrgrr\n",
"31 i0 1704418690 1y_1y 4 gyyrgrrrgyyyyrgrr\n",
"32 i0 1704418690 2r_2r 1 grrrgrrrgrrrrrgrr\n",
"33 i0 1704418690 2g_2g 40 grrGgrrrgrrrrGgrr\n",
"34 i0 1704418690 2y_2y 4 grrygrrrgrrrrygrr\n",
"35 i0 1704418690 3r_3r 1 grrrgGGrgrrrrrgrr\n",
"36 i0 1704418690 3g_3g 28 grrrgGGGgrrrrrgrr\n",
"37 i0 1704418690 3g_3y 22 grrrgGGygrrrrrgrr"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"node_id = self.parent_ids[0]\n",
"self.SIGTABLE[self.SIGTABLE.node_id==node_id]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 준비합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"2. 신호이력 테이블을 변환합니다.\n",
"3. 이동류정보 테이블을 변환합니다.\n",
"4. 통합 테이블을 생성합니다.\n"
]
}
],
"source": [
"self = SignalGenerator()\n",
"self.prepare_data() # 1 \n",
"self.process_history() # 2\n",
"self.process_movement() # 3\n",
"self.make_histids() # 4\n",
"self.set_timepoints() # 5-1"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>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>move_A</th>\n",
" <th>move_B</th>\n",
" <th>duration</th>\n",
" <th>state_A</th>\n",
" <th>state_B</th>\n",
" <th>phase_sumo</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418850</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418850</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418850</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704418850</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419000</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419000</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419000</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419000</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggGG</td>\n",
" <td>GGrggrr</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>101</th>\n",
" <td>206</td>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>17</td>\n",
" <td>18</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>rrrggrr</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
"86 206 i7 1704418700 1 1 8 4 45 \n",
"87 206 i7 1704418700 2 2 17 18 53 \n",
"88 206 i7 1704418700 3 3 8 4 26 \n",
"89 206 i7 1704418700 4 4 17 18 26 \n",
"90 206 i7 1704418850 1 1 8 4 45 \n",
"91 206 i7 1704418850 2 2 17 18 53 \n",
"92 206 i7 1704418850 3 3 8 4 26 \n",
"93 206 i7 1704418850 4 4 17 18 26 \n",
"94 206 i7 1704419000 1 1 8 4 45 \n",
"95 206 i7 1704419000 2 2 17 18 53 \n",
"96 206 i7 1704419000 3 3 8 4 26 \n",
"97 206 i7 1704419000 4 4 17 18 26 \n",
"98 206 i7 1704419150 1 1 8 4 45 \n",
"99 206 i7 1704419150 2 2 17 18 53 \n",
"100 206 i7 1704419150 3 3 8 4 26 \n",
"101 206 i7 1704419150 4 4 17 18 26 \n",
"\n",
" state_A state_B phase_sumo \n",
"86 rrrggGG GGrggrr 0 \n",
"87 rrrggrr rrrggrr 1 \n",
"88 rrrggGG GGrggrr 2 \n",
"89 rrrggrr rrrggrr 3 \n",
"90 rrrggGG GGrggrr 0 \n",
"91 rrrggrr rrrggrr 1 \n",
"92 rrrggGG GGrggrr 2 \n",
"93 rrrggrr rrrggrr 3 \n",
"94 rrrggGG GGrggrr 0 \n",
"95 rrrggrr rrrggrr 1 \n",
"96 rrrggGG GGrggrr 2 \n",
"97 rrrggrr rrrggrr 3 \n",
"98 rrrggGG GGrggrr 0 \n",
"99 rrrggrr rrrggrr 1 \n",
"100 rrrggGG GGrggrr 2 \n",
"101 rrrggrr rrrggrr 3 "
]
},
"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>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>1g_1g</td>\n",
" <td>41</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2g</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>i7</td>\n",
" <td>1704418700</td>\n",
" <td>2g_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</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>66</th>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>67</th>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>3g_3r</td>\n",
" <td>0</td>\n",
" <td>rrrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>68</th>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>3g_3g</td>\n",
" <td>0</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>3r_3r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>i7</td>\n",
" <td>1704419150</td>\n",
" <td>3r_3g</td>\n",
" <td>22</td>\n",
" <td>GGrggrr</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>71 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase duration state\n",
"0 i7 1704418700 1g_1g 41 GGrggGG\n",
"1 i7 1704418700 1y_1y 4 yyrggyy\n",
"2 i7 1704418700 2r_2r 0 rrrggrr\n",
"3 i7 1704418700 2r_2g 0 rrrggrr\n",
"4 i7 1704418700 2g_2r 0 rrrggrr\n",
".. ... ... ... ... ...\n",
"66 i7 1704419150 2y_2y 4 rrrggrr\n",
"67 i7 1704419150 3g_3r 0 rrrggGG\n",
"68 i7 1704419150 3g_3g 0 GGrggGG\n",
"69 i7 1704419150 3r_3r 0 rrrggrr\n",
"70 i7 1704419150 3r_3g 22 GGrggrr\n",
"\n",
"[71 rows x 5 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"NODE_ID = 'i7'\n",
"sigtable = self.sigtable[self.sigtable.node_id==NODE_ID]\n",
"display(sigtable)\n",
"\n",
"self.SIGTABLE = []\n",
"for node_id in self.node_ids:\n",
" sig = self.sigtable.query('node_id==@node_id')\n",
" for i, row in sig.iterrows():\n",
" inter_no = row.inter_no\n",
" phas_A = row.phas_A\n",
" phas_B = row.phas_B\n",
" start_unix = row.start_unix\n",
" prow = self.load_prow(inter_no, start_unix)[1].iloc[0]\n",
" red_A = prow[f'red_A{phas_A}']\n",
" yellow_A = prow[f'yellow_A{phas_A}']\n",
" red_B = prow[f'red_B{phas_B}']\n",
" yellow_B = prow[f'yellow_B{phas_B}']\n",
" sig.loc[i, ['red_A', 'red_B', 'yellow_A', 'yellow_B']] = red_A, red_B, yellow_A, yellow_B\n",
" sig = sig.astype({'red_A': int, 'red_B': int, 'yellow_A': int, 'yellow_B': int,\n",
" 'phas_A':str, 'phas_B':str})\n",
" sig = sig.drop(['move_A','move_B'], axis=1)\n",
"\n",
" sig_A = sig[['start_unix', 'phas_A', 'duration', 'state_A', 'red_A', 'yellow_A']].reset_index(drop=True)\n",
" sig_B = sig[['start_unix', 'phas_B', 'duration', 'state_B', 'red_B', 'yellow_B']].reset_index(drop=True)\n",
"\n",
" csig_A = self.cumulate(sig_A, 'A')\n",
" csig_B = self.cumulate(sig_B, 'B')\n",
"\n",
" SIG = pd.merge(csig_A, csig_B, on=['start_time', 'start_unix'], how='outer')\n",
" SIG = SIG.sort_values(by='start_time').reset_index(drop=True)\n",
" SIG[['phas_A', 'state_A']] = SIG[['phas_A', 'state_A']].fillna(method='ffill')\n",
" SIG[['phas_B', 'state_B']] = SIG[['phas_B', 'state_B']].fillna(method='ffill')\n",
" SIG['phase'] = SIG['phas_A'] + \"_\" + SIG['phas_B']\n",
" SIG['node_id'] = node_id\n",
" SIG = SIG[['node_id', 'start_unix', 'start_time', 'phase', 'state_A', 'state_B']]\n",
" SIG['duration'] = SIG['start_time'].shift(-1) - SIG['start_time']\n",
" SIG = SIG[:-1]\n",
" SIG['duration'] = SIG['duration'].astype(int)\n",
" for row in SIG.itertuples():\n",
" state = ''\n",
" for a, b, in zip(row.state_A, row.state_B):\n",
" if a == 'r':\n",
" state += b\n",
" elif b == 'r':\n",
" state += a\n",
" elif a == b:\n",
" state += a\n",
" else:\n",
" raise ValueError(f\"예상되지 않은 조합 발생: a={a}, b={b}\")\n",
" SIG.at[row.Index, 'state'] = state\n",
" SIG = SIG.drop(columns=['start_time', 'state_A', 'state_B'])\n",
" self.SIGTABLE.append(SIG)\n",
"self.SIGTABLE = pd.concat(self.SIGTABLE)\n",
"\n",
"SIGTABLE = self.SIGTABLE[self.SIGTABLE.node_id==NODE_ID]\n",
"display(SIGTABLE)"
]
},
{
"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>start_unix</th>\n",
" <th>phas_A</th>\n",
" <th>duration</th>\n",
" <th>state_A</th>\n",
" <th>red_A</th>\n",
" <th>yellow_A</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1704418700</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1704418700</td>\n",
" <td>2</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1704418700</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>rrrggGG</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1704418700</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1704418850</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>rrrggGG</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_unix phas_A duration state_A red_A yellow_A\n",
"0 1704418700 1 45 rrrggGG 0 4\n",
"1 1704418700 2 53 rrrggrr 0 4\n",
"2 1704418700 3 26 rrrggGG 0 4\n",
"3 1704418700 4 26 rrrggrr 0 4\n",
"4 1704418850 1 45 rrrggGG 0 4"
]
},
"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>start_unix</th>\n",
" <th>phas_B</th>\n",
" <th>duration</th>\n",
" <th>state_B</th>\n",
" <th>red_B</th>\n",
" <th>yellow_B</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1704418700</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1704418700</td>\n",
" <td>2</td>\n",
" <td>53</td>\n",
" <td>rrrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1704418700</td>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1704418700</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>rrrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1704418850</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>GGrggrr</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_unix phas_B duration state_B red_B yellow_B\n",
"0 1704418700 1 45 GGrggrr 0 4\n",
"1 1704418700 2 53 rrrggrr 0 4\n",
"2 1704418700 3 26 GGrggrr 0 4\n",
"3 1704418700 4 26 rrrggrr 0 4\n",
"4 1704418850 1 45 GGrggrr 0 4"
]
},
"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>start_time</th>\n",
" <th>phas_A</th>\n",
" <th>state_A</th>\n",
" <th>start_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1g</td>\n",
" <td>rrrggGG</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>41</td>\n",
" <td>1y</td>\n",
" <td>rrrggyy</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>45</td>\n",
" <td>2r</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>45</td>\n",
" <td>2g</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>94</td>\n",
" <td>2y</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_time phas_A state_A start_unix\n",
"0 0 1g rrrggGG 1704418700\n",
"1 41 1y rrrggyy 1704418700\n",
"2 45 2r rrrggrr 1704418700\n",
"3 45 2g rrrggrr 1704418700\n",
"4 94 2y rrrggrr 1704418700"
]
},
"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>start_time</th>\n",
" <th>phas_B</th>\n",
" <th>state_B</th>\n",
" <th>start_unix</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1g</td>\n",
" <td>GGrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>41</td>\n",
" <td>1y</td>\n",
" <td>yyrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>45</td>\n",
" <td>2r</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>45</td>\n",
" <td>2g</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>94</td>\n",
" <td>2y</td>\n",
" <td>rrrggrr</td>\n",
" <td>1704418700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_time phas_B state_B start_unix\n",
"0 0 1g GGrggrr 1704418700\n",
"1 41 1y yyrggrr 1704418700\n",
"2 45 2r rrrggrr 1704418700\n",
"3 45 2g rrrggrr 1704418700\n",
"4 94 2y rrrggrr 1704418700"
]
},
"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>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1g_1g</td>\n",
" <td>41</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2g</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2g_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase duration state\n",
"0 u60 1704418700 1g_1g 41 GGrggGG\n",
"1 u60 1704418700 1y_1y 4 yyrggyy\n",
"2 u60 1704418700 2r_2r 0 rrrggrr\n",
"3 u60 1704418700 2r_2g 0 rrrggrr\n",
"4 u60 1704418700 2g_2r 0 rrrggrr"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"NODE_ID = 'i7'\n",
"sig = self.sigtable[self.sigtable.node_id==NODE_ID]\n",
"# display(sig.head())\n",
"\n",
"for i, row in sig.iterrows():\n",
" inter_no = row.inter_no\n",
" phas_A = row.phas_A\n",
" phas_B = row.phas_B\n",
" start_unix = row.start_unix\n",
" prow = self.load_prow(inter_no, start_unix)[1].iloc[0]\n",
" red_A = prow[f'red_A{phas_A}']\n",
" yellow_A = prow[f'yellow_A{phas_A}']\n",
" red_B = prow[f'red_B{phas_B}']\n",
" yellow_B = prow[f'yellow_B{phas_B}']\n",
" sig.loc[i, ['red_A', 'red_B', 'yellow_A', 'yellow_B']] = red_A, red_B, yellow_A, yellow_B\n",
"\n",
"sig = sig.astype({'red_A': int, 'red_B': int, 'yellow_A': int, 'yellow_B': int,\n",
" 'phas_A':str, 'phas_B':str})\n",
"sig = sig.drop(['move_A','move_B'], axis=1)\n",
"\n",
"# display(sig.head())\n",
"sig_A = sig[['start_unix', 'phas_A', 'duration', 'state_A', 'red_A', 'yellow_A']].reset_index(drop=True)\n",
"sig_B = sig[['start_unix', 'phas_B', 'duration', 'state_B', 'red_B', 'yellow_B']].reset_index(drop=True)\n",
"\n",
"display(sig_A.head())\n",
"display(sig_B.head())\n",
"\n",
"csig_A = self.cumulate(sig_A, 'A')\n",
"csig_B = self.cumulate(sig_B, 'B')\n",
"\n",
"display(csig_A.head())\n",
"display(csig_B.head())\n",
"SIG = pd.merge(csig_A, csig_B, on=['start_time', 'start_unix'], how='outer')\n",
"SIG = SIG.sort_values(by='start_time').reset_index(drop=True)\n",
"SIG[['phas_A', 'state_A']] = SIG[['phas_A', 'state_A']].fillna(method='ffill')\n",
"SIG[['phas_B', 'state_B']] = SIG[['phas_B', 'state_B']].fillna(method='ffill')\n",
"SIG['phase'] = SIG['phas_A'] + \"_\" + SIG['phas_B']\n",
"SIG['node_id'] = node_id\n",
"SIG = SIG[['node_id', 'start_unix', 'start_time', 'phase', 'state_A', 'state_B']]\n",
"SIG['duration'] = SIG['start_time'].shift(-1) - SIG['start_time']\n",
"SIG = SIG[:-1]\n",
"SIG['duration'] = SIG['duration'].astype(int)\n",
"for row in SIG.itertuples():\n",
" state = ''\n",
" for a, b, in zip(row.state_A, row.state_B):\n",
" if a == 'r':\n",
" state += b\n",
" elif b == 'r':\n",
" state += a\n",
" elif a == b:\n",
" state += a\n",
" else:\n",
" raise ValueError(f\"예상되지 않은 조합 발생: a={a}, b={b}\")\n",
" SIG.at[row.Index, 'state'] = state\n",
"SIG = SIG.drop(columns=['start_time', 'state_A', 'state_B'])\n",
"\n",
"display(SIG.head())"
]
},
{
"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>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1g_1g</td>\n",
" <td>41</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2r_2g</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2g_2r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2g_2g</td>\n",
" <td>49</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>3r_3r</td>\n",
" <td>0</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>3r_3g</td>\n",
" <td>0</td>\n",
" <td>GGrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>3g_3r</td>\n",
" <td>0</td>\n",
" <td>rrrggGG</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase duration state\n",
"0 u60 1704418700 1g_1g 41 GGrggGG\n",
"1 u60 1704418700 1y_1y 4 yyrggyy\n",
"2 u60 1704418700 2r_2r 0 rrrggrr\n",
"3 u60 1704418700 2r_2g 0 rrrggrr\n",
"4 u60 1704418700 2g_2r 0 rrrggrr\n",
"5 u60 1704418700 2g_2g 49 rrrggrr\n",
"6 u60 1704418700 2y_2y 4 rrrggrr\n",
"7 u60 1704418700 3r_3r 0 rrrggrr\n",
"8 u60 1704418700 3r_3g 0 GGrggrr\n",
"9 u60 1704418700 3g_3r 0 rrrggGG"
]
},
"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>node_id</th>\n",
" <th>start_unix</th>\n",
" <th>phase</th>\n",
" <th>duration</th>\n",
" <th>state</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1g_1g</td>\n",
" <td>41</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2g_2g</td>\n",
" <td>49</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>2y_2y</td>\n",
" <td>4</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>3g_3g</td>\n",
" <td>22</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>3y_3y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>4g_4g</td>\n",
" <td>22</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>u60</td>\n",
" <td>1704418700</td>\n",
" <td>4y_4y</td>\n",
" <td>4</td>\n",
" <td>rrrggrr</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>u60</td>\n",
" <td>1704418850</td>\n",
" <td>1g_1g</td>\n",
" <td>41</td>\n",
" <td>GGrggGG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>u60</td>\n",
" <td>1704418850</td>\n",
" <td>1y_1y</td>\n",
" <td>4</td>\n",
" <td>yyrggyy</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" node_id start_unix phase duration state\n",
"0 u60 1704418700 1g_1g 41 GGrggGG\n",
"1 u60 1704418700 1y_1y 4 yyrggyy\n",
"5 u60 1704418700 2g_2g 49 rrrggrr\n",
"6 u60 1704418700 2y_2y 4 rrrggrr\n",
"10 u60 1704418700 3g_3g 22 GGrggGG\n",
"11 u60 1704418700 3y_3y 4 yyrggyy\n",
"15 u60 1704418700 4g_4g 22 rrrggrr\n",
"16 u60 1704418700 4y_4y 4 rrrggrr\n",
"20 u60 1704418850 1g_1g 41 GGrggGG\n",
"21 u60 1704418850 1y_1y 4 yyrggyy"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(SIG.head(10))\n",
"display(SIG[SIG.duration!=0].head(10))"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"reds = [f'red_{alph}{i}' for alph in ['A','B'] for i in range(1,9)]\n",
"yels = [f'yellow_{alph}{i}' for alph in ['A','B'] for i in range(1,9)]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"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>red_A4</th>\n",
" <th>red_B4</th>\n",
" <th>red_A5</th>\n",
" <th>red_B5</th>\n",
" <th>red_A6</th>\n",
" <th>red_B6</th>\n",
" <th>red_A7</th>\n",
" <th>red_B7</th>\n",
" <th>red_A8</th>\n",
" <th>red_B8</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>206</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>...</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>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>206</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>44</td>\n",
" <td>44</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>206</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>45</td>\n",
" <td>53</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>206</td>\n",
" <td>18</td>\n",
" <td>30</td>\n",
" <td>46</td>\n",
" <td>62</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</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>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>4 rows × 53 columns</p>\n",
"</div>"
],
"text/plain": [
" inter_no start_hour start_minute dura_A1 dura_A2 dura_A3 dura_A4 \\\n",
"24 206 0 0 33 35 26 26 \n",
"25 206 7 0 44 44 26 26 \n",
"26 206 9 0 45 53 26 26 \n",
"27 206 18 30 46 62 26 26 \n",
"\n",
" dura_A5 dura_A6 dura_A7 ... red_A4 red_B4 red_A5 red_B5 red_A6 \\\n",
"24 0 0 0 ... 0 0 0 0 0 \n",
"25 0 0 0 ... 0 0 0 0 0 \n",
"26 0 0 0 ... 0 0 0 0 0 \n",
"27 0 0 0 ... 0 0 0 0 0 \n",
"\n",
" red_B6 red_A7 red_B7 red_A8 red_B8 \n",
"24 0 0 0 0 0 \n",
"25 0 0 0 0 0 \n",
"26 0 0 0 0 0 \n",
"27 0 0 0 0 0 \n",
"\n",
"[4 rows x 53 columns]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"zeros = (self.plan[reds + yels]==0)\n",
"self.plan[zeros.any(axis=1)]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "sts",
"language": "python",
"name": "sts"
},
"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
}