그럴 수도 있지

발전의 의지/파이썬

도로주행 시뮬레이터 데이터 그래프 그려보기 2

OnlyMyStuff 2022. 4. 11. 20:23

 

# -*- 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


쉽지않네;