สวัสดีครับ
บทความนี้ จะเป็นข้อมูลประกอบวิดิโอ “การนำไฟล์ SPSS (ไฟล์นามสกุล .sav ) เข้าไปใน R เพื่อแปรผล ในรูปการสรุปข้อมูลและพล็อตกราฟ” ซึ่งประกอบไปด้วยข้อมูลดังนี้นะครับ

====================

Hello, this content is a part of video “Use SPSS data in R to automate chart creation & data summary”.
For English translation, please wait until mid-March. I will do it ASAP.

====================

  1. สรุปย่อสิ่งที่แนะนำในวิดิโอ
  2. อธิบายตัวข้อมูลที่นำมาใช้ประกอบ รวมถึงคำถามจาก Questionnaire จริงครับ
  3. ไฟล์ทั้งหมดที่เห็นในคลิปวิดิโอ คือ ทั้งไฟล์ที่รันด้วย R และ ไฟล์ที่ใช้ประกอบการอธิบายคลิปครับ
  4. โค้ดที่ผมใช้ (รวมเครื่องหมาย chunk)

1.สรุปย่อสิ่งที่แนะนำในวิดิโอ

ในวิดิโอ จะเป็นการนำเสนอ workshop ตัวอย่าง การนำไฟล์ SPSS แบบด้านล่าง เข้าไปใน R


จากนั้น จะมีขั้นตอนการเขียน code และใช้ MS Excel เล็กน้อยที่จะให้ได้ผลลัพธ์ตามรูปด้านล่างนะครับ


ในส่วนของรายละเอียด ผมได้เล่าไว้ในวิดิโอด้านบนหมดแล้ว หรือดูผ่าน facebook ได้ที่

https://www.facebook.com/watch/?v=356738451592135

2.อธิบายตัวข้อมูลที่นำมาใช้ประกอบ รวมถึงคำถามจาก Questionnaire จริงครับ

เกี่ยวกับ ไฟล์ SPSS (exampledata.sav)
ไฟล์นี้มากจากงานส่วนตัวที่ผมเคยทำเมื่อหลายปีมาแล้ว หัวข้อ “สำรวจพฤติกรรมซื้อสินค้าออนไลน์ (รวมอุปโภคบริโภค) ตามแนวรถไฟฟ้า” ซึ่งผมลงรายงานไว้ตาม link ด้านล่าง
https://gornnutagorn.com/2018/04/17/market-research-online-shopping-grocery-1/

ตรงนี้ ผมตัดข้อมูลดิบมาเฉพาะข้อ Q10 – Q13 บวกกับส่วน screener หรือลักษณะผู้ให้สัมภาษณ์อีกนิดหน่อย เพื่อให้ผู้อ่านบล็อกนี้ ลองใช้ไฟล์นี้เล่นดูครับ
โดยรายละเอียดคำถามเป็นดังนี้ครับ

Q10 ข้อความต่อไปนี้อธิบายถึงเหตุผลต่างๆที่ทำให้ผู้บริโภคซื้อสินค้าทางอินเตอร์เน็ต คุณเห็นด้วยมากน้อยเพียงไร (ข้อนี้มี 15 ข้อย่อย)
– รู้สึกสะดวกที่มีบริการส่งของถึงบ้าน
– ประหยัดเวลากว่าเมื่อเทียบกับการไปเลือกซื้อสินค้าด้วยตัวเอง
– ไม่ต้องถือของหนักกลับบ้านเอง
– ร้านค้าออนไลน์มีสิ่งที่ฉันต้องการในขณะที่ร้านค้าในท้องที่ ไม่มี
– สามารถเปรียบเทียบคุณสมบัติและราคาของสินค้าได้ง่ายกว่า
– สามารถเลือกซื้อสินค้าได้ตลอดเวลา
– ราคาสินค้าถูกกว่าซื้อตามร้านค้า
– มีโปรโมชั่นโดยเฉพาะสำหรับการซื้อสินค้าทางออนไลน์
– ช่วยให้ซื้อของอยู่ในงบประมาณที่คาดไว้
– หาโปรโมชั่นหรือส่วนลดได้ง่ายกว่า
– มีสินค้าให้เลือกมากกว่า
– คุณภาพและความสดใหม่ของสินค้าดีกว่าผลิตภัณฑ์ที่จัดวางตามห้างร้าน
– ฉันชอบค้นหาและเลือกดูสินค้าทางอินเตอร์เน็ต
– ฉันไม่ต้องเสี่ยงจะเจอกับการบริการลูกค้าที่ไม่ดีของร้านค้า
– ฉันมักจะซื้อสินค้าโดยไม่ได้คิดล่วงหน้าขณะเล่นอินเตอร์เน็ต

ซึ่งตัวเลือก จะเป็นไปตามนี้
1 ไม่เห็นด้วยเลย
2 ค่อนข้างไม่เห็นด้วย
3 เฉยๆ
4 ค่อน ข้างเห็นด้วย
5 เห็นด้วยอย่างยิ่ง
99 ไม่ทราบ

Q11 กรุณาบอกช่วงเวลา 2 ลำดับแรกที่คุณมักจะซื้อสินค้าทางอินเตอร์เน็ตบ่อยที่สุด (ในไฟล์ ให้ข้อมูล แค่ อันดับแรก)
6.00 – 8.59 นาฬิกา
9.00 – 11.59 นาฬิกา
12.00 – 14.59 นาฬิกา
15.00 – 16.59 นาฬิกา
17.00 – 19.59 นาฬิกา
20.00 – 22.59 นาฬิกา
23.00 – 5.59 นาฬิกา

Q12 คุณมักจะซื้อสินค้าทางอินเตอร์เน็ตวันใดมากที่สุดเป็น 2 อันดับแรก (ในไฟล์ ให้ข้อมูล แค่ อันดับแรก)
วันอาทิตย์
วันจันทร์
วันอังคาร
วันพุธ
วันพฤหัสบดี
วันศุกร์
วันเสาร์
ไม่แน่นอน (ไม่ต้องแสดงการ์ด)

Q13 เมื่อคุณคิดจะซื้อสินค้าทางอินเตอร์เน็ต คุณจะเข้าไปเลือกดูสินค้าผ่านช่องทางใดบ้าง (หลายคำตอบ – แต่ในไฟล์ ให้แค่คำตอบแรก)
– เว็บไซต์
– โฆษณาที่พ่วงมากับเว็บไซต์
– เฟสบุ้ก
– ทวิตเตอร์
– ไอจูนสโตร์
– อื่นๆ (โปรดระบุ………………………….)

3.ไฟล์ทั้งหมดที่เห็นในคลิปวิดิโอ คือ ทั้งไฟล์ที่รันด้วย R และ ไฟล์ที่ใช้ประกอบการอธิบายคลิปครับ

ไฟล์ที่ใช้ใน R ทั้งหมด โหลดได้ตามลิงคต์ด้านล่างครับ (ในนี้อัพโหลดไม่ได้ครับ)
https://drive.google.com/open?id=1RwXF3to5Zn__CNIk7_Y6e8fXMlxSGBtS

4.โค้ดที่ผมใช้ (รวมเครื่องหมาย chunk)

### to write a blog R language for automation charting

```{r}
## setting Thai Language Encoding
Sys.setlocale("LC_CTYPE", "Thai") # for Windows only
options(encoding="UTF-8") # Optional (for Windows)

## call required packaged ** if not, pls install these packages
library(haven)
library(xlsx)
library(ggplot2)
library(data.table)
library(dplyr)
```


```{r}
## import data with UTF8 encoding
exampledata <-  read_sav("./exampledata.sav",encoding = "UTF-8")
# exampledata <-  read_sav("./exampledata.sav",encoding = "WINDOWS-874")


## filter for online NGR
exampledata2 <- filter(exampledata,Check_Group==3)
masterdata <- exampledata2

## ลิสคำถามทั้งหมดออกมา

listlabel <- lapply(masterdata, function(x) attributes(x)$label)
dflabel <- data.frame(matrix(ncol = 2, nrow = 0))
colnames(dflabel) <- c("qhead","qdesc")
for(i in 1:length(listlabel)){
  dflabel[i,1] <- names(listlabel[i])
  if(length(listlabel[[i]])!=0){
    dflabel[i,2] <- listlabel[[i]]
  }
}

# ลิสคำตอบทั้งหมดออก

listvalue <- lapply(masterdata, function(x) attributes(x)$labels)

dfvalue <- data.frame(matrix(ncol = 3, nrow = 0))
colnames(dfvalue) <- c("question","choice","desc")

for(i in 1:length(listvalue)){
  dum1 <- nrow(dfvalue)
  for(j in 1:length(listvalue[[i]])){
    dum2 <- dum1+j
    dfvalue[dum2,1] <- names(listvalue[i])
    if(length(listvalue[[i]][[j]])!=0){
      dfvalue[dum2,2] <- listvalue[[i]][[j]]
      dfvalue[dum2,3] <- names(listvalue[[i]][j])
    }
  }
}


```

```{r}
head(dflabel)
```

```{r}
head(dfvalue)
```

```{r}
# สร้างไฟล์เพื่อเลือกรูปแบบ Automation

dflabeloptions <- dflabel
options <- c("freqSummary","chart1","chart2")
dflabeloptions[options] <- ""
write.xlsx(dflabeloptions, "./dflabeloptions.xlsx")

#after filled - เอาไฟล์เดิมมาใส้ข้อมูลแล้วเปลี่ยนชื่อ
dflabeloptionsfilled <- read.xlsx("./dflabeloptionsfilled.xlsx",sheetIndex = 1,encoding = "UTF-8")


```

```{r}
#freqSummary
c <- unlist(subset(dflabeloptionsfilled,freqSummary=="y",qhead)) # # filter ข้อที่จะเอา แล้วแปลง df ให้เป็น factor โดยการ unlist เพื่อทำ for loop
freqSummaryTable <- data.frame(matrix(ncol = 4, nrow = 0))
colnames(freqSummaryTable) <- c("question","vvalue","vlabel","PercFreq")
for(i in c){
  singlsq <- i
  b <- paste("masterdata$",singlsq,sep="")
  a <- eval(parse(text = b)) # เอาข้อความมารันสูตร
  dfa1 <- as.data.frame(table(a))
  dfa1$Freq <-  dfa1$Freq/sum(dfa1$Freq)
  dfl <- as.data.frame(attr(a, "labels")) # ดึง label หรือโค้ดเลขออกมา
  colnames(dfl) <- "a"
  dfl$val <- rownames(dfl)
  dfa2 <- merge(dfa1,dfl,by="a")
  dfa2$a <- as.numeric(dfa2$a)
  colnames(dfa2) <- c("vvalue","PercFreq","vlabel")
  dfa2$question <- singlsq
  dfa2 <- dfa2[c("question","vvalue","vlabel","PercFreq")]
  freqSummaryTable <- rbind(freqSummaryTable,dfa2)
}
write.xlsx(freqSummaryTable, "./freqSummaryTable.xlsx")
```

```{r}
dfa2
```

```{r}
tail(freqSummaryTable,n=15L)
```

```{r}
#chart1 - Single Percentage Frequency Chart - horizontal dot - Ordered by Result 
#... ggplot2 in for loop, print() is required
d <- unlist(subset(dflabeloptionsfilled,chart1=="y",qhead)) # # filter ข้อที่จะเอา แล้วแปลง df ให้เป็น factor โดยการ unlist เพื่อทำ for loop

for(i in d){
  singlsq <- i
  b <- paste("masterdata$",singlsq,sep="")
  a <- eval(parse(text = b)) # เอาข้อความมารันสูตร
  dfa1 <- as.data.frame(table(a))
  dfa1$Freq <-  dfa1$Freq/sum(dfa1$Freq)
  dfl <- as.data.frame(attr(a, "labels")) # ดึง label หรือโค้ดเลขออกมา
  colnames(dfl) <- "a"
  dfl$val <- rownames(dfl)
  dfa2 <- merge(dfa1,dfl,by="a")
  dfa2$a <- as.numeric(dfa2$a)
  
  
  singlechart1 <- ggplot(dfa2,aes(x=Freq,y=reorder(val,Freq)))+
    geom_segment(aes(yend=val), xend=0, colour="grey50") +
    ggtitle(attr(a, "label"))+
    geom_point(size=6) +
    theme_bw() +
    theme(panel.grid.major.y = element_blank(),
          axis.text.y = element_text(size=16),
          axis.text.x = element_text(size=18),
          axis.title.x = element_text(size = 20),
          axis.title.y = element_text(size = 20),
          plot.title = element_text(size = 14))+
    scale_x_continuous(labels = scales::percent)+
    labs(x="Proportion of Respondents",y=element_blank())
  png(filename=paste("./",singlsq,".png",sep=""),width=600,height=400)
  print(singlechart1)
  dev.off()
}
```

```{r}
dfa2
```

```{r}
singlechart1
```


```{r}
#chart2 - Attribute Chart - ordered
# 1st statement can be written by ... select(df1, A, B, E)

e <- as.vector(unlist(subset(dflabeloptionsfilled,chart2=="y",qhead))) # # filter ข้อที่จะเอา แล้วแปลง df ให้เป็น vector เพื่อที่จะรัน for loop

attmean <- masterdata %>%
  select(e)%>%
  colMeans(na.rm = TRUE)
attmeandf <- as.data.frame(attmean)
attmeandf$att <- rownames(attmeandf)
attmeandf <- merge(attmeandf, dflabel, by.x=c("att"), by.y=c("qhead"))

plotattmean <- ggplot(attmeandf,aes(x=attmean,y=reorder(qdesc,attmean)))+geom_point(size=3)+
  geom_segment(aes(yend=qdesc), xend=0, colour="grey50") +
  geom_point(size=6) +
  ggtitle("chart2") +
  theme_bw()+
  theme(panel.grid.major.y = element_blank(),
        axis.text.y = element_text(size=14),
        axis.text.x = element_text(size=12),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20))+
  # scale_x_continuous(labels = scales::percent)+
  labs(x="Mean Score",y=element_blank())

png(filename="./chart2.png",width=600,height=400)
plotattmean
dev.off()
```

```{r}
attmeandf
```

```{r}
plotattmean
```

ขอขอบคุณที่อ่านจนจบครับ

Created by : GornNutagorn

ช่องทางอื่นๆของ GornNutagorn

Facebook : https://www.facebook.com/KhaiGuide/

Youtube : https://www.youtube.com/channel/UCM_GtKr4u6KNkglfjeAiQVA

Sponsored by :

#####################################
grocerlock_โกรเซอล็อค

สนับสนุนโดย : www.grocerlock.com (คลิกเพื่อเข้าเว็บ)

ซุปเปอร์มาร์เก็ตออนไลน์ ขายสินค้าอุปโภคบริโภคทั่วไป

ขายปลีก-ส่ง / ต่อรองได้ / ส่งทั่วประเทศ

FB อินบ้อกได้ที่ : https://www.facebook.com/grocerlock (คลิกเพื่อส่งข้อความทางอินบ็อกซ์)

ซื้อผ่านไลน์ได้ที่ Line ID : @grocerlock (คลิกเพื่อเพิ่มเพื่อน)

#####################################

LEAVE A REPLY

Please enter your comment!
Please enter your name here