Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 회귀분석
- 불순도제거
- 정보획득량
- sqld
- 그래프 생성 문법
- 상관관계
- 여러 데이터 검색
- 그래프시각화
- 데이터분석가
- 빅데이터분석
- 팀스파르타
- 빅데이터
- 데이터분석
- 회귀분석 알고리즘
- 히스토그램 그리기
- difftime
- loop 문
- Sum
- 단순회귀 분석
- 순위출력
- Dense_Rank
- 총과 카드만들기
- Intersect
- count
- %in%
- 막대그래프
- if문 작성법
- sql
- merge
- max
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] R _ 40. 데이터 시각화 6. (박스 그래프) / IQR /이상치 확인 본문
박스 그래프
평균값과 중앙값과 최빈값만으로는 데이터 분석을 하기 부족한 경우가 있습니다.
평균 데이터는 데이터의 중심이 어디즘인지는 알려주지만 특정 데이터가 평균을 중심으로 어떻게 분포가 되어 있는지는 알려주지 않습니다.
그래서 범위와 사분위수 범위를 알아야합니다.
박스 그래프는 사분위수 범위에 대한 데이터 분포를 볼 수 있는 그래프입니다.
문법1. 어느 농군단의 감독이 아래의 3명의 농구선수중 한명을 선택하려한다. 아래의 3명의 선수의 게임별 점수(득점) 를 가지고 한명을 고른다면 어떤 선수는 골라야하나 ?
각각의 게임당 득점한 점수 x1 <- c(7,8,9,9,10,10,11,11,12,13) x2 <- c (7,9,9,10,10,10,10,11,11,13 ) x3 <- c(3,3,6,7,7,10,10,10,11,13,30 )
1. 평균값mean(x1) mean(x2) mean(x3)
2. 중앙값
median(x1) median(x2) median(x3)
3. 최빈값
names(table(x1))[ table(x1)==max(table(x1)) ] names(table(x2))[ table(x2)==max(table(x2)) ] names(table(x3))[ table(x3)==max(table(x3)) ]
패키지 설치로도 가능
# modest 패키지 설치 install.packages("modeest") # 패키지 로드 library(modeest) # 예제 데이터 생성 x1 <- c(1, 2, 2, 3, 4) x2 <- c(2, 3, 3, 4, 5) x3 <- c(1, 1, 2, 3, 3, 3, 4) # 최빈값 계산 mode_x1 <- mlv(x1, method = "mfv") mode_x2 <- mlv(x2, method = "mfv") mode_x3 <- mlv(x3, method = "mfv") # 결과 출력 print(mode_x1) print(mode_x2) print(mode_x3)
4. 범위 ( 3명의 선수의 점수의 범위)
range(x1) range(x2) range(x3)
※ 범위는 그 자체로 데이터의 폭만 설명할 뿐 그안에서 데이터가 분포되는 방식은 설명해주지 않음.
(특히 이상치에 민감함)
-> 2번째 선수 같은경우 어쩌다 한번 잘한 게임(30점)의 이상치 때문에 범위가 넓어져 분석하기 어려워짐
-> 이문제는 사분위수 범위로 해결 가능
5. 4분위수 그래프 생성 (3번 선수 점수 데이터로)a<-boxplot(x3) a
설명: 이상치 값을 확인하여 이상치를 제거하고 가운데 50%의 데이터에만 집중함으로써 문제를 우회할 수 있음.
문제1. 세명의 선수의 점수 데이터를 하나의 화면으로 박스 그래프를 그리시오
boxplot(x1,x2,x3, names=c("x1","x2","x3"), col=c("skyblue","lightgreen","lightcoral")
설명: 그래프를 보면 1,2번선수가 3번 선수보다 상대적으로 좁은 사분위수 범위를 가지고 있음. 3번 선수는 넓은 범위를 가지고 있고 1,2,번 선수에 비해 훨씬 높은 점수(30)를 득점했지만 다른 경우엔 훨씬 낮은 점수에 대한 기록도 보임.
문제2. 중고차 가격 데이터를 사분위수 그래프를 그려서 이상치가 존재하는지 확인하시오.
# 데이터 로드 setwd('c:\\data') usedcars<-read.csv('usedcars.csv',header =T, fileEncoding ='euc-kr') usedcars # 보고싶은 데이터 추출 price <- usedcars$price # 이상치 그래프 a<- boxplot(price) a # 이상치 값 확인 a$out
문제3. 중고차 가격의 IOQ(사분위수)을 구하시오
quantile(usedcars$price)
문제 4. 위의 농구선수 데이터를 plotly 그래프로 그리시오
library(plotly) # 데이터 정의 x1 <- c(7, 8, 9, 9, 10, 10, 11, 11, 12, 13) x2 <- c(7, 9, 9, 10, 10, 10, 10, 11, 11, 13) x3 <- c(3, 3, 6, 7, 7, 10, 10, 10, 11, 13, 30) # x1 데이터의 박스 플롯 생성 fig1 <- plot_ly(y = ~x1, type = "box", name = "x1") # x2 데이터의 박스 플롯 생성 fig2 <- plot_ly(y = ~x2, type = "box", name = "x2") # x3 데이터의 박스 플롯 생성 fig3 <- plot_ly(y = ~x3, type = "box", name = "x3") # 서브플롯으로 합치기 fig <- subplot(fig1, fig2, fig3, nrows = 1, titleX = TRUE, titleY = TRUE) # 레이아웃 업데이트 fig <- fig %>% layout(title = "Quartile Plots of x1, x2, and x3") # 그래프 표시 fig
문제 5. 타이타닉의 나이(age) 데이터를 가지고 plotly 로 박스 그래프를 그리시오 !
# 데이터 불러오기 setwd('c:\\data') tat <-read.csv('tatanic2.csv',header =T, fileEncoding ='euc-kr') tat # 보고싶은 데이터 테이블 a<- tat$age # 그래프 그리기 fig <- plot_ly(y = ~a, type = "box", name = "a") fig
문제6. 기존의 사분위 그래프에 좀더 advanced한 결과를 볼 수 있는 그래프를 그리시오.
1. 박스 플롯
: 중앙값, 1사분위수값, 3사분위수값, 최소값, 최대값, 이상치 등을 확인 할 수 있습니다.
# 데이터 정의 set.seed(123) x1 <- c(rnorm(100, mean = 50, sd = 10), 150) # 이상치 포함 x2 <- c(rnorm(100, mean = 60, sd = 15), 200) # 이상치 포함 x3 <- c(rnorm(100, mean = 55, sd = 12), 250) # 이상치 포함 # 박스 플롯 생성 boxplot(x1, x2, x3, names=c("x1", "x2", "x3"), main="Boxplot of x1, x2, and x3", col=c("skyblue", "lightgreen", "lightcoral"), ylab="Values")
2. 바이올린 플롯(Violin Plot)
: 박스 플롯의 장점에 데이터의 밀도를 추가로 제공하는 그래프 (폭이 넓을 수록 밀도가 높음)
# 패키지 설치 및 로드 install.packages("ggplot2") library(ggplot2) # 데이터 프레임 생성 data <- data.frame( value = c(x1, x2, x3), group = rep(c("x1", "x2", "x3"), each = length(x1)) ) # 바이올린 플롯 생성 ggplot(data, aes(x = group, y = value, fill = group)) + geom_violin(trim = FALSE) + geom_boxplot(width = 0.1, fill = "white") + labs(title = "Violin Plot of x1, x2, and x3", x = "Group", y = "Value") + theme_minimal()
설명:
fill =group 은 생상을 그룹별 채워라!
geom_violin(trim =FALSE) 은 바이올릿 플롯을 그리는 함수
trim = Fales 은 꼬리를 자르지 않고 출력
geom_boxplot(width =0.1, fill = 'white') 은 박스 플롯의 넓이와 색깔
theme_minimal() 은 그래프의 테마를 미니멀한 스타일로 설정하여 깔끔하게 출력
3. 빅캔들 플롯(Bikkan Plot)바이올린 플롯보다 밀도와 분포를 더 세밀하게 보여줍니다.# 패키지 설치 및 로드 install.packages("beanplot") library(beanplot) # 빅캔들 플롯 생성 beanplot(x1, x2, x3, names=c("x1", "x2", "x3"), col=c("skyblue", "lightgreen", "lightcoral"), main="Bean Plot of x1, x2, and x3", ylab="Values")
문제 7. 타이타닉 나이 데이터를 바이올린 플롯 그래프 그려서 나이별 밀도도를 확인하시오
library(ggplot2) # 데이터 불러오기 tat <- read.csv("tatanic2.csv", header=T) data <- data.frame(value=tat$age, group='Age') # 바이올린 플롯 생성 ggplot(data, aes(x = group, y = value, fill = group)) + geom_violin(trim = FALSE) + geom_boxplot(width = 0.1, fill = "white") + labs(title = "Violin Plot of x1, x2, and x3", x = "Group", y = "age") + theme_minimal()
문제8. box_plot.R 코드를 저장하시오.
# 데이터 불러오기 setwd('c:\\data') tat <-read.csv('tatanic2.csv',header =T, fileEncoding ='euc-kr') tat # 보고싶은 데이터 테이블 a<- tat$age # 그래프 그리기 fig <- plot_ly(y = ~a, type = "box", name = "a") fig
'빅데이터 분석(with 아이티윌) > R' 카테고리의 다른 글
[빅데이터분석] R _ 42. 데이터 시각화 7 (워드 클라우드 그래프 (2)) (0) | 2024.07.04 |
---|---|
[빅데이터분석] R _ 41. 데이터 시각화 7 (워드 클라우드 그래프) (0) | 2024.07.03 |
R 그래프 코드 모음 (0) | 2024.07.03 |
[빅데이터분석] R _ 39. 데이터 시각화 5 (히스토그램 그래프 2) (1) | 2024.07.03 |
[빅데이터분석] R _ 38. 데이터 시각화 5 (히스토그램 그래프) (0) | 2024.07.02 |