본문 바로가기

배운 책들 정리/만만한 통계 : R 활용

0303 만만한 통계 R 외부 챕터 11~14 - 지도 시각화, 인터랙티브 그래프, 통계분석 가설 검정, R markdown

1. 지도 시각화 (CP 11)

1) 데이터 파악

# 지도시각화 = 단계구분도 choropleth map
# map projection
install.packages("mapproj")
install.packages("ggiraphExtra")
library(mapproj)
library(ggiraphExtra)
# 미국 주별 범죄 데이터 = 내장 데이터
str(USArrests)
head(USArrests)
# 현재 데이터의 행 이름이 주 이름
# 주 이름을 열로 변환
library(tidyverse)
crime <- rownames_to_column(USArrests, var = "state")
head(crime)
# 지도 데이터와 합치기 위해서 주 이름을 소문자로 변경
# crime$state 로 저장!!하지 않으면 변경 안됨
crime$state <- tolower(crime$state)
# 지도 데이터 준비
library(ggplot2)
state_map<- map_data("state")
head(state_map)
head(crime)
# 지도 시각화
# 살인
ggChoropleth(data = crime,
             aes(fill=Murder, map_id = state),
             map =state_map)
# 인터랙티브 시각화 추가
ggChoropleth(data = crime,
             aes(fill=Murder, map_id = state),
             map =state_map,
             interactive = T)

- 지도 데이터와 합치기 위해 : 행이름이지만 열로 만들어줘야 함 (Alabama, Alaska 등등)

rownames_to_column(USArrests, var = "state")

- state가 추가 되어 열로 바뀐 모습 

 

2) 지도 시각화 1 - 미국 지도

ggChoropleth(data = crime, aes(fill=Murder, map_id = state), map =state_map)
interactive = T

3) 지도 시각화 - 한국 지도 (결핵 환자)

# 우리나라 결핵환자 수 지도 시각화
# 데이터 만든 사람 문건웅
install.packages("stringi")
devtools::install_github("cardiomoon/kormaps2014")
library(stringi)
library(kormaps2014)

# 결핵환자 데이터 준비
changeCode(tbc)
head(tbc)
# 지도 데이터
changeCode(kormap1)
head(kormap1)
# 지도 시각화
ggChoropleth(data = tbc ,
             aes(fill=NewPts, map_id = code, tooltip =name),
             map =kormap1, 
             interactive = T)
# 한글 엔코딩
tbc$name <- iconv(tbc$name,"UTF-8")
# 한글 엔코딩 처리 후 다시 지도 시각화
ggChoropleth(data = tbc ,
             aes(fill=NewPts, map_id = code, tooltip =name),
             map =kormap1, 
             interactive = T)

전체 결과

라이브러리 -> 데이터 준비(결핵환자,지도) -> 한글 엔코딩 -> 지도 시각화

 

2. 인터랙티브 그래프 (CP12)

1) 산점도

# 인터랙티브 시각화
install.packages("plotly")
library(plotly)
library(ggplot2)
# 산점도
mpg <- as.data.frame(ggplot2::mpg)
p <- ggplot(data = mpg, aes(x=displ, y=cty))+
  geom_point()
ggplotly(p)

2) 막대그래프

# 막대그래프
head(mpg)
ggplot(data=mpg, aes(x=drv, fill=fl))+
  geom_bar(position = "dodge")
ggplotly(p)

3) 선그래프 (실업자수)

# 선그래프
install.packages("dygraphs")
library(dygraphs)
# 데이터 준비
str(economics)
# 데이터 전처리
library(xts)
# 실업자수 데이터 전처리
eco1 <- xts(economics$unemploy, order.by = economics$date)
# 인터랙티브 시각화
dygraph(eco1)
# 날짜 간격 선택
dygraph(eco1) %>% dyRangeSelector()
#
table(economics$psavert)

4) 실업자의 수의 변동성 작게 만들기

# 개인저축율
eco2 <- xts(economics$psavert, order.by = economics$date)
# 
# 인터랙티브 시각화
dygraph(eco3)
# 실업자의 수의 변동성 작게 만들기
eco1 <- xts(economics$unemploy/1000, order.by =economics$date)
eco3 <- cbind(eco1,eco2)
# 인터랙티브 시각화
dygraph(eco3)

 

13. 통계 분석 기법을 이용한 가설 검정 (CP13)

0) 잊지 말아야 할 것

분산을 반드시 확인해야 함 (등분산검정)

차이가 없으면 등분산

차이가 있으면 이분산

 

1) 상관계수가 제공하는 것

- 방향

- 강도

- corrrelation (상관계수) : 두 변수 간의 선형적인 관계의 정도를 나타내는 통계적 지표입니다

- matrix (상관행렬) : 여러 개의 변수들 간의 상관계수를 행렬 형태로 나타낸 것입니다

 

2) 통계 분석 실습

# 통계 분석
options(scipen = 99)
# 독립표본 t검정
mpg <- as.data.frame(ggplot2::mpg)
# class가 suv, compact 인 자동차 데이터 만들기
table(mpg$class)
mpg_t <- 
  mpg %>% 
  filter(class == "suv" | class == "compact") %>% 
  select(class, hwy)

mpg_t
# 등분산 검정, var.test(종속변수~독립변수)
var.test(mpg_t$hwy~mpg_t$class)
# p-value = 0.08078
# 유의수준 0.05와 비교
# 0.08078 > 0.05 => 면적이 더 크다 = 왼쪽에 있다 = 채택역 = 귀무가설 채택 = 차이가 없다 = 분산이 같다 = 등분산 가정
# 등분산 가정하여 독립표본 t검정 수행, t.test(종속변수~독립변수)
t.test(mpg_t$hwy~mpg_t$class, var.equal = T)
# class 별로 hwy 평균값 데이터가 필요함
suv_com <- mpg_t %>% 
  group_by(class) %>% 
  summarise(hwy_mean=mean(hwy))
suv_com
# class 별로 hwy 평균값을 표현하는 막대 그래프
ggplot(data = suv_com, aes(x=class, y= hwy_mean))+
  geom_col()

table(mpg$class)

데이터 확인

class, hwy 출력

var.test(mpg_t$hwy~mpg_t$class)

등분산 검정을 통한 p값 확인

t.test(mpg_t$hwy~mpg_t$class, var.equal = T)

추가로 t테스트까지

mpg_t %>% group_by(class) %>% summarise(hwy_mean=mean(hwy))

막대 그래프를 위한 평균값 출력

ggplot(data = suv_com, aes(x=class, y= hwy_mean))+ geom_col()

평균값 출력하는 막대 그래프

 

3) 상관계수 T검정 (상관분석)

# 상관분석
economics <- as.data.frame(ggplot2::economics)
head(economics)
cor.test(economics$pce, economics$unemploy)
# 상관계수는 0.6145176 
# 1) 방향 : 양의 상관관계, 직접 상관관계(같은 방향)
# 2) 강도 : 0.3~0.7 중간정도 크기, 중간정도 크기의 상관관계를 가지고 있음
# + 유의확률(<0.05): 상관계수가 통계적으로 유의함

# 상관행렬
# 데이터 준비
str(mtcars)
# 상관계수 : 변수의 개수 11개 => 11*10/2 =55
cor_result <- round(cor(mtcars),2)

 

head(economics)

데이터 파악

cor.test(economics$pce, economics$unemploy)

상관계수 분석

round(cor(mtcars),2)

반올림

 

4) 상관행렬 그리기 

# 상관행렬
# 데이터 준비
str(mtcars)
# 상관계수 : 변수의 개수 11개 => 11*10/2 =55
cor_result <- round(cor(mtcars),2)

# 상관행렬 그리기
install.packages("corrplot")
library(corrplot)
corrplot(cor_result)
# 꾸미기
corrplot(cor_result, method = "number")
# 더 꾸미기
corrplot(cor_result,
         method = "color",
         type = "lower",
         order = "hclust",
         addCoef.col = "black",
         tl.col = "black",
         tl.srt = 45,
         diag = F)

round(cor(mtcars),2)

소수점 2자리까지만 표출

corrplot(cor_result, method = "number")

빈 도화지 상태의 상관행렬

corrplot(cor_result, method = "color", type = "lower", order = "hclust", addCoef.col = "black", tl.col = "black", tl.srt = 45, diag = F)

꾸며진 상태의 상관행렬

 

4. R Markdown 으로 데이터 분석 보고서 만들기 (CP14)

1) R markdown의 특징

- 재현성을 갖춘 보고서 : 동일한 분석 결과가 반복되어 나옴

 

2) R markdown 실습

---
title: "Untitled"
author: "jiin park"
date: "2023-03-03"
output:
  html_document: default
  pdf_document: default
---
chunk 만들기: ctrl + alt + i
```{r warning=FALSE, message=FALSE}
# 여기 안에서 명령어 입력합니다.
library(tidyverse)

```
두번째 내용 안나오게 합니다.
```{r include=FALSE}
library(ggplot2)
```
세번째 내용은 명령어는 안나오지만 결과는 나옵니다.
```{r echo=FALSE}
library(readxl)
```





# 분석 시작
데이터 준비
```{r}
mpg <- as.data.frame(ggplot2::mpg)
head(mpg)
```
## R 마크다운이란?



마크다운 문법으로 코드를 작성해 [HTML](https://ko.wikipedia.org/wiki/HTML)로 변환할 수 있습니다. R 마크다운을 이용하면 분석 과정과 결과를 자세하게 기술할 수 있기 때문에 **재현 가능성**을 갖춘 *데이터 분석 보고서*를 만들 수 있습니다.

### R 마크다운 문법 예제



아래와 같이 작성하면 코드와 함께 `summary(cars)`를 실행한 결과물이 출력됩니다.



```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r cars}
summary(cars)
```

별도로 이미지 파일을 붙여 넣는 작업을 하지 않아도 코드 아래에 그래프를 삽입할 수 있습니다.

```{r}

library(ggplot2)

qplot(data = mpg, x = drv, fill = drv)

```


## Including Plots

You can also embed plots, for example:

```{r pressure, echo=FALSE}
plot(pressure)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

실행은 Knit으로
knit 아이콘을 통해 html 파일로 보고서가 만들어진 모습

- New file - R Markdown - 생성 후 파일명 입력 후 저장

- 청크 : 쉼표처럼 있는걸 청크라고 한다 (명령어의 구분과 아닌 것)

- ctrl+alt+i : 청크(chunk) 만들기

 

위 사진의 해당 데이터

```{r warning=FALSE, message=FALSE}
# 여기 안에서 명령어 입력합니다.
library(tidyverse)

```
두번째 내용 안나오게 합니다.
```{r include=FALSE}
library(ggplot2)
```
세번째 내용은 명령어는 안나오지만 결과는 나옵니다.
```{r echo=FALSE}
library(readxl)
```

* 총 코드

---
title: "독립표본 T검정 발표"
author: "발표자 : 박지인"
date: "날짜 : 2023-03-03"
output:
  html_document: default
  pdf_document: default
---
<br> </br>


# 소개
<hr>
이 보고서에서는 고속도로에서 유의미한 차이가 있는지 확인하기 위해 독립적인 샘플 t-테스트를 수행하려고 합니다. 
<br> **Suv와 소형차(compact)의 두 등급 차량 간 갤런당 마일(hwy)에 대해 분석**해보고자 합니다. </br>
<br>  </br>

# 목차
<hr>
목차는 다음과 같습니다.
<br>
<br>  1. 데이터 준비
</br> 2. 가정테스트
<br>  3. 가설 검정
</br> 4. 결과
<br>  5. 결론 </br>
<br>  </br>

# 1.데이터 준비
<hr>
```{r include=FALSE, echo=FALSE}
options(scipen =99)
library(dplyr)
library(ggplot2)
```
**mpg 데이터**

```{r echo=FALSE}
mpg <- as.data.frame(ggplot2::mpg)
head(mpg)
```
mpg에는 다양한 데이터를 확인할 수 있지만 분석할 대상은
Suv와 소형차(compact)의 
<br> 두 등급 차량 간 갤런당 마일(hwy)이기 때문에 다음과 같은 파이프 라인을 사용하여 데이터를 뽑고자 합니다.</br>

<br> </br>
**파이프라인을 통한 데이터 뽑기**
```{r paged.print=FALSE}
mpg_t <- mpg %>%
  filter(class == "suv" | class == "compact") %>%
  select(class, hwy)

```
해당 코드를 통해 suv, compact의 두 차량 간의 hwy을 뽑고 해당 데이터를 mpg_t로 저장하고자 합니다.

<br>  </br>


# 2. 검정테스트
<hr>
T검정을 하기전 두 그룹 간의 등분산가정을 통해
분산에 유의한 차이가 있는지를 확인합니다.
<br>  </br>
**등분산가정 테스트 코드 및 결과**
```{r}
var.test(mpg_t$hwy~mpg_t$class)
```
확인 결과 p-값 0.08078으로 유의 확률 0.05 보다 높으므로
두 그룹 간의 분산에 유의한 차이가 없음을 나타냅니다.
<br> 이는 귀무가설 기각에 해당 됩니다.</br>
<br>  </br>

# 3. 가설 검정
<hr>
**t 검정 분석 코드 및 결과**
```{r}
t.test(mpg_t$hwy ~ mpg_t$class, var.equal = TRUE)
```
앞서 등분산 가정이 유지되어 분산의 차이가 없음을 확인했으므로
독립 표본 T검정을 진행하고자 합니다.
결과로 나온 p값 0.00000000000000022은 Suv와 소형차 사이에 고속도로에 상당한 차이가 있음을 나타냅니다. 이를 compact와 suv 그룹간의 hwy 평균을 확인해보면 compact(28.30) > suv(18.13)으로 더 높은 것을 확인할 수 있습니다. 
<br>  </br>

# 4. 결과
<hr>
결과를 확인하기 위해 히스토그램을 사용하여
각 자동차 등급의 평균 고속도로를 시각화 해보고자 합니다.
<br></br>
<br></br>
```{r echo=FALSE}
suv_com <- mpg_t %>% 
  group_by(class) %>% 
  summarise(hwy_mean=mean(hwy))

ggplot(data = suv_com, aes(x=class, y= hwy_mean))+
  geom_col(fill = c("suv" = "blue", "compact" = "red"))
```

히스토그램을 통해 확인한 결과 또한 Suv는 소형차보다 평균 고속도로가 더 낮다는 것을 확인할 수 있었습니다.


<br> </br>

# 5.결론
<hr>
SUV와 소형차(compact) 사이에 갤런당 고속도로 주행 거리에 상당한 차이가 있음을 시사합니다. </br>
특히 Suv는 소형차(compact)보다 평균 고속도로(mean_hwy)가 낮습니다. </br> 
이러한 결과는 장거리 이동 또는 단거리 이동을 하는 소비자에게 유용한 지표로 사용 되어 자동차 구매 시 도움이 될 것으로 보입니다.


<br> </br>
<br> </br>
<br> </br>
<br> </br>
<br> </br>
<br> </br>
<br> </br>
<br> </br>







<hr>
<p style='font-size: 10pt; text-align:center;'>한국직업전문학교</p>
<hr>
<p style='font-size: 10pt; text-align:center;'>감사합니다</p>

 

3) r markdown 발표 실습 테스트

pre.html
0.62MB

 

 

 

* 단어

Murder,Assault,UrbanPop,Rape

살인, 폭행, 어반 팝, 강간

 

 

* 핵심 (함수)

library(mapproj) : ggplot()과 geom_polygon() 함수를 사용하여 지도를 그릴 수 있도록 해 주는 패키지입니다
library(ggiraphExtra) : 'ggplot2’와 ‘ggiraph’ 패키지를 활용하여 탐색적 그래프를 만들 수 있는 함수들을 제공하는 패키지입니다 // interactive=TRUE로 설정하면 정적인 ggplot 또는 상호작용이 가능한 ggplot을 만들 수 있습니다

library(tidyverse) : 공통의 데이터 표현과 API 디자인을 공유하는 일련의 패키지들의 집합입니다

library(ggplot2) : 그래픽스의 문법(Grammar of Graphics)에 기반한 선언적인 그래픽 생성 시스템입니다

- R markdown : R 통계를 통해 보고서 작성할 때 사용하는 문서이다.

 

728x90
반응형
LIST