Weltried의 앉은 자세 측정 어플리케이션 개발에서 AI부서가 맡은 파트는 3축 가속도 센서로부터 들어오는 raw data를 이용하여 8방향 + 중앙 중 어느 방향으로 사용자가 앉아있는지 판단하는 AI모델을 개발하는 것입니다.
Weltried의 웨어러블 벨트에 존재하는 3축 가속도 센서는 5Hz의 속도로 어플에 가속도 데이터값을 전달합니다. 이번 글에서는 전달받은 값을 전처리하고 분석한 코드를 리뷰합니다.
raw data는 다음과 같이 x, y, z축 가속도 데이터를 받습니다. raw data 는 팀원 6명이 특정 조건에서 측정하여 데이터를 수집하였습니다. 데이터를 수집한 방법은 다음과 같습니다.
- 총 9방향으로 돌아가며 측정 (0: 후방, 1:우측 후방, 2: 우측, ... , 8: 중앙)
- 허리를 굽힌 정도를 구분하여 측정 (0: 허리를 적게 굽힘, 1: 허리를 크게 굽힘)
- 벨트를 조인 정도를 구분하여 측정(0: 적당히 조임, 1: 꽉 조임, 2: 느슨하게 조임)
다음과 같은 환경을 조정해가며 측정하였으며 이는 csv파일에 데이터로 저장되어있는 것이 아닌 csv파일 제목에 해당 정보가 저장되어 있습니다.(예시: 윤진성(측정자이름)_0(허리 굽힌 정도)_1(벨트 조인 정도)_6(방향정보).csv) 전처리 과정에서 해당 정보를 csv파일로 이동시켜주어야 합니다.
csv데이터 파일은 측정자 한명당 하나의 파일로 형성되는 것이 아니라, 각각 특정 조건에 따라 1개씩 형성됩니다. 즉 측정자 한명당 2(허리 굽힌 정도)*3(벨트 조인 정도)*9(방향값) = 54 개의 파일이 형성됩니다. 그리고 총 6명이 실험했으므로 324개의 csv파일이 존재합니다.
전처리 코드에서 실행해야 할 내용은 다음과 같습니다.
- 데이터를 이용하여 분석 및 모델 설계를 진행하기 위해선 324개의 파일을 하나로 합쳐야 합니다.
- 데이터 파일의 이름에 저장되어 있는 허리 굽힌 정도, 벨트 조인 정도, 방향값을 데이터 파일의 column으로 추가해야 합니다.
CallFiles 함수는 약 300여개의 데이터 파일을 모두 리스트로 저장합니다. glob 메서드는 지정해준 디렉토리에 있는 파일을 한 번에 불러옵니다. Xyz_df_list는 길이 약300개의 리스트가 되며 각각의 방에는 데이터 파일이 DataFrame형태로 저장됩니다.
AttachLabel 함수는 CallFiles()를 이용하여 만든 리스트에 저장된 데이터프레임에, 3개의 column을 추가하는 함수입니다. 허리를 기울인 정도, 벨트를 조인 정도, 방위 값을 추가하여 총 6개의 column을 가진 데이터프레임으로 변환합니다. addDegree, addBelt, addDirection 함수를 이용하여 해당 column을 생성하는 작업을 수행합니다.
제목에서 허리를 기울인 각도, 벨트를 조인 정도, 방위 값을 추출하여 column으로 저장하기 위해 다음 함수들을 이용했습니다. addDirection은 방위 값을 추출하는 함수입니다. 방위 값은 데이터 파일 제목에서 뒤에서 5번째에 입력되어 있으므로 filename[-5]를 이용하여 인식합니다. 이렇게 얻은 정보를 ‘direction’ column으로 추가합니다. addDegree는 허리를 기울인 정도를 추출하는 함수이며, 데이터 파일 제목 뒤에서 9번째에 입력되어 있으므로 filename[-9]를 이용하여 인식합니다. 얻은 정보는 ‘degree’ column으로 추가합니다. addBelt는 벨트를 조인 정도를 추출하는 함수입니다. 이는 파일 제목 뒤에서 7번째에 입력되어 있으므로 filename[-7]을 이용하여 인식합니다. 얻은 정보는 ‘belt’ column으로 추가합니다.
이렇게 column을 추가한 데이터프레임들을 Concatenation 함수를 통해 하나로 합치는 작업을 수행합니다. 300여개의 리스트에 담겨있는 모든 데이터 프레임을 행방향으로 합치는 과정을 수행하여 하나의 큰 데이터프레임을 생성합니다.
다음은 생성된 데이터 프레임입니다. 총 50987개로 예상했던 48600개를 약간 초과하는 정도였습니다. 실험 시 수동으로 30초를 측정하였기 때문에 약간의 오차가 발생하였습니다. 데이터 프레임을 보면 허리를 기울인 정도, 벨트를 조인 정도, 방위 값이 잘 추가된 것으로 확인할 수 있습니다.
SaveFile 함수는 모든 전처리 과정을 거친 데이터셋을 csv형태로 저장하는 역할을 수행합니다. 딥러닝의 경우 train, test셋을 나누어 저장해 주어야 읽어올 때 편리하므로 data_set_train.csv, data_set_test.csv로 나누어 저장하였고, ML모델에 이용하기 위해 sklearn으로 불러올 때는 train, test셋을 나누지 않아도 되므로 데이터 전체를 한 번에 저장해 주었습니다.
'Project > 산학협력프로젝트_WELT' 카테고리의 다른 글
모델 설계(MLP, KNN, LightGBM) (0) | 2022.07.11 |
---|---|
데이터 분석 (0) | 2022.07.11 |
데이터 수집 (0) | 2022.07.11 |
1. 산학협력프로젝트_with_WELT Intro (0) | 2022.05.09 |