고급컴퓨터알고리듬 서울시립대학교 전기전자컴퓨터공학과 G201449015 이가희 3 Exploring data • Using summary statistics to explore data • Exploring data using visualization • Finding problems and issues during data exploration Using summary statistics to exploring data ? Summary(data) : data의 전반적인 형태를 보여준다. data type - numeric : variety of summary statistics - categorical data(factor & logical) : count statistics custdata <- read.table('custdata.tsv', header=T, sep='\t') str(custdata) summary(custdata) https://github.com/WinVector -> zmPDSwR.zip Using summary statistics to exploring data ? Summary(data) : data의 전반적인 형태를 보여준다. data type - numeric : variety of summary statistics - categorical data(factor & logical) : count statistics custdata <- read.table('custdata.tsv', header=T, sep='\t') str(custdata) summary(custdata) Missing value Invalid value and Outliers Data range Units Typical problems reveal by summaries Missing value!!! MISSING VALUES : 값이 없다. (≠0) drop rows 만이 해결 방법일까? 왜 missing values가 있고, 이것들이 사용할 가치가 있는지 판단할 필요가 있다. “not in the active workforce” (student or stay-at-home partners) only missing a few values -> drop rows! Typical problems reveal by summaries Invalid value and Outliers Data range INVALID VALUE : 의미 없는 값, missing value -> invalid value ex) non-negative value여야 하는 numeric data (age, income) - negative values DATA RANGE : wide range? narrow range? 무엇을 분석하느냐에 따라 필요한 데이터 범위도 달라진다. ex. 5세에서 10세 사이의 어린이를 위한 읽기능력을 예측 : 유용한 변수 – 연령 20대 이상 -> 데이터 변환 or 빈 연령대로 변환 만약 예측해야 할 문제에 비해 데이터 범위가 좁다면, a rough rule of thumb (평균에 대한 표준편차의 비율) 활용 summary(custdata$income) “amount of debt”-> bad data summary(custdata$age) “age unknown” or “refuse to state” 0~615,000 : very wide range Typical problems reveal by summaries Units UNITS : 어떤 단위로 구성되어 있는지 확인해야 한다. days, hours, minutes, kilometers per second, … summary(custdata$income) Income <- custdata$income/1000 summary(Income) “hourly wage” or “yearly income in units of $1,000” 범위 축소 Spotting problem using graphic and visualization ggplot2() : R에서 기본으로 제공하는 plot()과 유사한 인터페이스를 제공하는 시각화 툴 레이어(layer)를 잘 활용해야 한다. only data.frame 플로팅할 데이터의 column name ggplot(data, aes(x=column, y=column), FUN…) + geometric_object() + FUN… aesthetic mapping : 데이터를 플로팅 할때 쓴다. geom_point() (scatter plot) geom_line() (line plot) geom_bar() (bar chart) geom_density (density plot) geom_histogram (histogram) … ggplot(custdata, aes(x=age)) + geom_density() ggplot(custdata) + geom_density(aes(x=age)) outliers invalid values? http://ggplot2.org Spotting problem using graphic and visualization A single variable 1 HISTOGRAM : bin을 기준으로 데이터의 분포를 보여준다. examines data range check number of modes checks if distribution is normal/lognormal checks for anomalies and outliers ggplot(custdata) + geom_histogram(aes(x=age), binwidth=5, fill='gray') invalid values outliers Spotting problem using graphic and visualization A single variable 2 DENSITY PLOT : bin에 따라 그래프의 모양이 변하는 히스토그램에 비해 그래프 모양이 변하지 않는다. bin의 경계에서 분포가 확연히 달라지지 않는다. (곡선형태) examines data range check number of modes checks if distribution is normal/lognormal checks for anomalies and outliers ggplot(custdata) + geom_density(aes(x=income)) + scale_x_continuous(labels=dollar) continuous position scales Spotting problem using graphic and visualization A single variable 3 LOG-SCALED DENSITY PLOT : 로그 밀도 그래프 ggplot(custdata) + geom_density(aes(x=income)) + scale_x_log10(breaks=c(100,1000,10000,100000), labels=dollar) + annotation_logticks(sides='bt') log tick on bottom and top (default) annotation: log tick marks Spotting problem using graphic and visualization A single variable 4 BAR CHART : compares relative or absolute frequencies of the values of a categorical variable ggplot(custdata) + geom_bar(aes(x=marital.stat), fill='gray') Spotting problem using graphic and visualization A single variable 5 HORIZONTAL BAR CHART ggplot(custdata) + geom_bar(aes(x=state.of.res), fill='gray') + coord_flip() + theme(axis.text.y=element_text(size=rel(0.8))) to modify theme settings flipped cartesian coordinates relative sizing for theme elements Spotting problem using graphic and visualization A single variable 5 HORIZONTAL BAR CHART statesums <- table(custdata$state.of.res) statef <- as.data.frame(statesums) colnames(statef) <- c('state.of.res', 'count') statef <- transform(statef, state.of.res=reorder(state.of.res, count)) reorder levels of a factor ggplot(statef) + geom_bar(aes(x=state.of.res, y=count), stat='identity', fill='gray') + coord_flip() + theme(axis.text.y=element_text(size=rel(0.8))) Spotting problem using graphic and visualization Relationship two variables 6 STACKED BAR CHART : var1값 안에서의 var2값의 분포를 보여준다. 7 SIDE-BY-SIDE BAR CHART : 각각의 var1에 대한 var2값을 나란히 배치 8 FILLED BAR CHART : 일정한 틀 안에서 var2의 상대적인 비율을 보여준다. ggplot(custdata) + geom_bar(aes(x=marital.stat, fill=health.ins), , position=‘dodge' ) , position=‘fill' Spotting problem using graphic and visualization Relationship two variables 9 BAR CHART WITH FACETING : a large number of categories를 가진 column들을 차트로 나타냈을 때, 각각의 항목에 대해 나눠서 보자 custdata2 <- subset(custdata, (custdata$age>0 & custdata$age<100 & custdata$income>0)) ggplot(custdata2) + geom_bar(aes(x=housing.type, fill=marital.stat), position='dodge') + theme(axis.text.x=element_text(angle=45, hjust=1)) horizontal justification ggplot(custdata2) + geom_bar(aes(x=marital.stat), position='dodge', fill='darkgray') + facet_wrap(~housing.type, scales='free_y') + should scales be free in one theme(axis.text.x=element_text(angle=45, hjust=1)) dimension default(fixed) 분포를 거의 알아보기 힘들 다. Spotting problem using graphic and visualization Relationship two variables 10 LINE PLOT : 두 변수간의 연관성을 볼 수 있다. 하지만, 데이터가 서로 관련이 없으면 유용하지 않다. x <- runif(100) y <- x^2 + 0.2*x ggplot(data.frame(x=x, y=y), aes(x=x, y=y)) + geom_line() Spotting problem using graphic and visualization Relationship two variables 11 SCATTER PLOT + α : two numeric variables relationship! Q. age, income … relationship? 연관관계를 알아보기 힘들 다 cor(custdata2$age, custdata2$income) correlation ggplot(custdata2, aes(x=age, y=income)) + geom_point() + ylim(0, 200000) ggplot(custdata2, aes(x=age, y=income)) + geom_point() + stat_smooth(method='lm') + ylim(0, 200000) smoothing method 선 그리기 ??? * se (default) = true Spotting problem using graphic and visualization Relationship two variables 12 SMOOTHING CURVE ggplot(custdata2, aes(x=age, y=income)) + geom_point() + geom_smooth() + a smoothed conditional mean ylim(0, 200000) ggplot(custdata2, aes(x=age, y=as.numeric(health.ins))) + geom_point(position=position_jitter(w=0.05, h=0.05)) + geom_smooth() ~ 40 : increase 55 ~ : decrease continuous + a boolean Spotting problem using graphic and visualization Relationship two variables 13 HEXBIN PLOT : 2-dimensional histogram ggplot(custdata2, aes(x=age, y=income)) + geom_hex(binwidth=c(5, 10000)) + geom_smooth(color='white', se=F) + ylim(0, 200000) Key point! • 모델링 하기 전에 데이터를 살펴보는 시간을 갖자. • Summary() : helps you spot issues with data range, units, data type, and missing or invalid values. • Visualization : 변수 사이의 데이터 분포와 이들 간의 관계성을 보는데 도움을 준다.