{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"os.listdir('../../scripts')\n",
|
|
"import sys\n",
|
|
"sys.path.append('../../Scripts')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from generate_signals import SignalGenerator\n",
|
|
"from preprocess_daily import DailyPreprocessor"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"inter_no = 175\n",
|
|
"Node_id = 'i0'"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1. 데이터를 준비합니다.\n",
|
|
"1-1. 네트워크가 로드되었습니다.\n",
|
|
"1-2. 테이블들이 로드되었습니다.\n",
|
|
"2. 신호이력 테이블을 변환합니다.\n",
|
|
"3. 이동류정보 테이블을 변환합니다.\n",
|
|
"4. 통합 테이블을 생성합니다.\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>move_A</th>\n",
|
|
" <th>move_B</th>\n",
|
|
" <th>duration</th>\n",
|
|
" <th>state</th>\n",
|
|
" <th>phase_sumo</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>0_g</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>0_y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>1__r</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>34</td>\n",
|
|
" <td>GGGGGG</td>\n",
|
|
" <td>1_g</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>GGGGGG</td>\n",
|
|
" <td>1_y</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>2</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>3__r</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>65</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>3_g</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>3_y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>4__r</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>237</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>19</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>4_g</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>684 rows × 10 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
|
|
"0 178 c30 1704418730 1 1 8 4 33 \n",
|
|
"1 178 c30 1704418730 1 1 8 4 4 \n",
|
|
"2 178 c30 1704418730 2 2 7 3 1 \n",
|
|
"0 178 c30 1704418730 2 2 7 3 34 \n",
|
|
"1 178 c30 1704418730 2 2 7 3 4 \n",
|
|
".. ... ... ... ... ... ... ... ... \n",
|
|
"2 210 u60 1704419299 3 3 7 4 1 \n",
|
|
"0 210 u60 1704419299 3 3 7 4 65 \n",
|
|
"1 210 u60 1704419299 3 3 7 4 4 \n",
|
|
"2 210 u60 1704419299 4 4 8 3 1 \n",
|
|
"237 210 u60 1704419299 4 4 8 3 19 \n",
|
|
"\n",
|
|
" state phase_sumo \n",
|
|
"0 gggggg 0_g \n",
|
|
"1 gggggg 0_y \n",
|
|
"2 gggggg 1__r \n",
|
|
"0 GGGGGG 1_g \n",
|
|
"1 GGGGGG 1_y \n",
|
|
".. ... ... \n",
|
|
"2 ggggggggr 3__r \n",
|
|
"0 ggggggggr 3_g \n",
|
|
"1 ggggggggr 3_y \n",
|
|
"2 ggggggggr 4__r \n",
|
|
"237 ggggggggr 4_g \n",
|
|
"\n",
|
|
"[684 rows x 10 columns]"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# desired result\n",
|
|
"self = SignalGenerator()\n",
|
|
"self.prepare_data()\n",
|
|
"self.process_history()\n",
|
|
"self.process_movement()\n",
|
|
"self.make_histids()\n",
|
|
"self.set_timepoints()\n",
|
|
"self.assign_red_yellow()\n",
|
|
"self.self.self.self.self.self.self.self.self.self.self.self.self.self.SIGTABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLETABLE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1. 데이터를 준비합니다.\n",
|
|
"1-1. 네트워크가 로드되었습니다.\n",
|
|
"1-2. 테이블들이 로드되었습니다.\n",
|
|
"2. 신호이력 테이블을 변환합니다.\n",
|
|
"3. 이동류정보 테이블을 변환합니다.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"self = SignalGenerator()\n",
|
|
"self.prepare_data()\n",
|
|
"self.process_history()\n",
|
|
"self.process_movement()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"self.merge_dfs()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 4-2. histid\n",
|
|
"self.histid = self.movedur.copy()\n",
|
|
"self.histid['node_id'] = self.histid['inter_no'].map(self.inter2node)\n",
|
|
"histid_start = self.present_time - 600\n",
|
|
"self.histid = self.histid[self.histid.start_unix > histid_start]\n",
|
|
"\n",
|
|
"mapping_dict = self.matching.set_index(['node_id', 'move_no'])['state'].to_dict()\n",
|
|
"\n",
|
|
"for i, row in self.histid.iterrows():\n",
|
|
" node_id = row.node_id\n",
|
|
" move_A = row.move_A\n",
|
|
" move_B = row.move_B\n",
|
|
" \n",
|
|
" # A링의 state 지정\n",
|
|
" if (node_id, move_A) in mapping_dict:\n",
|
|
" state_A = mapping_dict[(node_id, move_A)]\n",
|
|
" else:\n",
|
|
" state_A = ''.join(self.node2init[node_id])\n",
|
|
" self.histid.at[i, 'state_A'] = state_A\n",
|
|
"\n",
|
|
" # B링의 state 지정\n",
|
|
" if (node_id, move_B) in mapping_dict:\n",
|
|
" state_B = mapping_dict[(node_id, move_B)]\n",
|
|
" else:\n",
|
|
" state_B = ''.join(self.node2init[node_id])\n",
|
|
" self.histid.at[i, 'state_B'] = state_B "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>inter_no</th>\n",
|
|
" <th>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",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418520</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418520</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418520</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418520</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418520</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>62</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>63</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>64</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>65</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>66</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>131</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418880</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>132</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418880</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>133</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418880</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>134</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418880</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>135</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704418880</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>193</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>194</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>195</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>196</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>197</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>259</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419240</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>260</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419240</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>261</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419240</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>262</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419240</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>263</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419240</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>337</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419420</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>338</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419420</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>45</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>339</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419420</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>33</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>340</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419420</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>341</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419420</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>37</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>380</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419520</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>24</td>\n",
|
|
" <td>grrrgrrrgGGGGrgrr</td>\n",
|
|
" <td>gGGrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>381</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419520</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>25</td>\n",
|
|
" <td>grrGgrrrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>382</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419520</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>383</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419520</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>13</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>384</th>\n",
|
|
" <td>175</td>\n",
|
|
" <td>i0</td>\n",
|
|
" <td>1704419520</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>20</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrG</td>\n",
|
|
" <td>grrrgrrrgrrrrrgGr</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",
|
|
"0 175 i0 1704418520 1 1 8 4 43 \n",
|
|
"1 175 i0 1704418520 2 2 7 3 45 \n",
|
|
"2 175 i0 1704418520 3 3 6 1 33 \n",
|
|
"3 175 i0 1704418520 3 4 6 2 22 \n",
|
|
"4 175 i0 1704418520 4 4 5 2 37 \n",
|
|
"62 175 i0 1704418699 1 1 8 4 43 \n",
|
|
"63 175 i0 1704418699 2 2 7 3 45 \n",
|
|
"64 175 i0 1704418699 3 3 6 1 33 \n",
|
|
"65 175 i0 1704418699 3 4 6 2 22 \n",
|
|
"66 175 i0 1704418699 4 4 5 2 37 \n",
|
|
"131 175 i0 1704418880 1 1 8 4 43 \n",
|
|
"132 175 i0 1704418880 2 2 7 3 45 \n",
|
|
"133 175 i0 1704418880 3 3 6 1 33 \n",
|
|
"134 175 i0 1704418880 3 4 6 2 22 \n",
|
|
"135 175 i0 1704418880 4 4 5 2 37 \n",
|
|
"193 175 i0 1704419060 1 1 8 4 43 \n",
|
|
"194 175 i0 1704419060 2 2 7 3 45 \n",
|
|
"195 175 i0 1704419060 3 3 6 1 33 \n",
|
|
"196 175 i0 1704419060 3 4 6 2 22 \n",
|
|
"197 175 i0 1704419060 4 4 5 2 37 \n",
|
|
"259 175 i0 1704419240 1 1 8 4 43 \n",
|
|
"260 175 i0 1704419240 2 2 7 3 45 \n",
|
|
"261 175 i0 1704419240 3 3 6 1 33 \n",
|
|
"262 175 i0 1704419240 3 4 6 2 22 \n",
|
|
"263 175 i0 1704419240 4 4 5 2 37 \n",
|
|
"337 175 i0 1704419420 1 1 8 4 43 \n",
|
|
"338 175 i0 1704419420 2 2 7 3 45 \n",
|
|
"339 175 i0 1704419420 3 3 6 1 33 \n",
|
|
"340 175 i0 1704419420 3 4 6 2 22 \n",
|
|
"341 175 i0 1704419420 4 4 5 2 37 \n",
|
|
"380 175 i0 1704419520 1 1 8 4 24 \n",
|
|
"381 175 i0 1704419520 2 2 7 3 25 \n",
|
|
"382 175 i0 1704419520 3 3 6 1 18 \n",
|
|
"383 175 i0 1704419520 3 4 6 2 13 \n",
|
|
"384 175 i0 1704419520 4 4 5 2 20 \n",
|
|
"\n",
|
|
" state_A state_B \n",
|
|
"0 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"1 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"2 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"3 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"4 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"62 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"63 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"64 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"65 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"66 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"131 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"132 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"133 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"134 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"135 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"193 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"194 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"195 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"196 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"197 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"259 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"260 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"261 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"262 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"263 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"337 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"338 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"339 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"340 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"341 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n",
|
|
"380 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n",
|
|
"381 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n",
|
|
"382 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n",
|
|
"383 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n",
|
|
"384 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr "
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 4-3. histids\n",
|
|
"new_histids = []\n",
|
|
"for parent_id in self.parent_ids:\n",
|
|
" for child_id in self.pa2ch[parent_id]:\n",
|
|
" new_histid = self.histid.copy()[self.histid.node_id==parent_id].drop(columns=['state_A', 'state_B'])\n",
|
|
" # new_histid[['inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']] = np.nan\n",
|
|
" for i, row in new_histid.iterrows():\n",
|
|
" phas_A = row.phas_A\n",
|
|
" phas_B = row.phas_B\n",
|
|
" new_match = self.match6[self.match6.node_id==child_id]\n",
|
|
" Arow = new_match[(new_match.phase_no==phas_A) & (new_match.ring_type=='A')]\n",
|
|
"\n",
|
|
" # A링의 state 지정\n",
|
|
" state_A = Arow.iloc[0].state\n",
|
|
" new_histid.at[i, 'state_A'] = state_A\n",
|
|
"\n",
|
|
" # B링의 state 지정\n",
|
|
" Brow = new_match[(new_match.phase_no==phas_B) & (new_match.ring_type=='B')]\n",
|
|
" state_B = Brow.iloc[0].state\n",
|
|
" new_histid.at[i, 'state_B'] = state_B\n",
|
|
"\n",
|
|
" new_histid.at[i, 'node_id'] = child_id\n",
|
|
" new_histids.append(new_histid)\n",
|
|
"import pandas as pd\n",
|
|
"new_histids = pd.concat(new_histids)\n",
|
|
"self.histids = pd.concat([self.histid.copy(), new_histids])\n",
|
|
"self.histids = self.histids.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n",
|
|
"self.histids = self.histids[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'move_A', 'move_B', 'duration', 'state_A', 'state_B']]\n",
|
|
"self.histids.query('node_id==@Node_id')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"self.set_timepoints()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"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>0</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>38</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>GGGggg</td>\n",
|
|
" <td>gggGGG</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>GGGggg</td>\n",
|
|
" <td>gggGGG</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418730</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>GGGggg</td>\n",
|
|
" <td>gggGGG</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>178</td>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418900</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>38</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>gggggg</td>\n",
|
|
" <td>0</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>233</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>18</td>\n",
|
|
" <td>28</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>234</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>6</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>15</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>235</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>43</td>\n",
|
|
" <td>ggggggggG</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>236</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>7</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>70</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>237</th>\n",
|
|
" <td>210</td>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419299</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>8</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>24</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>ggggggggr</td>\n",
|
|
" <td>4</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>238 rows × 11 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n",
|
|
"0 178 c30 1704418730 1 1 8 4 38 \n",
|
|
"1 178 c30 1704418730 2 2 7 3 39 \n",
|
|
"2 178 c30 1704418730 3 3 5 2 43 \n",
|
|
"3 178 c30 1704418730 4 4 6 1 22 \n",
|
|
"4 178 c30 1704418900 1 1 8 4 38 \n",
|
|
".. ... ... ... ... ... ... ... ... \n",
|
|
"233 210 u60 1704419299 1 1 6 18 28 \n",
|
|
"234 210 u60 1704419299 1 2 6 2 15 \n",
|
|
"235 210 u60 1704419299 2 2 5 2 43 \n",
|
|
"236 210 u60 1704419299 3 3 7 4 70 \n",
|
|
"237 210 u60 1704419299 4 4 8 3 24 \n",
|
|
"\n",
|
|
" state_A state_B phase_sumo \n",
|
|
"0 gggggg gggggg 0 \n",
|
|
"1 GGGggg gggGGG 1 \n",
|
|
"2 GGGggg gggGGG 2 \n",
|
|
"3 GGGggg gggGGG 3 \n",
|
|
"4 gggggg gggggg 0 \n",
|
|
".. ... ... ... \n",
|
|
"233 ggggggggr ggggggggr 0 \n",
|
|
"234 ggggggggr ggggggggr 1 \n",
|
|
"235 ggggggggG ggggggggr 2 \n",
|
|
"236 ggggggggr ggggggggr 3 \n",
|
|
"237 ggggggggr ggggggggr 4 \n",
|
|
"\n",
|
|
"[238 rows x 11 columns]"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.sigtable"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_red(pre_state:str, cur_state:str):\n",
|
|
" assert len(pre_state) == len(cur_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n",
|
|
" state_r = ''\n",
|
|
" for c, n in zip(pre_state, cur_state):\n",
|
|
" if c == n:\n",
|
|
" state_r += c\n",
|
|
" elif (c == 'r') and (n == 'G'):\n",
|
|
" state_r += 'r'\n",
|
|
" elif (c == 'G') and (n == 'r'):\n",
|
|
" state_r += 'r'\n",
|
|
" else:\n",
|
|
" raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n",
|
|
" return state_r\n",
|
|
"\n",
|
|
"def get_yellow(cur_state:str, nex_state:str):\n",
|
|
" assert len(cur_state) == len(nex_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n",
|
|
" state_y = ''\n",
|
|
" for c, n in zip(cur_state, nex_state):\n",
|
|
" if c == n:\n",
|
|
" state_y += c\n",
|
|
" elif (c == 'r') and (n == 'G'):\n",
|
|
" state_y += 'r'\n",
|
|
" elif (c == 'G') and (n == 'r'):\n",
|
|
" state_y += 'y'\n",
|
|
" else:\n",
|
|
" raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n",
|
|
" return state_y\n",
|
|
"\n",
|
|
"def cumulate(sig, alph):\n",
|
|
" csig = [] # cumulated sig\n",
|
|
" pre = pd.Series({f'phas_{alph}':None})\n",
|
|
"\n",
|
|
" start_time = 0\n",
|
|
" elapsed = 0\n",
|
|
" for i, cur in sig.iterrows():\n",
|
|
" start_unix = cur.start_unix\n",
|
|
" \n",
|
|
" # pre, nex\n",
|
|
" if i != 0:\n",
|
|
" pre = sig.iloc[i-1]\n",
|
|
" \n",
|
|
" if i != len(sig) - 1:\n",
|
|
" nex = sig.iloc[i+1]\n",
|
|
" \n",
|
|
" # duration\n",
|
|
" if cur[f'phas_{alph}'] == nex[f'phas_{alph}']:\n",
|
|
" continue\n",
|
|
" if cur[f'phas_{alph}'] == pre[f'phas_{alph}']:\n",
|
|
" duration = cur.duration + pre.duration\n",
|
|
" else:\n",
|
|
" duration = cur.duration\n",
|
|
" start_times = []\n",
|
|
" states = []\n",
|
|
" phases = []\n",
|
|
"\n",
|
|
" # red\n",
|
|
" if i != 0:\n",
|
|
" start_time += elapsed\n",
|
|
" start_times.append(start_time)\n",
|
|
" states.append(get_red(pre[f'state_{alph}'], cur[f'state_{alph}']))\n",
|
|
" phases.append(f'{cur[f\"phas_{alph}\"]}r')\n",
|
|
"\n",
|
|
" elapsed = cur[f'red_{alph}']\n",
|
|
"\n",
|
|
" # green\n",
|
|
" if i == 0:\n",
|
|
" start_time = 0\n",
|
|
" else:\n",
|
|
" start_time += elapsed\n",
|
|
" start_times.append(start_time)\n",
|
|
" states.append(cur[f'state_{alph}'])\n",
|
|
" phases.append(f'{cur[f\"phas_{alph}\"]}g')\n",
|
|
" if i == 0:\n",
|
|
" elapsed = duration - cur[f'yellow_{alph}']\n",
|
|
" else:\n",
|
|
" elapsed = duration - cur[f'yellow_{alph}'] - cur[f'red_{alph}']\n",
|
|
"\n",
|
|
" # yellow\n",
|
|
" if i != len(sig) - 1:\n",
|
|
" start_time += elapsed\n",
|
|
" start_times.append(start_time)\n",
|
|
" states.append(get_yellow(cur[f'state_{alph}'], nex[f'state_{alph}']))\n",
|
|
" phases.append(f'{cur[f\"phas_{alph}\"]}y')\n",
|
|
" elapsed = cur[f'yellow_{alph}']\n",
|
|
" sig_ = pd.DataFrame({'start_time':start_times, f'phas_{alph}':phases, f'state_{alph}':states})\n",
|
|
" sig_['start_unix'] = start_unix\n",
|
|
" csig.append(sig_)\n",
|
|
" csig = pd.concat(csig).reset_index(drop=True)\n",
|
|
" return csig"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 65,
|
|
"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>c30</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>1g_1g</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>gGGrgrrrgGGGGrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>1y_1y</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>gyyrgrrrgyyyyrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>2r_2r</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>grrrgrrrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>2g_2g</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>grrGgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>c30</td>\n",
|
|
" <td>1704418699</td>\n",
|
|
" <td>2y_2y</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>grrygrrrgrrrrygrr</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>33</th>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>2g_2g</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>grrGgrrrgrrrrGgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>34</th>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>2y_2y</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>grrygrrrgrrrrygrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>35</th>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>3r_3r</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>grrrgGGrgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>36</th>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>3g_3g</td>\n",
|
|
" <td>28</td>\n",
|
|
" <td>grrrgGGGgrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>37</th>\n",
|
|
" <td>u60</td>\n",
|
|
" <td>1704419060</td>\n",
|
|
" <td>3g_3y</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>grrrgGGygrrrrrgrr</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"<p>570 rows × 5 columns</p>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" node_id start_unix phase duration state\n",
|
|
"0 c30 1704418699 1g_1g 39 gGGrgrrrgGGGGrgrr\n",
|
|
"1 c30 1704418699 1y_1y 4 gyyrgrrrgyyyyrgrr\n",
|
|
"2 c30 1704418699 2r_2r 1 grrrgrrrgrrrrrgrr\n",
|
|
"3 c30 1704418699 2g_2g 40 grrGgrrrgrrrrGgrr\n",
|
|
"4 c30 1704418699 2y_2y 4 grrygrrrgrrrrygrr\n",
|
|
".. ... ... ... ... ...\n",
|
|
"33 u60 1704419060 2g_2g 40 grrGgrrrgrrrrGgrr\n",
|
|
"34 u60 1704419060 2y_2y 4 grrygrrrgrrrrygrr\n",
|
|
"35 u60 1704419060 3r_3r 1 grrrgGGrgrrrrrgrr\n",
|
|
"36 u60 1704419060 3g_3g 28 grrrgGGGgrrrrrgrr\n",
|
|
"37 u60 1704419060 3g_3y 22 grrrgGGygrrrrrgrr\n",
|
|
"\n",
|
|
"[570 rows x 5 columns]"
|
|
]
|
|
},
|
|
"execution_count": 65,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"self.SIGTABLE = []\n",
|
|
"for node_id in self.sigtable.node_id.unique():\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 = cumulate(sig_A, 'A')\n",
|
|
" csig_B = 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",
|
|
"self.SIGTABLE"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|