2023 학년도 1 학기 출석수업대체과제물
- 좋은 데이터 시각화의 사례를 1개 찾고 어떤 점에서 훌륭한지 300자 이내로 서술하시오. (이미지를 캡처하여 한글이나 워드 파일에 첨부할 것. 이미지를 별도의 파일로 제출하지 말 것) (6점)
Hanah Anderson과 Matt Daniels가 2016에 공개한 The Pudding라는 데이터 시각화 작업을 꼽고 싶다. 이 프로젝트는 영화 역사상 가장 뛰어난 영화 2000편의 대본을 분석하여 대중문화에서의 성별 격차를 시각화하고 있다. 영화 매체는 그 특성상 대중의 요구에 민감하게 반응해야 한다. 그런 영화의 성별 격차를 대본이라는 데이터를 통해 이끌어낸 것이 흥미로운 프로젝트이다.
남성 데이터를 파란색, 여성 데이터를 빨간색으로 두어 두 성별간의 격차를 색상 자체로 극명하게 대비하고 있으며, 이를 통해 각 영화에서 남성과 여성 등장 인물의 대사의 수와 연령의 차이를 확인할 수 있다. 대부분이 짐작하고 있었지만 구체적인 데이터로 확인하지 않았던 문제를 화두로 제시한 것이 이 프로젝트의 놀라운 점이라고 생각한다.
데이터 시각화로 보여진 결과는 예상했던 대로 남성의 대사 수가 극명하게 많았기에 보는 이에게 은연중에 알고 있던 사실을 새삼 깨닫게 하고 충격을 주는데 효과적이다. 예컨대 여성 주도의 액션 영화가 부족하다는 것은 쉽게 알 수 있지만, 모든 장르에서 나타나는 성별의 절대적이고 극명한 불균형을 시각화하는 것은 완전히 다른 차원의 문제를 제기할 수 있기 때문이다.
이 프로젝트는 4개의 주제별로 시각화 자료를 제공하고 있다, 디즈니 영화에 대한 분류, 2000개의 대본에서 남성과 여성별 대사의 양의 비율, 더 나아가 주요 등장인물들의 대사가 전체 대사에서 차지하는 비율, 남성과 여성 역할에 대한 연령별 대사 수를 확인할 수 있다. 몇몇의 데이터 시각화 자료에서 사용자가 궁금한 영화를 검색하거나 필터를 설정할 수 있는 인터렉션도 제공해 더 자세한 결과를 얻을 수도 있다.
2000개의 대본을 분석한다는 것과 그 충격적인 결과만으로도 인상적인 작업이지만, 이 프로젝트는 결과를 공유하는 방식에서도 배울 점이 많다. 해당 프로젝트를 시작하게 된 계기와 시각화에 사용한 데이터를 추출하고 분석한 방법론을 프로젝트 소개 구글 docs 사이트에 일목요연하게 설명하고 있어 일반인이 해당 프로젝트에 쉽게 접근할 수 있다. 더불어 분석한 데이터를 포함한 코드를 깃헙으로 공개하고 있어서 오픈 소스 프로젝트 문화에 이바지하고 있기도 하다.
2. 한스 로즈링의 TED 강의(아래의 URL 이용)를 보고 데이터 시각화의 역할 등 느낀 점을 1페이지 이 내로 정리하시오.(6점)
한스 로즈링의 강연을 보면서 그가 자신이 전달하려는 바를 효과적으로 전달하기 위해 데이터 시각화를 적절히 사용했다고 생각했다. 객관적인 데이터를 이해하기 쉽고 유머러스하게 전달하는 그의 발표력과 더불어 에니메이션 효과도 과하지 않고 적절했다. 예를 들어 그는 가족수와 가정 수입이라는 지표의 변화를 보여줄 때 전 세계 국가라는 공간적 요소와 연도별이라는 시간적 요소의 비교를 통해 전달하고 있는데 그 변화의 흐름을 1초 단위로 변화하는 애니메이션 효과를 통해 보여주고 있다. 이를 통해 이 거대한 세계가 어떤 방향으로 나아가고 있는지 한 눈에 파악할 수 있었다.
그는 서양국가와 개발도상국을 나누는 기준이란 없다는 것을 이를 통해 설명한다. 서양국가 즉, 우리가 통상적으로 생각하는 부자 나라의 대표적 국가인 미국이 과거에는 가족수와 가정수입 부분에서 개발도상국과 다르지 않는 데이터를 가졌음을 보여준다. 또한 우리가 개발도상국으로 분류한 국가들이 어떻게 100년도 안되는 시간 동안 미국과 비슷한 데이터 위치에 근접해가고 있는가를 설득하는데 그가 만든 데이터 시각화 자료는 집중하고 있다.
과거 개발도상국의 영아사망률이 선진국의 원조, 의료 복지, 교육 등의 지원을 통해 어떻게 유의미하게 변화하고 있는지를 자신의 모국인 스웨덴의 변화와 다른 개발 도상국의 데이터 변화를 축구경기 중계를 하듯 유머러스하게 설명하는 부분이 무척 재미있었다. 재미있기만 한 것이 아니라 부유한 국가들의 지원이 가난한 국가들의 이슈, 여기서는 영아 사망률로 대표되는 이슈를 해결하는데 도움이 된다는 주장을 뒷받침하기 충분한 결론 유도 과정이었다고 생각된다.
근 200년간 아시아 국가들이 어떻게 서양국가들과 비슷한 경로의 데이터를 축척해오고 있으며 이제는 이를 아프리카 대륙의 국가들이 따라가고 있는 것을 데이터 시각화 자료는 보여주고 있다. 그러나 그가 말하는 것처럼 선진국의 원조가 개발도상국들의 가정수입, 영아사망률을 낮춤으로써 선진국으로 여겨지는 국가들의 데이터 위치를 향해 개발도상국들의 데이터들이 나아가는 추세가 현재 선진국의 개발도상국에 대한 지원이 적절하다는 주장의 뒷받침이 된다는 생각에는 동의가 되지 않았다.
갈수록 증가하는 환경문제와 제3세계 나라들의 부채 그리고 풀리지 않는 기아문제들은 현재 진행되고 있는 경제개발의 모델에 뭔가 문제가 있다는 것을 보여준다. 그저 가정수입과 가족수, 영아사망률 등등의 지표를 기준으로 서구사회와 비슷해지고 있는 데이터의 흐름이 제3세게의 문제가 과거보다 나아지고 있다고 주장하는 것은 매우 간편한 서구중심적 논리가 아닌가 싶다. 그 근거로 헬레나 노르베지 호르의 <오래된 미래>에 나오는 라다크의 상황을 들 수 있다. 서구 중심의 인습적인 경제개발이 어떻게 라다크의 문화와 생태계를 파괴하고 그 공동체를 해체했는지를 본다면 한스 로즈링의 데이터셋이 얼마나 서구중심적인 생각으로 해석되고 있는지를 알 수 있다.
3. (1) 몸무게(bodywt)를 가로축, 뇌 무게(brainwt)를 세로축으로 하는 산점도를 그리시오. (3점)
library(ggplot2) data(msleep) ggplot(msleep,aes(bodywt, brainwt)) + geom_point(shape=1) + labs(x="body weight", y="brain weight")
(2) 몸무게(bodywt)에 로그를 취한 값(=log(bodywt))을 가로축, 뇌 무게(brainwt)에 로그를 취한 값 (=log(brainwt))을 세로축으로 하는 산점도를 그리시오. log(bodywt)를 독립변수, log(brainwt)를 종속변수로 하는 회귀직선을 산점도 위에 그리시오. 산점도의 제목으로 본인의 학번을 출력하시오. (6점)
library(ggplot2) data(msleep) ggplot(msleep,aes(bodywt, brainwt)) + geom_point(shape=1) + labs(x="body weight", y="brain weight", title="202334-363406") + scale_x_continuous(trans="log") + scale_y_continuous(trans="log") + stat_smooth()
4. R의 ggplot2 패키지에 내장된 mpg 데이터셋은 234개 차종의 특성과 연비에 대한 데이터이다. 이 중 변수 drv는 구동방식을 나타내는 변수로, f는 전륜구동, r은 후륜구동, 4는 사륜구동을 의미한다. 변수 hwy는 고속도로에서의 연비를 나타낸다. 이 데이터에서 구동방식에 따라 고속도로에서의 연비 의 분포가 어떻게 다른지 드러내는 데이터 시각화를 수행하시오. 그래프의 제목으로 본인의 학번을 출력하시오. (유일한 정답이 있는 것이 아니며, 시각화의 목적이 달성되고 그래프의 제목으로 학번 을 출력하면 만점) (9점)
data(mpg) ggplot(mpg, aes(drv, hwy,fill=drv)) + geom_col(stat="identity") + scale_fill_manual(values=c("#9933FF", "#33FFFF", "darkblue")) + labs(x="Driving System(drv)",y="Fuel Efficiency On The Highway(hrv)",title="202334-363406") + scale_x_discrete(labels=c("Front Wheel Driving(f)","Rear Wheel Driving(r)","Four Wheel Driving(4)"))
2023 학년도 1 학기 기말과제물
- 뉴스(인터넷, TV, 신문 등)에 데이터 시각화가 쓰인 사례를 찾아서 다음을 작성하시오. (12점)
- 뉴스의 제목: [빅데이터 분석-채식주의] 국내 채식 인구 150만…10년간 10배 증가
- 날짜: 2020.03.11
- 게재된 매체 이름: 식품음료신문(http://www.thinkfood.co.kr)
(1) 뉴스의 제목, 날짜, 게재된 매체 이름
(2) 데이터 시각화 (사진이나 캡쳐 이미지를 붙일 것)
(3) 데이터 시각화를 통해 어떤 내용을 전달하였는지
네이버 블로그 중 채식주의를 언급한 문서 중 상위 문서들을 기준으로 채식에 대한 인식을 보여주는 연관어를 긍정과 부정으로 나누어 보여주고 있다.
(4) 데이터 시각화가 얼마나 효율적, 효과적으로 이루어졌는지 본인의 평가
연관어를 분석한 문서의 기준이 채식주의를 많이 언급한 문서라는 점에서 채식주의에 괸심이 많은 사람들에 편향된 데이터 분석이었을 가능성이 높아보인다. 뉴스의 제목에서 언급되는 것처럼 국내 채식주의 인구가 증가했다는 주장을 위해 사용한 데이터가 이처럼 편향된 데이터라면 분석 결과에 대한 신뢰가 떨어질 것이다.
또한 해당 데이터를 시각화하는 방식에도 문제가 있어 보인다. 채식에 대한 인식의 결과를 긍정과 부정 두 가지로 나누어 대비시키고 싶었다면 두 카테고리의 차이가 한 눈에 보일 수 있도록 단순하게 막대그래프 또는 원그래프를 사용하는 것이 더 효과적이었을 것이다.
마찬가지 이유로 긍정/부정 카테고리의 세부 분석결과를 언급이 많이 된 연관어 순으로 단순히 원 안에 해당 연관어가 언급된 문서의 수를 직접 적고 있어 전체 데이터의 분포를 한눈에 파악하기 힘들다. 해당 데이터들을 막대그래프로 보여주었다면 보는 이가 데이터의 분포를 한눈에 파악할 수 있었을 것이다.
- 2018년 7월부터 2022년 8월까지 서울, 부산, 대구, 인천의 미세먼지 (PM10)의 양을 선그래프로 시각화하시오. 각 도시별로 하나의 꺾은 선을 그리되, 하나의 화면에 4 개의 꺾은 선을 겹쳐서 그려도 되고, 각 도시별로 다른 화면에 그려도 된다. 데이터 는 박서영 교수 홈페이지 자료실에서 ‘pm_data.xlsx’파일을 다운로드 받아서 사용 하시오. 그래프의 제목으로 본인의 학번을 출력하시오. (20점)
library(readxl) fineDustData = read_excel("pm_data.xlsx") library(ggplot2) library(dplyr) library(tidyr) location <- c('Seoul', 'Busan', 'Daegu', 'Incheon') fineDustData.long <- fineDustData %>% gather(category, values, location) %>% filter(category %in% location) %>% print ggplot(data=fineDustData.long, aes(x=date, y=values, group=category, color=category)) + geom_line() + labs(title="202334-363406",y="city", color="city")
- 한국, 북한, 중국, 일본의 국경선을 시각화하시오. 그래프의 제목으로 본인의 학번을 출력하시오. (힌트: 교재와 동영상 강의에서 사용한 Natural Earth 데이터 (ne_110m_admin_0_countries.shp와 동반 파일)을 사용해도 되고, geodata 패키지의 world() 함수를 사용하여 국경선 데이터를 내려받아 사용해도 되고, 그 외 다른 경로로 데이터를 확보해서 시각화해도 된다. 단, 데이터 출처를 명시할 것. 한국, 북한, 중국, 일본의 국가코드는 각각 KOR, PRK, CHN, JPN 이다.) (18점)
install.packages("ggplot2") install.packages("rnaturalearth") install.packages("rnaturalearthdata") install.packages("dplyr") library(ggplot2) library(rnaturalearth) library(rnaturalearthdata) library(dplyr) map.kor = ne_countries(scale = "medium", country = "South Korea") map.prk = ne_countries(scale = "medium", country = "North Korea") map.jpn = ne_countries(scale = "medium", country = "Japan") map.chn = ne_countries(scale = "medium", country = "China") map.all = fortify(map.kor) map.prk_f = fortify(map.prk) map.jpn_f = fortify(map.jpn) map.chn_f = fortify(map.chn) map.all =full_join(map.all, map.prk_f) map.all =full_join(map.all, map.jpn_f) map.all =full_join(map.all, map.chn_f) ggplot(data = map.all) + geom_polygon(aes(x = long, y = lat, group = group), fill = "#FFFFFF", color = "#000000") + labs(title="202334-363406")
데이터 출처: naturalearth 패키지를 사용하였습니다. Natural Earth 에서 제공하는 데이터 중 일부를 R에서 사용할 수 있도록 만들어진 패키지입니다.
Share article