본문 바로가기
Data Analysis/청소년수련활동인증제

e청소년_데이터 전처리

by mansoorrr 2023. 8. 18.

Tableau Prep을 이용해 e청소년 사이트에서 수집한 데이터를 전처리 한다.

 

먼저 Tableau Prep에 mysql을 연결하여 db를 불러온다. 나는 3개의 테이블이 조회된다. orgInfo 테이블과 pginfo테이블을 join 한다. 조인시 idx필드(orginfo)와 orgInfo_idx(pginfo)를 관계 맺는다. 아래 그림을 보면 orginfo테이블의 681개의 기관과 인증활동 2993개가 모두 잘 연결된 것을 확인할 수 있다.

 

 

1. 값 그룹화 및 공백 제거

데이터가 수집되면서 불필요한 문자열이 들어오거나 정정해야 하는 부분이 있어 값 그룹화와 공백을 제거하는 과정을 실시한다.

가. 값 그룹화

조인된 데이터로 onMethod(운영방식) 필드를 살펴보니 공백으로 되어있는 데이터가 있다. 5개가 있었는데 idx를 확인하고 사이트에 들어가보니 사이트에 운영방식이 등록되어있지 않은 프로그램이 있었다. 이 데이터들의 경우 null값으로 변경해 주었다. 

나. 공백제거

그리고 onMethod 필드와 avArea(활동영역), pgName(프로그램이름)필드를 살펴보니 모든 문자열 앞에 space가 처리되어 있었다. 따라서 모든 공백을 제거해 주었다.

 

 

2. 계산된 필드 만들기

avDate(활동기간)필드는 활동 시작일부터 종료되는날까지의 기간이 문자열로 작성되어 있다. 2023-09-25 ~ 2023-10-26,  2023-09-25~09-31, 2023-09-25~28 이런식으로 다양하게 작성되어 있는 것을 확인할 수 있었다. 따라서 활동 기간을 활동시작일과 활동 종료일로 분리했다.

 

가. 문자열 길이 계산

전처리를 위해 먼저 모든 로우에 공통적으로 들어있는 "~"를 기준으로 뒤에 있는 문자열의 길이를 확인했다. 아래 그림과 같이 0, 3, 6, 11로 이루어 졌다.

len(split([avDate], "~", 2))

 

나. 문자열 길이에 따라 활동시작날짜 계산

avDate에서 "~"를 기준으로 나누어 앞부분을 시작날짜로 지정했다.

SPLIT([avDate], "~", 1)

 

다. 문자열 길이에 따라 활동종료날짜 계산

문자열 길이에 따라 함수를 다르게 지정하여 종료날짜를 계산했다. 이렇게 계산한 데이터는 최종 아래와 같이 나타났다.

if [Len_avDate] = 0
	THEN [avDate]
ELSEIF [Len_avDate] = 6
	THEN 
    	LEFT([avDate], FINDNTH(split([avDate], "~", 1), "-", 1)-1) + "-" + SPLIT([avDate], "~", 2)
ELSEIF [Len_avDate] = 3
	THEN
    	LEFT([avDate], FINDNTH(split([avDate], "~", 1), "-", 2)-1) + "-" + SPLIT([avDate], "~", 2)
ELSE SPLIT([avDate], "~", 2)
END

 

3. pgDetail과 join

위의 과정으로 전처리를 완료하고 마지막 pgDetail과의 join을 실시한다. 조인할 필드는 pgCode(정리마친테이블) 와 pgCode(pgDetail)필드 이다. 위에서도 2993개 로우의 데이터였으므로 조인 후에도 2993개로 잘 유지되는 것을 확인할 수 있다.

4. 데이터 값 변환

주의깊게 봐야할 컬럼은 avRegion(활동지역), age(연령), price(참가비), sleepOk(숙박여부) 이다. 

 

가. avRegion(활동지역)

기관의 주소와 활동지역은 완전히 동일함을 확인했다. 따라서 이 필드는 삭제한다.

 

나. age(연령)

age필드의 경우 초, 중, 고 단일 연령도 있지만 초,중 / 중,고/ 등 연령이 복합적으로 들어가 있는 경우도 있다. 이것은 정제 후 python을 통해 더미변수(0,1)로 변환하는 전처리를 한번 더 진행할 것이다.

다. price(참가비)

price는 거의 대부분 무료~50만원 사이에 분포한다. 데이터 수집시 참가비가 적혀있지 않은 경우 999999원으로 입력되도록 세팅해 두었었으므로 이를 null로 처리한다.

 

라. sleepOk(숙박여부)

숙박여부의 경우 0박1일, 0박일, 3박4일, 3박일 등 통일되지 않게 써있는 것들이 있다. 이런 것들을 통일되게 수정한다. 모두 0박0일로 변경할 것이다. 반면 당일형이 있기 때문에 0박1일 0박일 1일 등의 경우는 당일형으로 변경한다.

 

5. 데이터 전처리 완료

중복되는 필드를 제거하는 것으로 전처리를 완료한다. 

이로써 Tableau prep을 활용한 데이터 전처리를 마쳤다. 전체적인 전처리 플로우 도식과 최종 남은 필드는 다음과 같다. 이를 엑셀파일로 변환하여 Python을 활용해 더미변수 age필드를 더미변환을 진행할 것이다.

 

 

추가적으로 전처리할 부분은 python을 통해 전처리를 진행했다.

 

e청소년_데이터전처리2

1. 데이터전처리 Tableau를 활용해 데이터를 전처리했지만 분석하기 전에 추가적으로 전처리해야할 부분이 있다. 전처리할 부분과 관련 설명은 아래와 같다. 가. age 현재 age 컬럼은 초, 중, 고 등의

hiphan-mansoorrr.tistory.com