R - 통계적 가설검정
13장 _ 통계 분석 기법을 이용한 가설 검정
통계적 가설 검정이란?
기술 통계 - 데이터를 요약해 설명하는 통계 기법
추론 통계 - 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계기법
유의 확률 - 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률
t 검정
두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 분석 기법
#### 13-2 ####
## -------------------------------------------------------------------- ##
library(ggplot2)
mpg <- as.data.frame(ggplot2::mpg)
library(dplyr)
mpg_diff <- mpg %>%
select(class, cty) %>%
filter(class %in% c("compact", "suv"))
head(mpg_diff)
table(mpg_diff$class)
t.test(data = mpg_diff, cty ~ class, var.equal = T) # t.test = t검정
# data = mpg_diff
# cty( = 도시 연비 ) class ( = 자동차 종류 )
# var.equal = T 집단 간 분산이 같다는 옵션
- t.test(data = mpg_diff, cty ~ class, var.equal = T) # t.test = t검정
# data = mpg_diff
# cty( = 도시 연비 ) class ( = 자동차 종류 )
# var.equal = T 집단 간 분산이 같다는 옵션
- p-value가 0.05보다 작으므로 'compact와 suv 간 평균 도시 연비 차이가 통계적으로 유의하다'고 해석 할 수 있다.
- compact의 평균은 20, suv의 평균은 13이므로
compact의 평균이 더 높다고 할 수 있다.
2) t 검정 예제
R ( 휘발유 )를 사용하는 자동차와 P ( 고급 휘발유 ) 를 사용하는 자동차 간 도시 연비 차이가 통계적으로 유의한가?
mpg_diff2 <- mpg %>%
select(fl, cty) %>%
filter(fl %in% c("r", "p")) # r:regular, p:premium
table(mpg_diff2$fl)
t.test(data = mpg_diff2, cty ~ fl, var.equal = T)
- p-value가 0.05보다 큰 0.2875이므로, 실제로는 차이가 없는데 우연에 의해 이런 차이가 관찰될 확률이
28.75%라는 의미이다.
- 일반 휘발유와 고급 휘발유를 사용하는 자동차 간 도시 연비 차이가 통계적으로 유의하지 않다고 결론 내릴 수 있다.
- 고급 휘발유 자동차의 도시 연비 평균이 0.6정도 높지만 이런 정도의 차이는 우연히 발생했을 가능성이 크다고 해석.
303p
상관분석
두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법입니다.
상관계수는 0~1사이의 값을 지니고 1에 가까울수록 관련성이 크다는 것을 의미합니다.
상관계수가 양수면 정비례, 음수면 반비례임을 의미합니다.
#### 13-3 #### 상관분석
library(ggplot2)
## -------------------------------------------------------------------- ##
economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce)
- p-value가 0.05미만이므로, 실업자 수와 개인 소비 지출의 상관이 통계적으로 유의하다고 해석 할 수 있다.
- 상관계수가 양수 0.61이므로, 실업자 수와 개인 소비 지출은 한 변수가 증가하면 다른 변수가 증가하는 정비례 관계임을 알 수 있다.
head(mtcars)
car_cor <- cor(mtcars) # 상관행렬 생성
round(car_cor, 2) # 소수점 셋째 자리에서 반올림해서 출력
install.packages("corrplot")
library(corrplot)
corrplot(car_cor)
- 상관계수가 클수록 원의 크기가 크고 색깔이 진하다.
- 양수면 파란색, 음수면 빨간색 계열로 표현되어있다.
- 원의 크기와 색깔을 보면 상관관계의 정도와 방향을 쉽게 파악할 수 있다.
corrplot(car_cor, method = "number")
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(car_cor,
method = "color", # 색깔로 표현
col = col(200), # 색상 200개 선정
type = "lower", # 왼쪽 아래 행렬만 표시
order = "hclust", # 유사한 상관계수끼리 군집화
addCoef.col = "black", # 상관계수 색깔
tl.col = "black", # 변수명 색깔
tl.srt = 45, # 변수명 45도 기울임
diag = F) # 대각 행렬 제외
프로젝트 요구사항
- 조원들과 상의 후 모두가 동의한 주제 선정
- "참신" 한 분석 주제 선정 : [ 미친듯이 ^^; 자료 및 소스 조사]
- [10대] OR [50대] 타겟 설정 PPT 작성
- 그래프 사용 결과 출력
- [DB 사용 오라클&MySQL ] OR [9장 분석 활용]
- R Studio 사용
메일 : jino77_99@naver.com
- 제출되어야 하는 결과물
- 프로젝트 기획서 -> 6월 11일
- 프로젝트 보고서 (예시 파일 참고) --> 6월 14일 수업 종료전
- 발표용 PPT --> 6월 15일 오전 13시 까지
- 제출 파일 이름 : 팀명_프로젝트주제.zip --> 6월 15일 수업 종료전
2021년 6월 15일 3시 30분 발표
- 10분 정도 (Q&A 포함)
- 시연 포함 [동영상 활용 가능]
- 모든 발표 후 각조에 2개들 선정
- 가장 많은 표를 받은 팀이 1등 나머지는 2등
사이트 관련
- 경로 : D:\03_R 수업\04_프로젝트_참조_다양한_분석_예제\01_치킨집_분석_트리맵
- 실제 데이터는 Null 값, 이상한 값이 굉장히 많다
- 각종 사이트 목록 (발표 시 공인된 데이터 출처 밝힐 것)한국복지패널 홈페이지입니다네이버 데이터랩Kaggle: Your Machine Learning and Data Science Community
- 정보공개포털
- 오픈뱅킹
- LOCALDATA - 지방행정인허가데이터개방
LOCALDATA - 지방행정인허가데이터개방
지방행정 인허가 데이터개방 의료기관, 의료기기 데이터 보기 동물, 축산 데이터 보기 게임, 공연, 관광, 문화기획, 노래방, 비디오, 숙박, 여행, 영화, 음악 데이터 보기 미용, 이용, 세탁소/빨래
www.localdata.go.kr
치킨집 분석
#서대문구에 치킨집이 많은 동은?
install.packages("readxl")
library(readxl)
ck <- read_xlsx("D:/rclass/치킨집_가공.xlsx")
head(ck)
#substr() 함수를 이용하여 소재지전체주소에 있는 11~15번째 문자 가져오기
addr <- substr(ck$소재지전체주소, 12, 16)
head(addr)
addr_num <- gsub("[0-9]", "", addr) #숫자제거
addr_trim <- gsub(" ", "", addr_num) #공백제거
head(addr_trim)
install.packages("dplyr")
library(dplyr)
#table() 함수를 이용해서 숫자 세기, 변수가 한개일때 도수분표표를 만들어줌
addr_count <- addr_trim %>% table() %>% data.frame()
head(addr_count)
install.packages("treemap")
library(treemap)
#treemap(데이터, index=인덱스 표시 열 제목, vSize=크기를 이용할 열 제목, vColor=컬러, title=제목)
treemap(addr_count, index=".", vSize="Freq", title="서대문구 동별 치킨집 분표")
arrange(addr_count,desc(Freq)) %>% head()
사이트 참고
미세먼지 분석
#Project 02 지역별 미세먼지 농도 비교하기
install.packages("readxl") # readxl 패키지 설치
install.packages("dplyr") # dplyr 패키지 설치
library(readxl) # readxl 패키지 로드
# dustdata.xlsx 파일을 불러온 후 dustdata_anal에 할당
dustdata <- read_excel("dustdata.xlsx")
View(dustdata) # 데이터 확인
str(dustdata) # 데이터 속성 확인
library(dplyr) # dplyr 패키지 로드
# 성북구와 중구 데이터만 추출 및 확인
dustdata_anal <- dustdata %>% filter(area %in% c("성북구", "중구"))
View(dustdata_anal)
# dustdata_anal 데이터 세트에 yyyymmdd에 따른 데이터 수 파악
count(dustdata_anal, yyyymmdd) %>% arrange(desc(n))
# dustdata_anal 데이터 세트에 area에 따른 데이터 수 파악
count(dustdata_anal, area) %>% arrange(desc(n))
# area 값이 성북구인 데이터를 dust_anal_area_sb에 할당
dust_anal_area_sb <- subset(dustdata_anal, area == "성북구")
# area 값이 중구인 데이터를 dust_anal_area_jg에 할당
dust_anal_area_jg <- subset(dustdata_anal, area == "중구")
# 데이터 확인
dust_anal_area_sb
dust_anal_area_jg
# psych 패키지 설치 및 로드
install.packages("psych")
library(psych)
# 성북구의 미세먼지량에 대한 기초 통계량 도출
describe(dust_anal_area_sb$finedust)
# 중구의 미세먼지량에 대한 기초 통계량 도출
describe(dust_anal_area_jg$finedust)
par("mar")
par(mar=c(1,1,1,1))
# 성북구와 중구의 미세먼지 농도에 대해 boxplot을 통한 분포 차이 확인
boxplot(dust_anal_area_sb$finedust, dust_anal_area_jg$finedust,
main = "finedust_compare", xlab = "AREA", names = c("성북구", "중구"),
ylab = "FINEDUST_PM", col = c("blue", "green"))
# dustdata_anal 데이터 세트에서 측정소명(area)에 따라 미세먼지 농도 평균에 대한 차이를 검증
t.test(data = dustdata_anal, finedust ~ area, var.equal = T)
install.packages("twitteR")
install.packages("ROAuth")
library(twitteR)
library(ROAuth)
library(twitteR) # 패키지 로드
#접속시 입력해야 하는 정보 예
#consumerKey = "0iApiCFYRk2VLXPvquUTvRj67"
#consumerSecret = "UCxXRCpPUBzcLEGqK0R1XhHo9aS2cC6goKm52sRy5p316EBMg4"
#accessToken = "74414052-7DLWvzEEVHhGqnfUhr6U4ioEc74oA0pQCpLFsPvhj"
#accessTokenSecret = "31FhCeVp7selgZxTdSJ6O6GpXSv5c6G7WypjjYDBwjxpD"
a = "4OGxbiGE8Z3tXWA9pSRsks7SC"
b = "izX15KJgzuWsi1XdgklrsQRqVz9qTVZWYdwE7z8JkV27psaE4Y"
c = "71181251-KSVuiSbLgF6IGsoePsZhqCI7kXvoLEo83Swgtxqam"
d = "trXrZaUrLldIQs7WyRH4MtCQnGEcKZxHtP93RR4ZKLjpf"
setup_twitter_oauth(a, b, c, d)
keyword <-enc2utf8("제주도") #한글로 데이터형 변환
bigdata <- searchTwitter(keyword, n=100, lang="ko") #한국어 100개 크롤링
head(bigdata)