# -*- coding: utf-8 -*-
"""
Created on Thu Apr 7 15:56:23 2022
@author: you
"""
#%% 필요한 모듈 불러오기
print('필요한 모듈 불러오기')
# 데이터 핸들링
import os
import pandas as pd
from glob2 import glob
import matplotlib.pyplot as plt
from tqdm import tqdm
# 플롯
import seaborn as sns
from scipy import stats
# 자동화
import pyautogui as pag
import pyperclip
from time import sleep
import shutil
#%% 경로 설정
print('데이터 읽을 경로 설정')
os.chdir('C:\\Users\\82103\\Desktop\\python\\ramp analysis\\dataset')
cwd = os.getcwd()
#%% 데이터 읽고 DF 만들기
print('데이터 읽고 DF 만들기')
df_list = []
for i in tqdm(glob('*.txt')):
new_data = pd.read_csv(i,sep=' ')
text = i[3:4]
trial = i.split('_')[-1:]
new_data['exp_num'] = int(text)
new_data['trial_num'] = int(str(trial)[2:-6])
new_data['file_name'] = i
df_list.append(new_data)
df_1 = pd.concat(df_list)
del new_data, df_list, i, text, trial # delete unnecessary variables
#%% 변수 결정하기
print('변수 결정하기')
for col_num, col_name in enumerate(df_1.columns):
print('col_num :',col_num,'col_name :',col_name)
del col_num, col_name
#%% 필요한 변수만 가져오기
print('변수 drop')
df_2 = df_1.iloc[:,[0,1,2,3,7,8,9,20,21,24,25,26,30,31,32]].rename(columns={'[00].VehicleUpdate-speed.001' : 'spd_x',
'[00].VehicleUpdate-speed.002' : 'spd_y',
'[00].VehicleUpdate-speed.003' : 'spd_z',
'[00].VehicleUpdate-pos.001':'pos_x',
'[00].VehicleUpdate-pos.002':'pos_y',
'[00].VehicleUpdate-pos.003':'pos_z',
'[00].VehicleUpdate-steeringWheelSpeed':'spd_steering',
'[00].VehicleUpdate-steeringWheelAngel':'ang_steering',
'[00].VehicleUpdate-roadInfo-roadId.0':'road_ID',
'[00].VehicleUpdate-roadInfo-roadAbscissa.0':'road_abs',
'[00].VehicleUpdate-roadInfo-roadGap.0':'road_gap',
'[00].VehicleUpdate-roadInfo-laneGap.0':'lane_gap'})
df_2['spd_x'] ,df_2['spd_y'],df_2['spd_z'] = df_2['spd_x']*3.6 ,df_2['spd_y']*3.6,df_2['spd_z']*.36
df_2['spd_comp'] = round((df_2['spd_x']**2+df_2['spd_y']**2+df_2['spd_x']**2)**(1/2),1)
""" column lsit
# col_num : 0 col_name : time
# col_num : 1 col_name : [00].VehicleUpdate-pos.001
# col_num : 2 col_name : [00].VehicleUpdate-pos.002
# col_num : 3 col_name : [00].VehicleUpdate-pos.003
col_num : 4 col_name : [00].VehicleUpdate-pos.004
col_num : 5 col_name : [00].VehicleUpdate-pos.005
col_num : 6 col_name : [00].VehicleUpdate-pos.006
# col_num : 7 col_name : [00].VehicleUpdate-speed.001
# col_num : 8 col_name : [00].VehicleUpdate-speed.002
# col_num : 9 col_name : [00].VehicleUpdate-speed.003
col_num : 10 col_name : [00].VehicleUpdate-speed.004
col_num : 11 col_name : [00].VehicleUpdate-speed.005
col_num : 12 col_name : [00].VehicleUpdate-speed.006
col_num : 13 col_name : [00].VehicleUpdate-accel.001
col_num : 14 col_name : [00].VehicleUpdate-accel.002
col_num : 15 col_name : [00].VehicleUpdate-accel.003
col_num : 16 col_name : [00].VehicleUpdate-accel.004
col_num : 17 col_name : [00].VehicleUpdate-accel.005
col_num : 18 col_name : [00].VehicleUpdate-accel.006
col_num : 19 col_name : [00].VehicleUpdate-accelerator
# col_num : 20 col_name : [00].VehicleUpdate-steeringWheelAngle
# col_num : 21 col_name : [00].VehicleUpdate-steeringWheelSpeed
col_num : 22 col_name : [00].VehicleUpdate-accelerator.1
col_num : 23 col_name : [00].VehicleUpdate-brake
# col_num : 24 col_name : [00].VehicleUpdate-roadInfo-roadId.0
# col_num : 25 col_name : [00].VehicleUpdate-roadInfo-roadAbscissa.0
# col_num : 26 col_name : [00].VehicleUpdate-roadInfo-roadGap.0
col_num : 27 col_name : [00].VehicleUpdate-roadInfo-laneId.0
# col_num : 28 col_name : [00].VehicleUpdate-roadInfo-laneGap.0
col_num : 29 col_name : Last_TimeMarker
# col_num : 30 col_name : exp_num
# col_num : 31 col_name : trial_num
# col_num : 32 col_name : file_name
"""
#%% 좌표값 정렬 및 소수점 단위로 통합
print('좌표값 정렬 및 소수점 단위 통합') # 히스토그램 그리듯 합치기 위함
def refine_pos(df,col,num):
df[col] = df[col] - df[col].min()
df[col] = round(df[col],num)
#%% 실험 유형별 pivot 형성 / 피벗테이블 크기 수집
print('실험 유형별 pivot, 테이블 크기 수집')
df_list = []
x_size_list = [] # 개별 그래프를 그릴때 스케일을 비슷하게 조정하기 위함
y_size_list = []
for i in tqdm(range(0,7)):
df_temp= df_2.loc[(df_2['exp_num']==i+1),:]
for j in ['pos_x','pos_y','pos_z']:
refine_pos(df_temp,j,-1)
df_temp_pivot= pd.pivot_table(df_temp,
index= 'pos_y',
columns='pos_x',
values='spd_comp',
aggfunc=lambda x: stats.trim_mean(x, 0.1)).round(1)
df_list.append(df_temp_pivot)
x_size_list.append(len(df_temp_pivot.columns))
y_size_list.append(len(df_temp_pivot.index))
del df_temp, df_temp_pivot, i, j
#%% 개별 플롯 저장
print('개별 플롯 저장')
os.chdir('C:\\Users\\82103\\Desktop\\python\\ramp analysis\\plots')
for i in tqdm(range(0,7)):
plt.figure(figsize=(x_size_list[i],y_size_list[i]))
sns.set_theme(style='darkgrid') # style must be one of white, dark, whitegrid, darkgrid, ticks
sns.set(font_scale=15)
fig = sns.heatmap(df_list[i-1],cmap='jet',annot=True,cbar=True,fmt='.1f',
linewidths=1,linecolor='grey',cbar_kws={'shrink': 0.7},
annot_kws={"size":15}).invert_yaxis()
plt.title('exp_num_'+str(i+1),y=1.02)
file_name='exp_num_' + str(i+1) + ".png"
plt.savefig(file_name)
#%%
print('개별 플롯(한글용) 저장')
file_name_list = [] # 한글에는 큰 이미지 파일을 불러올 수 없음
for i in tqdm(range(0,7)):
plt.figure(figsize=(4,8))
sns.set_theme(style='darkgrid') # style must be one of white, dark, whitegrid, darkgrid, ticks
sns.set(font_scale=1)
fig = sns.heatmap(df_list[i-1],cmap='jet',annot=True,cbar=True,fmt='.1f',
linewidths=0,linecolor='grey',cbar_kws={'shrink': 0.7},
annot_kws={"size":0}).invert_yaxis()
plt.title('exp_num_'+str(i+1)+'_row_size',y=1.02)
file_name='exp_num_' + str(i+1)+'_row_size' + ".png"
plt.savefig(file_name)
file_name_list.append(file_name)
del file_name, fig
#%% 플롯 모음 저장
print('플롯 모음 저장')
sns.set_theme(style='darkgrid') # style must be one of white, dark, whitegrid, darkgrid, ticks
sns.set(font_scale=10)
fig, ax = plt.subplots(ncols=7,figsize=(400,150),gridspec_kw={'width_ratios':x_size_list})
for i in tqdm(range(0,7)):
temp_plot=sns.heatmap(df_list[i],cmap='jet',annot=True,cbar=True,ax=ax[i],fmt='.1f',
linewidths=1,linecolor='grey',cbar_kws={'shrink': 0.7},
annot_kws={"size":10}).invert_yaxis()
title='exp_num'+' : ' + str(i+1)
ax[i].set_title(title,y=1.02)
fig.suptitle('Speed heatmap(total)',fontsize=300)
fig.savefig('Speed heatmap(total)')
plt.show()
del i, ax, fig, temp_plot, title
쉽지않네;
'발전의 의지 > 파이썬' 카테고리의 다른 글
Ramp analysis plot 을 한글로 옮겨보기 (0) | 2022.05.19 |
---|---|
요즘 하는 것 (파이썬 머신러닝 완벽가이드) (0) | 2022.05.10 |
도로주행 시뮬레이터 데이터 그래프 그려보기 (0) | 2022.04.08 |
교보 EBOOK 캡쳐하는 방법 (2) | 2022.01.31 |
파이썬 안하는 것 같아서 책샀음 (0) | 2021.12.01 |