1. 텍스트 마이닝(Text mining)
- 문자로 된 데이터에서 가치있는 정보를 얻어 내는 분석 기법
- SNS나 웹 사이트에 올라온 글을 분석해 사람들이 어떤 이야기를 나누고 있는지 파악할 때 활용
- 형태소 분석(Morphology Analysis) : 문장을 구성하는 어절들이 어떤 품사로 되어 있는지 분석
- 분석 절차
1) 형태소 분석
2) 명사, 동사 형용사 등 의미를 지닌 품사 단어 추출
3) 빈도표 만들기
4) 시각화
10-1. 힙합 가사 텍스트 마이닝
텍스트 마이닝 준비하기
Java 다운로드 및 설치
#패키지 설치
install.packages("rJava")
install.packages("memoise")
install.packages("KoNLP")
#########라이브러리 로드 해보고 없으면 인스톨
#패키지 로드
library(KoNLP)
library(dplyr)
#패키지 로드 에러 발생할 경우 - java 설치 경로 확인 후 경로 설정
# java 폴더 경로 설정
Sys.setenv(JAVA_HOME="C:/Program Files/Java/jdk1.8.0_171")
#사전 설정하기
useNIADic()
사진 삭제
사진 설명을 입력하세요.
#데이터 준비
#데이터 불러오기
txt <- readLines("C:/rStudy/20200403/hiphop.txt")
head(txt)
대표사진 삭제
사진 설명을 입력하세요.
#특수문자 제거
install.packages("stringr")
#일단 먼저 로드 해보고 없으면 인스톨 하기
library(stringr)
#특수문자 제거
txt <- str_replace_all(txt, "\\W", " ") # 모든 특수기호를 찾아서 공백 처리
head(txt)
대표사진 삭제
사진 설명을 입력하세요.
class(txt) # character 문자열 확인
dim(txt) # NULL 확인
View(txt) # 4261 번 행까지 만들어진다.
전송중...
사진 설명을 입력하세요.
#가장 많이 사용된 단어 알아보기
#명사 추출하기
extractNoun("대한민국의 영토는 한반도와 그 부속도시로 한다.")
전송중...
사진 설명을 입력하세요.
#가사에서 명사추출(명사추출 함수로 뽑아서 할당하면 데이터 타입은 list로 된다.)
nouns <- extractNoun(txt)
전송중...
강제종료 버튼
class(nouns) # list
dim(nouns) # NULL
View(nouns)
전송중...
사진 설명을 입력하세요.
# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
# 리스트타입은 테이블 함수 사용 못한다. 그래서 리스트를 풀어줘야 한다. 이 때, 사용하는 함수가 [unlist] 함수
wordcount <- table(unlist(nouns))
전송중...
2008개의 엔트리(키와 값의 한 쌍) 개수
class(wordcount) # table
# 자주 사용된 단어 빈도표 만들기
df_word <- as.data.frame(wordcount, stringsAsFactors = F) # wordcount(스트링)의 팩터값을 없앤다, 데이터프레임으로 변환한다.
class(df_word) # data.frame
dim(df_word) # 3008 , 2
summary(df_word)
전송중...
사진 설명을 입력하세요.
# 변수명 수정
df_word <- rename(df_word,
word = Var1,
freq = Freq)
# 두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 2) # df_word 에서 word 컬럼 데이터 중에 글자의 개수가 2개 이상인 것만 filter로 걸러낸다.
class(df_word) # data.frame
dim(df_word) # 2508, 2
summary(df_word)
전송중...
사진 설명을 입력하세요.
#빈도수를 기준으로 빈도수가 높은 상위 20개만 꺼내온다.(freq 컬럼을 이용해서 내림차순으로 정렬)
top_20 <- df_word %>%
arrange(desc(freq)) %>%
head(20)
전송중...
사진 설명을 입력하세요.
class(top_20) # "data.frame"
dim(top_20) # 20 2
summary(top_20)
전송중...
사진 설명을 입력하세요.
str(top_20)
전송중...
사진 설명을 입력하세요.
# 패키지 준비하기
# 패키지 설치(로드 먼저 해보고 설치)
install.packages("wordcloud")
#패키지 로드
library(wordcloud)
library(RColorBrewer)
# 단어 색상 목록 만들기
pal <- brewer.pal(8, "Dark2") # Dar2 색상 목록에서 8개 색상 추출
#워드 클라우드 생성
set.seed(1234) #난수 고정
wordcloud(words=df_word$word, # 단어
freq = df_word$freq, # 빈도
min.freq = 2, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order= F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(4, 0.3), # 단어 크기 범위
colors = pal) # 색상 목록
전송중...
사진 설명을 입력하세요.
set.seed(1234) #난수 고정
wordcloud(words=top_20$word, # 단어
freq = top_20$freq, # 빈도
min.freq = 2, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order= F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(4, 0.3), # 단어 크기 범위
colors = pal) # 색상 목록
전송중...
사진 설명을 입력하세요.
##############################여고생 고민 - 네이버 지식인
#패키지 설치
install.packages("rJava")
install.packages("memoise")
install.packages("KoNLP")
#########라이브러리 로드 해보고 없으면 인스톨
#패키지 로드
library(KoNLP)
library(dplyr)
#패키지 로드 에러 발생할 경우 - java 설치 경로 확인 후 경로 설정
# java 폴더 경로 설정
Sys.setenv(JAVA_HOME="C:/Program Files/Java/jdk1.8.0_171")
#사전 설정하기
useNIADic()
#데이터 준비
#데이터 불러오기
txt <- readLines("C:/rStudy/20200403/remake.txt")
head(txt)
#특수문자 제거
install.packages("stringr")
#일단 먼저 로드 해보고 없으면 인스톨 하기
library(stringr)
#특수문자 제거
txt <- str_replace_all(txt, "\\W", " ") # 모든 특수기호를 찾아서 공백 처리 # gsub 함수와 동일한 역할을 해준다.
head(txt)
class(txt) # character 문자열 확인
dim(txt) # NULL 확인
View(txt)
#가장 많이 사용된 단어 알아보기
#고민글에서 명사추출
nouns <- extractNoun(txt)
class(nouns) # list
dim(nouns) # NULL
View(nouns)
# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
# 리스트타입은 테이블 함수 사용 못한다. 그래서 리스트를 풀어줘야 한다. 이 때, 사용하는 함수가 [unlist] 함수
wordcount <- table(unlist(nouns))
class(wordcount) # table
# 자주 사용된 단어 빈도표 만들기
df_word <- as.data.frame(wordcount, stringsAsFactors = F) # wordcount(스트링)의 팩터값을 없앤다, 데이터프레임으로 변환한다.
class(df_word) # data.frame
dim(df_word)
summary(df_word)
# 변수명 수정
df_word <- rename(df_word,
word = Var1,
freq = Freq)
# 두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 2) # df_word 에서 word 컬럼 데이터 중에 글자의 개수가 2개 이상인 것만 filter로 걸러낸다.
class(df_word) # data.frame
dim(df_word)
summary(df_word)
#빈도수를 기준으로 빈도수가 높은 상위 50개만 꺼내온다.(freq 컬럼을 이용해서 내림차순으로 정렬)
top_50 <- df_word %>%
arrange(desc(freq)) %>%
head(50)
class(top_50)
dim(top_50)
summary(top_50)
str(top_50)
# 패키지 준비하기
# 패키지 설치(로드 먼저 해보고 설치)
install.packages("wordcloud")
#패키지 로드
library(wordcloud)
library(RColorBrewer)
# 단어 색상 목록 만들기
pal <- brewer.pal(8, "Dark2") # Dar2 색상 목록에서 8개 색상 추출
set.seed(1234) #난수 고정
wordcloud(words= top_50$word, # 단어
freq = top_50$freq, # 빈도
min.freq = 2, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order= F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(4, 0.3), # 단어 크기 범위
colors = pal) # 색상 목록
전송중...
사진 설명을 입력하세요.
wordcloud(words= df_word$word, # 단어
freq = df_word$freq, # 빈도
min.freq = 2, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order= F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(4, 0.5), # 단어 크기 범위
colors = pal) # 색상 목록
전송중...
사진 설명을 입력하세요.
10-2. 국정원 트윗 텍스트 마이닝
- 국정원 계정 트윗 데이터
-> 국정원 대선 개입 사실이 밝혀져 논란이 됐던 2013년 6월, 독립 언론 뉴스타파가 인터넷을 통해 공개한 것이다
-> 국정원 계정으로 작성된 3,744개 트윗
# 데이터 로드
twitter <- read.csv("C:/rStudy/20200403/twitter.csv",
header=T,
stringsAsFactors = F,
fileEncoding = "UTF-8")
head(twitter)
전송중...
사진 설명을 입력하세요.
dim(twitter) # 3743 5
class(twitter) #data.frame"
summary(twitter)
전송중...
사진 설명을 입력하세요.
twitter <- rename(twitter,
no = 번호,
id = 계정이름,
date = 작성일,
tw = 내용)
head(twitter)
names(twitter)#[1] "X" "no" "id" "date" "tw" # X는 컬럼명이 없기 때문에 자동으로 X 라는 컬럼명을 붙여 줌
전송중...
사진 설명을 입력하세요.
# 특수문자 제거
twitter$tw <- str_replace_all(twitter$tw, "\\W", " ")
head(twitter$tw)
전송중...
사진 설명을 입력하세요.
# 단어 빈도표 만들기
# 트윗에서 명사 추출
nouns <- extractNoun(twitter$tw)
class(nouns) # list
dim(nouns) # NULL
str(nouns)
전송중...
사진 설명을 입력하세요.
# 단어 빈도표 만들기
# 트윗에서 명사 추출
nouns <- extractNoun(twitter$tw)
head(nouns)
전송중...
사진 설명을 입력하세요.
# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))
head(wordcount)
전송중...
사진 설명을 입력하세요.
# 데이터프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
head(df_word)
전송중...
사진 설명을 입력하세요.
####### 실습
# 변수명 수정
df_word <- rename(df_word,
word = Var1,
freq = Freq)
# 두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 3) # df_word 에서 word 컬럼 데이터 중에 글자의 개수가 3개 이상인 것만 filter로 걸러낸다.
class(df_word) # data.frame
dim(df_word) # 4921 2
summary(df_word)
#빈도수를 기준으로 빈도수가 높은 상위 50개만 꺼내온다.(freq 컬럼을 이용해서 내림차순으로 정렬)
top_40 <- df_word %>%
arrange(desc(freq)) %>%
head(40)
class(top_40)
dim(top_40)
summary(top_40)
str(top_40)
# 패키지 준비하기
# 패키지 설치(로드 먼저 해보고 설치)
install.packages("wordcloud")
#패키지 로드
library(wordcloud)
library(RColorBrewer)
# 단어 색상 목록 만들기
pal <- brewer.pal(8, "Dark2") # Dar2 색상 목록에서 8개 색상 추출
set.seed(1234) #난수 고정
wordcloud(words= top_40$word, # 단어
freq = top_40$freq, # 빈도
min.freq = 2, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order= F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(4, 0.4), # 단어 크기 범위
colors = pal) # 색상 목록
전송중...
사진 설명을 입력하세요.
#단어 빈도 막대 그래프 만들기
library(ggplot2)
order <- arrange(top_40,freq)$word #빈도 순서 변수 생성
ggplot(data = top_40,aes(x = word, y = freq))+
ylim(0,1000)+
geom_col()+
coord_flip()+
scale_x_discrete(limit = order)+ # 빈도 순서 변수 기준 막대 정렬
geom_text(aes(label=freq),hjust = -0.3) # 빈도 표시
전송중...
사진 설명을 입력하세요.
################### 워드클라우드 2 사용
# 패키지 로드
library(devtools)
library(htmlwidgets)
library(htmltools)
library(jsonlite)
library(yaml)
library(base64enc)
library(tm)
install.packages("tm")
library(wordcloud2)
install.packages("wordcloud2")
# 특정 개수 이상 추출되는 글자만 색깔을 변경하여 나타나도록
# https://html-color-codes.info/Korean/
# 사이값 지정시 : (weight > 800 && weight < 1000)
# 100개 이상 검색될 시 노랑, 아니면 초록으로 표현
In_out_colors = "function(word, weight){
return (weight > 100) ? '#F3EF12' : '#1EC612'}"
# 여기서 쓰인 코드는 자바스크립트 코드임. function에서 word 랑 weight 라는 매개변수가 들어가 있는 것.
# 워드클라우드를 사용하려면 함수 자체를 변수에 대입시켜놔야 한다.
# 나중에 호출할 때는 In_out_colors 라는 함수를 호출하는 것
# 3. 워드 클라우드 그리기(기본)
wordcloud2(top_40)
전송중...
사진 설명을 입력하세요.
# 3.1 wordcloud2 크기, 색 변경(size, color)
wordcloud2(top_40, size=0.5, col="random-dark")
전송중...
사진 설명을 입력하세요.
# 3.2 키워드 회전 정도 조절(rotateRatio)
wordcloud2(top_40, size=0.5, col="random-dark", rotateRatio=0)
전송중...
사진 설명을 입력하세요.
# 3.3 배경 색 검정(backgroundColor)
wordcloud2(top_40, size=0.5, col="random-light", backgroundColor = "black")
전송중...
사진 설명을 입력하세요.
전송중...
커서를 올리면 빈도수 확인 가능
# 기존 모형으로 wordcloud2 생성
# 모양 선택 : shape = 'circle', 'cardioid',
# 'diamond', 'triangle-forward',
# 'triangle', 'pentagon', 'star'
wordcloud2(df_word,
shape='pentagon',
size=0.8,
color = htmlwidgets::JS(In_out_colors),
backgroundColor = "black")
전송중...
사진 설명을 입력하세요.
전송중...
단계별로 데이터가 출력됨을 확인할 수 있음
워드 클라우드 사용하는 방법(URL)
https://cran.r-project.org/web/packages/wordcloud2/vignettes/wordcloud.html
Wordcloud2 introduction
wordcloud2 : provide traditional wordcloud with HTML5 letterCloud : provide wordcloud with selected word(letters). install wordcloud2 You may have installed this package. Well, I still want to leave these codes here for installing. require (devtools) install_github ( "lchiffon/wordcloud2" ) wordlcou...
cran.r-project.org
# 단계 구분도(Choropleth Map)
# - 지역별 통계치를 색깔의 차이로 표현한 지도
# - 인구나 소득 같은 특성이 지역별로 어람나 다른지 쉽게 이해할 수 있음
11-1. 미국 주별 강력 범죄율 단계 구분도 만들기
패키지 준비하기
install.packages("ggiraphExtra")
library(ggiraphExtra)
str(USArrests)
head(USArrests)
전송중...
사진 설명을 입력하세요.
library(tibble) # 행 이름을 변수로 바꿔 데이터 프레임 생성을 편하게 해주는 라이브러리
# 행 이름을 state 변수로 바꿔 데이터 프레임 생성
crime <- rownames_to_column(USArrests, var="state")
View(USArrests)
전송중...
행의 이름들을 대표 컬럼명으로 붙인다.
전송중...
사진 설명을 입력하세요.
# 지도 데이터와 동일하게 맞추기 위해 state 의 값을 소문자로 수정
crime$state <- tolower(crime$state) # 주 이름들이 첫글자가 대문자로 되어있다.( 얘들을 전부 소문자로 바꾼다. )
전송중...
사진 설명을 입력하세요.
# tibble(티블)은
# 행 이름을 가질 수 있지만(예: 일반 데이터 프레임에서 변환할 떄)
# [연산자로 서브 셋팅할 때 제거됩니다.]
#
# NULL 이 아닌 행 이름을 티블에 지정하려고 하면 경고가 발생합니다
# 일반적으로 행 이름은 기본적으로 다른 모든 열과
# 의미가 다른 문자열이므로 행 이름을 사용하지 않는 것이 가장 좋습니다.
#
# 이러한 함수를 사용하면
# 데이터프레임에 행 이름(has_rownames())이 있는지 감지하거나,
# 제거하거나(remove_rownames())
# 명시적 열(rownames_to_column()및 column_to_rownames()) 사이에서 앞뒤로 변환할 수 있습니다.
# rowid_to_column() 도 포함되어 있습니다.
#
# 이것은 1부터 시작하여 순차적인 행 ID를 오름차순으로 하는 데이터 프레임의 시작 부분에 열을 추가합니다.
# 기존 행 이름이 제거됩니다.
#미국 주 지도 데이터 준비하기
library(ggplot2)
install.packages("maps")# 패키지 설치 필요(map_data())
states_map <- map_data("state")
str(states_map) # 해당 주에 대한 위도 경도값을 경계로 다 끊어놓음
# 불러들인 지도를 가지고 파트를 그려 나간다. 그 중 범죄에 해당하는 3개 컬럼을 사용(UrbanPop 은 경관 수)
전송중...
사진 설명을 입력하세요.
install.packages("mapproj") # ggChoropleth 메소드 사용할 패키지 설치
ggChoropleth(data = crime, # 지도에 표현할 데이터
aes(fill=Murder, # 색깔로 표현할 변수
map_id=state), # 지역 기준 변수
map=states_map) # 지도 데이터
전송중...
사진 설명을 입력하세요.
ggChoropleth(data = crime,# 지도에 표현할 데이터
aes(fill=Rape,# 색깔로 표현할 변수
map_id=state),# 지역 기준 변수
map=states_map, # 지도 데이터
interactive = T)# 인터랙티브
전송중...
사진 설명을 입력하세요.
11-2. 대한민국 시도별 인구, 결핵 환자 수 단계 구분도 만들기
- 대한민국 시도별 인구 단계 구분도 만들기
패키지 준비하기
install.packages("stringi")
install.packages("devtools")
devtools::install_github("cardiomoon/kormaps2014")
library(kormaps2014)
대한민국 시도별 인구 데이터 준비하기
str(changeCode(korpop1))
전송중...
사진 설명을 입력하세요.
library(dplyr)
korpop1 <- rename(korpop1,
pop = 총인구_명,
name = 행정구역별_읍면동)
str(changeCode(kormap1))
전송중...
사진 설명을 입력하세요.
https://github.com/cardiomoon/kormaps2014/blob/master/kormaps2014.Rmd
이미지 썸네일 삭제
cardiomoon/kormaps2014
Contribute to cardiomoon/kormaps2014 development by creating an account on GitHub.
github.com
# 깃헙 사용 설명 패키지
#단계 구분도만들기
ggChoropleth(data = korpop1,# 지도에 표현할 데이터
aes(fill = pop,# 색깔로 표현할 변수
map_id = code,# 지역 기준 변수
tooltip = name),# 지도 위에 표시할 지역명
map = kormap1,# 지도 데이터
interactive = T)# 인터랙티브
전송중...
사진 설명을 입력하세요.
#대한민국 시도별 결핵 환자 수 단계 구분도 만들기
str(changeCode(tbc))
전송중...
사진 설명을 입력하세요.
#인터랙티브 단계 구분도 만들기
ggChoropleth(data= tbc, # 지도에 표현할 데이터
aes(fill=NewPts, # 색깔로 표현할 변수
map_id=code, # 지역기준 변수
tooltip=name), # 지도위에 표시할 지역명
map=kormap1, # 지도데이터
interactive = T) # 인터렉티브
전송중...
사진 설명을 입력하세요.
12. 인터랙티브 그래프
12-1. plotly 패키지로 인터랙티브 그래프 만들기
인터랙티브 그래프 만들기
패키지 준비하기
install.packages("plotly")
library(plotly)
ggplot 으로 그래프 만들기
library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point()
# 인터랙티브 그래프 만들기
ggplotly(p)
전송중...
사진 설명을 입력하세요.
전송중...
각종 기능을 수행할 수 있는 인터랙티브 그래프 생성
전송중...
html 파일로 저장할 수 있다.(웹 기능)
# 패키지를 설명해주는 사이트
이미지 썸네일 삭제
Modern Analytic Apps for the Enterprise - Plotly
Using Dash, data scientists can achieve next level returns on enterprise data investments.
plotly.com
# 인터랙티브 막대 그래프 만들기
p <- ggplot(data = diamonds, aes(x=cut, fill = clarity))+
geom_bar(position = "dodge")
ggplotly(p)
전송중...
사진 설명을 입력하세요.
전송중...
각종 기능 사용 가능
12-2. dygraphs 패키지로 인터랙티브 시계열 그래프 만들기
인터랙티브 시계열 그래프 만들기
패키지 준비하기
install.packages("dygraphs")
library(dygraphs)
# 데이터 준비하기 ( 인구대비 실업률 )
economics <- ggplot2::economics
head(economics)
전송중...
pop : 인구수
시간 순서 속성을 지니는 xts 데이터 타입으로 변경
library(xts)
eco <- xts(economics$unemploy, order.by = economics$date)# 실업자수를 정렬시키겠다. 날짜컬럼을 기준으로
head(eco)
전송중...
사진 설명을 입력하세요.
#그래프 생성
dygraph(eco)
전송중...
사진 설명을 입력하세요.
전송중...
원하는 부분 선택하여 확대 및 기능 실행 가능
# 날짜 범위 선택 기능
dygraph(eco) %>% dyRangeSelector()
전송중...
원하는 범위를 지정하여 선택범위 이동 가능
# 여러 값 표현하기
# 저축률
eco_a <- xts(economics$psavert, order.by = economics$date)
#실업자 수
eco_b <- xts(economics$unemploy/1000, order.by = economics$date)
# 합치기
eco2 <- cbind(eco_a, eco_b) # 데이터 결합합
colnames(eco2) <- c("psavert", "unemploy") # 변수명 바꾸기
head(eco2)
전송중...
컬럼명이 변경된 것을 확인할 수 있다.
# 그래프 만들기
dygraph(eco2) %>% dyRangeSelector()
전송중...
선택한 부분 우측 상단에 값 표기
# 패키지 제작 사이트 주소
Site not found · DreamHost
Site Not Found Well, this is awkward. The site you're looking for is not here. Is this your site? Get more info or contact support . DreamHost
dygraphs.com
13. 통계 분석 기법을 이용한 가설 검정
13-1. 통계적 가설 검정이란?
기술 통계와 추론 통계
- 기술 통계(Descriptive statistics)
-> 데이터를 요약해 설명하는 통계 기법
-> ex) 사람들이 받는 월급을 집계해 전체 월급 평균 구하기
- 추론 통계(Inferential statistics)
-> 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계 기법
-> ex) 수집된 데이터에서 성별에 따라 월급에 차이가 있는 것으로 나타났을 때, 이런 차이가 우연히 발생할 확률을 계산
- 이런 차이가 우연히 나타날 확률이 작다.
--> 성별에 따른 월급 차이가 통계적으로 유의하다(statistically significant)고 결론
- 이런 차이가 우연히 나타날 확률이 크다.
--> 성별에 따른 월급 차이가 통계적으로 유의하지 않다.(not statistically significant)고 결론
- 기술 통계 분석에서 집단 간 차이가 있는 것으로 나타났더라도 이는 우연에 의한 차이일 수 있음
--> 데이터를 이용해 신뢰할 수 있는 결론을 내리려면 유의확률을 계산하는 통계적 가설 검정 절차를 거쳐야 함
통계적 가설 검정
1) 통계적 가설 검정(Statistical hypothesis test)
- 유의 확률을 이용해 가설을 검정하는 방법
2) 유의 확률(Significance probability, p-value)
- 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률
- 분석 결과 유의확률이 크게 나타났다면
-->집단 간차이가 통계적으로 유의하지 않다고 해석
-->실제로 차이가 없더라도 우연에 의해 이 정도의 차이가 관찰될 가능성이 크다는 의미
- 분석 결과 유의확률이 작게 나타났다면
-->집단 간차이가 통계적으로 유의하다고 해석
-->실제로 차이가 없는데 우연히 이 정도의 차이가 관찰될 가능성이 작다, 우연이라고 보기 힘들다는 의미
# t검정- 두 집단의 평균 비교
# t 검정(t-test)
# - 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법
# compact 자동차와 suv 자동차의 도시 연비 t 검정
# 데이터 준비
mpg <- as.data.frame(ggplot2::mpg)
str(mpg)
전송중...
사진 설명을 입력하세요.
library(dplyr)
mpg_diff <- mpg %>%
select(class, cty) %>% #select : 전체 데이터를 갖고 있는 mpg를 이용하여 두가지 컬럼 값을 선택
filter(class %in% c("compact","suv")) #filter : 행 선택 // %in% : 값 매칭 추출해주는 연산
head(mpg_diff)
전송중...
사진 설명을 입력하세요.
#테이블함수로 compact, suv 몇 대 있는지 확인
#함수가내장되어있기 때문에 갖다가 쓰면 됨
table(mpg_diff$class)
전송중...
사진 설명을 입력하세요.
# t-test
t.test(data=mpg_diff, cty~class, var.equal=T)
전송중...
사진 설명을 입력하세요.
# p-value : 유의확률값
# meanin group compact : compact 에 대한 평균값
# meanin group suv : suv에 대한 평균값
# alternativehypothesis: true difference in means is not equal to 0
# : 대립가설이 0과 같지 않다면 평균값 신뢰 불가
# 95percent confidence interval : 유의한 값 / 신뢰기간이 5.525180~7.730139
# 일반 휘발유와 고급 휘발유의 도시 연시 t 검정
# 데이터 준비
mpg_diff2 <- mpg %>%
select(fl, cty) %>%# 휘발유컬럼과 도시연비를 뽑아냄
filter(fl %in% c("r","p"))# r:regular(일반휘발유), p:premium(고급휘발유)
table(mpg_diff2$fl)
전송중...
사진 설명을 입력하세요.
# 일반휘발유 : 168, 고급휘발유 : 52
t.test(data=mpg_diff2, cty~fl, var.equal = T)
전송중...
사진 설명을 입력하세요.
# 연비 차이가 별로 나지 않아, 굳이 고급 휘발유를 넣을 필요x
# 상관분석- 두 변수의 관계성 분석 (변수 : R에서는 컬럼명)
# 상관분석(Correlation Analysis)
#- 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법
#- 상관계수(Correlation Coefficient)
# --> 두 변수가 얼마나 관련되어 있는지, 관련성의 정도를 나타내는 값
# --> 0~1 사이의 값을 지니고 1에 가까울수록 관련성이 크다는 의미
# --> 상관계수가 양수면 정비례, 음수면 반비례 관계
# 상관관계 예시
# cctv와 범죄발생율 상관관계
# 복지 패널 데이터를 이용해 급여와 우리 삶에 관한 상관관계
# 종교와 이혼율에 상관관계
#실업자수와 개인 소비 지출의 상관관계
#데이터준비
economics <- as.data.frame(ggplot2::economics)
#상관분석
cor.test(economics$unemploy, economics$pce)#unemploy: 실업자수와 pce : 개인소비지출의 상관관계
전송중...
사진 설명을 입력하세요.
#상관행렬히트맵 만들기
#상관행렬(Correlation Matrix)
# - 여러 변수 간 상관계수를 행렬로 나타낸 표
# - 어떤 변수끼리 관련이 크고 적은지 파악할 수 있음
#데이터준비
head(mtcars)#내장데이터mtcars 이용
전송중...
사진 설명을 입력하세요.
cyl : 실린더 개수
displ : 배기량
#상관행렬만들기 ★★★ 이 내용을 잘 알고 있어야 파이썬 딥러닝에서 image 분석이 들어감 - 텐서플로우
car_cor <- cor(mtcars)#상관행렬생성
head(car_cor)#먼저데이터 확인 후 round 작업 해주기
전송중...
사진 설명을 입력하세요.
round(car_cor, 2)#소수점셋째 자리에서 반올림해서 출력
전송중...
사진 설명을 입력하세요.
#상관행렬히트맵 만들기
#히트맵(heat map):값의 크기를 색깔로 표현한 그래프 // 전달된 값에 따라 색깔의 농도를 정해주는 게 특징
install.packages("corrplot")
library(corrplot)
corrplot(car_cor)
전송중...
사진 설명을 입력하세요.
#원대신 상관계수 표시 / 원이 아닌 숫자값으로 출력하고 싶을시
corrplot(car_cor, method="number")
전송중...
사진 설명을 입력하세요.
#다양한파라미터 지정하기 / 원도 상관계수도 아닌, 색상으로 네모칸 채우고 싶을 때
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
#색상팔레트로 색상 직접 지정 / 색상 팔레트 만들시 색상 하나는 있어야함
#얘네가만들어낸 다섯가지 색상을 지정해주고 그 사이사이는 200가지 색상이 들어감
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)#대각행렬 제외
전송중...
사진 설명을 입력하세요.
'PYTHON' 카테고리의 다른 글
20200408 - R 대시보드(flexdashboard, shiny 패키지, 보고서 다루기) (0) | 2020.04.08 |
---|---|
20200406 - R 파싱하여 데이터 가져오기, 웹 페이지 크롤링, 트리맵, 워드클라우드, 차트 (0) | 2020.04.06 |
20200402 - R (데이터 전처리, 변수 간 관계 분석 - 직업별 월급 차이 ) (0) | 2020.04.02 |
20200401 - R 차트 그리기, 상관관계 분석, 삶의 질 평가 실습 (0) | 2020.04.01 |
20200331 - R - 워드 클라우드(word cloud), 연설문 읽기, 인구이동 (1) | 2020.03.31 |
댓글