R 기초교육 최승호
목차 I. R II. R 기본문법 III. R Package IV. 서울시분석따라하기 2
Ⅰ R 1. 개요 2. 설치방법 3. 분석환경살펴보기 3
1. 개요 1-0. 통계학 Ⅱ. R 기본문법 통계학 - 자료 (Data) 를수집, 정리, 분석하여그분석을토대로합리적인의사결정을할수있도록하는과학적방법체계 ( 기초통계학의이해, 김해진 / 이해영공저, 형설출판사 ) - 불확실한상황에서효과적인의사결정을할수있도록수치자료를수집하고, 정리하고, 표현하고, 분석하는 이론과방법을연구하는학문 ( 현대통계학, 강금석 / 정우석공저, 박영사 ) - 수량적비교를기초로하여, 많은사실을통계적으로관찰하고처리하는방법을연구하는학문 ( 위키피디아 ) 모집단 추출 표본 추론 4
1. 개요 1-1. 소개 Ⅰ. R R - 통계계산과그래픽을위한프로그래밍언어이자소프트웨어환경 - 무료! 오픈소스! - 다양한최신통계분석과마이닝기능을제공. 2018 년 7 월 6 일현재 12,721 개의패키지가공유되고있음 ( 이거있을까? 하면거의있다고보면됨. 심지어 Hadoop, Tensorflow 도연동가능 ) - 간단하게데이터를시각화할수있음 - 커뮤니티가활성화되어있어다양한예제및설명을쉽게찾아볼수있음 - 속도가느림 ( 특히반복문잘못사용하면..) - 모든데이터를메모리에로딩하고사용하기때문에메모리관리가중요함 - 각패키지별로새롭게방법을익혀야함. ( 정형화되어있는형태가없음 ) 5
1. 개요 1-2. R vs python Ⅰ. R 용도데이터분석, 통계, 데이터그래픽범용 ( 특정용도에국한되지않음 ) 사용자통계를이용하는연구자, 데이터과학자선호엔지니어선호 언어순위 평균연봉 (2014 Dice Tech Salary Survey) $ 115,531 ( 약 1 억 3 천만원 ) $ 94,139 ( 약 1 억 5 백만원 ) 주요라이브러리 dplyr, data.table, ggplot2 등 numpy, pandas, scipyp, sckit-learn, matplotlib 등 IDE R-Studio Spyder, IPython Notebook, pycharm 등 장점통계관련모델링이쉬움. 머신러닝라이브러리, 범용언어 https://www.datacamp.com/community/tutorials/r-or-python-for-data-analysis 6
2. 설치방법 (Windows) Ⅰ. R R 1. Cran (The Comprehensive R Archive Network : https://cran.r-project.org) 접속 2. Download R for Windows 클릭 3. Subdirectories > base > Download R 클릭 4. 설치 ( 다음다음..) R-Studio - R 을좀더편리하게사용하기위한개발환경 ( 데이터복구 SW 랑헷갈리지말것 ) 1. RStudio (https://www.rstudio.com) 접속 2. RStudio Downlod 클릭 3. RStudio Desktop Download 4. OS (Windows) 선택 5. 설치 ( 다음다음..) 7
3. 분석환경살펴보기 Ⅰ. R Source editor Environment History Console Files Help Plot 8
Ⅱ R 기본문법 1. R 실행해보기 2. 자료형 3. 통계 4. 데이터다루기 9
1. R 실행해보기 Ⅱ. R 기본문법 R 에기본내장되어있는개발환경을사용해도되지만좀더편리한사용을위해 Rstudio 를이용하여진행 Console 100 10. 1 + 3 (10 + 2) * 10 1/0 0/0 10
2. 자료형 2-1. 변수 Ⅱ. R 기본문법 변수 (variable) - 데이터를담는컨테이너. 사람이사용하는언어의대명사역할 변수의정의 - 변수의이름은알파벳, 숫자, _ (under bar),. (dot), 한글로구성. ( 한글은사용하지않는것을권장 ) - 첫글자는반드시문자나. 으로시작해야함 - 대입연산자 ( <- or = ) 를이용하여변수에값을대입 a <- 13 pi <- 3.14 e <- 2.72 num.int <- 10L knowch_1 <- 2020 11
2. 자료형 2-2. 자료형및연산자 Ⅱ. R 기본문법 기본자료형 1) 문자형 (character) : 문자, 문자열 (ex) a, 최승호짱짱맨 2) 정수형 (integer) : (ex) 1L, 10L 3) 실수형 (double) : (ex) 10, 1.5, 3.14 4) 복소수형 (complex) : (ex) 1+10i 5) 논리값 (logical) : (ex) TRUE, T, FALSE, F 특수한형태의값 1) NA (Not Available) : 결측값, 값이없음을의미함 2) NULL : 빈공간을의미 3) NaN (Not a Number) : 수학적으로정의되지않는값. (ex) 0/0 4) Inf (infinite), -Inf : 무한대 (ex) 1/0 자료형확인하기 - class(), typeof(), mode() 자료형사이의형변환 - as.integer(), as.character() 연산자설명 + 단항연산자 or 더하기 - 단항연산자 or 빼기 * 곱하기 / 나누기 ^ 또는 ** 거듭제곱 %% 나머지 %/% 정수형몫 ( 나머지버림 ) 12
2. 자료형 2-3. 자료구조 (1) Ⅱ. R 기본문법 자료구조 - 데이터 ( 기본자료형등 ) 를구조적으로표현하는방식 ( 데이터여러개를관리하는방법?) - 벡터, 리스트, 데이터프레임, 요인, 행렬, 배열등이있음 1) 벡터 (Vector) - R 에서가장기본이되는자료구조. 동일한자료형의데이터를일렬로나열한형태의자료구조. ( 원소가 1 개인벡터를스칼라라고함 ) - 원소에접근하는방법은벡터명 [index] x <- c(1,2,3,4,5) y <- c(1:5) z <- seq(from=1, to=5, by=1) ch <- c( a, b, c, d, e ) re <- rep(1, times=5) rere <- rep(1:3, times=5) 13
2. 자료형 2-3. 자료구조 (2) Ⅱ. R 기본문법 2) 리스트 (List) - 확장된형태의벡터. 단일한자료형으로구성해야하는벡터와달리어떠한자료형도원소로올수있음. ( 리스트를원소로갖는리스트도가능 ) - (key-value) 형식으로데이터저장이가능 (python 의 dictionary, java 의 map 같은구조 ) - 변수에접근하는방법은 list 명 [[index]], list 명 $key 명 x <- list(1, 2, a, b ) y <- list(1, 2, list( a, b )) li <- list(a=1, b=c(1:5), c= a ) li[[1]] li$b 14
2. 자료형 2-3. 자료구조 (3) Ⅱ. R 기본문법 3) 데이터프레임 (Dataframe) - 가장중요한자료구조 (python 의 pandas 라이브러리에서이구조를차용함 ) - 2 차원형태의데이터구조를가지고있음. (RDBMS 의 Table 구조와유사함 ) - 벡터들의집합 ( 각벡터들은데이터프레임의열을이룸 ) - 데이터에접근하는방법 : 데이터프레임명 $col 명, 데이터프레임명 [i, j] - 데이터프레임의구조확인 : str() - 요약정보 : summary() - 컬럼이름확인 : colnames(), names() id grade name 1 A Kim 2 B Lee 3 C Park 4 C Jung 5 B Choi id <- c(1:5) grade <- c( A, B, C, C, B ) name <- c( Kim, Lee, Park, Jung, Choi ) people <- data.frame(id, grade, name) people$name people[1,2] people[, 2] str(people) sumamry(people) colnames(people) 15
2. 자료형 2-3. 자료구조 (4) Ⅱ. R 기본문법 4) 요인 (Factor) - 범주형변수를저장하는형식 5) 행렬 (Matrix) - 수학의행렬을나타내는자료구조 6) 배열 (Array) - 3 차원이상의행렬을나타내는자료구조 (tensor 와유사 ) fac <- factor('male', c('male', 'female )) mat_1 <- matrix(1:9, nrow = 3) arr_1 <- array(1:12, c(2, 3, 3)) 16
2. 자료형 2-4. 조건문 Ⅱ. R 기본문법 if ( 조건 ) { 조건을만족할때실행할식 } else { 조건을만족하지않을때실행할식 } if ( 조건 1) { 조건 1 을만족할때실행할식 } else if ( 조건 2) { 조건 1 을만족하지않고조건 2 를만족할때실행할식 } else { 조건 1, 조건 2 모두만족하지않을때실행할식 } ifelse (a, b, c) - a 가참이면 b 를실행하고 a 가거짓이면 c 를실행 if(i == 0) { print("i = 0") } else if(i == 1) { print("i = 1") } else { print("i 는 0 도아니고 1 도아님 ") } x <- c(1:5) ifelse(x %% 2 == 0, "even", "odd") 17
2. 자료형 2-5. 반복문 Ⅱ. R 기본문법 원하는내용을원하는만큼반복해서실행 for ( i in data) { 반복내용 } while( 조건 ) { } 반복내용 for( i in c(1:9)) { print(i) } my_mode <- function(x) { temp <- table(x) return(names(temp)[which.max(temp)]) } 18
2. 자료형 2-6. 함수 Ⅱ. R 기본문법 정해진기능을수행하는코드의묶음 입력값, 출력값을정하여다양한형태를만들수있음 함수의정의 - my_func <- function(input) { } 함수구현부분 return() func <- function() { print( aaa ) } my_mode <- function(x) { temp <- table(x) return(names(temp)[which.max(temp)]) } 19
3. 통계 3-1. 기초통계 (1) Ⅱ. R 기본문법 대푯값 - 자료를대표하는값 - 최소값 (Minimum), 최대값 (Maximum), 평균 (Mean), 중앙값 (Median), 최빈값 (Mode) 등 평균 - 이상치 (outlier) 에많은영향을받음 - 산술평균, 가중평균, 기하평균, 조화평균등 - μ = 1 n Σx i cars min(cars$speed) max(cars$speed) mean(cars$speed) my_mode(cars$speed) 20
3. 통계 3-1. 기초통계 (2) Ⅱ. R 기본문법 산포도 - 자료가흩어져있는정도를살펴보기위한지표 - 범위 (Range), 사분범위 (IQR, Interquartile Range), 분산 (Variance), 표준편차 (Standard Deviation) 등 1. 사분범위 - 사분위수 : 자료를 4 등분한위치에있는값들 (1 사분위수 Q1, 2 사분위수 ( 중앙값 ) Q2, 3 사분위수 Q3) - IQR = Q3 Q1 2. 분산 - 편차의제곱의평균 - ( 모분산 ) σ 2 = Σ(x i μ) 2, ( 표본분산 ) s 2 = Σ(x i μ) 2 n 3. 표준편차 - 분산의양의제곱근 summary(cars$speed) quantile(cars$speed) IQR(cars$speed) var(cars$speed) sd(cars$speed) n 1 var() 과 sd() 는표본에대한값을리턴함 21
3. 통계 3-1. 기초통계 (3) Ⅱ. R 기본문법 상관분석 - 두변수간에어떤공변하는관계가존재하는지분석하는방법 상관계수 (Correlation coefficient) 1) 피어슨상관계수 - 두변수간선형상관관계가존재하는지판단하는방법. - -1~1 사이의값으로 1 에가까울수록양의상관성, -1 에가까울수록음의상관성이높다 2) 스피어만상관계수 - 데이터가계량형변수또는순서형변수인경우, 자료의값대신순위를이용하는경우의상관계수 head(iris) cor(iris[, 1:4]) plot(iris$petal.length, iris$petal.width) plot(iris[, 1:4]) 22
3. 통계 3-2. 결측치와이상치 Ⅱ. R 기본문법 결측치 - 누락된값 - 시계열데이터인경우, 비슷한시기의데이터나최근데이터를이용하여보정가능 - 평균값이나최빈값등으로대체 이상치 (Outlier) - 다른데이터에비해특별히크거나작은값 - 잘못된값이아닐수도있음 - 최대값등으로대체가능 결측치와이상치는처리하지않으면분석의결과에지대한영향을끼칠수있으므로반드시처리할것을권장. 상황에따라제거할것인지다른값으로대체할것인지결정해야함 23
4. 데이터다루기 4-1. File load & save Ⅱ. R 기본문법 작업디렉토리설정 - getwd() : 현재디렉토리확인 (get working directory) - setwd( 경로 ) : 디렉토리설정 (set working directory) 파일로드 - read.csv() : csv 파일을읽어오는함수 파일세이브 - write.csv() : csv 파일로저장하는함수 getwd() setwd( C:/Users/administrator ) a <- read.csv( test.csv ) a <- read.csv( C:/Users/administrator/test.csv ) a <- read.csv( https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data ) write.csv(df, sample.csv ) write.csv(df, sample.csv, row.names = FALSE) 24
4. 데이터다루기 4-2. 데이터프레임 (1) Ⅱ. R 기본문법 컬럼추가 - dataframe명 $ 새컬럼명 <- 데이터 컬럼수정 - dataframe 명 $ 새컬럼명 <- 데이터 컬럼삭제 - dataframe 명 $ 컬럼명 <- NULL 컬럼이름변경 - colnames(dataframe 명 ) <- 새컬럼명들 data("iris") df_1 <- iris df_1$rank <- rank(df_1$sepal.length, ties.method = "min") df_1$rank <- rank(df_1$sepal.length, ties.method = "max") df_1$rank <- NULL colnames(df_1) <- c("col1", "col2", "col3", "col4", "col5") 25
4. 데이터다루기 4-2. 데이터프레임 (2) Ⅱ. R 기본문법 cbind() - 데이터프레임 2 개를열방향으로결합 - 두데이터프레임의행수가같아야함 rbind() - 데이터프레임 2 개를행방향으로결합 - 두데이터프레임의컬럼명, 컬럼순서가같아야함 cbind(df_1, df_2) rbind(df_1, df_2) 26
4. 데이터다루기 4-2. 데이터프레임 (3) Ⅱ. R 기본문법 merge() - 데이터프레임 2 개를특정컬럼을기준으로 join 하는함수 - join 을위한 key 를여러개지정가능 merge(df_1, df_2, by = c( id ), all.x = TRUE) 27
4. 데이터다루기 4-2. 데이터프레임 (4) Ⅱ. R 기본문법 subset() - 원하는조건에맞는데이터를선택하는함수 which() - 조건에맞는 index 를반환하는함수 df <- data.frame(iris) subset(df, select = c("sepal.length", "Species"), subset = (Sepal.Length > 5.0)) new_df <- df[which(df$sepal.length > 5.0), c(1, 5)] subset(df, select = c("sepal.length", "Sepal.Width","Species"), subset = (Sepal.Length > 5.0) & (Sepal.Width > 3.5)) subset(df, select = c("sepal.length", "Sepal.Width","Species"), subset = (Sepal.Length > 5.0) (Sepal.Width > 3.5)) 28
Ⅲ R Package 1. Package 사용법 2. dplyr 3. sqldf 4. ggplot2 29
1. R Package 사용법 1-1. 설치및로드 Ⅲ. R Package Package - 사용자가본인의필요나다른사용자의요구에의해제작한특수한목적의로직및코드의집합 - 함수, 데이터셋, 설명서, 도움말등으로구성되어있음 설치 - install.packages( 패키지명 ) - 한번설치한패키지는다시설치하지않아도됨 로드 - library( 패키지명 ) install.packages( dplyr ) install.packages(c( ggplot2, sqldf )) library(dplyr) 30
2. dplyr 2-1. 개요 Ⅲ. R Package Hadley Wickham - 뉴질랜드출신의통계학자 - dplyr, tidyr, stringr, ggplot2 등많은패키지를제작배포 dplyr - 데이터처리에특화된 R 패키지 - R 의기본함수에비해쉽고간단한방법으로데이터처리가가능. - 데이터선택, 정렬, 컬럼추가, 집계등이가능 - SQL 과유사한로직으로 SQL 을다루는사람이손쉽게사용가능 install.packages( dplyr ) library(dplyr) dplyr 함수 설명 유사기본함수 filter() 지정한조건에맞는데이터추출 subset() select() 컬럼선택 subset(), data[ 조건 ] mutate() 컬럼추가 transform() arrange() 정렬 order(), sort() summarise() 집계 aggregate() group_by() 소그룹별집계를위한그룹화 31
2. dplyr 2-2. filter() Ⅲ. R Package 조건에맞는행을선택하는함수 SQL 의 WHERE 절 동치연산의경우 == 를사용해야함 filter(data, 조건식 ) library(dplyr) data("diamonds", package = "ggplot2") str(diamonds) filter(diamonds, carat >= 1.0) filter(diamonds, carat >= 1.0 & color == "D") filter(diamonds, cut == "Premium" cut == "Good") 32
2. dplyr 2-3. select() Ⅲ. R Package 원하는열을선택하는함수 SQL의 SELECT절 select(data, 선택컬럼들 ) select(diamonds, carat, cut, price) select(diamonds, c("carat", "cut", "price")) select(diamonds, c(1, 2, 7)) 33
2. dplyr 2-4. mutate() Ⅲ. R Package 새로운컬럼을추가하는함수 SQL의 SELECT절에서새로운컬럼추가 mutate(data, 새컬럼명 = < 내용 >) mutate(diamonds, volume = x*y*z) mutate(diamonds, volume_round = round(x*y*z, digits = 2)) # round() 함수는사사오입되지않으니주의! 34
2. dplyr 2-5. arrange() Ⅲ. R Package 결과를원하는조건으로정렬하는함수 SQL의 ORDER BY 절 arrange(data, 정렬 _ 기준 _ 컬럼들 ) arrange(diamonds, price) arrange(diamonds, desc(price)) arrange(diamonds, desc(price), carat) arrange(diamonds, desc(price), desc(carat)) 35
2. dplyr 2-6. group_by(), summarise() Ⅲ. R Package 소그룹단위로집계하는함수 SQL 의 GROUP BY 절 group_by() 함수는 mutate 와도함께사용가능 temp <- group_by(data, 소그룹 _ 기준 _ 컬럼 ) summarise(temp, 새컬럼 = 집계함수 ( 컬럼 )) temp <- group_by(diamonds, color) summarise(temp, mean_price = mean(price)) mutate(temp, mean_price = mean(price)) temp <- select(diamonds, c(3, 5:10)) temp <- group_by(temp, color) summarise_all(temp, funs(sum)) 36
2. dplyr 2-7. 연습문제 Ⅲ. R Package dplyr 패키지와 diamonds 데이터셋을이용해서풀어보세요 ~ 1. carat 이 1.0 보다큰행에대해서 volume ( = x*y*z ) 컬럼을추가하고 color 별로 volume 의평균을계산하시오. 2. volume 컬럼을추가하고 ( 소수점아래 1 자리까지만표시, 소수점아래 2 자리에서반올림 ) volume 이 100 보다큰행들의 carat, cut, color, price, volume 컬럼만선택한후 cut 별로 price 의평균을계산하여 price 의평균값이큰순서대로정렬하시오. 37
2. dplyr 2-7. %>% (chain function) Ⅲ. R Package 앞부분에서계산된결과값을다음함수의입력값으로전달하는함수 데이터정제과정과동일하게코드를작성할수있음 ( 의식의흐름과같이코딩가능 ) dplyr 의백미! dataframe %>% 함수 1() %>% 함수 2() %>% group_by(diamonds, color) %>% summarise(mean_price = mean(price)) diamonds %>% group_by(color) %>% summarise(mean_price = mean(price)) 38
3. sqldf 3-1. sqldf Ⅲ. R Package SQL이익숙한사용자를위해제작됨 SQL을그대로이용하여데이터의조작이가능 sqldf( sql 문장 ) sqldf("select * FROM cars WHERE speed > 10") 39
4. ggplot2 4-1. 개요 Ⅲ. R Package 데이터시각화 - 데이터의현황이나결과를쉽게알아볼수있도록그림, 차트등으로표현하는방법 - 데이터의단순한나열보다한장의사진이더가치가있다! ggplot2 - Hadley Wickham 교수에의해개발 - 데이터의시각화를위한패키지 - R 의기본제공차트에비해상세한설정이가능 - python 에 ggplot2 를이용한시각화라이브러리존재 install.packages( ggplot2 ) library(ggplot2) 40
4. ggplot2 4-2. Bar Chart Ⅲ. R Package Bar Chart ( 막대그래프 ) - 이산형변수 ( 범주형변수 ) 에대한데이터를나타내기위한그래프 temp <- diamonds %>% group_by(color) %>% summarise(mean_price = mean(price)) ggplot(temp, aes(x=color, y=mean_price)) + geom_bar(stat = "identity") ggsave( test.jpg", dpi = 300) # 이미지저장 41
4. ggplot2 4-3. Pie Chart Ⅲ. R Package Pie Chart ( 원그래프 ) - 전체에대한각부분의비율을부채꼴모양으로표현한그래프 - 전체적인비율을쉽게파악할수있음 ggplot(diamonds, aes(x=factor(1), fill = color)) + geom_bar(width = 1) + coord_polar(theta = "y", start = 0) 42
4. ggplot2 4-4. Boxplot Ⅲ. R Package Boxplot ( 상자그림 ) - 최솟값, 제 1 사분위 (Q1), 제 2 사분위 (Q2), 제 3 사분위 (Q3), 최댓값을표현하여데이터의분포를한눈에표현 - Q1 1.5*IQR 보다작거나 Q3 + 1.5*IQR 보다큰수는이상치로정의 IQR = Q3 Q1 ggplot(diamonds, aes(x=cut, y=price)) + geom_boxplot() ggplot(diamonds, aes(x=cut, y=price, color= color)) + geom_boxplot() 43
4. ggplot2 4-5. Scatter Plot Ⅲ. R Package Scatter Plot ( 산점도 ) - 직교좌표계를이용하여두변수사이의관계를표현하는그림 - 상관관계를시각적으로확인하기좋음 ggplot(diamonds, aes(x=carat, y=price)) + geom_point() ggplot(diamonds, aes(x=carat, y=price, color=color)) + geom_point() 44
4. ggplot2 4-6. Histogram Ⅲ. R Package Histogram ( 히스토그램 ) - 연속형변수에대해서해당변수의계급을나눠각계급에대한도수를나타낸차트 ( 도수분포표의그림버전 ) - 데이터의분포를파악하기쉬움 - 계급을어떻게나누는가에따라모양이변할수있음 ggplot(diamonds, aes(x=carat)) + geom_histogram() qplot(x = carat, data = diamonds, geom = "histogram") ggplot(diamonds, aes(x=carat, fill = color)) + geom_histogram(binwidth = 0.1) ggplot(diamonds, aes(x=carat)) + geom_histogram(binwidth = 0.1) + facet_grid(color~.) 45
4. ggplot2 4-7. Density plot Ⅲ. R Package Density plot ( 밀도그림 ) - 연속형변수에대해서히스토그램의경우, 계급의크기에따라그래프가다르게표현될수있다는단점이존재 - Density plot 은 KDE(Kernel Density Estimation, 커널밀도추정 ) 을통해서밀도함수를표현 ggplot(diamonds, aes(x=carat)) + geom_density() ggplot(diamonds, aes(x=carat, color = color)) + geom_density() 46
4. ggplot2 4-8. Line Chart Ⅲ. R Package Line Chart ( 선차트 ) - 연속형변수 ( 특히시간 ) 에대해서추세를확인하기위해많이사용 temp <- data.frame(economics) head(temp) ggplot(temp, aes(x=date, y=unemploy/pop)) + geom_line() 47
4. ggplot2 4-9. 차트의중첩 Ⅲ. R Package 여러개의차트를함께표현할수있음 ggplot(diamonds, aes(x=carat)) + geom_histogram(aes(y =..density..), binwidth = 0.1) + geom_density(color="red") ggplot(diamonds, aes(x=carat, y=price)) + geom_point() + geom_smooth() 48
Ⅳ 서울시분석사례따라하기 1. 분석개요및절차 2. 실습 49
3. 서울시분석사례따라하기 3-1. 분석개요및절차 Ⅳ. 서울시분석사례따라하기 서울시에서시행한 빅데이터기반심야버스노선수립을위한분석 중유동인구와관련된부분을따라하는것으로진행 분석은 KT 의유동인구데이터와택시승하차정보를활용하여심야시간의버스운행노선을결정하는것을목표로진행되었음. 본분석따라하기는 KT 유동인구데이터를활용해서데이터를정제, 시각화하는것으로정의. 1 데이터준비 Hadoop Hive KT 월별유동인구데이터 ( 성, 연령, 요일별 ) HiveQL 작성 및실행 데이터다운로드 2016 년 3 월 2 데이터확인 유동인구 데이터확인 EDA (Exploratory data Analysis) 3 데이터시각화 서울시지도 헥사곤제작 헥사곤별 유동인구집계 헥사곤별 유동인구시각화 50
3. 서울시분석사례따라하기 3-2. 실습 Ⅳ. 서울시분석사례따라하기 Hive 를통해서추출한데이터를이용하여 EDA 를진행 1) 빅데이터캠퍼스 DB에서 bigdata.tbdim_adstrd 다운로드 2) 다운로드한테이블을 KT 유동인구데이터와 merge 3) 포인트별유동인구합계 4) 행정동별, 성별유동인구합계 5) 2) 에서나타낸데이터를 ggplot 을이용하여 bar chart 로표시 6) 행정동별유동인구합계 7) 4) 에서나타낸데이터를 ggplot을이용하여 bar chart로표시 51
End of Documents