본문 바로가기
PYTHON

20200403 - R, 텍스트 마이닝(형태소 분석, 품사 추출, 빈도표 만들기, 시각화)

by 낫싱 2020. 4. 3.
728x90
반응형

20200403.R
0.00MB
20200403-2.R
0.00MB
20200403-3.R
0.01MB
hiphop.txt
0.09MB
remake.txt
0.02MB
twitter.csv
1.10MB

 

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 파일로 저장할 수 있다.(웹 기능)

# 패키지를 설명해주는 사이트

https://plotly.com/

이미지 썸네일 삭제

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

https://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)#대각행렬 제외

 

 

전송중...

사진 설명을 입력하세요.

 

 

 

728x90
반응형

댓글