# rm(list=ls())
# install.packages('readxl')
library(readxl)
# install.packages('dplyr')
library(dplyr)
## Warning: 패키지 'dplyr'는 R 버전 4.2.2에서 작성되었습니다
##
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# install.packages(lme4)
library(lme4)
## Warning: 패키지 'lme4'는 R 버전 4.2.2에서 작성되었습니다
## 필요한 패키지를 로딩중입니다: Matrix
# install.packages("lmerTest")
library(lmerTest)
## Warning: 패키지 'lmerTest'는 R 버전 4.2.2에서 작성되었습니다
##
## 다음의 패키지를 부착합니다: 'lmerTest'
## The following object is masked from 'package:lme4':
##
## lmer
## The following object is masked from 'package:stats':
##
## step
# install.packages("ggplot2")
library(ggplot2)
# install.packages("sciplot")
library(sciplot)
# install.packages("openxlsx")
library("openxlsx")
## Warning: 패키지 'openxlsx'는 R 버전 4.2.2에서 작성되었습니다
# rm(list=ls())
getwd()
## [1] "C:/Users/csjja/Desktop"
setwd("C:\\Users\\csjja\\Desktop\\pn_data")
dir()
## [1] "cdi_coding.xlsx" "cdi_merge_23.csv"
## [3] "cdi_merge_23_0221.csv" "complete_cdi_coding.xlsx"
## [5] "pn_Analysis_2.html" "result.xlsx"
## [7] "긍부정.xlsx"
# cdi data import
cdi_all <- read_excel("result.xlsx",
sheet = "설문지 응답 시트1",
# range = "K1:K114", # cell range to read from
col_names = TRUE, # TRUE to use the first row as column names
na = "NA");head(cdi_all) # Character vector of strings to use for missing values
## New names:
## • `` -> `...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`
## # A tibble: 6 × 96
## 타임스탬프 `본 검사지를 복제, 송…` `피검자의 개인…` `나는 이 연구에…`
## <dttm> <chr> <chr> <chr>
## 1 2020-04-16 12:39:31 동의 동의 예
## 2 2020-04-16 14:58:38 동의 동의 예
## 3 2020-04-16 17:20:23 동의 동의 예
## 4 2020-04-17 11:24:11 동의 동의 예
## 5 2020-04-17 15:02:27 동의 동의 예
## 6 2020-04-17 15:56:40 동의 동의 예
## # … with 92 more variables:
## # `나는 이 연구에서 수집되는 나에 대한 정보는 연구 목적 이외에는 사용되지 않으며 현행 법률과 연구윤리심사위원회 규정이 허용하는 범위 내에서 연구자가 수집하고 처리한다는 것을 이해합니다.` <chr>,
## # `나는 언제라도 이 연구의 참여를 철회할 수 있고, 이러한 결정이 나에게 어떠한 불이익도 되지 않을 것이라는 것을 알고 있습니다.` <chr>,
## # `아동 성별` <chr>, `아동 생일` <dttm>, `검사 날짜` <dttm>,
## # `보호자 연락처` <chr>, `보호자 이메일` <chr>, `아버지의 나이` <chr>,
## # `아버지의 직업` <chr>, `아버지의 교육수준` <chr>,
## # `아버지의 월별평균소득` <chr>, `어머니의 나이` <chr>, …
#참여자만
# cdi_par <- cdi_all["보호자 이메일"]
# cdi_par1 <- cdi_all["아동 생일"]
cdi_par <- cbind(cdi_all["보호자 이메일"], cdi_all["아동 생일"])
cdi_raw <- read_excel("result.xlsx",
sheet = "설문지 응답 시트1",
range = "Z1:AU114", # cell range to read from
col_names = TRUE, # TRUE to use the first row as column names
na = "NA");head(cdi_raw) # Character vector of strings to use for missing values
## # A tibble: 6 × 22
## `1. 소리 (11)` `2. 탈 것 (13)` `3. 장난감 및 …` `4. 동물 (41)` `5. 옷 (20)`
## <chr> <chr> <chr> <chr> <chr>
## 1 꽥꽥, 꿀꿀, 똑똑… 기차, 배, 버스… 공, 로봇, 블럭,… 개, 개구리, … 가방, 기저…
## 2 꽥꽥, 꿀꿀, 똑똑… 기차, 배, 버스… 공, 로봇, 블럭,… 개, 개구리, … 가방, 구두,…
## 3 꿀꿀, 똑똑, 멍멍… 기차, 버스, 비… 공, 인형, 종이,… 개, 개구리, … 바지
## 4 꽥꽥, 꿀꿀, 똑똑… 배, 버스, 비행… 공, 블럭, 장난… 개, 거북이, … 기저귀, 바…
## 5 꿀꿀, 똑똑, 멍멍… 기차, 버스, 비… 공, 블럭, 연필,… 개, 개미, 고… 가방, 기저…
## 6 꽥꽥, 꿀꿀, 똑똑… 기차, 배, 버스… 공, 로봇, 블럭,… 개, 개구리, … 가방, 구두,…
## # … with 17 more variables: `6. 가구 및 방안 (21)` <chr>, `7. 음식 (58)` <chr>,
## # `8. 신체부위 (31)` <chr>, `9. 가정용품 (36)` <chr>,
## # `10. 외부사물 (26)` <chr>, `11. 일상생활 (14)` <chr>,
## # `12. 장소 (25)` <chr>, `13. 양, 정도 (14)` <chr>, `14. 사람 (33)` <chr>,
## # `15. 의문사 (11)` <chr>, `16. 동사 (150)` <chr>, `17. 형용사 (52)` <chr>,
## # `18. 끝맺는 말 (15)` <chr>, `19. 조사 (12)` <chr>,
## # `20. 연결하는 말 (6)` <chr>, `21. 위치 (8)` <chr>, `22. 시간 (17)` <chr>
cdi_raw(cdi raw 응답 data)의 열 이름 정리;편의를
위해names(cdi_raw)#열이름 확인
## [1] "1. 소리 (11)" "2. 탈 것 (13)"
## [3] "3. 장난감 및 문구류 (14)" "4. 동물 (41)"
## [5] "5. 옷 (20)" "6. 가구 및 방안 (21)"
## [7] "7. 음식 (58)" "8. 신체부위 (31)"
## [9] "9. 가정용품 (36)" "10. 외부사물 (26)"
## [11] "11. 일상생활 (14)" "12. 장소 (25)"
## [13] "13. 양, 정도 (14)" "14. 사람 (33)"
## [15] "15. 의문사 (11)" "16. 동사 (150)"
## [17] "17. 형용사 (52)" "18. 끝맺는 말 (15)"
## [19] "19. 조사 (12)" "20. 연결하는 말 (6)"
## [21] "21. 위치 (8)" "22. 시간 (17)"
names(cdi_raw) <- gsub("[0-9]", "", names(cdi_raw))
names(cdi_raw) <- gsub("[[:punct:]]","",names(cdi_raw))
names(cdi_raw) <- gsub(" ", "",names(cdi_raw))
names(cdi_raw)
## [1] "소리" "탈것" "장난감및문구류" "동물"
## [5] "옷" "가구및방안" "음식" "신체부위"
## [9] "가정용품" "외부사물" "일상생활" "장소"
## [13] "양정도" "사람" "의문사" "동사"
## [17] "형용사" "끝맺는말" "조사" "연결하는말"
## [21] "위치" "시간"
subject로 변경# rename(테이블이름, "바꿀 이름" = "원래 이름")
cdi_par <- rename(cdi_par, "subject" = "보호자 이메일")
cdi_par <- rename(cdi_par, "Birthdate" = "아동 생일")
categ <- cdi_raw[,c(11,16,17)] # 3 category만 선택
head(categ)
## # A tibble: 6 × 3
## 일상생활 동사 형용사
## <chr> <chr> <chr>
## 1 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안… 가, … 가벼워…
## 2 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안… 가, … 가벼워…
## 3 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 화이팅 (불)… 미워, …
## 4 고마워, 네/응, 돼, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양… 가, … 귀여워…
## 5 고마워, 네/응, 돼, 만세, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양… 가, … 같아/…
## 6 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안… 가, … 가벼워…
merged <- paste(categ$일상생활, categ$동사, categ$형용사)#3개 카테고리를 하나로 merge
df dataframe 생성merged 데이터를 새로운 데이터
프레임으로 생성.#보호자 이메일과 3개 카테고리 합친것을 df으로 만듦
as.character(cdi_par$`subject`) -> subject # subject를 character로 만듦.
as.character(cdi_par$`Birthdate`) -> Birthdate # subject를 character로 만듦.
data.frame(subject, Birthdate) -> df
data.frame(df, merged) -> df
df안에 새로운 빈열 생성.df$pn_pos_value <- rep(" ", length(df$subject)) # pn_value 열 생성
df$pn_neg_value <- rep(" ", length(df$subject)) # pn_value 열 생성
df$pn_pos_num <- rep(0, length(df$subject))# pn_num 열 생성
df$pn_neg_num <- rep(0, length(df$subject))# pn_num 열 생성
pn <- read_excel("C:\\Users\\csjja\\Desktop\\pn_data\\긍부정.xlsx",
sheet = "230108_최종에서_수정1",
# range = "A1:D35",
col_names = TRUE,
na = "NA")
## New names:
## • `` -> `...1`
# pn_saved <- pn # save data
# 긍정: 15개, 부정어 25개
pn 데이터 정제str(pn)
## tibble [40 × 4] (S3: tbl_df/tbl/data.frame)
## $ ...1 : num [1:40] 1 2 3 4 5 6 7 8 9 10 ...
## $ Words : chr [1:40] "고마워" "놀아" "괜찮아" "귀여워" ...
## $ SentiWord_Dict: num [1:40] 2 1 1 2 2 2 2 1 2 1 ...
## $ P/N : chr [1:40] "P" "P" "P" "P" ...
unique(pn$`P/N`) #변수 확인
## [1] "P" "N"
is.na(unique(df$'merged'))
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 긍부정 리스트 수정 후 필요없어짐.
# pn[pn$"P/N"=="N/M(iddle)",] #n/m인 행 확인 --> 넘어져
# pn[pn$"P/N"=="N/M(iddle)","P/N"] = "N"
# 콤마를 기준으로 merged 데이터(paste했을 때 하나의 행으로 된 것)를 list화
# It looks unnecessary
# strsplit(merged, ',') -> merged.list
pn_pos <- pn[1:15,]
pn_neg <- pn[16:40,]
df$pn_pos_vlaue에 넣고-> 개수를 세서 전체 개수(15)로
나눠서 pn_pos_num에 넣기(긍정어)for (i in 1:length(df$subject)){
vec <- gsub(',', ' ', df$merged[i])
vec <- gsub(' +', ' ', vec)
list <- strsplit(vec, ' ')
if (length(pn_pos$Words[which(as.vector(pn_pos$Words) %in% list[[1]])]) == 0) {
df$pn_pos_value[i] <- NA
df$pn_pos_num[i] <- 0
} else {
df$pn_pos_value[i] <- paste(pn_pos$Words[which(pn_pos$Words %in% list[[1]])], collapse = ",") #일치하는 단어 paste하기
df$pn_pos_num[i] <- length(pn_pos$Words[which(pn_pos$Words %in% list[[1]])])/15 # df$pn_vlaue의 개수세기
}
}
df$pn_pos_num <- as.numeric(df$pn_pos_num)
# 소숫점 2번째까지
df$pn_pos_num <- sprintf("%.2f", df$pn_pos_num)
df$pn_neg_vlaue에 넣고-> 개수를 세서 전체 개수(25)로
나눠서 pn_neg_num에 넣기(부정어)for (i in 1:length(df$subject)){
vec <- gsub(',', ' ', df$merged[i])
vec <- gsub(' +', ' ', vec)
list <- strsplit(vec, ' ')
if (length(pn_neg$Words[which(as.vector(pn_neg$Words) %in% list[[1]])]) == 0) {
df$pn_neg_value[i] <- NA
df$pn_neg_num[i] <- 0
} else {
df$pn_neg_value[i] <- paste(pn_neg$Words[which(pn_neg$Words %in% list[[1]])], collapse = ",") #일치하는 단어 paste하기
df$pn_neg_num[i] <- length(pn_neg$Words[which(pn_neg$Words %in% list[[1]])])/25 # df$pn_vlaue의 개수세기
}
}
df$pn_value과 일치하는 긍정 단어의
pn_pos$SentiWord_Dict 값 가져오기(긍정어)# 긍정
for (i in 1:length(df$subject)){
vet <- gsub(',', ' ', df$pn_pos_value[i])
vet <- gsub(' +', ' ', vet)
list <- strsplit(vet, ' ')
if (length(pn_pos$Words[which(as.vector(pn_pos$Words) %in% list[[1]])]) == 0) {
df$pn_pos_value_score[i] <- 0
} else {
df$pn_pos_value_score[i] <- paste(pn_pos$SentiWord_Dict[which(pn_pos$Words %in% list[[1]])], collapse = ",") #일치하는 단어의 SentiWord_Dict의 점수 넣기
}
}
head(df, n=2)
## subject Birthdate
## 1 godtheeb@hanmail.net 2017-04-13
## 2 munhee1981@naver.com 2017-04-07
## merged
## 1 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 가리켜, 가져, 간지럽혀, 건너, 걸어, 고쳐, 그려, 기다려, 깎아, (컵을)깨, (불)꺼, 꺼내, 꽂아, 끊어져, 끌어, 끼워, 나가, 나와, (물건을)날라, 날라가, (차에서)내려, 내려가, 넘어져, (통에)넣어, 노래 불러, 놀아, (물건을)놓아, 누워, (무엇을)눌러, (무엇에)눌려, 다녀, 다쳐, 닦아, 닫아, 달려, 당겨, 던져, 덮어, 도와, 돌려, 돌아, 두드려, (여기에)둬, (물건을)들어, (소리를)들어, 들어가, 때려, (물에)떠, 떨어뜨려, 떨어져, 떼(어), 뛰어, 마셔, 만들어, (빨래/싸움)말려, 말해, 맛봐, (주사를)맞아, (음식을)먹어, (음식을)먹여, 멈춰, 몰라, 물어, 밀어, (약)발라, 박수쳐, 버려, 벗어, 보여, 봐, 부딪쳐, 부숴, (물을)부어, 불러, (풍선을)불어, 붙여, 빗어, 빠져, 빨아, 빼, 빼앗아, 뽀뽀해, 뽑아, (물건을)사, 사랑해, (그 자리에)서, 수영해, 숨어, 시작해, 신어, (물건을)실어, 싸워, (모자)써, 쏟아, 씻어, 안아, 안해, 앉아, 알아, 열어, 올라가, 올려, 와, 요리해, 운전해, 울어, 웃어, (승부에)이겨, 일어나/일어서, 일해, 읽어, 입어, (잠)자, 잘라, 잡아, 죽어, 줘, 쫓아, 찍어, (공을)차, 찾아, 춤춰, 치워, 칠해, (차에)타, (차에)태워, 튀겨, 틀어, (코를)풀어, (꽃이)피어, 해, 혼나 가벼워, 간지러워, 같아/똑같아, 괜찮아, 귀여워, 길어, (색이)까매, 깜깜해, (색이)노래, 높아, 달라, 더러워, 더워, 동그래, 뜨거워, 많아, 맛없어, 맛있어, 매워, 멀어, 멋있어, 목말라, 무거워, 무서워, 배고파, (색이)빨개, 빨라, 싫어, 심심해, 아파, 어두워, 없어, 예뻐, 있어, 작아, 재미있어, 조용해, 졸려, 좋아, 착해, 추워, 커, (색이)파래, (색이)하얘, 힘들어
## 2 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 간지럽혀, 걸어, 공부해, 기다려, (불)꺼, 나가, (차에서)내려, 넘어져, (통에)넣어, 노래 불러, 놀아, (무엇을)눌러, 다쳐, 닦아, 달려, 당겨, 던져, 도와, 들어가, 때려, 떼(어), 뛰어, 마셔, 만들어, 말해, (주사를)맞아, (음식을)먹어, 멈춰, 미워해, 밀어, (약)발라, 박수쳐, 버려, 벗어, 봐, 빗어, 빠져, 빨아, 빼, 뽀뽀해, (물건을)사, 사랑해, 생각해, 수영해, 숨어, 신어, 싸워, (모자)써, 씻어, 안아, 앉아, 열어, 올라가, 와, 요리해, 운전해, 울어, 웃어, 일어나/일어서, 읽어, 입어, (잠)자, 좋아해, 줘, (공을)차, 찾아, 춤춰, (차에)타, 해, 혼나 가벼워, 간지러워, 같아/똑같아, 괜찮아, 귀여워, 길어, 깜깜해, 높아, 더러워, 더워, 뜨거워, 많아, 맛없어, 맛있어, 매워, 멋있어, 목말라, 무거워, 무서워, 배고파, 시끄러워, 심심해, 아파, 없어, 예뻐, 이상해, 있어, 작아, 재미있어, 졸려, 좋아, (맛이)짜, (촉감이)차, 착해, 추워, 커, 힘들어
## pn_pos_value
## 1 고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,조용해,춤춰,도와,안아,커
## 2 고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,좋아해,춤춰,도와,안아,커
## pn_neg_value
## 1 더러워,때려,맛없어,무거워,무서워,숨어,싫어,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,물어,간지러워,작아,간지럽혀,더워,버려
## 2 더러워,때려,맛없어,무거워,무서워,미워해,숨어,시끄러워,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,간지러워,작아,간지럽혀,미워해,더워,버려
## pn_pos_num pn_neg_num pn_pos_value_score
## 1 0.93 0.84 2,1,1,2,2,2,2,1,2,1,1,1,1,1
## 2 0.93 0.88 2,1,1,2,2,2,2,1,2,2,1,1,1,1
df$pn_value과 일치하는 부정 단어의
pn_neg$SentiWord_Dict 값 가져오기(부정어)# 부정
for (i in 1:length(df$subject)){
vet <- gsub(',', ' ', df$pn_neg_value[i])
vet <- gsub(' +', ' ', vet)
list <- strsplit(vet, ' ')
if (length(pn_neg$Words[which(as.vector(pn_neg$Words) %in% list[[1]])]) == 0) {
df$pn_neg_value_score[i] <- 0
} else {
df$pn_neg_value_score[i] <- paste(pn_neg$SentiWord_Dict[which(pn_neg$Words %in% list[[1]])], collapse = ",") #일치하는 단어의 SentiWord_Dict의 점수 넣기
}
}
#### !! 여기까지 df를 df_saved로 저장
# df_saved <- df
pn_pos_value/pn_neg_value -> pn 단어들과 일치하는 단어들 나열
pn_pos_value_score/pn_neg_value_score -> 긍부정 단어 각 점수 나열
pn_pos_cal/pn_neg_cal -> 점수 합
pn_pos_cal열에 pn_pos_value값의 합을
넣기(긍정)
# 분리해보기
## 긍정
mode(df$pn_pos_value_score) #데이터 타입 확인, character
## [1] "character"
p <- df[,c(1,8)];View(p) #subject와 pn_pos_value_score
strsplit(p$pn_pos_value_score, ',') -> p1
# View(new_list)
#new_list <- apply(as.numeric(unlist(new_list)), 1, sum)
for (i in 1:length(p$subject)){
p1[[i]] <- sum(as.numeric(p1[[i]]))/22}
# unlist
p_data <- data.frame(unlist(p1))
# cbind
df <- cbind(df, p_data)
#change column name
colnames(df)[10]<-'pn_pos_cal'
pn_neg_cal열에 pn_neg_value값의 합을
넣기(부정)## 부정
mode(df$pn_neg_value_score) #데이터 타입 확인, character
## [1] "character"
n <- df[,c(1,9)];View(n) #subject와 pn_neg_value_score
strsplit(n$pn_neg_value_score, ',') -> n1
for (i in 1:length(n$subject)){
n1[[i]] <- sum(as.numeric(n1[[i]]))/-37}
# unlist
n_data <- data.frame(unlist(n1))
# cbind
df <- cbind(df, n_data)
#change column name
colnames(df)[11]<-'pn_neg_cal'
head(df, n=2)
## subject Birthdate
## 1 godtheeb@hanmail.net 2017-04-13
## 2 munhee1981@naver.com 2017-04-07
## merged
## 1 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 가리켜, 가져, 간지럽혀, 건너, 걸어, 고쳐, 그려, 기다려, 깎아, (컵을)깨, (불)꺼, 꺼내, 꽂아, 끊어져, 끌어, 끼워, 나가, 나와, (물건을)날라, 날라가, (차에서)내려, 내려가, 넘어져, (통에)넣어, 노래 불러, 놀아, (물건을)놓아, 누워, (무엇을)눌러, (무엇에)눌려, 다녀, 다쳐, 닦아, 닫아, 달려, 당겨, 던져, 덮어, 도와, 돌려, 돌아, 두드려, (여기에)둬, (물건을)들어, (소리를)들어, 들어가, 때려, (물에)떠, 떨어뜨려, 떨어져, 떼(어), 뛰어, 마셔, 만들어, (빨래/싸움)말려, 말해, 맛봐, (주사를)맞아, (음식을)먹어, (음식을)먹여, 멈춰, 몰라, 물어, 밀어, (약)발라, 박수쳐, 버려, 벗어, 보여, 봐, 부딪쳐, 부숴, (물을)부어, 불러, (풍선을)불어, 붙여, 빗어, 빠져, 빨아, 빼, 빼앗아, 뽀뽀해, 뽑아, (물건을)사, 사랑해, (그 자리에)서, 수영해, 숨어, 시작해, 신어, (물건을)실어, 싸워, (모자)써, 쏟아, 씻어, 안아, 안해, 앉아, 알아, 열어, 올라가, 올려, 와, 요리해, 운전해, 울어, 웃어, (승부에)이겨, 일어나/일어서, 일해, 읽어, 입어, (잠)자, 잘라, 잡아, 죽어, 줘, 쫓아, 찍어, (공을)차, 찾아, 춤춰, 치워, 칠해, (차에)타, (차에)태워, 튀겨, 틀어, (코를)풀어, (꽃이)피어, 해, 혼나 가벼워, 간지러워, 같아/똑같아, 괜찮아, 귀여워, 길어, (색이)까매, 깜깜해, (색이)노래, 높아, 달라, 더러워, 더워, 동그래, 뜨거워, 많아, 맛없어, 맛있어, 매워, 멀어, 멋있어, 목말라, 무거워, 무서워, 배고파, (색이)빨개, 빨라, 싫어, 심심해, 아파, 어두워, 없어, 예뻐, 있어, 작아, 재미있어, 조용해, 졸려, 좋아, 착해, 추워, 커, (색이)파래, (색이)하얘, 힘들어
## 2 고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 간지럽혀, 걸어, 공부해, 기다려, (불)꺼, 나가, (차에서)내려, 넘어져, (통에)넣어, 노래 불러, 놀아, (무엇을)눌러, 다쳐, 닦아, 달려, 당겨, 던져, 도와, 들어가, 때려, 떼(어), 뛰어, 마셔, 만들어, 말해, (주사를)맞아, (음식을)먹어, 멈춰, 미워해, 밀어, (약)발라, 박수쳐, 버려, 벗어, 봐, 빗어, 빠져, 빨아, 빼, 뽀뽀해, (물건을)사, 사랑해, 생각해, 수영해, 숨어, 신어, 싸워, (모자)써, 씻어, 안아, 앉아, 열어, 올라가, 와, 요리해, 운전해, 울어, 웃어, 일어나/일어서, 읽어, 입어, (잠)자, 좋아해, 줘, (공을)차, 찾아, 춤춰, (차에)타, 해, 혼나 가벼워, 간지러워, 같아/똑같아, 괜찮아, 귀여워, 길어, 깜깜해, 높아, 더러워, 더워, 뜨거워, 많아, 맛없어, 맛있어, 매워, 멋있어, 목말라, 무거워, 무서워, 배고파, 시끄러워, 심심해, 아파, 없어, 예뻐, 이상해, 있어, 작아, 재미있어, 졸려, 좋아, (맛이)짜, (촉감이)차, 착해, 추워, 커, 힘들어
## pn_pos_value
## 1 고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,조용해,춤춰,도와,안아,커
## 2 고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,좋아해,춤춰,도와,안아,커
## pn_neg_value
## 1 더러워,때려,맛없어,무거워,무서워,숨어,싫어,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,물어,간지러워,작아,간지럽혀,더워,버려
## 2 더러워,때려,맛없어,무거워,무서워,미워해,숨어,시끄러워,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,간지러워,작아,간지럽혀,미워해,더워,버려
## pn_pos_num pn_neg_num pn_pos_value_score
## 1 0.93 0.84 2,1,1,2,2,2,2,1,2,1,1,1,1,1
## 2 0.93 0.88 2,1,1,2,2,2,2,1,2,2,1,1,1,1
## pn_neg_value_score pn_pos_cal
## 1 -2,-1,-1,-2,-2,-1,-2,-1,-2,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-2 0.9090909
## 2 -2,-1,-1,-2,-2,-2,-1,-2,-1,-2,-1,-1,-1,-1,-2,-2,-1,-1,-1,-2,-1,-2 0.9545455
## pn_neg_cal
## 1 0.7837838
## 2 0.8648649
# 소숫점 2번째까지
df$pn_pos_cal <- sprintf("%.2f", df$pn_pos_cal)
df$pn_neg_cal <- sprintf("%.2f", df$pn_neg_cal)
-> 문성민 박사님이 작성하신 R 스트립트 사용.
cdi_per <- read.csv("C:\\Users\\csjja\\Desktop\\pn_data\\cdi_merge_23_0221.csv",head=T)
as.character(cdi_per$Birthdate)-> cdi_per$Birthdate
as.character(cdi_par$Birthdate)-> cdi_par$Birthdate
mode(cdi_per$Birthdate)
## [1] "character"
mode(cdi_par$Birthdate)
## [1] "character"
# 중복 데이터 찾기
cdi_par_2<- distinct(cdi_par)
cdi_par)과 raw
data(cdi_raw)를 cbindcdi_score <- left_join(cdi_par_2, cdi_per,key='subject')
## Joining, by = c("subject", "Birthdate")
# View(cdi_score)
# type 일치시키기
as.character(cdi_per$Birthdate)-> cdi_per$Birthdate
as.character(cdi_par$Birthdate)-> cdi_par$Birthdate
mode(cdi_per$Birthdate)
## [1] "character"
mode(cdi_par$Birthdate)
## [1] "character"
final_df <- left_join(df,cdi_score,key='subject')
## Joining, by = c("subject", "Birthdate")
str(final_df)
## 'data.frame': 121 obs. of 18 variables:
## $ subject : chr "godtheeb@hanmail.net" "munhee1981@naver.com" "dbsdmsghk14@naver.com" "chasu7315@naver.com" ...
## $ Birthdate : chr "2017-04-13" "2017-04-07" "2018-01-20" "2021-01-29" ...
## $ merged : chr "고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 가리켜, 가"| __truncated__ "고마워, 네/응, 돼, 만세, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 간지럽혀, "| __truncated__ "빠이빠이, 쉬, 아니(야), 안녕, 안돼, 화이팅 (불)꺼, (차에서)내려, 사랑해, 안해, 일어나/일어서, (잠)자 미워, 아파, 좋아, 추워" "고마워, 네/응, 돼, 목욕, 빠이빠이, 쉬, 아니(야), 안녕, 안돼, 양치, 응가/똥, 화이팅, 하지마 가, 그려, 끼워, 나와"| __truncated__ ...
## $ pn_pos_value : chr "고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,조용해,춤춰,도와,안아,커" "고마워,놀아,괜찮아,귀여워,맛있어,사랑해,예뻐,웃어,재미있어,좋아해,춤춰,도와,안아,커" "사랑해" "고마워,귀여워,맛있어,사랑해,안아" ...
## $ pn_neg_value : chr "더러워,때려,맛없어,무거워,무서워,숨어,싫어,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,물어,간지러워,작아,간지럽혀,더워,버려" "더러워,때려,맛없어,무거워,무서워,미워해,숨어,시끄러워,심심해,아파,안돼,없어,울어,추워,혼나,힘들어,간지러워,작아"| __truncated__ "아파,안돼,추워" "나빠,더러워,무서워,싫어,아파,안돼,추워,더워" ...
## $ pn_pos_num : chr "0.93" "0.93" "0.07" "0.33" ...
## $ pn_neg_num : num 0.84 0.88 0.12 0.32 0.6 1 0.16 0.12 0 0.16 ...
## $ pn_pos_value_score: chr "2,1,1,2,2,2,2,1,2,1,1,1,1,1" "2,1,1,2,2,2,2,1,2,2,1,1,1,1" "2" "2,2,2,2,1" ...
## $ pn_neg_value_score: chr "-2,-1,-1,-2,-2,-1,-2,-1,-2,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-2" "-2,-1,-1,-2,-2,-2,-1,-2,-1,-2,-1,-1,-1,-1,-2,-2,-1,-1,-1,-2,-1,-2" "-2,-1,-1" "-2,-2,-2,-2,-2,-1,-1,-1" ...
## $ pn_pos_cal : chr "0.91" "0.95" "0.09" "0.41" ...
## $ pn_neg_cal : chr "0.78" "0.86" "0.11" "0.35" ...
## $ X : int 1 2 3 NA 5 6 7 8 9 10 ...
## $ Index : int 1 2 3 NA 5 6 7 8 9 10 ...
## $ TestingDate : chr "2020-04-16" "2020-04-16" "2020-04-16" NA ...
## $ TotalVsize : int 541 446 79 NA 312 623 126 152 17 229 ...
## $ AgeAtCDI : int 36 36 26 NA 24 34 33 33 26 26 ...
## $ Gender : chr "M" "F" "M" NA ...
## $ eachPercentile : int 44 16 16 NA 72 94 6 8 5 47 ...
# View(final_df)
#열 이름 변경
names(final_df)#열이름 확인
## [1] "subject" "Birthdate" "merged"
## [4] "pn_pos_value" "pn_neg_value" "pn_pos_num"
## [7] "pn_neg_num" "pn_pos_value_score" "pn_neg_value_score"
## [10] "pn_pos_cal" "pn_neg_cal" "X"
## [13] "Index" "TestingDate" "TotalVsize"
## [16] "AgeAtCDI" "Gender" "eachPercentile"
# names(final_df) <- gsub("[0-9]", "", names(final_df))
# names(final_df) <- gsub("[[:punct:]]","",names(final_df))
# names(final_df) <- gsub(" ", "",names(final_df));names(final_df)
class(final_df$merged) #character
## [1] "character"
# # file export
# write.xlsx(final_df, sheetName="cdi_coding", file="cdi_coding.xlsx")
#
# # file import
# # cdi 점수 입력 완료
# final_cdi <- read_excel("C:\\Users\\csjja\\Desktop\\complete_cdi_coding.xlsx",
# sheet = "cdi_coding",
# range = "A1:G114",
# col_names = TRUE, # TRUE to use the first row as column names
# na = "NA");head(final_cdi) # Character vector of strings to use for missing values
# final_cdi <- final_cdi[,c(1,6,7)] #pn점수를 새로한 것으로 하기 위해 cdi결과만 추출
#
# # 덮어쓰기
# final_df <- left_join(df,final_cdi,key='subject')
# head(final_df, n=2)
# final_df$'표현낱말 백분위수' <- as.factor(final_df$'표현낱말 백분위수') #백분위를 facotor로 변경
# levels(final_df$`표현낱말 백분위수`) #level 확인;6개 구간
# final_df[, c(5,6,9,10)] = sapply(final_df[, c(5,6,9,10)], FUN = "as.numeric")
summary(lm(final_df$eachPercentile ~ final_df$pn_pos_num, data=final_df))
##
## Call:
## lm(formula = final_df$eachPercentile ~ final_df$pn_pos_num, data = final_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.778 -14.533 -0.927 13.031 45.667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 19.333 5.140 3.762 0.000282 ***
## final_df$pn_pos_num0.07 11.833 7.710 1.535 0.127904
## final_df$pn_pos_num0.13 9.292 8.715 1.066 0.288850
## final_df$pn_pos_num0.20 30.267 8.127 3.724 0.000321 ***
## final_df$pn_pos_num0.27 10.867 10.279 1.057 0.292947
## final_df$pn_pos_num0.33 24.542 8.715 2.816 0.005836 **
## final_df$pn_pos_num0.40 25.452 7.397 3.441 0.000842 ***
## final_df$pn_pos_num0.47 32.667 20.559 1.589 0.115168
## final_df$pn_pos_num0.53 39.167 14.985 2.614 0.010309 *
## final_df$pn_pos_num0.60 21.917 11.202 1.957 0.053134 .
## final_df$pn_pos_num0.67 37.167 14.985 2.480 0.014763 *
## final_df$pn_pos_num0.73 41.333 12.590 3.283 0.001407 **
## final_df$pn_pos_num0.80 55.333 12.590 4.395 2.72e-05 ***
## final_df$pn_pos_num0.87 48.167 9.615 5.009 2.30e-06 ***
## final_df$pn_pos_num0.93 44.444 8.393 5.295 6.86e-07 ***
## final_df$pn_pos_num1.00 64.354 7.154 8.995 1.36e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.91 on 102 degrees of freedom
## (결측으로 인하여 3개의 관측치가 삭제되었습니다.)
## Multiple R-squared: 0.5464, Adjusted R-squared: 0.4797
## F-statistic: 8.192 on 15 and 102 DF, p-value: 7.16e-12
summary(lm(final_df$eachPercentile ~ final_df$pn_neg_num, data=final_df))
##
## Call:
## lm(formula = final_df$eachPercentile ~ final_df$pn_neg_num, data = final_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.110 -16.094 0.941 13.769 50.812
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26.094 2.752 9.483 3.87e-16 ***
## final_df$pn_neg_num 56.836 5.322 10.679 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.68 on 116 degrees of freedom
## (결측으로 인하여 3개의 관측치가 삭제되었습니다.)
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4914
## F-statistic: 114 on 1 and 116 DF, p-value: < 2.2e-16
summary(lm(final_df$eachPercentile ~ final_df$pn_pos_cal, data=final_df))
##
## Call:
## lm(formula = final_df$eachPercentile ~ final_df$pn_pos_cal, data = final_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -53.000 -11.136 -0.844 11.062 45.667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 19.3333 4.8965 3.948 0.000149 ***
## final_df$pn_pos_cal0.05 13.2121 7.5279 1.755 0.082402 .
## final_df$pn_pos_cal0.09 5.6667 14.2756 0.397 0.692278
## final_df$pn_pos_cal0.14 11.0667 9.7930 1.130 0.261237
## final_df$pn_pos_cal0.18 6.6667 11.9939 0.556 0.579601
## final_df$pn_pos_cal0.23 29.5000 9.1605 3.220 0.001743 **
## final_df$pn_pos_cal0.27 29.0000 9.1605 3.166 0.002067 **
## final_df$pn_pos_cal0.32 20.9524 8.6805 2.414 0.017667 *
## final_df$pn_pos_cal0.36 0.6667 19.5859 0.034 0.972917
## final_df$pn_pos_cal0.41 14.2667 7.7420 1.843 0.068419 .
## final_df$pn_pos_cal0.45 42.6667 9.1605 4.658 1.02e-05 ***
## final_df$pn_pos_cal0.50 31.1667 14.2756 2.183 0.031432 *
## final_df$pn_pos_cal0.59 45.6667 19.5859 2.332 0.021791 *
## final_df$pn_pos_cal0.64 30.9167 10.6716 2.897 0.004656 **
## final_df$pn_pos_cal0.73 19.1667 14.2756 1.343 0.182529
## final_df$pn_pos_cal0.77 41.3333 11.9939 3.446 0.000842 ***
## final_df$pn_pos_cal0.82 55.3333 11.9939 4.613 1.21e-05 ***
## final_df$pn_pos_cal0.86 66.0000 11.9939 5.503 3.04e-07 ***
## final_df$pn_pos_cal0.91 28.6667 9.7930 2.927 0.004260 **
## final_df$pn_pos_cal0.95 49.6667 8.6805 5.722 1.17e-07 ***
## final_df$pn_pos_cal1.00 64.3542 6.8156 9.442 2.15e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18.96 on 97 degrees of freedom
## (결측으로 인하여 3개의 관측치가 삭제되었습니다.)
## Multiple R-squared: 0.6085, Adjusted R-squared: 0.5278
## F-statistic: 7.539 on 20 and 97 DF, p-value: 2.232e-12
summary(lm(final_df$eachPercentile ~ final_df$pn_neg_cal, data=final_df))
##
## Call:
## lm(formula = final_df$eachPercentile ~ final_df$pn_neg_cal, data = final_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -39.000 -7.857 0.000 7.792 41.000
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 27.3571 4.9192 5.561 3.35e-07 ***
## final_df$pn_neg_cal0.03 -3.5238 8.9812 -0.392 0.695827
## final_df$pn_neg_cal0.05 -5.9286 8.5203 -0.696 0.488535
## final_df$pn_neg_cal0.08 4.8929 10.4352 0.469 0.640415
## final_df$pn_neg_cal0.11 -2.8571 8.9812 -0.318 0.751209
## final_df$pn_neg_cal0.14 20.6429 10.4352 1.978 0.051306 .
## final_df$pn_neg_cal0.16 17.6429 7.8639 2.244 0.027593 *
## final_df$pn_neg_cal0.19 45.6429 13.9136 3.280 0.001530 **
## final_df$pn_neg_cal0.22 14.9762 11.7100 1.279 0.204577
## final_df$pn_neg_cal0.24 -5.3571 19.0520 -0.281 0.779285
## final_df$pn_neg_cal0.27 42.6429 13.9136 3.065 0.002958 **
## final_df$pn_neg_cal0.30 38.6429 19.0520 2.028 0.045818 *
## final_df$pn_neg_cal0.32 -0.4821 8.1576 -0.059 0.953015
## final_df$pn_neg_cal0.35 22.6429 19.0520 1.188 0.238118
## final_df$pn_neg_cal0.38 49.6429 19.0520 2.606 0.010910 *
## final_df$pn_neg_cal0.41 18.1429 13.9136 1.304 0.195939
## final_df$pn_neg_cal0.43 36.6429 19.0520 1.923 0.057955 .
## final_df$pn_neg_cal0.46 14.3095 11.7100 1.222 0.225256
## final_df$pn_neg_cal0.49 27.1429 13.9136 1.951 0.054537 .
## final_df$pn_neg_cal0.51 29.3095 11.7100 2.503 0.014327 *
## final_df$pn_neg_cal0.54 -13.3571 19.0520 -0.701 0.485256
## final_df$pn_neg_cal0.57 27.1429 13.9136 1.951 0.054537 .
## final_df$pn_neg_cal0.59 24.6429 19.0520 1.293 0.199531
## final_df$pn_neg_cal0.62 40.6429 10.4352 3.895 0.000201 ***
## final_df$pn_neg_cal0.65 19.6429 19.0520 1.031 0.305603
## final_df$pn_neg_cal0.68 40.1429 13.9136 2.885 0.005012 **
## final_df$pn_neg_cal0.70 55.6429 19.0520 2.921 0.004524 **
## final_df$pn_neg_cal0.73 26.6429 13.9136 1.915 0.059038 .
## final_df$pn_neg_cal0.78 16.6429 19.0520 0.874 0.384946
## final_df$pn_neg_cal0.81 30.6429 19.0520 1.608 0.111643
## final_df$pn_neg_cal0.84 57.6429 19.0520 3.026 0.003325 **
## final_df$pn_neg_cal0.86 22.1429 13.9136 1.591 0.115403
## final_df$pn_neg_cal0.89 61.3095 11.7100 5.236 1.27e-06 ***
## final_df$pn_neg_cal0.92 44.6429 13.9136 3.209 0.001912 **
## final_df$pn_neg_cal0.95 51.9762 11.7100 4.439 2.83e-05 ***
## final_df$pn_neg_cal0.97 70.6429 19.0520 3.708 0.000381 ***
## final_df$pn_neg_cal1.00 61.2429 7.6208 8.036 6.37e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18.41 on 81 degrees of freedom
## (결측으로 인하여 3개의 관측치가 삭제되었습니다.)
## Multiple R-squared: 0.6921, Adjusted R-squared: 0.5552
## F-statistic: 5.056 on 36 and 81 DF, p-value: 7.45e-10
boxplot(final_df$eachPercentile ~ final_df$pn_pos_num,
col=c("green","blue","red", "purple", "orange","yellow"),
final_df)
# lineplot.CI(final_df$'표현낱말 백분위수', final_df$pn_pos_num)
boxplot(final_df$eachPercentile ~ final_df$pn_neg_num,
col=c("green","blue","red", "purple", "orange","yellow"),
final_df)
# lineplot.CI(final_df$`표현낱말 백분위수`, final_df$pn_neg_num)
boxplot(final_df$eachPercentile ~ final_df$pn_pos_cal,
col=c("green","blue","red", "purple", "orange","yellow"),
final_df)
# lineplot.CI(final_df$`표현낱말 백분위수`, final_df$pn_pos_cal)
boxplot(final_df$eachPercentile ~ final_df$pn_neg_cal,
col=c("green","blue","red", "purple", "orange","yellow"),
final_df)
# lineplot.CI(final_df$`표현낱말 백분위수`, final_df$pn_neg_cal)