1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | install.packages("SnowballC") #단어의 어근만을 추출 wordstem, stem document 참조. install.packages("tm") install.packages("RWeka") # n-gram관련 패키지. install.packages("koNLP") library(ggplot2) library(dplyr) library(stringr) #문자열 처리 패키지. library(tm) library(SnowballC) library(RWeka) library(rJava) library(KoNLP) library("wordcloud") library(RColorBrewer) #미국 트위터 글 데이터 마이닝. teens = read.csv("sns.csv") str(teens) table(teens$gender , useNA = "ifany") #NA 표시 summary(teens$age) boxplot(teens$age) teens$age = ifelse(teens$age >= 13 & teens$age <= 20 , teens$age ,NA) summary(teens$age ) boxplot(teens$age ) #teens$female = ifelse(teens$gender == "F" , 1, 0) #NA는 수식에 들어가지 않는다. #꼭 NA를 포함시켜서 전처리 해야 한다. teens$female = ifelse(teens$gender == "F" & !is.na(teens$gender) , 1, 0) teens$noGender = ifelse( is.na(teens$gender) , 1, 0 ) table(teens$female , useNA = "ifany") #female인 경우만 1 table(teens$noGender , useNA = "ifany") #NA 갯수 출력 #나이의 평균 mean(teens$age, na.rm = T) #NA때문에 평균 구하기 불가. #졸업년도 table(teens$gradyear) #aggregate는 결과가 df로 나온다. aggregate(data = teens, age~gradyear , mean) # data = 를 꼭 넣어줘야 한다. aggregate(data = teens, age~gradyear , mean , na.rm = T ) #NA빼고 계산. "data.frame으로 출력." #tapply와 비슷. 벡터를 리턴한다. 각 컬럼에는 그 해당 학생 졸업년도 그룹의 평균 나이가 들어간다. ave_avg = ave(teens$age, teens$gradyear, FUN = function(x){ #졸업 년도에 따라 묶고. age에 대한 평균을 구하기. mean(x, na.rm = T) }) #벡터로 출력.바로 컬럼에 대입할수가 있다. teens$age = ifelse(is.na(teens$age), ave_avg, teens$age ) interests = teens[ , 5:40] str(interests) lapply(interests, scale) #표준화. (컬럼값 - 평균) / 표준 편차 interests_z = as.data.frame(lapply(interests, scale)) interests_z #정규화 : 0~1로 설정. #표준화 : 토익 / 토플점수, 즉 직접적으로 비교할수 없는 두 값에 대해서 비교하기 위해서 표준화 한다. #5개의 랜덤 좌표 생성 set.seed(2345) #클러스터링 <데이터> <클러스터 수> teen_clusters = kmeans(interests_z, 5) str(teen_clusters) # $ cluster : int [1:30000] 1 5 1 1 3 5 1 1 1 2 ... #각 행이 속한 클러스터의 번호수 # $ centers : num [1:5, 1:36] -0.1549 0.6373 0.3663 -0.0862 -0.0326 ... #각 행별 좌표값 36개 # ..- attr(*, "dimnames")=List of 2 # .. ..$ : chr [1:5] "1" "2" "3" "4" ... # .. ..$ : chr [1:36] "basketball" "football" "soccer" "softball" ... # $ totss : num 1079964 # $ withinss : num [1:5] 273957 392272 187913 35945 61586 # $ tot.withinss: num 951673 # $ betweenss : num 128291 # $ size : int [1:5] 21667 4844 1039 596 1854 #각 클러스터별 포함된 행수. # $ iter : int 6 # $ ifault : int 0 # - attr(*, "class")= chr " teen_clusters$size #각 그룹에 속한 obj 수 teen_clusters$centers #5개의 센터의 좌표 interests_z = cbind(interests_z, cluster = teen_clusters$cluster) teens$cluster = teen_clusters$cluster #클러스터별 나이의 평균 tapply( teens$age , teens$cluster ,mean) aggregate(data = teens , age~cluster, mean) #클러스터별 female의 평균 aggregate(data = teens , female~cluster, mean) #클러스터별 friends의 평균 aggregate(data = teens , friends~cluster, mean) | cs |
'딥러닝 모델 설계 > R STUDIO' 카테고리의 다른 글
감정 분석 기초 (0) | 2019.05.28 |
---|---|
난수, 시간측정, 그룹화 및 요약, 피봇팅, colSums, which.max (0) | 2019.05.28 |
tm라이브러리를 통한 코퍼스 manipulation (0) | 2019.05.27 |
텍스트 마이닝 기초 (0) | 2019.05.23 |
문자열 처리 두번째, 정규식, StringR라이브러리, colnames, match_all, trim, allign,sub,length, (0) | 2019.05.23 |