본문 바로가기
DataAnalysis with Crossfit

[DataAnalysis with Crossfit] Ep.1-2 시각화 및 EDA 1

by Pymoon 2023. 4. 26.

 

분석 기간 : 2023.04.17 ~

 

 

이전 글에서는 데이터를 수집한 과정과 정제과정을 진행하고 전처리까지 진행한 기록을 적어보았다.

 

[DataAnalysis with Crossfit] Ep.1-1 데이터 수집 및 전처리

분석 기간 : 2023.04.17 ~ 이전 글에서 이번 분석과제의 목적과 의도를 설명해 보았다. [DataAnalysis with Crossfit] Ep.1-0 목적과 의도 분석 기간 : 2023.04.17 ~ Crossfit은 여러 종류의 운동을 섞어 단시간, 고강

py-moon.tistory.com

 

 

 

이번 글에서는 데이터를 활용해서 유의미한 시각화 자료와 탐색적 데이터 분석을 진행해 본다.

 

 

 

 

1
2
3
4
5
6
7
8
9
print(train.shape, train_0.shape, train_1.shape, train_2.shape, train_4.shape)
 
(1927) (467) (477) (497) (467)
 
('==========================================================================')
 
print(tr.shape, tr_0.shape, tr_1.shape, tr_2.shape, tr_4.shape)
 
(499,) (116,) (133,) (127,) (113,)
cs

 

> 위 코드와 결과에서 ===위 부분은 가공하기 전의 데이터 길이를 나타낸다.

 

> 다시 말해, 192개의 와드, 46개의 월요일 와드, 47개의 화요일 와드, 49개의 수요일 와드, 46개의 금요일 와드라는 말과 동일하다.

 

 

> 그에 비해 ===아래 부분은 가공한 후의 데이터의 길이를 나타내기 때문에 다르게 해석될 수 있다.

 

> 즉, 499개의 와드에 나온 중복이 포함되어 있는 동작들, 116개의 월요일 와드에 나온 중복이 포함된 동작들, 133개의 화요일 와드에 나온 중복이 포함된 동작들, 127개의 수요일 와드에 나온 중복이 포함된 동작들, 113개의 금요일 와드에 나온 중복이 포함된 동작들이라고 해석할 수 있겠다.

 

 

 

 

> 위 그림은 데이터를 있는 그대로 시각화한 자료이다.

 

> 총 5개의 그래프가 나오는데, 항목은 아래와 같다

  1. 전체 데이터를 활용해서 와드에서 나온 동작들의 분포를 나타내고 있다.
  2. 전체 데이터에서 월요일 와드만을 추출한 데이터를 사용해서 월요일 와드 중 나온 동작들의 분포를 나타내고 있다.
  3. 전체 데이터에서 화요일 와드만을 추출한 데이터를 사용해서 화요일 와드 중 나온 동작들의 분포를 나타내고 있다.
  4. 전체 데이터에서 수요일 와드만을 추출한 데이터를 사용해서 수요일 와드 중 나온 동작들의 분포를 나타내고 있다.
  5. 전체 데이터에서 금요일 와드만을 추출한 데이터를 사용해서 금요일 와드 중 나온 동작들의 분포를 나타내고 있다.

> x축은 동작이름, y축은 횟수를 나타낸다.

 

> 위 자료는 있는 그대로를 보여줌에 있어서 신뢰성이 충분한 그래프이지만, 시각화 자료임에도 가독성이 떨어지는 단점이 분명 존재한다.

 

> 따라서, 횟수가 빈번한 동작들을 위주로 다시 뽑아보기로 한다.

 

 

 

 

1
2
3
4
5
6
7
8
tr_val = []
tr_lst = []
for i in tr.unique():
    # 특정 데이터의 개수 조회 방법
    cnt = len(tr.loc[tr == i])
    if cnt >= 10:
        tr_val.append(int(cnt))
        tr_lst.append(i)
cs

 

> 위 코드는 특정 데이터의 개수를 조회하는 알고리즘을 구현한 것이다.

 

> 즉, 특정 동작의 횟수를 뽑아내기 위한 알고리즘과 같다.

 

> 위 코드와 같은 경우에는 전체데이터인 tr을 활용한 알고리즘이기에 와드에 나온 횟수가 10회 이상인 동작들로만 추려 시각화하고자 한다.

 

 

 

 

1
2
3
4
5
6
7
8
print(tr_val)
print(tr_lst)
 
[29691711482152
4333152447101211]
 
['WallBallShot''Row''BurpeeBoxJump''Lunge''Deadlift''Clean&Jerk''Burpee'
'DoubleUnder''ToestoBar''Thruster''Clean''Snatch''FrontSquat''PullUp''BoxJump']
cs

 

> 알고리즘을 적용한 데이터의 결과를 확인해 보면 위와 같다.

 

> tr_val은 횟수를 담고 있는 리스트형태이고, tr_lst는 동작의 이름을 담고 있는 리스트 형태이다.

 

> 당연하게도 두 리스트는 1:1 매칭이 되도록 구현되었다. 따라서 이 두 리스트를 가지고 시각화를 진행한다.

 

 

 

> 그 결과는 위와 같다. 초반의 자료보다는 해석하기에 훨씬 용이한 것을 볼 수 있을 것이다. 나 또한 그랬다.

 

> 위 자료를 해석해 보자면 아래와 같다.

  • 약 1년간의 와드에서 나온 동작 중에서 Row은 무려 69회, Burpee는 52회, Deadlift는 48회, Snatch가 47회, DoubleUnder가 43회로 가장 빈번하게 나왔다고 볼 수 있다.
  • 그에 비해 FrontSquat, Lunge, BoxJump, PullUp은 나온 횟수가 저조함을 알 수 있다.
  • 하지만, 이 그래프에서는 10회 이상인 동작을만 추렸기에 이 점을 유의해야 한다.

 

 

> 동일한 알고리즘을 다른 요일의 데이터에도 동일하게 적용하여 시각화해 보았다.

 

> 요일별로 나눈 시각자료에서는 데이터의 개수가 적음을 고려하여 와드에 나온 횟수가 2회 이상인 동작을로 모아보았다.

 

> Crossfit Do it에서의 도메인 지식을 활용하자면, 월요일은 통상적으로 Squat을 비롯한 하체를 많이 사용하는 동작들이 자주 등장한다는 것을 기존에 알고 있었다.

 

> 이러한 지식을 배경으로 위 시각화 자료를 해석해 보자.

  • Row, Burpee, Thruster, DoubleUnder가 월요일에 나온 동작들 중 높은 빈도수를 차지하고 있다.
  • Row를 예시로 들면, 23번 등장했는데 위에서 봤던 116개의 월요일 와드에 나온 동작들과 생각해 보면 116개의 동작 중 Row가 23번이라는 말과 동일하므로, 그 비율은 약 19.8%라고 해석할 수 있겠다.
  • 방금과 같은 계산은 다른 동작들에도 동일하게 적용할 수 있다.

 


 

OUTTRO.

 

정리를 하다보니 분량이 너무 길어서 가독성을 헤칠 수 있겠다고 판단해서 남아있는 다른 요일에 대해서는 다음 글에서 다루고자 한다.