{ "cells": [ { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:12<00:00, 1341.11it/s]\n" ] } ], "source": [ "import os\n", "import json\n", "import pandas as pd\n", "import numpy as np\n", "import sys\n", "import copy\n", "from datetime import datetime\n", "sys.path.append('../../Scripts')\n", "\n", "from preprocess_daily import DailyPreprocessor\n", "# from generate_signals import SignalGenerator\n", "self = DailyPreprocessor()\n", "# sg = SignalGenerator()\n", "\n", "self.load_data()\n", "self.make_match1()\n", "self.make_match2()\n", "self.make_match3()\n", "self.make_match4()\n", "self.make_match5()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "self.make_match6()\n", "self.make_matching()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.child_ids" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# initialize_state\n", "'''\n", "비보호우회전신호 (g) 배정\n", "\n", "input :\n", "(1) net : 네트워크\n", "(2) nodes : 노드 목록\n", "(3) histids : 모든 교차로에 대한 시작유닉스 (시작유닉스, A현시, B현시)별 현시시간, 진입·진출엣지\n", "\n", "output : node2init\n", "- 각 노드를 초기화된 신호로 맵핑하는 딕셔너리\n", "- 초기화된 신호란, 우회전을 g로 나머지는 r로 지정한 신호를 말함.\n", "'''\n", "self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n", "self.node2init = {}\n", "# 모든 노드들을 순회\n", "for node in self.nodes:\n", " node_id = node.getID()\n", " # 모든 connection\n", " conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n", " conns = [c for c in conns if c[0] >= 0]\n", " conns = sorted(conns, key=lambda x: x[0])\n", " state = []\n", " # i번째 connection : ci\n", " for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # j번째 connection : cj\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n", " # 그외의 경우에는 are_foes = False (g)\n", " for j, cj in conns:\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", " self.node2init[node_id] = state\n", "\n", "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n", "for _, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'rrgrrrr'" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(self.node2init['i2'])" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "old_match6 = self.match6\n", "old_matching = self.matching" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# assign_signals\n", "self.match6 = old_match6.copy()\n", "self.matching = old_matching.copy()\n", "\n", "# assign signals on matching\n", "self.matching['init_state'] = self.matching['node_id'].map(self.node2init)\n", "self.matching['state'] = self.matching['init_state'].map(lambda x:''.join(x))\n", "# matching의 각 행을 순회\n", "for row in self.matching.itertuples(index=True):\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " state = copy.deepcopy(self.node2init)[node_id]\n", "\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[row.Index, 'state'] = ''.join(state)\n", "\n", "self.matching = self.matching.dropna(subset='state')\n", "self.matching = self.matching.reset_index(drop=True)\n", "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'state']]\n", "\n", "# assign signals on match6\n", "\n", "self.match6 = self.match6.reset_index(drop=True)\n", "self.match6['init_state'] = self.match6['node_id'].map(self.node2init)\n", "self.match6['state'] = self.match6['init_state'].map(lambda x:''.join(x))\n", "\n", "# match6의 각 행을 순회\n", "for i, row in self.match6.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " state = copy.deepcopy(self.node2init)[node_id]\n", " if (pd.isna(inc_edge)) or (pd.isna(out_edge)):\n", " continue\n", " if (move_no != 21):\n", " # print(i, node_id, move_no, ''.join(state))\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " # print(i, node_id, move_no, index, ''.join(state))\n", " self.match6.at[i, 'state'] = ''.join(state)\n", "\n", "self.match6 = self.match6.dropna(subset='state')\n", "self.match6 = self.match6.reset_index(drop=True)\n", "self.match6 = self.match6[['inter_no', 'node_id', 'phase_no', 'ring_type', 'move_no', 'state']]" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_nostate
0175i01grrrgrrGgrrrrrgrr
1175i02grrrgrrrgrrrrrgGr
2175i03grrrgrrrgrrrrGgrr
3175i04gGGrgrrrgrrrrrgrr
4175i05grrrgrrrgrrrrrgrG
...............
70210i621grrrgrrrrgrrgrrr
71210i621grrrgrrrrgrrgrrr
72210i621grrrgrrrrgrrgrrr
73210i621grrrgrrrrgrrgrrr
74210u6019ggggggggG
\n", "

75 rows × 4 columns

\n", "
" ], "text/plain": [ " inter_no node_id move_no state\n", "0 175 i0 1 grrrgrrGgrrrrrgrr\n", "1 175 i0 2 grrrgrrrgrrrrrgGr\n", "2 175 i0 3 grrrgrrrgrrrrGgrr\n", "3 175 i0 4 gGGrgrrrgrrrrrgrr\n", "4 175 i0 5 grrrgrrrgrrrrrgrG\n", ".. ... ... ... ...\n", "70 210 i6 21 grrrgrrrrgrrgrrr\n", "71 210 i6 21 grrrgrrrrgrrgrrr\n", "72 210 i6 21 grrrgrrrrgrrgrrr\n", "73 210 i6 21 grrrgrrrrgrrgrrr\n", "74 210 u60 19 ggggggggG\n", "\n", "[75 rows x 4 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.matching" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "self.match6.to_csv('match6.csv',index=False)\n", "self.matching.to_csv('matching.csv',index=False)\n", "with open('node2init.json', 'w') as file:\n", " json.dump(self.node2init, file)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n" ] } ], "source": [ "import numpy as np\n", "import json\n", "from generate_signals import SignalGenerator\n", "self = SignalGenerator()\n", "self.prepare_data() # 1\n", "self.process_history() # 2\n", "self.process_movement() # 3\n", "\n", "self.match6 = pd.read_csv('match6.csv')\n", "self.matching = pd.read_csv('matching.csv')\n", "with open('node2init.json', 'r') as file:\n", " self.node2init = json.load(file)\n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idmove_nostate
0175i01grrrgrrGgrrrrrgrr
1175i02grrrgrrrgrrrrrgGr
2175i03grrrgrrrgrrrrGgrr
3175i04gGGrgrrrgrrrrrgrr
4175i05grrrgrrrgrrrrrgrG
...............
70210i621grrrgrrrrgrrgrrr
71210i621grrrgrrrrgrrgrrr
72210i621grrrgrrrrgrrgrrr
73210i621grrrgrrrrgrrgrrr
74210u6019ggggggggG
\n", "

75 rows × 4 columns

\n", "
" ], "text/plain": [ " inter_no node_id move_no state\n", "0 175 i0 1 grrrgrrGgrrrrrgrr\n", "1 175 i0 2 grrrgrrrgrrrrrgGr\n", "2 175 i0 3 grrrgrrrgrrrrGgrr\n", "3 175 i0 4 gGGrgrrrgrrrrrgrr\n", "4 175 i0 5 grrrgrrrgrrrrrgrG\n", ".. ... ... ... ...\n", "70 210 i6 21 grrrgrrrrgrrgrrr\n", "71 210 i6 21 grrrgrrrrgrrgrrr\n", "72 210 i6 21 grrrgrrrrgrrgrrr\n", "73 210 i6 21 grrrgrrrrgrrgrrr\n", "74 210 u60 19 ggggggggG\n", "\n", "[75 rows x 4 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.matching" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nostart_unixphas_Aphas_Bmove_Amove_Bduration
01751704416178118454
11751704416178227357
21751704416178336142
31751704416178346228
41751704416178445247
\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B move_A move_B duration\n", "0 175 1704416178 1 1 8 4 54\n", "1 175 1704416178 2 2 7 3 57\n", "2 175 1704416178 3 3 6 1 42\n", "3 175 1704416178 3 4 6 2 28\n", "4 175 1704416178 4 4 5 2 47" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# movedur : movements and durations\n", "self.movedur = pd.merge(self.hrhists, self.movement_updated, how='inner', on=['inter_no', 'start_unix', 'phas_A', 'phas_B'])\n", "self.movedur = self.movedur[['inter_no', 'start_unix', 'phas_A', 'phas_B', 'move_A', 'move_B', 'duration']]\n", "display(self.movedur.head())" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nostart_unixphas_Aphas_Bmove_Amove_Bdurationnode_idstate
101751704416540118443i0gGGrgrrrgGGGGrgrr
111751704416540227346i0grrGgrrrgrrrrGgrr
121751704416540336133i0grrrgGGGgrrrrrgrr
131751704416540346223i0grrrgGGrgrrrrrgGr
141751704416540445237i0grrrgrrrgrrrrrgGG
..............................
2552011704417410118333i8grrrrrrrgGGGgrrr
2562011704417410225236i8grrrrrrrgrrrgGGG
2572011704417410336225i8grrrGGGrgrrrgGGr
2582011704417410446158i8grrrGGGGgrrrgrrr
2592011704417410557418i8gGGGrrrrgrrrgrrr
\n", "

203 rows × 9 columns

\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B move_A move_B duration node_id \\\n", "10 175 1704416540 1 1 8 4 43 i0 \n", "11 175 1704416540 2 2 7 3 46 i0 \n", "12 175 1704416540 3 3 6 1 33 i0 \n", "13 175 1704416540 3 4 6 2 23 i0 \n", "14 175 1704416540 4 4 5 2 37 i0 \n", ".. ... ... ... ... ... ... ... ... \n", "255 201 1704417410 1 1 8 3 33 i8 \n", "256 201 1704417410 2 2 5 2 36 i8 \n", "257 201 1704417410 3 3 6 2 25 i8 \n", "258 201 1704417410 4 4 6 1 58 i8 \n", "259 201 1704417410 5 5 7 4 18 i8 \n", "\n", " state \n", "10 gGGrgrrrgGGGGrgrr \n", "11 grrGgrrrgrrrrGgrr \n", "12 grrrgGGGgrrrrrgrr \n", "13 grrrgGGrgrrrrrgGr \n", "14 grrrgrrrgrrrrrgGG \n", ".. ... \n", "255 grrrrrrrgGGGgrrr \n", "256 grrrrrrrgrrrgGGG \n", "257 grrrGGGrgrrrgGGr \n", "258 grrrGGGGgrrrgrrr \n", "259 gGGGrrrrgrrrgrrr \n", "\n", "[203 rows x 9 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 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\n", "\n", " # 통합된 state 지정\n", " state = ''\n", " for a, b in zip(state_A,state_B):\n", " if a == b:\n", " state += a\n", " elif (a == 'G') or (b == 'G'):\n", " state += 'G'\n", " self.histid.at[i, 'state'] = state\n", "display(self.histid)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate
0202i91704416410116246GGGG
1202i91704416410221718114rrrr
2210i617044164201161828grrrgGGGrgrrgrrr
3210i61704416420126215grrrgGGGrgrrgGGr
4210i61704416420225243grrrgrrrrgrrgGGG
..............................
383210u6017044174201161816ggggggggr
384210u60170441742012628ggggggggr
385210u601704417420225224ggggggggG
386210u601704417420337439ggggggggr
387210u601704417420448313ggggggggr
\n", "

388 rows × 9 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 202 i9 1704416410 1 1 6 2 46 \n", "1 202 i9 1704416410 2 2 17 18 114 \n", "2 210 i6 1704416420 1 1 6 18 28 \n", "3 210 i6 1704416420 1 2 6 2 15 \n", "4 210 i6 1704416420 2 2 5 2 43 \n", ".. ... ... ... ... ... ... ... ... \n", "383 210 u60 1704417420 1 1 6 18 16 \n", "384 210 u60 1704417420 1 2 6 2 8 \n", "385 210 u60 1704417420 2 2 5 2 24 \n", "386 210 u60 1704417420 3 3 7 4 39 \n", "387 210 u60 1704417420 4 4 8 3 13 \n", "\n", " state \n", "0 GGGG \n", "1 rrrr \n", "2 grrrgGGGrgrrgrrr \n", "3 grrrgGGGrgrrgGGr \n", "4 grrrgrrrrgrrgGGG \n", ".. ... \n", "383 ggggggggr \n", "384 ggggggggr \n", "385 ggggggggG \n", "386 ggggggggr \n", "387 ggggggggr \n", "\n", "[388 rows x 9 columns]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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')\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", " # 통합된 state 지정\n", " state = ''\n", " for a, b in zip(state_A,state_B):\n", " if a == b:\n", " state += a\n", " elif (a == 'G') or (b == 'G'):\n", " state += 'G'\n", " new_histid.at[i, 'state'] = state\n", " new_histid.at[i, 'node_id'] = child_id\n", " new_histids.append(new_histid)\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']]\n", "self.histids" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate
0202i91704416410116246GGGG
1202i91704416410221718114rrrr
2210i617044164201161828grrrgGGGrgrrgrrr
3210i61704416420126215grrrgGGGrgrrgGGr
4210i61704416420225243grrrgrrrrgrrgGGG
5210i61704416420337470gGGGgrrrrgrrgrrr
6210i61704416420448324grrrgrrrrgGGgrrr
7210u6017044164201161828ggggggggr
8210u601704416420126215ggggggggr
9210u601704416420225243ggggggggG
10210u601704416420337470ggggggggr
11210u601704416420448324ggggggggr
12206i71704416459118445GGrggGG
13206i7170441645922171853rrrggrr
14206i71704416459338426GGrggGG
15206i7170441645944171826rrrggrr
16178c301704416520118438gggggg
17178c301704416520227339GGGGGG
18178c301704416520335243GGGGGG
19178c301704416520446122GGGGGG
20177i21704416520118443GGgrGGG
21177i21704416520227327rrgrrrr
22177i2170441652033171870rrgrrrr
23177i21704416520445140rrgrGGG
24178i31704416520118438gGGGrgrrrrgGGGrgrrrr
25178i31704416520227339grrrGgrrrrgrrrGgrrrr
26178i31704416520335243grrrrgrrrrgrrrrgGGGG
27178i31704416520446122grrrrgGGGGgrrrrgrrrr
28177u201704416520118443gggggg
29177u201704416520227327gggggg
30177u20170441652033171870ggGggg
31177u201704416520445140gggggg
32178u301704416520118438ggggrggg
33178u301704416520227339ggggrggg
34178u301704416520335243ggggrggg
35178u301704416520446122ggggGggg
36178u311704416520118438ggggGggg
37178u311704416520227339ggggrggg
38178u311704416520335243ggggrggg
39178u311704416520446122ggggrggg
40178u321704416520118438gggggggG
41178u321704416520227339gggggggr
42178u321704416520335243gggggggr
43178u321704416520446122gggggggr
44175i01704416540118443gGGrgrrrgGGGGrgrr
45175i01704416540227346grrGgrrrgrrrrGgrr
46175i01704416540336133grrrgGGGgrrrrrgrr
47175i01704416540346223grrrgGGrgrrrrrgGr
48175i01704416540445237grrrgrrrgrrrrrgGG
49176i11704416540118437gGGGGGrgrr
50176i117044165402283103grrGGGGgrr
51176i117044165403351840grrrrrrgGG
52175u001704416540118443ggggrgggg
53175u001704416540227346ggggGgggg
54175u001704416540336133ggggrgggg
55175u001704416540346223ggggrgggg
56175u001704416540445237ggggrgggg
57201i81704416560118333grrrrrrrgGGGgrrr
58201i81704416560225236grrrrrrrgrrrgGGG
59201i81704416560336225grrrGGGrgrrrgGGr
\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 202 i9 1704416410 1 1 6 2 46 \n", "1 202 i9 1704416410 2 2 17 18 114 \n", "2 210 i6 1704416420 1 1 6 18 28 \n", "3 210 i6 1704416420 1 2 6 2 15 \n", "4 210 i6 1704416420 2 2 5 2 43 \n", "5 210 i6 1704416420 3 3 7 4 70 \n", "6 210 i6 1704416420 4 4 8 3 24 \n", "7 210 u60 1704416420 1 1 6 18 28 \n", "8 210 u60 1704416420 1 2 6 2 15 \n", "9 210 u60 1704416420 2 2 5 2 43 \n", "10 210 u60 1704416420 3 3 7 4 70 \n", "11 210 u60 1704416420 4 4 8 3 24 \n", "12 206 i7 1704416459 1 1 8 4 45 \n", "13 206 i7 1704416459 2 2 17 18 53 \n", "14 206 i7 1704416459 3 3 8 4 26 \n", "15 206 i7 1704416459 4 4 17 18 26 \n", "16 178 c30 1704416520 1 1 8 4 38 \n", "17 178 c30 1704416520 2 2 7 3 39 \n", "18 178 c30 1704416520 3 3 5 2 43 \n", "19 178 c30 1704416520 4 4 6 1 22 \n", "20 177 i2 1704416520 1 1 8 4 43 \n", "21 177 i2 1704416520 2 2 7 3 27 \n", "22 177 i2 1704416520 3 3 17 18 70 \n", "23 177 i2 1704416520 4 4 5 1 40 \n", "24 178 i3 1704416520 1 1 8 4 38 \n", "25 178 i3 1704416520 2 2 7 3 39 \n", "26 178 i3 1704416520 3 3 5 2 43 \n", "27 178 i3 1704416520 4 4 6 1 22 \n", "28 177 u20 1704416520 1 1 8 4 43 \n", "29 177 u20 1704416520 2 2 7 3 27 \n", "30 177 u20 1704416520 3 3 17 18 70 \n", "31 177 u20 1704416520 4 4 5 1 40 \n", "32 178 u30 1704416520 1 1 8 4 38 \n", "33 178 u30 1704416520 2 2 7 3 39 \n", "34 178 u30 1704416520 3 3 5 2 43 \n", "35 178 u30 1704416520 4 4 6 1 22 \n", "36 178 u31 1704416520 1 1 8 4 38 \n", "37 178 u31 1704416520 2 2 7 3 39 \n", "38 178 u31 1704416520 3 3 5 2 43 \n", "39 178 u31 1704416520 4 4 6 1 22 \n", "40 178 u32 1704416520 1 1 8 4 38 \n", "41 178 u32 1704416520 2 2 7 3 39 \n", "42 178 u32 1704416520 3 3 5 2 43 \n", "43 178 u32 1704416520 4 4 6 1 22 \n", "44 175 i0 1704416540 1 1 8 4 43 \n", "45 175 i0 1704416540 2 2 7 3 46 \n", "46 175 i0 1704416540 3 3 6 1 33 \n", "47 175 i0 1704416540 3 4 6 2 23 \n", "48 175 i0 1704416540 4 4 5 2 37 \n", "49 176 i1 1704416540 1 1 8 4 37 \n", "50 176 i1 1704416540 2 2 8 3 103 \n", "51 176 i1 1704416540 3 3 5 18 40 \n", "52 175 u00 1704416540 1 1 8 4 43 \n", "53 175 u00 1704416540 2 2 7 3 46 \n", "54 175 u00 1704416540 3 3 6 1 33 \n", "55 175 u00 1704416540 3 4 6 2 23 \n", "56 175 u00 1704416540 4 4 5 2 37 \n", "57 201 i8 1704416560 1 1 8 3 33 \n", "58 201 i8 1704416560 2 2 5 2 36 \n", "59 201 i8 1704416560 3 3 6 2 25 \n", "\n", " state \n", "0 GGGG \n", "1 rrrr \n", "2 grrrgGGGrgrrgrrr \n", "3 grrrgGGGrgrrgGGr \n", "4 grrrgrrrrgrrgGGG \n", "5 gGGGgrrrrgrrgrrr \n", "6 grrrgrrrrgGGgrrr \n", "7 ggggggggr \n", "8 ggggggggr \n", "9 ggggggggG \n", "10 ggggggggr \n", "11 ggggggggr \n", "12 GGrggGG \n", "13 rrrggrr \n", "14 GGrggGG \n", "15 rrrggrr \n", "16 gggggg \n", "17 GGGGGG \n", "18 GGGGGG \n", "19 GGGGGG \n", "20 GGgrGGG \n", "21 rrgrrrr \n", "22 rrgrrrr \n", "23 rrgrGGG \n", "24 gGGGrgrrrrgGGGrgrrrr \n", "25 grrrGgrrrrgrrrGgrrrr \n", "26 grrrrgrrrrgrrrrgGGGG \n", "27 grrrrgGGGGgrrrrgrrrr \n", "28 gggggg \n", "29 gggggg \n", "30 ggGggg \n", "31 gggggg \n", "32 ggggrggg \n", "33 ggggrggg \n", "34 ggggrggg \n", "35 ggggGggg \n", "36 ggggGggg \n", "37 ggggrggg \n", "38 ggggrggg \n", "39 ggggrggg \n", "40 gggggggG \n", "41 gggggggr \n", "42 gggggggr \n", "43 gggggggr \n", "44 gGGrgrrrgGGGGrgrr \n", "45 grrGgrrrgrrrrGgrr \n", "46 grrrgGGGgrrrrrgrr \n", "47 grrrgGGrgrrrrrgGr \n", "48 grrrgrrrgrrrrrgGG \n", "49 gGGGGGrgrr \n", "50 grrGGGGgrr \n", "51 grrrrrrgGG \n", "52 ggggrgggg \n", "53 ggggGgggg \n", "54 ggggrgggg \n", "55 ggggrgggg \n", "56 ggggrgggg \n", "57 grrrrrrrgGGGgrrr \n", "58 grrrrrrrgrrrgGGG \n", "59 grrrGGGrgrrrgGGr " ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.histids[:60]" ] } ], "metadata": { "kernelspec": { "display_name": "rts", "language": "python", "name": "rts" }, "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 }