3. 꿈꾸는데이터디자이너 시즌2
Data Wrangling
the process of manually converting or mapping data
from one "raw" form into another format
that allows for more convenient consumption of the data
5. 꿈꾸는데이터디자이너 시즌2
Wide format vs Long format
hour03 hour09 hour15 hour21
강릉 25.5 26.2 29.3 26
광주 25.5 27.9 33.4 27.6
대구 27.3 29.5 36.1 30.7
대전 26.1 28.9 33.3 28.4
부산 25.3 28 29.8 25.6
서울 26.1 26.8 31.1 27.9
인천 25.7 25.8 28.4 26.2
제주 26.8 28.6 29.9 26.8
춘천 23.8 23.6 32 26.2
포항 28.9 27.1 34.3 31.7
해남 24.4 27.4 29.5 26.2
location hour temp
강릉 hour03 25.5
광주 hour03 25.5
대구 hour03 27.3
대전 hour03 26.1
부산 hour03 25.3
서울 hour03 26.1
인천 hour03 25.7
제주 hour03 26.8
춘천 hour03 23.8
포항 hour03 28.9
해남 hour03 24.4
강릉 hour09 26.2
6. 꿈꾸는데이터디자이너 시즌2
Wide format
hour03 hour09 hour15 hour21
강릉 25.5 26.2 29.3 26
광주 25.5 27.9 33.4 27.6
대구 27.3 29.5 36.1 30.7
대전 26.1 28.9 33.3 28.4
부산 25.3 28 29.8 25.6
서울 26.1 26.8 31.1 27.9
인천 25.7 25.8 28.4 26.2
제주 26.8 28.6 29.9 26.8
춘천 23.8 23.6 32 26.2
포항 28.9 27.1 34.3 31.7
해남 24.4 27.4 29.5 26.2
- 엑셀 피벗테이블 등을 통해서 정리한 형태
- 보고서 등에 자주 등장
- 한정된 공간에 효율적으로 정보 배치
- 변수를 추가하기 어렵다
- 다양한 형태로 변환하기 힘들다
7. 꿈꾸는데이터디자이너 시즌2
Long format (tidy data)
- 하나의 변수가 하나의 열을 차지한다
- 다른 형태의 데이터로 변환하기 쉽다
- 시각화, 모델링이 편하다
- 데이터를 직접 보면서 확인하기는 힘들다
- 데이터의 부피가 커진다
location hour temp
강릉 hour03 25.5
광주 hour03 25.5
대구 hour03 27.3
대전 hour03 26.1
부산 hour03 25.3
서울 hour03 26.1
인천 hour03 25.7
제주 hour03 26.8
춘천 hour03 23.8
포항 hour03 28.9
해남 hour03 24.4
강릉 hour09 26.2
10. 꿈꾸는데이터디자이너 시즌2
location hour temp
강릉 hour03 25.5
광주 hour03 25.5
대구 hour03 27.3
대전 hour03 26.1
부산 hour03 25.3
서울 hour03 26.1
인천 hour03 25.7
제주 hour03 26.8
춘천 hour03 23.8
포항 hour03 28.9
해남 hour03 24.4
강릉 hour09 26.2
Tidy data
변수
관측치
21. 꿈꾸는데이터디자이너 시즌2
dplyr::select()
- 지정한 열을 선택할 수 있다
- 열의 이름을 변경할 수 있다
select(data, column_name)
select(data, new_name = column_name)
select(weather_long, location, temp)
select(weather_long, loc = location, temp)
22. 꿈꾸는데이터디자이너 시즌2
dplyr::filter()
- 조건을 지정해서 원하는 행만 출력한다
- |연산자를 통해 OR연산을 수행할 수 있고,
AND연산은 조건을 comma로 이어 붙이면 가능하다
filter(data, column_name > value)
filter(weather_long, location == ' ')
filter(weather_long, location == ' ', temp > 26)
filter(weather_long, location == ' ' | location == ' ')
23. 꿈꾸는데이터디자이너 시즌2
dplyr::mutate()
- 연산을 통해 새로운 열을 생성한다
- 함수 내에서 생성한 열도 바로 연산에서 사용할 수 있다
- 상수를 지정하면 동일한 값으로 채운 열을 생성한다
mutate(data, new_column = value)
mutate(weather_long, mean_temp = mean(temp))
mutate(weather_long, mean_temp = mean(temp),
diff = temp - mean_temp)
mutate(weather_long, country = 'Korea')
24. 꿈꾸는데이터디자이너 시즌2
select, filter, mutate 실습
섭씨(C)에서 화씨(F)로 변환시키는 공식이
F = (9/5)*C + 32 라고 합니다
1) temp열의 온도값을 화씨로 변경하여 temp_f 라는 열을 생성해주세요
2) 화씨 온도가 90도를 넘는 경우만 찾아서 location과 temp 열만 출력해주세요
25. 꿈꾸는데이터디자이너 시즌2
dplyr::summarise()
- 데이터를 요약해준다
- group_by와 함께 사용할 수 있다
summarise(data, new_column = value)
summarise(weather_long, mean(temp))
summarise(weather_long, count = n())
26. 꿈꾸는데이터디자이너 시즌2
dplyr::group_by()
- 연산을 그룹별로 시행할 수 있도록 눈에 보이지 않는 그룹을 지정해준다
- mutate, summarise와의 조합으로 사용한다
- 그룹 지정을 해제하려면 ungroup()을 사용한다
group_by(data, coloumn_name)
group_by(weather_long, location)
group_by(weather_long, hour)
27. 꿈꾸는데이터디자이너 시즌2
dplyr::group_by()
- 연산을 그룹별로 시행할 수 있도록 눈에 보이지 않는 그룹을 지정해준다
- mutate, summarise와의 조합으로 사용한다
group_by(data, coloumn_name)
weather_loc = group_by(weather_long, location)
weather_hour = group_by(weather_long, hour)
summarise(weather_loc, mean_temp = mean(temp))
summarise(weather_hour, mean_temp = mean(temp))
mutate(weather_loc, mean_temp = mean(temp))
mutate(weather_hour, mean_temp = mean(temp))
28. 꿈꾸는데이터디자이너 시즌2
location hour temp
강릉 hour03 25.5
광주 hour03 25.5
대구 hour03 27.3
강릉 hour09 26.2
광주 hour09 27.9
대구 hour09 29.5
강릉 hour15 29.3
광주 hour15 33.4
대구 hour15 36.1
강릉 hour21 26
광주 hour21 27.6
대구 hour21 30.7
location hour temp
강릉 hour03 25.5
강릉 hour09 26.2
강릉 hour15 29.3
강릉 hour21 26
광주 hour03 25.5
광주 hour09 27.9
광주 hour15 33.4
광주 hour21 27.6
대구 hour03 27.3
대구 hour09 29.5
대구 hour15 36.1
대구 hour21 30.7
29. 꿈꾸는데이터디자이너 시즌2
dplyr::arrange()
- 지정한 열을 기준으로 정렬한다
- 열을 두 개 이상 지정하면 첫 번째 열의 값이 동점일 때 나머지 열을 기준으로 정렬
- 기본값은 오름차순이지만 desc()를 이용해서 내림차순 정렬을 시킬 수 있다
- group_by의 영향을 받는다
arrange(data, coloumn_name)
arrange(data, desc(coloumn_name))
arrange(weather_long, desc(temp), hour)
summary_loc = summarise(weather_loc, mean_temp = mean(temp))
arrange(summary_loc, mean_temp)
arrange(summary_loc, desc(mean_temp))
30. 꿈꾸는데이터디자이너 시즌2
실습
iris 데이터를 이용해서 종(Species)별로
1) Sepal.Width 열과 Sepal.Length 열의 평균을 구해주세요
2) max(),min()을 이용해서
각 종별로 Petal.Width의 최대값, 최소값을 구해주세요
41. 꿈꾸는데이터디자이너 시즌2
pipe를 쓰는 이유
- 가독성
- 불필요한 임시 변수를 줄일 수 있다
- 생각하는 순서대로 코드를 작성할 수 있다
주의해야 할 점
- pipe operator가 들어있는 패키지를 불러와야
사용할 수 있다
- pipe 를 사용하기 힘든 함수구조에 적용하면
오히려 코드가 더 복잡해질 수 있다
- pipe 연산자를 모르는 사람이 보면 이해하기 힘들다