{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from datetime import datetime\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" inter_name | \n",
" inter_lat | \n",
" inter_lon | \n",
" group_no | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 한솔삼거리(한솔마을3거리) | \n",
" 37.36857 | \n",
" 127.11478 | \n",
" 3 | \n",
"
\n",
" \n",
" 1 | \n",
" 176 | \n",
" 느티마을4단지 | \n",
" 37.36724 | \n",
" 127.11480 | \n",
" 3 | \n",
"
\n",
" \n",
" 2 | \n",
" 177 | \n",
" 한솔6단지(정자동사무소) | \n",
" 37.36619 | \n",
" 127.11480 | \n",
" 3 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 신기4거리 | \n",
" 37.36346 | \n",
" 127.11480 | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" 201 | \n",
" 느티마을4거리 | \n",
" 37.36854 | \n",
" 127.10984 | \n",
" 3 | \n",
"
\n",
" \n",
" 5 | \n",
" 202 | \n",
" 느티마을 안촌유치원 | \n",
" 37.36855 | \n",
" 127.11241 | \n",
" 3 | \n",
"
\n",
" \n",
" 6 | \n",
" 206 | \n",
" 상록마을 321동 | \n",
" 37.36483 | \n",
" 127.10981 | \n",
" 3 | \n",
"
\n",
" \n",
" 7 | \n",
" 210 | \n",
" 상록4거리(상록마을입구4거리) | \n",
" 37.36347 | \n",
" 127.10982 | \n",
" 3 | \n",
"
\n",
" \n",
" 8 | \n",
" 211 | \n",
" 상록마을단일로 | \n",
" 37.36346 | \n",
" 127.11237 | \n",
" 3 | \n",
"
\n",
" \n",
" 9 | \n",
" 212 | \n",
" 상록마을302동 단일로 | \n",
" 37.36347 | \n",
" 127.11306 | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no inter_name inter_lat inter_lon group_no\n",
"0 175 한솔삼거리(한솔마을3거리) 37.36857 127.11478 3\n",
"1 176 느티마을4단지 37.36724 127.11480 3\n",
"2 177 한솔6단지(정자동사무소) 37.36619 127.11480 3\n",
"3 178 신기4거리 37.36346 127.11480 3\n",
"4 201 느티마을4거리 37.36854 127.10984 3\n",
"5 202 느티마을 안촌유치원 37.36855 127.11241 3\n",
"6 206 상록마을 321동 37.36483 127.10981 3\n",
"7 210 상록4거리(상록마을입구4거리) 37.36347 127.10982 3\n",
"8 211 상록마을단일로 37.36346 127.11237 3\n",
"9 212 상록마을302동 단일로 37.36347 127.11306 3"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 교차로정보\n",
"inter_info = pd.read_csv(\"inter_info.csv\")\n",
"inter_info['group_no'] = 3\n",
"inter_info"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" main_phase | \n",
" mg1A | \n",
" mg1B | \n",
" mg2A | \n",
" mg2B | \n",
" mg3A | \n",
" mg3B | \n",
" mg4A | \n",
" mg4B | \n",
" mg5A | \n",
" mg5B | \n",
" mg6A | \n",
" mg6B | \n",
" mg7A | \n",
" mg7B | \n",
" mg8A | \n",
" mg8B | \n",
" r1A | \n",
" r1B | \n",
" r2A | \n",
" r2B | \n",
" r3A | \n",
" r3B | \n",
" r4A | \n",
" r4B | \n",
" r5A | \n",
" r5B | \n",
" r6A | \n",
" r6B | \n",
" r7A | \n",
" r7B | \n",
" r8A | \n",
" r8B | \n",
" y1A | \n",
" y1B | \n",
" y2A | \n",
" y2B | \n",
" y3A | \n",
" y3B | \n",
" y4A | \n",
" y4B | \n",
" y5A | \n",
" y5B | \n",
" y6A | \n",
" y6B | \n",
" y7A | \n",
" y7B | \n",
" y8A | \n",
" y8B | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 2 | \n",
" 24 | \n",
" 27 | \n",
" 33 | \n",
" 12 | \n",
" 15 | \n",
" 39 | \n",
" 15 | \n",
" 19 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 176 | \n",
" 2 | \n",
" 21 | \n",
" 31 | \n",
" 33 | \n",
" 30 | \n",
" 16 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 177 | \n",
" 2 | \n",
" 35 | \n",
" 18 | \n",
" 36 | \n",
" 36 | \n",
" 0 | \n",
" 0 | \n",
" 38 | \n",
" 13 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 178 | \n",
" 2 | \n",
" 18 | \n",
" 19 | \n",
" 35 | \n",
" 26 | \n",
" 36 | \n",
" 29 | \n",
" 17 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 201 | \n",
" 2 | \n",
" 25 | \n",
" 20 | \n",
" 21 | \n",
" 32 | \n",
" 31 | \n",
" 28 | \n",
" 31 | \n",
" 17 | \n",
" 27 | \n",
" 27 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 5 | \n",
" 202 | \n",
" 2 | \n",
" 12 | \n",
" 30 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 6 | \n",
" 206 | \n",
" 2 | \n",
" 36 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 31 | \n",
" 31 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 7 | \n",
" 210 | \n",
" 2 | \n",
" 19 | \n",
" 0 | \n",
" 12 | \n",
" 13 | \n",
" 21 | \n",
" 37 | \n",
" 12 | \n",
" 22 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 8 | \n",
" 211 | \n",
" 2 | \n",
" 32 | \n",
" 35 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 9 | \n",
" 212 | \n",
" 2 | \n",
" 23 | \n",
" 30 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 4 | \n",
" 4 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no main_phase mg1A mg1B mg2A mg2B mg3A mg3B mg4A mg4B mg5A \\\n",
"0 175 2 24 27 33 12 15 39 15 19 0 \n",
"1 176 2 21 31 33 30 16 0 0 0 0 \n",
"2 177 2 35 18 36 36 0 0 38 13 0 \n",
"3 178 2 18 19 35 26 36 29 17 37 0 \n",
"4 201 2 25 20 21 32 31 28 31 17 27 \n",
"5 202 2 12 30 0 0 0 0 0 0 0 \n",
"6 206 2 36 29 0 0 31 31 0 0 0 \n",
"7 210 2 19 0 12 13 21 37 12 22 0 \n",
"8 211 2 32 35 0 0 0 0 0 0 0 \n",
"9 212 2 23 30 0 0 0 0 0 0 0 \n",
"\n",
" mg5B mg6A mg6B mg7A mg7B mg8A mg8B r1A r1B r2A r2B r3A r3B \\\n",
"0 0 0 0 0 0 0 0 1 1 1 1 1 1 \n",
"1 0 0 0 0 0 0 0 1 1 1 1 1 0 \n",
"2 0 0 0 0 0 0 0 1 1 1 1 1 0 \n",
"3 0 0 0 0 0 0 0 1 1 1 1 1 1 \n",
"4 27 0 0 0 0 0 0 1 1 1 1 1 1 \n",
"5 0 0 0 0 0 0 0 1 1 1 0 0 0 \n",
"6 0 0 0 0 0 0 0 1 1 1 0 1 1 \n",
"7 0 0 0 0 0 0 0 1 0 1 1 1 1 \n",
"8 0 0 0 0 0 0 0 1 1 1 0 0 0 \n",
"9 0 0 0 0 0 0 0 1 1 1 0 0 0 \n",
"\n",
" r4A r4B r5A r5B r6A r6B r7A r7B r8A r8B y1A y1B y2A y2B y3A \\\n",
"0 1 1 0 0 0 0 0 0 0 0 4 4 4 4 4 \n",
"1 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 \n",
"2 1 1 0 0 0 0 0 0 0 0 4 4 4 4 0 \n",
"3 1 1 0 0 0 0 0 0 0 0 4 4 4 4 4 \n",
"4 1 1 1 1 0 0 0 0 0 0 4 4 4 4 4 \n",
"5 0 0 0 0 0 0 0 0 0 0 4 4 0 0 0 \n",
"6 1 0 0 0 0 0 0 0 0 0 4 4 0 0 4 \n",
"7 1 1 0 0 0 0 0 0 0 0 4 0 4 4 4 \n",
"8 0 0 0 0 0 0 0 0 0 0 4 4 0 0 0 \n",
"9 0 0 0 0 0 0 0 0 0 0 4 4 0 0 0 \n",
"\n",
" y3B y4A y4B y5A y5B y6A y6B y7A y7B y8A y8B \n",
"0 4 4 4 0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 0 0 0 0 \n",
"2 0 4 4 0 0 0 0 0 0 0 0 \n",
"3 4 4 4 0 0 0 0 0 0 0 0 \n",
"4 4 4 4 4 4 0 0 0 0 0 0 \n",
"5 0 0 0 0 0 0 0 0 0 0 0 \n",
"6 4 0 0 0 0 0 0 0 0 0 0 \n",
"7 4 4 4 0 0 0 0 0 0 0 0 \n",
"8 0 0 0 0 0 0 0 0 0 0 0 \n",
"9 0 0 0 0 0 0 0 0 0 0 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 현시구성\n",
"phase_info = pd.read_csv(\"phase_info.csv\")\n",
"phase_info.drop('flow_no', axis=1, inplace=True)\n",
"# display(phase_info)\n",
"mg = phase_info.pivot_table(index='inter_no', columns=['phase_no', 'ring_type'], values='min_green_dur').fillna(0).astype(int)\n",
"y = phase_info.pivot_table(index='inter_no', columns=['phase_no', 'ring_type'], values='yellow_dur').fillna(0).astype(int)\n",
"r = phase_info.pivot_table(index='inter_no', columns=['phase_no', 'ring_type'], values='red_dur').fillna(0).astype(int)\n",
"max_phase_no = phase_info['phase_no'].max()\n",
"new_columns = [f'{col}{phase}{ring}' for col in ['mg', 'y', 'r'] for phase in range(1, max_phase_no + 1) for ring in ['A', 'B']]\n",
"phase_info = pd.concat([mg, y, r], axis=1)\n",
"phase_info.columns = new_columns\n",
"phase_info['main_phase'] = 2\n",
"phase_info['mg6A'] = phase_info['mg6B'] = phase_info['mg7A'] = phase_info['mg7B'] = phase_info['mg8A'] = phase_info['mg8B']= 0\n",
"phase_info['y6A'] = phase_info['y6B'] = phase_info['y7A'] = phase_info['y7B'] = phase_info['y8A'] = phase_info['y8B']= 0\n",
"phase_info['r6A'] = phase_info['r6B'] = phase_info['r7A'] = phase_info['r7B'] = phase_info['r8A'] = phase_info['r8B']= 0\n",
"phase_info = phase_info[sorted(phase_info.columns)]\n",
"phase_info.reset_index(inplace=True)\n",
"with pd.option_context('display.max_rows', None, 'display.max_columns', None): \n",
" display(phase_info)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" angle_A1 | \n",
" angle_A2 | \n",
" angle_A3 | \n",
" angle_A4 | \n",
" angle_A5 | \n",
" angle_A6 | \n",
" angle_A7 | \n",
" angle_A8 | \n",
" angle_B1 | \n",
" angle_B2 | \n",
" angle_B3 | \n",
" angle_B4 | \n",
" angle_B5 | \n",
" angle_B6 | \n",
" angle_B7 | \n",
" angle_B8 | \n",
"
\n",
" \n",
" inter_no | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 175 | \n",
" 179004 | \n",
" 001095 | \n",
" 090270 | \n",
" 268000 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 003176 | \n",
" 179270 | \n",
" 090180 | \n",
" 270090 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 176 | \n",
" 180000 | \n",
" 180000 | \n",
" 270356 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 359180 | \n",
" 180270 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 177 | \n",
" 180000 | \n",
" 000090 | \n",
" stop | \n",
" 268000 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 001176 | \n",
" 179270 | \n",
" NaN | \n",
" 090180 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 178 | \n",
" 180000 | \n",
" 000090 | \n",
" 270000 | \n",
" 090270 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 000180 | \n",
" 180270 | \n",
" 270090 | \n",
" 090180 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 201 | \n",
" 180000 | \n",
" 270000 | \n",
" 090270 | \n",
" 090270 | \n",
" 000090 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 180270 | \n",
" 270090 | \n",
" 270090 | \n",
" 090180 | \n",
" 000180 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 202 | \n",
" 090270 | \n",
" stop | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 270090 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 206 | \n",
" 180000 | \n",
" stop | \n",
" 180000 | \n",
" stop | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 000180 | \n",
" NaN | \n",
" 000180 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 210 | \n",
" 090270 | \n",
" 268000 | \n",
" 359090 | \n",
" 180000 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 270090 | \n",
" 000180 | \n",
" 180270 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 211 | \n",
" 090270 | \n",
" stop | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 270090 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 212 | \n",
" 090270 | \n",
" stop | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 268090 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" angle_A1 angle_A2 angle_A3 angle_A4 angle_A5 angle_A6 angle_A7 \\\n",
"inter_no \n",
"175 179004 001095 090270 268000 NaN NaN NaN \n",
"176 180000 180000 270356 NaN NaN NaN NaN \n",
"177 180000 000090 stop 268000 NaN NaN NaN \n",
"178 180000 000090 270000 090270 NaN NaN NaN \n",
"201 180000 270000 090270 090270 000090 NaN NaN \n",
"202 090270 stop NaN NaN NaN NaN NaN \n",
"206 180000 stop 180000 stop NaN NaN NaN \n",
"210 090270 268000 359090 180000 NaN NaN NaN \n",
"211 090270 stop NaN NaN NaN NaN NaN \n",
"212 090270 stop NaN NaN NaN NaN NaN \n",
"\n",
" angle_A8 angle_B1 angle_B2 angle_B3 angle_B4 angle_B5 angle_B6 \\\n",
"inter_no \n",
"175 NaN 003176 179270 090180 270090 NaN NaN \n",
"176 NaN 359180 180270 NaN NaN NaN NaN \n",
"177 NaN 001176 179270 NaN 090180 NaN NaN \n",
"178 NaN 000180 180270 270090 090180 NaN NaN \n",
"201 NaN 180270 270090 270090 090180 000180 NaN \n",
"202 NaN 270090 NaN NaN NaN NaN NaN \n",
"206 NaN 000180 NaN 000180 NaN NaN NaN \n",
"210 NaN NaN 270090 000180 180270 NaN NaN \n",
"211 NaN 270090 NaN NaN NaN NaN NaN \n",
"212 NaN 268090 NaN NaN NaN NaN NaN \n",
"\n",
" angle_B7 angle_B8 \n",
"inter_no \n",
"175 NaN NaN \n",
"176 NaN NaN \n",
"177 NaN NaN \n",
"178 NaN NaN \n",
"201 NaN NaN \n",
"202 NaN NaN \n",
"206 NaN NaN \n",
"210 NaN NaN \n",
"211 NaN NaN \n",
"212 NaN NaN "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 방위각정보\n",
"flow_angle = pd.read_csv(\"flow_angle.csv\")\n",
"angle = flow_angle.pivot_table(index='inter_no', columns=['phase_no', 'ring_type'], values='angle_code', aggfunc='first').fillna('NaN')\n",
"new_columns = [f'angle_{ring}{phase}' for phase in range(1, 6) for ring in ['A', 'B']]\n",
"angle.columns = new_columns\n",
"angle['angle_A6'] = angle['angle_A7'] = angle['angle_A8'] = np.nan\n",
"angle['angle_B6'] = angle['angle_B7'] = angle['angle_B8'] = np.nan\n",
"angle = angle[sorted(angle.columns)]\n",
"angle"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phas_A | \n",
" phas_B | \n",
" move_A | \n",
" move_B | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
"
\n",
" \n",
" 0 | \n",
" 176 | \n",
" 2 | \n",
" 2 | \n",
" 8 | \n",
" 3 | \n",
"
\n",
" \n",
" 0 | \n",
" 177 | \n",
" 2 | \n",
" 2 | \n",
" 7 | \n",
" 3 | \n",
"
\n",
" \n",
" 0 | \n",
" 178 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 4 | \n",
"
\n",
" \n",
" 0 | \n",
" 201 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" 3 | \n",
"
\n",
" \n",
" 0 | \n",
" 202 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 2 | \n",
"
\n",
" \n",
" 0 | \n",
" 206 | \n",
" 4 | \n",
" 4 | \n",
" 17 | \n",
" 18 | \n",
"
\n",
" \n",
" 0 | \n",
" 210 | \n",
" 2 | \n",
" 2 | \n",
" 5 | \n",
" 2 | \n",
"
\n",
" \n",
" 0 | \n",
" 211 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" 2 | \n",
"
\n",
" \n",
" 0 | \n",
" 212 | \n",
" 2 | \n",
" 2 | \n",
" 17 | \n",
" 18 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phas_A phas_B move_A move_B\n",
"0 175 2 2 7 3\n",
"0 176 2 2 8 3\n",
"0 177 2 2 7 3\n",
"0 178 1 1 8 4\n",
"0 201 1 1 8 3\n",
"0 202 1 1 6 2\n",
"0 206 4 4 17 18\n",
"0 210 2 2 5 2\n",
"0 211 1 1 6 2\n",
"0 212 2 2 17 18"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 이동류번호\n",
"plan = pd.read_csv(\"time_plan.csv\")\n",
"phase = pd.read_csv('phase_info.csv')\n",
"plan = plan[plan.ID.isin([1, 5, 8, 11])]\n",
"ID2starttime = {1:\"00:00\", 5:\"07:00\", 8:\"09:00\", 11:\"18:30\"}\n",
"plan['start_hour'] = plan.ID.apply(lambda id:ID2starttime[id].split(\":\")[0])\n",
"plan['start_minute']=plan.ID.apply(lambda id:ID2starttime[id].split(\":\")[1])\n",
"plan = plan[['inter_no', 'start_hour', 'start_minute', 'phase_no', 'ring_type', 'duration', 'cycle']]\n",
"plan_ = pd.merge(plan, phase[['inter_no', 'phase_no', 'ring_type', 'flow_no']], on=['inter_no', 'phase_no', 'ring_type'], how='left')\n",
"plan_['flow_no'] = plan_['flow_no'].fillna(18).astype(int)\n",
"plan_['start_second'] = plan_.start_hour.astype(int)*3600 + plan_.start_minute.astype(int)*60\n",
"plan_ = plan_[['inter_no', 'start_second', 'phase_no', 'ring_type', 'duration', 'flow_no', 'cycle']]\n",
"cycle_dict = dict(zip(zip(plan_['inter_no'], plan_['start_second']), plan_['cycle']))\n",
"df = plan_[['inter_no','start_second','cycle']].drop_duplicates()\n",
"df = df.reset_index(drop=True)\n",
"df['start_second_exact'] = 0\n",
"for i in range(1, len(df)):\n",
" if i % 4 != 0:\n",
" prev = df.loc[i-1, 'start_second_exact']\n",
" start_second = df.loc[i, 'start_second']\n",
" cycle = df.loc[i-1, 'cycle']\n",
" df.loc[i, 'start_second_exact'] = (start_second - prev) % cycle + start_second\n",
"inter2start = {inter_no:list(df[df.inter_no==inter_no]['start_second_exact']) for inter_no in df.inter_no}\n",
"plan_ = plan_.pivot_table(index=['inter_no', 'start_second', 'phase_no'],\n",
" columns='ring_type',\n",
" values=['duration', 'flow_no'],\n",
" aggfunc='first').reset_index()\n",
"plan_.columns = ['inter_no', 'start_second', 'phase_no', 'dura_A', 'dura_B', 'move_A', 'move_B']\n",
"inter2no_phase = {inter_no:group.phase_no.unique().max() for (inter_no, group) in plan.groupby('inter_no')}\n",
"\n",
"midnight = int(datetime(2024, 1, 5, 0, 0, 0).timestamp())\n",
"present = int(datetime(2024, 1, 5, 3, 55, 48).timestamp()) # <===== 현재시각\n",
"sec = present - midnight\n",
"the_start_second = np.max(df.start_second[df.start_second <= sec])\n",
"move = []\n",
"for inter_no in plan_.inter_no.unique():\n",
" cycle = cycle_dict[(inter_no, the_start_second)]\n",
" df = plan_[(plan_.inter_no==inter_no)&(plan_.start_second==the_start_second)].reset_index(drop=True)\n",
" remainder = sec % cycle\n",
" df['cums_A'] = df.copy().dura_A.cumsum()\n",
" df['cums_B'] = df.copy().dura_B.cumsum()\n",
" ind_A = len(df.cums_A[df.cums_A <= remainder])%inter2no_phase[inter_no]\n",
" ind_B = len(df.cums_B[df.cums_B <= remainder])%inter2no_phase[inter_no]\n",
" dura_A = df.loc[ind_A,'dura_A']\n",
" dura_B = df.loc[ind_B,'dura_B']\n",
" phas_A = df.loc[ind_A,'phase_no']\n",
" phas_B = df.loc[ind_B,'phase_no']\n",
" move_A = df.loc[ind_A,'move_A']\n",
" move_B = df.loc[ind_B,'move_B']\n",
" move.append(pd.DataFrame({'inter_no':[inter_no],'phas_A':[phas_A], 'phas_B':[phas_B],'move_A':[move_A], 'move_B':[move_B]}))\n",
"move = pd.concat(move)\n",
"move"
]
},
{
"cell_type": "code",
"execution_count": 368,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" group_no | \n",
" timeplan_no | \n",
" ID | \n",
" phase_no | \n",
" ring_type | \n",
" duration | \n",
" cycle | \n",
" offset | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 27 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" A | \n",
" 37 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 27 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" B | \n",
" 37 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 27 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" A | \n",
" 39 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 27 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" B | \n",
" 39 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 27 | \n",
" 1 | \n",
" 1 | \n",
" 3 | \n",
" A | \n",
" 55 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 1083 | \n",
" 212 | \n",
" 27 | \n",
" 1 | \n",
" 15 | \n",
" 2 | \n",
" B | \n",
" 211 | \n",
" 250 | \n",
" 0 | \n",
"
\n",
" \n",
" 1084 | \n",
" 212 | \n",
" 27 | \n",
" 1 | \n",
" 16 | \n",
" 1 | \n",
" A | \n",
" 39 | \n",
" 250 | \n",
" 0 | \n",
"
\n",
" \n",
" 1085 | \n",
" 212 | \n",
" 27 | \n",
" 1 | \n",
" 16 | \n",
" 1 | \n",
" B | \n",
" 39 | \n",
" 250 | \n",
" 0 | \n",
"
\n",
" \n",
" 1086 | \n",
" 212 | \n",
" 27 | \n",
" 1 | \n",
" 16 | \n",
" 2 | \n",
" A | \n",
" 211 | \n",
" 250 | \n",
" 0 | \n",
"
\n",
" \n",
" 1087 | \n",
" 212 | \n",
" 27 | \n",
" 1 | \n",
" 16 | \n",
" 2 | \n",
" B | \n",
" 211 | \n",
" 250 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1088 rows × 9 columns
\n",
"
"
],
"text/plain": [
" inter_no group_no timeplan_no ID phase_no ring_type duration \\\n",
"0 175 27 1 1 1 A 37 \n",
"1 175 27 1 1 1 B 37 \n",
"2 175 27 1 1 2 A 39 \n",
"3 175 27 1 1 2 B 39 \n",
"4 175 27 1 1 3 A 55 \n",
"... ... ... ... .. ... ... ... \n",
"1083 212 27 1 15 2 B 211 \n",
"1084 212 27 1 16 1 A 39 \n",
"1085 212 27 1 16 1 B 39 \n",
"1086 212 27 1 16 2 A 211 \n",
"1087 212 27 1 16 2 B 211 \n",
"\n",
" cycle offset \n",
"0 160 57 \n",
"1 160 57 \n",
"2 160 57 \n",
"3 160 57 \n",
"4 160 57 \n",
"... ... ... \n",
"1083 250 0 \n",
"1084 250 0 \n",
"1085 250 0 \n",
"1086 250 0 \n",
"1087 250 0 \n",
"\n",
"[1088 rows x 9 columns]"
]
},
"execution_count": 368,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plan = pd.read_csv(\"time_plan.csv\")\n",
"plan"
]
},
{
"cell_type": "code",
"execution_count": 509,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" start_hour | \n",
" start_minute | \n",
" ddur_1 | \n",
" ddur_2 | \n",
" ddur_3 | \n",
" ddur_4 | \n",
" ddur_5 | \n",
" ddur_6 | \n",
" ddur_7 | \n",
" ddur_8 | \n",
" cycle | \n",
" offset | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 39 | \n",
" 25 | \n",
" 30 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 57 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 42 | \n",
" 29 | \n",
" 26 | \n",
" 33 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 40 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 18 | \n",
" 30 | \n",
" 46 | \n",
" 48 | \n",
" 37 | \n",
" 18 | \n",
" 41 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 18 | \n",
"
\n",
" \n",
" 4 | \n",
" 176 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 73 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 131 | \n",
"
\n",
" \n",
" 5 | \n",
" 176 | \n",
" 07 | \n",
" 00 | \n",
" 37 | \n",
" 93 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 153 | \n",
"
\n",
" \n",
" 6 | \n",
" 176 | \n",
" 09 | \n",
" 00 | \n",
" 37 | \n",
" 103 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 169 | \n",
"
\n",
" \n",
" 7 | \n",
" 176 | \n",
" 18 | \n",
" 30 | \n",
" 37 | \n",
" 113 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 185 | \n",
"
\n",
" \n",
" 8 | \n",
" 177 | \n",
" 00 | \n",
" 00 | \n",
" 36 | \n",
" 20 | \n",
" 68 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 35 | \n",
"
\n",
" \n",
" 9 | \n",
" 177 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 25 | \n",
" 71 | \n",
" 34 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 33 | \n",
"
\n",
" \n",
" 10 | \n",
" 177 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 27 | \n",
" 70 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 41 | \n",
"
\n",
" \n",
" 11 | \n",
" 177 | \n",
" 18 | \n",
" 30 | \n",
" 45 | \n",
" 32 | \n",
" 77 | \n",
" 36 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 49 | \n",
"
\n",
" \n",
" 12 | \n",
" 178 | \n",
" 00 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 40 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 50 | \n",
"
\n",
" \n",
" 13 | \n",
" 178 | \n",
" 07 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 42 | \n",
" 20 | \n",
" 21 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 90 | \n",
"
\n",
" \n",
" 14 | \n",
" 178 | \n",
" 09 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 43 | \n",
" 28 | \n",
" 22 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 80 | \n",
"
\n",
" \n",
" 15 | \n",
" 178 | \n",
" 18 | \n",
" 30 | \n",
" 38 | \n",
" 39 | \n",
" 44 | \n",
" 36 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 75 | \n",
"
\n",
" \n",
" 16 | \n",
" 201 | \n",
" 00 | \n",
" 00 | \n",
" 24 | \n",
" 24 | \n",
" 17 | \n",
" 58 | \n",
" 17 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 133 | \n",
"
\n",
" \n",
" 17 | \n",
" 201 | \n",
" 07 | \n",
" 00 | \n",
" 30 | \n",
" 36 | \n",
" 18 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 132 | \n",
"
\n",
" \n",
" 18 | \n",
" 201 | \n",
" 09 | \n",
" 00 | \n",
" 33 | \n",
" 36 | \n",
" 25 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 134 | \n",
"
\n",
" \n",
" 19 | \n",
" 201 | \n",
" 18 | \n",
" 30 | \n",
" 36 | \n",
" 50 | \n",
" 18 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 137 | \n",
"
\n",
" \n",
" 20 | \n",
" 202 | \n",
" 00 | \n",
" 00 | \n",
" 39 | \n",
" 101 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 103 | \n",
"
\n",
" \n",
" 21 | \n",
" 202 | \n",
" 07 | \n",
" 00 | \n",
" 46 | \n",
" 114 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 103 | \n",
"
\n",
" \n",
" 22 | \n",
" 202 | \n",
" 09 | \n",
" 00 | \n",
" 46 | \n",
" 114 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 103 | \n",
"
\n",
" \n",
" 23 | \n",
" 202 | \n",
" 18 | \n",
" 30 | \n",
" 48 | \n",
" 122 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 103 | \n",
"
\n",
" \n",
" 24 | \n",
" 206 | \n",
" 00 | \n",
" 00 | \n",
" 33 | \n",
" 35 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 120 | \n",
" 10 | \n",
"
\n",
" \n",
" 25 | \n",
" 206 | \n",
" 07 | \n",
" 00 | \n",
" 44 | \n",
" 44 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 7 | \n",
"
\n",
" \n",
" 26 | \n",
" 206 | \n",
" 09 | \n",
" 00 | \n",
" 45 | \n",
" 53 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 17 | \n",
"
\n",
" \n",
" 27 | \n",
" 206 | \n",
" 18 | \n",
" 30 | \n",
" 46 | \n",
" 62 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 10 | \n",
"
\n",
" \n",
" 28 | \n",
" 210 | \n",
" 00 | \n",
" 00 | \n",
" 24 | \n",
" 19 | \n",
" 29 | \n",
" 56 | \n",
" 22 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 115 | \n",
"
\n",
" \n",
" 29 | \n",
" 210 | \n",
" 07 | \n",
" 00 | \n",
" 24 | \n",
" 19 | \n",
" 39 | \n",
" 65 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 131 | \n",
"
\n",
" \n",
" 30 | \n",
" 210 | \n",
" 09 | \n",
" 00 | \n",
" 28 | \n",
" 15 | \n",
" 43 | \n",
" 70 | \n",
" 24 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 137 | \n",
"
\n",
" \n",
" 31 | \n",
" 210 | \n",
" 18 | \n",
" 30 | \n",
" 24 | \n",
" 19 | \n",
" 47 | \n",
" 75 | \n",
" 25 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 143 | \n",
"
\n",
" \n",
" 32 | \n",
" 211 | \n",
" 00 | \n",
" 00 | \n",
" 28 | \n",
" 97 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 125 | \n",
" 45 | \n",
"
\n",
" \n",
" 33 | \n",
" 211 | \n",
" 07 | \n",
" 00 | \n",
" 28 | \n",
" 107 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 135 | \n",
" 45 | \n",
"
\n",
" \n",
" 34 | \n",
" 211 | \n",
" 09 | \n",
" 00 | \n",
" 28 | \n",
" 112 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 55 | \n",
"
\n",
" \n",
" 35 | \n",
" 211 | \n",
" 18 | \n",
" 30 | \n",
" 28 | \n",
" 117 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 145 | \n",
" 55 | \n",
"
\n",
" \n",
" 36 | \n",
" 212 | \n",
" 00 | \n",
" 00 | \n",
" 39 | \n",
" 161 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 200 | \n",
" 0 | \n",
"
\n",
" \n",
" 37 | \n",
" 212 | \n",
" 07 | \n",
" 00 | \n",
" 39 | \n",
" 181 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 220 | \n",
" 0 | \n",
"
\n",
" \n",
" 38 | \n",
" 212 | \n",
" 09 | \n",
" 00 | \n",
" 39 | \n",
" 191 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 230 | \n",
" 0 | \n",
"
\n",
" \n",
" 39 | \n",
" 212 | \n",
" 18 | \n",
" 30 | \n",
" 39 | \n",
" 201 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 240 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n",
"0 175 00 00 37 39 25 30 29 \n",
"1 175 07 00 40 42 29 26 33 \n",
"2 175 09 00 43 45 33 22 37 \n",
"3 175 18 30 46 48 37 18 41 \n",
"4 176 00 00 37 73 40 0 0 \n",
"5 176 07 00 37 93 40 0 0 \n",
"6 176 09 00 37 103 40 0 0 \n",
"7 176 18 30 37 113 40 0 0 \n",
"8 177 00 00 36 20 68 26 0 \n",
"9 177 07 00 40 25 71 34 0 \n",
"10 177 09 00 43 27 70 40 0 \n",
"11 177 18 30 45 32 77 36 0 \n",
"12 178 00 00 38 39 40 23 0 \n",
"13 178 07 00 38 39 42 20 21 \n",
"14 178 09 00 38 39 43 28 22 \n",
"15 178 18 30 38 39 44 36 23 \n",
"16 201 00 00 24 24 17 58 17 \n",
"17 201 07 00 30 36 18 58 18 \n",
"18 201 09 00 33 36 25 58 18 \n",
"19 201 18 30 36 50 18 58 18 \n",
"20 202 00 00 39 101 0 0 0 \n",
"21 202 07 00 46 114 0 0 0 \n",
"22 202 09 00 46 114 0 0 0 \n",
"23 202 18 30 48 122 0 0 0 \n",
"24 206 00 00 33 35 26 26 0 \n",
"25 206 07 00 44 44 26 26 0 \n",
"26 206 09 00 45 53 26 26 0 \n",
"27 206 18 30 46 62 26 26 0 \n",
"28 210 00 00 24 19 29 56 22 \n",
"29 210 07 00 24 19 39 65 23 \n",
"30 210 09 00 28 15 43 70 24 \n",
"31 210 18 30 24 19 47 75 25 \n",
"32 211 00 00 28 97 0 0 0 \n",
"33 211 07 00 28 107 0 0 0 \n",
"34 211 09 00 28 112 0 0 0 \n",
"35 211 18 30 28 117 0 0 0 \n",
"36 212 00 00 39 161 0 0 0 \n",
"37 212 07 00 39 181 0 0 0 \n",
"38 212 09 00 39 191 0 0 0 \n",
"39 212 18 30 39 201 0 0 0 \n",
"\n",
" ddur_6 ddur_7 ddur_8 cycle offset \n",
"0 0 0 0 160 57 \n",
"1 0 0 0 170 40 \n",
"2 0 0 0 180 28 \n",
"3 0 0 0 190 18 \n",
"4 0 0 0 150 131 \n",
"5 0 0 0 170 153 \n",
"6 0 0 0 180 169 \n",
"7 0 0 0 190 185 \n",
"8 0 0 0 150 35 \n",
"9 0 0 0 170 33 \n",
"10 0 0 0 180 41 \n",
"11 0 0 0 190 49 \n",
"12 0 0 0 140 50 \n",
"13 0 0 0 160 90 \n",
"14 0 0 0 170 80 \n",
"15 0 0 0 180 75 \n",
"16 0 0 0 140 133 \n",
"17 0 0 0 160 132 \n",
"18 0 0 0 170 134 \n",
"19 0 0 0 180 137 \n",
"20 0 0 0 140 103 \n",
"21 0 0 0 160 103 \n",
"22 0 0 0 160 103 \n",
"23 0 0 0 170 103 \n",
"24 0 0 0 120 10 \n",
"25 0 0 0 140 7 \n",
"26 0 0 0 150 17 \n",
"27 0 0 0 160 10 \n",
"28 0 0 0 150 115 \n",
"29 0 0 0 170 131 \n",
"30 0 0 0 180 137 \n",
"31 0 0 0 190 143 \n",
"32 0 0 0 125 45 \n",
"33 0 0 0 135 45 \n",
"34 0 0 0 140 55 \n",
"35 0 0 0 145 55 \n",
"36 0 0 0 200 0 \n",
"37 0 0 0 220 0 \n",
"38 0 0 0 230 0 \n",
"39 0 0 0 240 0 "
]
},
"execution_count": 509,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 신호계획\n",
"plan = pd.read_csv(\"time_plan.csv\")\n",
"plan = plan[plan.ID.isin([1, 5, 8, 11])]\n",
"ID2starttime = {1:\"00:00\", 5:\"07:00\", 8:\"09:00\", 11:\"18:30\"}\n",
"plan['start_hour'] = plan.ID.apply(lambda id:ID2starttime[id].split(\":\")[0])\n",
"plan['start_minute']=plan.ID.apply(lambda id:ID2starttime[id].split(\":\")[1])\n",
"plan = plan[['inter_no', 'start_hour', 'start_minute', 'phase_no', 'ring_type', 'duration', 'cycle', 'offset']]\n",
"plan = plan.pivot_table(index=['inter_no', 'start_hour', 'start_minute', 'cycle', 'offset'], columns=['phase_no','ring_type'], values='duration', aggfunc='first').fillna(0).astype(int)\n",
"new_columns = [f'dura_{ring}{phase}' for phase in range(1, 6) for ring in ['A', 'B']]\n",
"plan.columns = new_columns\n",
"new_columns = [f'dura_{ring}{phase}' for phase in range(1, 9) for ring in ['A', 'B']]\n",
"for col in new_columns:\n",
" if col not in plan.columns:\n",
" plan[col] = 0\n",
"plan.reset_index(inplace=True)\n",
"plan = plan[list(plan.columns)[:3] + sorted(plan.columns)[1:-4] + list(plan.columns)[3:5]]\n",
"\n",
"cums_A = np.array(plan[[f'dura_A{k}' for k in range(1,9)]].cumsum(axis=1))\n",
"cums_B = np.array(plan[[f'dura_B{k}' for k in range(1,9)]].cumsum(axis=1))\n",
"detailed_cums = []\n",
"i = 0\n",
"for row_A, row_B in zip(cums_A, cums_B):\n",
" combined_row = np.unique(np.concatenate((row_A, row_B)))\n",
" ddur = np.concatenate(([combined_row[0]], np.diff(combined_row)))\n",
" ddur = np.pad(ddur, (0, 8 - len(ddur)), constant_values=(0))\n",
" detailed_cums.append(ddur)\n",
" for j in range(8):\n",
" plan.at[i, f'ddur_{j+1}'] = ddur[j]\n",
" i+=1\n",
"plan = plan[['inter_no', 'start_hour', 'start_minute'] + [f'ddur_{i}' for i in range(1,9)] + ['cycle', 'offset']\n",
" #+ [f'dura_{phase}{i}' for phase in ['A','B'] for i in range(1,9)]\n",
" ]\n",
"plan[[f'ddur_{i}' for i in range(1,9)]] = plan[[f'ddur_{i}' for i in range(1,9)]].astype(int)\n",
"\n",
"plan"
]
},
{
"cell_type": "code",
"execution_count": 528,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" start_hour | \n",
" start_minute | \n",
" ddur_1 | \n",
" ddur_2 | \n",
" ddur_3 | \n",
" ddur_4 | \n",
" ddur_5 | \n",
" ddur_6 | \n",
" ddur_7 | \n",
" ddur_8 | \n",
" cycle | \n",
" offset | \n",
" unix | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 39 | \n",
" 25 | \n",
" 30 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 57 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 42 | \n",
" 29 | \n",
" 26 | \n",
" 33 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 40 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 18 | \n",
" 30 | \n",
" 46 | \n",
" 48 | \n",
" 37 | \n",
" 18 | \n",
" 41 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 18 | \n",
" 1704447000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n",
"0 175 00 00 37 39 25 30 29 \n",
"1 175 07 00 40 42 29 26 33 \n",
"2 175 09 00 43 45 33 22 37 \n",
"3 175 18 30 46 48 37 18 41 \n",
"\n",
" ddur_6 ddur_7 ddur_8 cycle offset unix \n",
"0 0 0 0 160 57 1704380400 \n",
"1 0 0 0 170 40 1704405600 \n",
"2 0 0 0 180 28 1704412800 \n",
"3 0 0 0 190 18 1704447000 "
]
},
"execution_count": 528,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"planned = plan.copy()\n",
"midnight = int(datetime(2024, 1, 5, 0, 0, 0).timestamp())\n",
"next_day = int(datetime(2024, 1, 6, 0, 0, 0).timestamp())\n",
"# planned['seconds'] = planned['start_hour'].astype(int)*3600 + planned['start_minute'].astype(int)*60\n",
"planned['unix'] = planned['start_hour'].astype(int)*3600 + plan['start_minute'].astype(int)*60 + midnight\n",
"plan175 = planned[planned.inter_no==175]"
]
},
{
"cell_type": "code",
"execution_count": 589,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n"
]
}
],
"source": [
"import random\n",
"r = random.choices([0, -1, 1], weights=[80, 10, 10])[0]\n",
"print(r)"
]
},
{
"cell_type": "code",
"execution_count": 622,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 160 1704405600\n",
"1 170 1704412800\n",
"2 180 1704447000\n",
"3 190 1704380400\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" start_hour | \n",
" start_minute | \n",
" ddur_1 | \n",
" ddur_2 | \n",
" ddur_3 | \n",
" ddur_4 | \n",
" ddur_5 | \n",
" ddur_6 | \n",
" ddur_7 | \n",
" ddur_8 | \n",
" cycle | \n",
" offset | \n",
" unix | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704434600 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704434780 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704434960 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704435140 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704435320 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704435500 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704435680 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704435860 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704436040 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704436221 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704436580 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704436760 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704436940 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704437120 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704437300 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704437480 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704437660 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704437841 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704438200 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704438380 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704438560 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704438740 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704438920 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704439100 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704439280 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704439460 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704439640 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704439821 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704440180 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704440360 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704440540 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704440721 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704441080 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704441260 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704441441 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704441800 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704441980 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704442161 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704442520 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704442700 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704442880 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443060 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443240 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443420 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443600 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443780 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704443960 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704444139 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704444500 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704444680 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704444860 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704445041 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704445400 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704445581 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704445940 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704446120 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704446300 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704446479 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704446840 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 1704447019 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 ddur_6 \\\n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"2 175 09 00 43 45 33 22 37 0 \n",
"\n",
" ddur_7 ddur_8 cycle offset unix \n",
"2 0 0 180 28 1704434600 \n",
"2 0 0 180 28 1704434780 \n",
"2 0 0 180 28 1704434960 \n",
"2 0 0 180 28 1704435140 \n",
"2 0 0 180 28 1704435320 \n",
"2 0 0 180 28 1704435500 \n",
"2 0 0 180 28 1704435680 \n",
"2 0 0 180 28 1704435860 \n",
"2 0 0 180 28 1704436040 \n",
"2 0 0 180 28 1704436221 \n",
"2 0 0 180 28 1704436580 \n",
"2 0 0 180 28 1704436760 \n",
"2 0 0 180 28 1704436940 \n",
"2 0 0 180 28 1704437120 \n",
"2 0 0 180 28 1704437300 \n",
"2 0 0 180 28 1704437480 \n",
"2 0 0 180 28 1704437660 \n",
"2 0 0 180 28 1704437841 \n",
"2 0 0 180 28 1704438200 \n",
"2 0 0 180 28 1704438380 \n",
"2 0 0 180 28 1704438560 \n",
"2 0 0 180 28 1704438740 \n",
"2 0 0 180 28 1704438920 \n",
"2 0 0 180 28 1704439100 \n",
"2 0 0 180 28 1704439280 \n",
"2 0 0 180 28 1704439460 \n",
"2 0 0 180 28 1704439640 \n",
"2 0 0 180 28 1704439821 \n",
"2 0 0 180 28 1704440180 \n",
"2 0 0 180 28 1704440360 \n",
"2 0 0 180 28 1704440540 \n",
"2 0 0 180 28 1704440721 \n",
"2 0 0 180 28 1704441080 \n",
"2 0 0 180 28 1704441260 \n",
"2 0 0 180 28 1704441441 \n",
"2 0 0 180 28 1704441800 \n",
"2 0 0 180 28 1704441980 \n",
"2 0 0 180 28 1704442161 \n",
"2 0 0 180 28 1704442520 \n",
"2 0 0 180 28 1704442700 \n",
"2 0 0 180 28 1704442880 \n",
"2 0 0 180 28 1704443060 \n",
"2 0 0 180 28 1704443240 \n",
"2 0 0 180 28 1704443420 \n",
"2 0 0 180 28 1704443600 \n",
"2 0 0 180 28 1704443780 \n",
"2 0 0 180 28 1704443960 \n",
"2 0 0 180 28 1704444139 \n",
"2 0 0 180 28 1704444500 \n",
"2 0 0 180 28 1704444680 \n",
"2 0 0 180 28 1704444860 \n",
"2 0 0 180 28 1704445041 \n",
"2 0 0 180 28 1704445400 \n",
"2 0 0 180 28 1704445581 \n",
"2 0 0 180 28 1704445940 \n",
"2 0 0 180 28 1704446120 \n",
"2 0 0 180 28 1704446300 \n",
"2 0 0 180 28 1704446479 \n",
"2 0 0 180 28 1704446840 \n",
"2 0 0 180 28 1704447019 "
]
},
"execution_count": 622,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rows = []\n",
"current_time = midnight\n",
"for i in range(len(plan175)):\n",
" first_row = planned.iloc[i]\n",
" cycle = first_row['cycle']\n",
" unix_end = planned.iloc[i+1]['unix'] if i < len(plan175) else next_day\n",
" r=0\n",
" print(i, cycle, unix_end)\n",
" while current_time <= unix_end:\n",
" r = random.choices([0, -1, 1], weights=[10, 1, 1])[0]\n",
" if current_time % 10 == 9:\n",
" r = cycle + 1\n",
" elif current_time % 10 == 1:\n",
" r = cycle - 1\n",
" current_time += cycle + r\n",
" new_row = first_row.copy()\n",
" new_row['unix'] = current_time\n",
" rows.append(new_row)\n",
"history = pd.concat(rows, axis=1).transpose()\n",
"history[-60:]"
]
},
{
"cell_type": "code",
"execution_count": 483,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" start_hour | \n",
" start_minute | \n",
" ddur_1 | \n",
" ddur_2 | \n",
" ddur_3 | \n",
" ddur_4 | \n",
" ddur_5 | \n",
" ddur_6 | \n",
" ddur_7 | \n",
" ddur_8 | \n",
" cycle | \n",
" offset | \n",
" seconds | \n",
" unix | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 39 | \n",
" 25 | \n",
" 30 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 57 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 42 | \n",
" 29 | \n",
" 26 | \n",
" 33 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 40 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 18 | \n",
" 30 | \n",
" 46 | \n",
" 48 | \n",
" 37 | \n",
" 18 | \n",
" 41 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 18 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 4 | \n",
" 176 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 73 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 131 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 5 | \n",
" 176 | \n",
" 07 | \n",
" 00 | \n",
" 37 | \n",
" 93 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 153 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 6 | \n",
" 176 | \n",
" 09 | \n",
" 00 | \n",
" 37 | \n",
" 103 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 169 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 7 | \n",
" 176 | \n",
" 18 | \n",
" 30 | \n",
" 37 | \n",
" 113 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 185 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 8 | \n",
" 177 | \n",
" 00 | \n",
" 00 | \n",
" 36 | \n",
" 20 | \n",
" 68 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 35 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 9 | \n",
" 177 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 25 | \n",
" 71 | \n",
" 34 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 33 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 10 | \n",
" 177 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 27 | \n",
" 70 | \n",
" 40 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 41 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 11 | \n",
" 177 | \n",
" 18 | \n",
" 30 | \n",
" 45 | \n",
" 32 | \n",
" 77 | \n",
" 36 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 49 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 12 | \n",
" 178 | \n",
" 00 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 40 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 50 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 13 | \n",
" 178 | \n",
" 07 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 42 | \n",
" 20 | \n",
" 21 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 90 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 14 | \n",
" 178 | \n",
" 09 | \n",
" 00 | \n",
" 38 | \n",
" 39 | \n",
" 43 | \n",
" 28 | \n",
" 22 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 80 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 15 | \n",
" 178 | \n",
" 18 | \n",
" 30 | \n",
" 38 | \n",
" 39 | \n",
" 44 | \n",
" 36 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 75 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 16 | \n",
" 201 | \n",
" 00 | \n",
" 00 | \n",
" 24 | \n",
" 24 | \n",
" 17 | \n",
" 58 | \n",
" 17 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 133 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 17 | \n",
" 201 | \n",
" 07 | \n",
" 00 | \n",
" 30 | \n",
" 36 | \n",
" 18 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 132 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 18 | \n",
" 201 | \n",
" 09 | \n",
" 00 | \n",
" 33 | \n",
" 36 | \n",
" 25 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 134 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 19 | \n",
" 201 | \n",
" 18 | \n",
" 30 | \n",
" 36 | \n",
" 50 | \n",
" 18 | \n",
" 58 | \n",
" 18 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 137 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 20 | \n",
" 202 | \n",
" 00 | \n",
" 00 | \n",
" 39 | \n",
" 101 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 103 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 21 | \n",
" 202 | \n",
" 07 | \n",
" 00 | \n",
" 46 | \n",
" 114 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 103 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 22 | \n",
" 202 | \n",
" 09 | \n",
" 00 | \n",
" 46 | \n",
" 114 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 103 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 23 | \n",
" 202 | \n",
" 18 | \n",
" 30 | \n",
" 48 | \n",
" 122 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 103 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 24 | \n",
" 206 | \n",
" 00 | \n",
" 00 | \n",
" 33 | \n",
" 35 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 120 | \n",
" 10 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 25 | \n",
" 206 | \n",
" 07 | \n",
" 00 | \n",
" 44 | \n",
" 44 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 7 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 26 | \n",
" 206 | \n",
" 09 | \n",
" 00 | \n",
" 45 | \n",
" 53 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 17 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 27 | \n",
" 206 | \n",
" 18 | \n",
" 30 | \n",
" 46 | \n",
" 62 | \n",
" 26 | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 10 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 28 | \n",
" 210 | \n",
" 00 | \n",
" 00 | \n",
" 24 | \n",
" 19 | \n",
" 29 | \n",
" 56 | \n",
" 22 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 150 | \n",
" 115 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 29 | \n",
" 210 | \n",
" 07 | \n",
" 00 | \n",
" 24 | \n",
" 19 | \n",
" 39 | \n",
" 65 | \n",
" 23 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 131 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 30 | \n",
" 210 | \n",
" 09 | \n",
" 00 | \n",
" 28 | \n",
" 15 | \n",
" 43 | \n",
" 70 | \n",
" 24 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 137 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 31 | \n",
" 210 | \n",
" 18 | \n",
" 30 | \n",
" 24 | \n",
" 19 | \n",
" 47 | \n",
" 75 | \n",
" 25 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 190 | \n",
" 143 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 32 | \n",
" 211 | \n",
" 00 | \n",
" 00 | \n",
" 28 | \n",
" 97 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 125 | \n",
" 45 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 33 | \n",
" 211 | \n",
" 07 | \n",
" 00 | \n",
" 28 | \n",
" 107 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 135 | \n",
" 45 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 34 | \n",
" 211 | \n",
" 09 | \n",
" 00 | \n",
" 28 | \n",
" 112 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 140 | \n",
" 55 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 35 | \n",
" 211 | \n",
" 18 | \n",
" 30 | \n",
" 28 | \n",
" 117 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 145 | \n",
" 55 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 36 | \n",
" 212 | \n",
" 00 | \n",
" 00 | \n",
" 39 | \n",
" 161 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 200 | \n",
" 0 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 37 | \n",
" 212 | \n",
" 07 | \n",
" 00 | \n",
" 39 | \n",
" 181 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 220 | \n",
" 0 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 38 | \n",
" 212 | \n",
" 09 | \n",
" 00 | \n",
" 39 | \n",
" 191 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 230 | \n",
" 0 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 39 | \n",
" 212 | \n",
" 18 | \n",
" 30 | \n",
" 39 | \n",
" 201 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 240 | \n",
" 0 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n",
"0 175 00 00 37 39 25 30 29 \n",
"1 175 07 00 40 42 29 26 33 \n",
"2 175 09 00 43 45 33 22 37 \n",
"3 175 18 30 46 48 37 18 41 \n",
"4 176 00 00 37 73 40 0 0 \n",
"5 176 07 00 37 93 40 0 0 \n",
"6 176 09 00 37 103 40 0 0 \n",
"7 176 18 30 37 113 40 0 0 \n",
"8 177 00 00 36 20 68 26 0 \n",
"9 177 07 00 40 25 71 34 0 \n",
"10 177 09 00 43 27 70 40 0 \n",
"11 177 18 30 45 32 77 36 0 \n",
"12 178 00 00 38 39 40 23 0 \n",
"13 178 07 00 38 39 42 20 21 \n",
"14 178 09 00 38 39 43 28 22 \n",
"15 178 18 30 38 39 44 36 23 \n",
"16 201 00 00 24 24 17 58 17 \n",
"17 201 07 00 30 36 18 58 18 \n",
"18 201 09 00 33 36 25 58 18 \n",
"19 201 18 30 36 50 18 58 18 \n",
"20 202 00 00 39 101 0 0 0 \n",
"21 202 07 00 46 114 0 0 0 \n",
"22 202 09 00 46 114 0 0 0 \n",
"23 202 18 30 48 122 0 0 0 \n",
"24 206 00 00 33 35 26 26 0 \n",
"25 206 07 00 44 44 26 26 0 \n",
"26 206 09 00 45 53 26 26 0 \n",
"27 206 18 30 46 62 26 26 0 \n",
"28 210 00 00 24 19 29 56 22 \n",
"29 210 07 00 24 19 39 65 23 \n",
"30 210 09 00 28 15 43 70 24 \n",
"31 210 18 30 24 19 47 75 25 \n",
"32 211 00 00 28 97 0 0 0 \n",
"33 211 07 00 28 107 0 0 0 \n",
"34 211 09 00 28 112 0 0 0 \n",
"35 211 18 30 28 117 0 0 0 \n",
"36 212 00 00 39 161 0 0 0 \n",
"37 212 07 00 39 181 0 0 0 \n",
"38 212 09 00 39 191 0 0 0 \n",
"39 212 18 30 39 201 0 0 0 \n",
"\n",
" ddur_6 ddur_7 ddur_8 cycle offset seconds unix \n",
"0 0 0 0 160 57 0 1704380400 \n",
"1 0 0 0 170 40 25200 1704405600 \n",
"2 0 0 0 180 28 32400 1704412800 \n",
"3 0 0 0 190 18 66600 1704447000 \n",
"4 0 0 0 150 131 0 1704380400 \n",
"5 0 0 0 170 153 25200 1704405600 \n",
"6 0 0 0 180 169 32400 1704412800 \n",
"7 0 0 0 190 185 66600 1704447000 \n",
"8 0 0 0 150 35 0 1704380400 \n",
"9 0 0 0 170 33 25200 1704405600 \n",
"10 0 0 0 180 41 32400 1704412800 \n",
"11 0 0 0 190 49 66600 1704447000 \n",
"12 0 0 0 140 50 0 1704380400 \n",
"13 0 0 0 160 90 25200 1704405600 \n",
"14 0 0 0 170 80 32400 1704412800 \n",
"15 0 0 0 180 75 66600 1704447000 \n",
"16 0 0 0 140 133 0 1704380400 \n",
"17 0 0 0 160 132 25200 1704405600 \n",
"18 0 0 0 170 134 32400 1704412800 \n",
"19 0 0 0 180 137 66600 1704447000 \n",
"20 0 0 0 140 103 0 1704380400 \n",
"21 0 0 0 160 103 25200 1704405600 \n",
"22 0 0 0 160 103 32400 1704412800 \n",
"23 0 0 0 170 103 66600 1704447000 \n",
"24 0 0 0 120 10 0 1704380400 \n",
"25 0 0 0 140 7 25200 1704405600 \n",
"26 0 0 0 150 17 32400 1704412800 \n",
"27 0 0 0 160 10 66600 1704447000 \n",
"28 0 0 0 150 115 0 1704380400 \n",
"29 0 0 0 170 131 25200 1704405600 \n",
"30 0 0 0 180 137 32400 1704412800 \n",
"31 0 0 0 190 143 66600 1704447000 \n",
"32 0 0 0 125 45 0 1704380400 \n",
"33 0 0 0 135 45 25200 1704405600 \n",
"34 0 0 0 140 55 32400 1704412800 \n",
"35 0 0 0 145 55 66600 1704447000 \n",
"36 0 0 0 200 0 0 1704380400 \n",
"37 0 0 0 220 0 25200 1704405600 \n",
"38 0 0 0 230 0 32400 1704412800 \n",
"39 0 0 0 240 0 66600 1704447000 "
]
},
"execution_count": 483,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = plan.copy()\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 487,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" start_hour | \n",
" start_minute | \n",
" ddur_1 | \n",
" ddur_2 | \n",
" ddur_3 | \n",
" ddur_4 | \n",
" ddur_5 | \n",
" ddur_6 | \n",
" ddur_7 | \n",
" ddur_8 | \n",
" cycle | \n",
" offset | \n",
" seconds | \n",
" unix | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 39 | \n",
" 25 | \n",
" 30 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 57 | \n",
" 0 | \n",
" 1704380400 | \n",
"
\n",
" \n",
" 0 | \n",
" 175 | \n",
" 00 | \n",
" 00 | \n",
" 37 | \n",
" 39 | \n",
" 25 | \n",
" 30 | \n",
" 29 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 160 | \n",
" 57 | \n",
" 0 | \n",
" 1704380560 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 42 | \n",
" 29 | \n",
" 26 | \n",
" 33 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 40 | \n",
" 25200 | \n",
" 1704405600 | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 07 | \n",
" 00 | \n",
" 40 | \n",
" 42 | \n",
" 29 | \n",
" 26 | \n",
" 33 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 170 | \n",
" 40 | \n",
" 25200 | \n",
" 1704405770 | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 09 | \n",
" 00 | \n",
" 43 | \n",
" 45 | \n",
" 33 | \n",
" 22 | \n",
" 37 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 180 | \n",
" 28 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 37 | \n",
" 212 | \n",
" 07 | \n",
" 00 | \n",
" 39 | \n",
" 181 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 220 | \n",
" 0 | \n",
" 25200 | \n",
" 1704405820 | \n",
"
\n",
" \n",
" 38 | \n",
" 212 | \n",
" 09 | \n",
" 00 | \n",
" 39 | \n",
" 191 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 230 | \n",
" 0 | \n",
" 32400 | \n",
" 1704412800 | \n",
"
\n",
" \n",
" 38 | \n",
" 212 | \n",
" 09 | \n",
" 00 | \n",
" 39 | \n",
" 191 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 230 | \n",
" 0 | \n",
" 32400 | \n",
" 1704413030 | \n",
"
\n",
" \n",
" 39 | \n",
" 212 | \n",
" 18 | \n",
" 30 | \n",
" 39 | \n",
" 201 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 240 | \n",
" 0 | \n",
" 66600 | \n",
" 1704447000 | \n",
"
\n",
" \n",
" 39 | \n",
" 212 | \n",
" 18 | \n",
" 30 | \n",
" 39 | \n",
" 201 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 240 | \n",
" 0 | \n",
" 66600 | \n",
" 1704447240 | \n",
"
\n",
" \n",
"
\n",
"
80 rows × 15 columns
\n",
"
"
],
"text/plain": [
" inter_no start_hour start_minute ddur_1 ddur_2 ddur_3 ddur_4 ddur_5 \\\n",
"0 175 00 00 37 39 25 30 29 \n",
"0 175 00 00 37 39 25 30 29 \n",
"1 175 07 00 40 42 29 26 33 \n",
"1 175 07 00 40 42 29 26 33 \n",
"2 175 09 00 43 45 33 22 37 \n",
".. ... ... ... ... ... ... ... ... \n",
"37 212 07 00 39 181 0 0 0 \n",
"38 212 09 00 39 191 0 0 0 \n",
"38 212 09 00 39 191 0 0 0 \n",
"39 212 18 30 39 201 0 0 0 \n",
"39 212 18 30 39 201 0 0 0 \n",
"\n",
" ddur_6 ddur_7 ddur_8 cycle offset seconds unix \n",
"0 0 0 0 160 57 0 1704380400 \n",
"0 0 0 0 160 57 0 1704380560 \n",
"1 0 0 0 170 40 25200 1704405600 \n",
"1 0 0 0 170 40 25200 1704405770 \n",
"2 0 0 0 180 28 32400 1704412800 \n",
".. ... ... ... ... ... ... ... \n",
"37 0 0 0 220 0 25200 1704405820 \n",
"38 0 0 0 230 0 32400 1704412800 \n",
"38 0 0 0 230 0 32400 1704413030 \n",
"39 0 0 0 240 0 66600 1704447000 \n",
"39 0 0 0 240 0 66600 1704447240 \n",
"\n",
"[80 rows x 15 columns]"
]
},
"execution_count": 487,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_additional = df.copy()\n",
"df_additional['unix'] = df_additional['unix'] + df_additional['cycle']\n",
"\n",
"\n",
"df_result = pd.concat([df, df_additional]).sort_values(by=['inter_no', 'start_hour', 'start_minute', 'unix'])\n",
"df_result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "rts",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}