안녕하세요 구도입니다.


오늘부터는 R로 텍스트 마이닝을 하는 방법에 대해 작성하도록 하겠습니다.


작성한 코드만 보고 이해하시지 말고 프로그램에서 직접 실습해보시면서 공부하시면 이해가 훨씬 빠르시답니다.


#기본 세팅

library(KoNLP)   # 한글 처리 패키지 로딩

library(wordcloud)

library(RColorBrewer)  # wordcloud package를 설치하면 자동 설치됨


useSejongDic()   # 한글 '세종사전'로딩


pal2 <- brewer.pal(8,"Dark2")   # 팔레트 생성


text <- readLines("C://Users//user//Desktop//2018학년//2학기//빅데이터 분석 및 시각화-서울//수업자료//20181024, 29//speech.txt")      # 연설문 파일 읽기

text


noun <- sapply(text, extractNoun, USE.NAMES=F)

noun # 각 행별로 추출된 명사 확인


class(noun)


noun2 <- unlist(noun)    # 추출된 명사 통합

noun2   # 통합된 명사 확인



word_count <- table(noun2)     #단어별 빈도수 계산

word_count


head(word_count,10)

head(sort(word_count, decreasing=T), 10)  #단어 빈도를 내림차순으로 정렬해서 상위 10개 보기


wordcloud(names(word_count), freq=word_count, scale=c(6,0.3), min.freq=3, random.order=F, colors=pal2)

wordcloud(names(word_count), freq=word_count, scale=c(10,1), min.freq=3, random.order=F, colors=pal2)


windowsFonts(malgun=windowsFont("맑은 고딕"))

windowsFonts(malgun=windowsFont("궁서체"))


wordcloud(names(word_count), freq=word_count, scale=c(6,0.3), min.freq=3, random.order=F, colors=pal2)

wordcloud(names(word_count), freq=word_count, scale=c(10,1), min.freq=3, random.order=F, colors=pal2, family="malgun")



오늘도 글 읽어주셔서 감사합니다.


안녕하세요 구도입니다.


오늘부터는 R로 텍스트 마이닝을 하는 방법에 대해 작성하도록 하겠습니다.


작성한 코드만 보고 이해하시지 말고 프로그램에서 직접 실습해보시면서 공부하시면 이해가 훨씬 빠르시답니다.

*실습 파일 다운 방법

1. kostat.go.kr 접속

2. 국내통계 선택

3. 인구.가구 선택

4. 시군구별 이동자수 (1970.01~2018.08) 파일 선택

5. 다운 시(아래와 같이 설정)


6. 다운받고 아래 실습 코드를 바탕으로 실습 진행


*프로그램은 'R x64 3.5.1' 을 사용하였습니다*



#데이터 정의


Sex <- c("M","M","F","F","F","M","M","M","M","F")

Grade <- c(1,2,3,1,2,3,1,2,3,1)

Blood <- c("A","O","B","AB","B","B","AB","A","A","O")

IQ <- c(145,147,135,150,155,135,127,138,140,133)

Hair <- c("Black","Brown","Black","Blond","Red","Brown","Red","Brown","Black","Blond")

Eye <- c("Brown","Blue","Hazel","Green","Brown","Blue","Hazel","Green","Brown","Blue")

d <- data.frame(Sex, Grade, Blood, IQ, Hair, Eye)


str(d)


#도수분포표 작성


table(d$Grade)

table(d$Blood)

table(d$Sex)

table(d$Hair)

table(d$Eye)


table(d$Sex, d$Grade)   #자료 d의 변수 Sex와 Grade의 분할표 작성

table(d$Hair, d$Eye)    #자료 d의 변수 Hair와 Eye의 분할표 작성


table(d$Hair, d$Eye, dnn=c("Hair","Eye"))  #분할표 작성 시 변수명 나타나게 하는 방법


addmargins(table(d$Hair, d$Eye, dnn=c("Hair","Eye")))



prop.table(table(d$Hair, d$Eye, dnn=c("Hair","Eye")))  #분할표 작성 시 도수가 아닌 상대도수로 기입




addmargins(prop.table(table(d$Hair, d$Eye, dnn=c("Hair","Eye"))))  #전체 분할표 작성 시 상대도수에 대한 각 행과 열의 합 표현




#워드클라우드

library(wordcloud)

library(RColorBrewer)  #wordcloud package를 설치하면 자동 설치됨



word <- c("인천광역시", "강화군", "옹진군")  #단어(지역명) 할당

frequency <- c(651,85,61)  # 전입과 전출을 고려한 지역의 순이동 인구수


wordcloud(word, frequency, colors="blue")   #각 지역별 순이동 인구수에 대한 워드 클라우드 출력 & 단어 색 설정


wordcloud(word, frequency, random.order=F, colors="blue") #random.order 옵션은 빈도수가 큰 단어를 중앙에 배치



wordcloud(word, frequency, random.order=F, random.color=F, colors=rainbow(length(word)))



pal2 <- brewer.pal(8,"Dark2")   #8가지 색으로 구성되는 Dark2 팔레트 생성

pal3 <- display.brewer.all(type="all")  #type="div", "qual", "seq"

pal4 <- display.brewer.pal(8,"Dark2")   #8가지 색으로 구성되는 Dark2 팔레트 생성


wordcloud(word, frequency, colors=pal2)   # 단어를 Dark2 팔레트의 색으로 출력  

wordcloud(word, frequency, colors=pal3)   # 단어를 Dark3 팔레트의 색으로 출력 

wordcloud(word, frequency, colors=pal4)   # 단어를 Dark4 팔레트의 색으로 출력 




#워드클라우드2

library(wordcloud)

library(RColorBrewer)  # wordcloud package를 설치하면 자동 설치됨


pal2 <- brewer.pal(8,"Dark2") # 팔레트 생성


data <- read.csv("파일위치//파일명.csv", header=T)

head(data)



#'전국' 지역 통계 삭제

data2 <- data[data$행정구역.시군구.별!="전국",]  # '전국' 지역 제외

head(data2)


# '구' 단위 지역 통계 삭제

x <- grep("구$", data2$행정구역.시군구.별)

x


data3 <- data2[-c(x),] #'구' 단위 지역의 행에 대한 데이터 제외

head(data3)



# 순이동 인구수가 많은 지역 : 전입 인구수 > 전출 인구수

data4 <- data3[data3$순이동.명>0,]   # 순이동 인구수가 0보다 큰 지역 추출

word <- data4$행정구역.시군구.별  # 단어(행정구역) 할당

frequency <- data4$순이동.명  # 빈도수 할당

wordcloud(word, frequency, colors=pal2)  # 워드 클라우드 출력

word

frequency



# 순이동 인구수가 많은 지역 : 전출 인구수 > 전입 인구수

data5 <- data3[data3$순이동.명<0,]   # 순이동 인구수가 0보다 작은 지역 추출

word <- data5$행정구역.시군구.별  # 단어(행정구역) 할당

frequency <- data5$순이동.명  # 빈도수 할당

frequency <- abs(data5$순이동.명)  # 모두 음수값이기 때문에 양수로 변환하여 빈도수 할당

wordcloud(word, frequency, colors=pal2)  # 워드 클라우드 출력

word

frequency


오늘도 글 읽어주셔서 감사합니다.



안녕하세요 구도입니다.


오늘은 Plot 그래프 그리기, scatter plot 그리기, 수치형 자료를 범주형으로 바꾸는 방법에 대해 알아 보는 시간을 가지도록 하겠습니다.


작성한 코드만 보고 이해하시지 말고 프로그램에서 직접 실습해보시면서 공부하시면 이해가 훨씬 빠르시답니다.


*프로그램은 'R x64 3.5.1' 을 사용하였습니다*


install.packages("graphics")

library(graphics)


#다양한 type으로 plot 그래프 그리기

data(women)

women


weight <- women$weight  #women 데이터 세트의 weight를 weight값으로 할당

plot(weight)  #weight 값의 그래프


height <- women$height   #women 데이터 세트의 height를 height값으로 할당

plot(height, weight, xlab="키", ylab="몸무게")  #height(x)에 따른 weight(y)의 그래프



par(mfrow=c(2,3))

plot(height, weight, xlab="키", ylab="몸무게", type="p")  # type옵션은 그래프 출력 모양의 유형 type=p는 점으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="l")  # type=l은 선으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="b")  # type=b는 점과 선으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="c")  # type=c는 b의 선으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="o")  # type=o는 점 위의 선으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="h")  # type=h는 각 값의 높이에 해당하는 수직선으로 표현



par(mfrow=c(2,2))

plot(height, weight, xlab="키", ylab="몸무게", type="s")  # type=s는 계단형으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="S")  # type=S는 계단형으로 표현

plot(height, weight, xlab="키", ylab="몸무게", type="n")  # type=n은 나타나지 않음




plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=1, lwd=1)

  #lty는 선의 유형을 결정함 1~6정도 변경 가능. lwd는 선의 굵기로 디폴트는 1이며 2로 지정하면 두배가 됨


par(mfrow=c(2,3))

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=1)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=2)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=3)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=4)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=5)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=6)


par(mfrow=c(1,2))

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=1, lwd=1)

plot(height, weight, xlab="키", ylab="몸무게", type="l", lty=1, lwd=2)



#플로팅 문자 다양하게 변화주며 scatter plot 그리기


plot(height, weight, xlab="키", ylab="몸무게")


plot(height, weight, xlab="키", ylab="몸무게", pch=0) #pch(plotting character)옵션은 0~25까지 숫자옵션 가능. 0~20까지는 col옵션만 지정하면 되고 21~25까지는

                                                       col옵션(문자의 경계선 색)과 bg옵션(문자의 내부 색) 같이 지정


par(mfrow=c(2,2))

plot(height, weight, xlab="키", ylab="몸무게", pch=0, col="blue")

plot(height, weight, xlab="키", ylab="몸무게", pch=0, col="blue", cex=1.5) #cex(character expansion)옵션은 문자의 크기. 디폴트는 1이며 1.5는 50% 더 크게, 0.5는 50% 더 작게 나타남

plot(height, weight, xlab="키", ylab="몸무게", pch=0, col="blue", cex=0.5)




par(mfrow=c(2,2))

plot(height, weight, xlab="키", ylab="몸무게", pch=21, col="blue", bg="yellow")

plot(height, weight, xlab="키", ylab="몸무게", pch=21, col="blue", bg="yellow", cex=2)

plot(height, weight, xlab="키", ylab="몸무게", pch=21, col="blue", bg="yellow", cex=0.7)


par(mfrow=c(1,2))

plot(height, weight, xlab="키", ylab="몸무게", pch="@")

plot(height, weight, xlab="키", ylab="몸무게", pch="A")




#수치 자료를 범주형 자료 변환하기

Sals = c(12, 0.4, 5, 2, 50, 8, 3, 1, 4, 0.25)  #자료의 입력

max(Sals)

min(Sals)

Seps=cut(Sals, breaks=c(0,1,5,max(Sals)))   #분류할 범위 정함

Seps

table(Seps)  # 표 구성

levels(Seps)=c("저소득", "일반", "고소득")   #수준의 이름 부여 변경

Seps    #변경된 값 확인

table(Seps)   #변경된 이름으로 표 구성


오늘도 글 읽어주셔서 감사합니다.


12345···28

+ Recent posts