|
|
@ -53,6 +53,27 @@ |
|
|
|
"self.process_history()" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 4, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
|
"name": "stdout", |
|
|
|
"output_type": "stream", |
|
|
|
"text": [ |
|
|
|
"3. 이동류정보 테이블을 변환합니다.\n", |
|
|
|
"4. 통합 테이블을 생성합니다.\n", |
|
|
|
"5. 신호를 생성합니다.\n" |
|
|
|
] |
|
|
|
} |
|
|
|
], |
|
|
|
"source": [ |
|
|
|
"self.process_movement()\n", |
|
|
|
"self.make_histids()\n", |
|
|
|
"self.get_signals()" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 4, |
|
|
@ -244,15 +265,6 @@ |
|
|
|
"phases" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": null, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [], |
|
|
|
"source": [ |
|
|
|
"self.history['end_unix'] = self.history['end_unix'].apply(lambda x:int(datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp()))\n" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 5, |
|
|
@ -264,7 +276,7 @@ |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 26, |
|
|
|
"execution_count": 6, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
@ -287,70 +299,443 @@ |
|
|
|
"print(fsecs[-1])" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 6, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [], |
|
|
|
"source": [ |
|
|
|
"fsecs = list(range(self.present_time - self.sim_timespan, self.present_time + 1, 5))" |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 7, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
|
"ename": "ValueError", |
|
|
|
"evalue": "Cannot merge a Series without a name", |
|
|
|
"output_type": "error", |
|
|
|
"traceback": [ |
|
|
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
|
|
|
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", |
|
|
|
"Cell \u001b[1;32mIn[7], line 20\u001b[0m\n\u001b[0;32m 18\u001b[0m recent_unix \u001b[38;5;241m=\u001b[39m rhistory[[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minter_no\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mend_unix\u001b[39m\u001b[38;5;124m'\u001b[39m]]\n\u001b[0;32m 19\u001b[0m \u001b[38;5;66;03m# 3. 상태 테이블 조회정보(A)와 이력 테이블 조회정보(B) 조인(키값 : 교차로번호) : C\u001b[39;00m\n\u001b[1;32m---> 20\u001b[0m move \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmerge\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmove\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrecent_unix\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mleft\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mon\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43minter_no\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m move[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mend_unix\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m move[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mend_unix\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mfillna(\u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mint\u001b[39m)\n\u001b[0;32m 22\u001b[0m \u001b[38;5;66;03m# # 4. C데이터 프레임에 신규 컬럼(시작 유닉스타임) 생성 후 종료유닉스 타임 값 입력, 종료 유닉스 타임 컬럼 제거\u001b[39;00m\n", |
|
|
|
"File \u001b[1;32mc:\\github\\siggen\\siggen_env\\Lib\\site-packages\\pandas\\core\\reshape\\merge.py:152\u001b[0m, in \u001b[0;36mmerge\u001b[1;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[0;32m 135\u001b[0m \u001b[38;5;129m@Substitution\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mleft : DataFrame or named Series\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 136\u001b[0m \u001b[38;5;129m@Appender\u001b[39m(_merge_doc, indents\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m 137\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmerge\u001b[39m(\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 150\u001b[0m validate: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 151\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame:\n\u001b[1;32m--> 152\u001b[0m left_df \u001b[38;5;241m=\u001b[39m \u001b[43m_validate_operand\u001b[49m\u001b[43m(\u001b[49m\u001b[43mleft\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 153\u001b[0m right_df \u001b[38;5;241m=\u001b[39m _validate_operand(right)\n\u001b[0;32m 154\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m how \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcross\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n", |
|
|
|
"File \u001b[1;32mc:\\github\\siggen\\siggen_env\\Lib\\site-packages\\pandas\\core\\reshape\\merge.py:2689\u001b[0m, in \u001b[0;36m_validate_operand\u001b[1;34m(obj)\u001b[0m\n\u001b[0;32m 2687\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, ABCSeries):\n\u001b[0;32m 2688\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 2689\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot merge a Series without a name\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 2690\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mto_frame()\n\u001b[0;32m 2691\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", |
|
|
|
"\u001b[1;31mValueError\u001b[0m: Cannot merge a Series without a name" |
|
|
|
] |
|
|
|
"data": { |
|
|
|
"text/html": [ |
|
|
|
"<div>\n", |
|
|
|
"<style scoped>\n", |
|
|
|
" .dataframe tbody tr th:only-of-type {\n", |
|
|
|
" vertical-align: middle;\n", |
|
|
|
" }\n", |
|
|
|
"\n", |
|
|
|
" .dataframe tbody tr th {\n", |
|
|
|
" vertical-align: top;\n", |
|
|
|
" }\n", |
|
|
|
"\n", |
|
|
|
" .dataframe thead th {\n", |
|
|
|
" text-align: right;\n", |
|
|
|
" }\n", |
|
|
|
"</style>\n", |
|
|
|
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
|
" <thead>\n", |
|
|
|
" <tr style=\"text-align: right;\">\n", |
|
|
|
" <th></th>\n", |
|
|
|
" <th>inter_no</th>\n", |
|
|
|
" <th>phas_A</th>\n", |
|
|
|
" <th>phas_B</th>\n", |
|
|
|
" <th>STOS_NO</th>\n", |
|
|
|
" <th>move_A</th>\n", |
|
|
|
" <th>move_B</th>\n", |
|
|
|
" <th>start_unix</th>\n", |
|
|
|
" </tr>\n", |
|
|
|
" </thead>\n", |
|
|
|
" <tbody>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>6</th>\n", |
|
|
|
" <td>455</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722383976</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>7</th>\n", |
|
|
|
" <td>456</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722383967</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384007</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>7</th>\n", |
|
|
|
" <td>456</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>7</td>\n", |
|
|
|
" <td>-1</td>\n", |
|
|
|
" <td>1722383967</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>7</th>\n", |
|
|
|
" <td>456</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>17</td>\n", |
|
|
|
" <td>-1</td>\n", |
|
|
|
" <td>1722383967</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>6</th>\n", |
|
|
|
" <td>455</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>-1</td>\n", |
|
|
|
" <td>-1</td>\n", |
|
|
|
" <td>1722383976</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384053</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>7</th>\n", |
|
|
|
" <td>456</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722383967</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384007</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384053</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>4</th>\n", |
|
|
|
" <td>443</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384102</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>8</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>1722384007</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>17</td>\n", |
|
|
|
" <td>17</td>\n", |
|
|
|
" <td>1722384053</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>7</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>1722384007</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>8</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>1722384053</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>7</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>7</td>\n", |
|
|
|
" <td>4</td>\n", |
|
|
|
" <td>1722384053</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384207</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>4</th>\n", |
|
|
|
" <td>443</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384102</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384232</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>0</th>\n", |
|
|
|
" <td>436</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>1722384236</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>8</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>4</th>\n", |
|
|
|
" <td>443</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>7</td>\n", |
|
|
|
" <td>18</td>\n", |
|
|
|
" <td>1722384102</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384232</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>1</th>\n", |
|
|
|
" <td>437</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>5</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384207</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>8</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>1722384098</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>0</th>\n", |
|
|
|
" <td>436</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>2</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>8</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>1722384236</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>3</th>\n", |
|
|
|
" <td>442</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>6</td>\n", |
|
|
|
" <td>1</td>\n", |
|
|
|
" <td>1722384297</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" <tr>\n", |
|
|
|
" <th>8</th>\n", |
|
|
|
" <td>457</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>3</td>\n", |
|
|
|
" <td>0</td>\n", |
|
|
|
" <td>17</td>\n", |
|
|
|
" <td>17</td>\n", |
|
|
|
" <td>1722384232</td>\n", |
|
|
|
" </tr>\n", |
|
|
|
" </tbody>\n", |
|
|
|
"</table>\n", |
|
|
|
"</div>" |
|
|
|
], |
|
|
|
"text/plain": [ |
|
|
|
" inter_no phas_A phas_B STOS_NO move_A move_B start_unix\n", |
|
|
|
"6 455 1 1 0 6 2 1722383976\n", |
|
|
|
"7 456 2 2 0 6 2 1722383967\n", |
|
|
|
"1 437 1 1 0 6 2 1722384007\n", |
|
|
|
"7 456 3 3 0 7 -1 1722383967\n", |
|
|
|
"7 456 4 4 0 17 -1 1722383967\n", |
|
|
|
"6 455 2 2 0 -1 -1 1722383976\n", |
|
|
|
"8 457 1 1 0 6 2 1722384053\n", |
|
|
|
"7 456 1 1 0 5 2 1722383967\n", |
|
|
|
"1 437 2 2 0 5 1 1722384007\n", |
|
|
|
"3 442 1 1 0 6 1 1722384098\n", |
|
|
|
"8 457 2 2 0 5 1 1722384053\n", |
|
|
|
"4 443 1 1 0 6 2 1722384102\n", |
|
|
|
"1 437 3 3 0 8 3 1722384007\n", |
|
|
|
"8 457 3 3 0 17 17 1722384053\n", |
|
|
|
"3 442 2 2 0 6 2 1722384098\n", |
|
|
|
"1 437 4 4 0 7 4 1722384007\n", |
|
|
|
"3 442 3 3 0 5 2 1722384098\n", |
|
|
|
"8 457 4 4 0 8 3 1722384053\n", |
|
|
|
"3 442 4 4 0 7 4 1722384098\n", |
|
|
|
"8 457 5 5 0 7 4 1722384053\n", |
|
|
|
"1 437 1 1 0 6 2 1722384207\n", |
|
|
|
"4 443 2 2 0 5 2 1722384102\n", |
|
|
|
"8 457 1 1 0 6 2 1722384232\n", |
|
|
|
"0 436 1 1 0 5 2 1722384236\n", |
|
|
|
"3 442 5 5 0 8 3 1722384098\n", |
|
|
|
"4 443 3 3 0 7 18 1722384102\n", |
|
|
|
"8 457 2 2 0 5 1 1722384232\n", |
|
|
|
"1 437 2 2 0 5 1 1722384207\n", |
|
|
|
"3 442 6 6 0 8 3 1722384098\n", |
|
|
|
"0 436 2 2 0 8 3 1722384236\n", |
|
|
|
"3 442 1 1 0 6 1 1722384297\n", |
|
|
|
"8 457 3 3 0 17 17 1722384232" |
|
|
|
] |
|
|
|
}, |
|
|
|
"execution_count": 7, |
|
|
|
"metadata": {}, |
|
|
|
"output_type": "execute_result" |
|
|
|
} |
|
|
|
], |
|
|
|
"source": [ |
|
|
|
"fsec = fsecs[5]\n", |
|
|
|
"# 1. 상태 테이블 조회해서 전체 데이터중 필요데이터(교차로번호, A링 현시번호, A링 이동류번호, B링 현시번호, B링 이동류번호)만 수집 : A\n", |
|
|
|
"moves = [group.iloc[-1] for _, group in phases[phases.start_unix < fsec].groupby('inter_no')]\n", |
|
|
|
"if not moves:\n", |
|
|
|
" move = pd.DataFrame({\n", |
|
|
|
" 'start_unix':[], 'inter_no':[], 'phas_A':[], 'phas_B':[],\n", |
|
|
|
" 'STOS_NO':[], 'move_A':[], 'move_B':[]})\n", |
|
|
|
"else:\n", |
|
|
|
" move = pd.concat(moves)\n", |
|
|
|
"move = move.drop(columns='start_unix')\n", |
|
|
|
"# 2. 이력 테이블 조회해서 교차로별로 유닉스시간 최대인 데이터(교차로번호, 종료유닉스타임)만 수집 : B\n", |
|
|
|
"recent_histories = [group.iloc[-1:] for _, group in self.history[self.history['end_unix'] < fsec].groupby('inter_no')] # 교차로별로 유닉스시간이 최대인 행들\n", |
|
|
|
"for fsec in range(self.present_time - self.sim_timespan, self.present_time + 1, 5):\n", |
|
|
|
" # 1. 상태 테이블 조회해서 전체 데이터중 필요데이터(교차로번호, A링 현시번호, A링 이동류번호, B링 현시번호, B링 이동류번호)만 수집 : A\n", |
|
|
|
" moves = [group.iloc[-1:] for _, group in phases[phases.start_unix < fsec].groupby('inter_no')]\n", |
|
|
|
" if not moves:\n", |
|
|
|
" move = pd.DataFrame({\n", |
|
|
|
" 'start_unix':[], 'inter_no':[], 'phas_A':[], 'phas_B':[],\n", |
|
|
|
" 'STOS_NO':[], 'move_A':[], 'move_B':[]})\n", |
|
|
|
" else:\n", |
|
|
|
" move = pd.concat(moves)\n", |
|
|
|
" move = move.drop(columns='start_unix')\n", |
|
|
|
" # 2. 이력 테이블 조회해서 교차로별로 유닉스시간 최대인 데이터(교차로번호, 종료유닉스타임)만 수집 : B\n", |
|
|
|
" recent_histories = [group.iloc[-1:] for _, group in self.history[self.history['end_unix'] < fsec].groupby('inter_no')] # 교차로별로 유닉스시간이 최대인 행들\n", |
|
|
|
"\n", |
|
|
|
"if not recent_histories:\n", |
|
|
|
" rhistory = pd.DataFrame({'inter_no':[], 'end_unix':[]}) # recent history\n", |
|
|
|
"else:\n", |
|
|
|
" rhistory = pd.concat(recent_histories)\n", |
|
|
|
"recent_unix = rhistory[['inter_no', 'end_unix']]\n", |
|
|
|
"# 3. 상태 테이블 조회정보(A)와 이력 테이블 조회정보(B) 조인(키값 : 교차로번호) : C\n", |
|
|
|
"move = pd.merge(move, recent_unix, how='left', on='inter_no')\n", |
|
|
|
"move['end_unix'] = move['end_unix'].fillna(0).astype(int)\n", |
|
|
|
"# # 4. C데이터 프레임에 신규 컬럼(시작 유닉스타임) 생성 후 종료유닉스 타임 값 입력, 종료 유닉스 타임 컬럼 제거\n", |
|
|
|
"move = move.rename(columns = {'end_unix':'start_unix'})\n", |
|
|
|
"# 5. 이동류 이력정보 READ\n", |
|
|
|
"# - CSV 파일로 서버에 저장된 이동류정보를 읽어옴(파일이 없는 경우에는 데이터가 없는 프레임 D 생성)\n", |
|
|
|
"try:\n", |
|
|
|
" movement # movement가 존재할 경우 그걸 그대로 씀.\n", |
|
|
|
"except NameError: # movement가 존재하지 않는 경우 생성\n", |
|
|
|
" movement = pd.DataFrame()\n", |
|
|
|
"# 6. 이동류 이력정보 데이터테이블(D)에 C데이터 add\n", |
|
|
|
"movement = pd.concat([movement, move])\n", |
|
|
|
"# 7. D데이터 프레임에서 중복데이터 제거(교차로번호, 시작 유닉스타임, A링 현시번호, B링 현시번호 같은 행은 제거)\n", |
|
|
|
"movement = movement.drop_duplicates(['inter_no','phas_A','phas_B','start_unix'])\n", |
|
|
|
"# 8. D데이터 보관 시간 기준시간을 시작 유닉스 타임의 최대값 - self.subtractor // 2을 값으로 산출하고, 보관 시간 기준시간보다 작은 시작 유닉스 타임을 가진 행은 모두 제거(1시간 데이터만 보관)\n", |
|
|
|
"movement = movement[movement.start_unix > fsec - self.subtractor // 2]\n", |
|
|
|
" if not recent_histories:\n", |
|
|
|
" rhistory = pd.DataFrame({'inter_no':[], 'end_unix':[]}) # recent history\n", |
|
|
|
" else:\n", |
|
|
|
" rhistory = pd.concat(recent_histories)\n", |
|
|
|
" recent_unix = rhistory[['inter_no', 'end_unix']]\n", |
|
|
|
" # 3. 상태 테이블 조회정보(A)와 이력 테이블 조회정보(B) 조인(키값 : 교차로번호) : C\n", |
|
|
|
" move = pd.merge(move, recent_unix, how='left', on='inter_no')\n", |
|
|
|
" move['end_unix'] = move['end_unix'].fillna(0).astype(int)\n", |
|
|
|
" # # 4. C데이터 프레임에 신규 컬럼(시작 유닉스타임) 생성 후 종료유닉스 타임 값 입력, 종료 유닉스 타임 컬럼 제거\n", |
|
|
|
" move = move.rename(columns = {'end_unix':'start_unix'})\n", |
|
|
|
" # 5. 이동류 이력정보 READ\n", |
|
|
|
" # - CSV 파일로 서버에 저장된 이동류정보를 읽어옴(파일이 없는 경우에는 데이터가 없는 프레임 D 생성)\n", |
|
|
|
" try:\n", |
|
|
|
" movement # movement가 존재할 경우 그걸 그대로 씀.\n", |
|
|
|
" except NameError: # movement가 존재하지 않는 경우 생성\n", |
|
|
|
" movement = pd.DataFrame()\n", |
|
|
|
" # 6. 이동류 이력정보 데이터테이블(D)에 C데이터 add\n", |
|
|
|
" movement = pd.concat([movement, move])\n", |
|
|
|
" # 7. D데이터 프레임에서 중복데이터 제거(교차로번호, 시작 유닉스타임, A링 현시번호, B링 현시번호 같은 행은 제거)\n", |
|
|
|
" movement = movement.drop_duplicates(['inter_no','phas_A','phas_B','start_unix'])\n", |
|
|
|
" # 8. D데이터 보관 시간 기준시간을 시작 유닉스 타임의 최대값 - self.subtractor // 2을 값으로 산출하고, 보관 시간 기준시간보다 작은 시작 유닉스 타임을 가진 행은 모두 제거(1시간 데이터만 보관)\n", |
|
|
|
" movement = movement[movement.start_unix > fsec - self.subtractor // 2]\n", |
|
|
|
"movement\n" |
|
|
|
] |
|
|
|
}, |
|
|
|