วิเคราะห์ข้อมูล Facebook Page ด้วย R (2018)

Facebook เป็นแหล่งข้อมูลสาธารณะที่น่าจะใหญ่ที่สุดอันดับต้นๆของโลกยุคนี้ เรากำลังพูดถึง posts, comments, likes, shares ที่ users ไปเขียนและ interact กับ public pages ต่างๆ

ถ้าเราดึงข้อมูลเหล่านั้นมาใช้ได้น่าจะมีประโยชน์มากทีเดียว โดยเฉพาะด้านการตลาดดิจิตอล ถ้าแบรนด์เข้าใจว่าคนกำลังพูดอะไรเกี่ยวกับสินค้าและบริการของเราบ้างน่าจะดีไม่ใช่น้อย!

สำหรับเพื่อนๆที่อยากดึงข้อมูล facebook page มาวิเคราะห์เล่นๆ? (posts, likes, shares) วันนี้เราจะสอนทำเองง่ายๆ ด้วย Graph API และ package Rfacebook ของ Pablo Barbera


Intro to Facebook Graph API

CODE CHILL
Picture: https://unsplash.com/photos/XMpXzzWrJ6g

ก่อนที่เราจะดึงข้อมูลจาก facebook platform ได้ เราต้องขออนุญาตจากพี่มาร์คก่อนด้วยการขอ access token ซึ่งตัว token จะมีสองแบบคือแบบชั่วคราวใช้ได้ประมาณสองชั่วโมง (short-term token) และแบบใช้ได้ระยะยาวประมาณ 60 วัน (long-term token)

การขอ long-term token จะค่อนข้างยุ่งยากนิดนึง ด้วยเหตุผลด้านความปลอดภัย วันนี้เราจะสอนขอ token แบบชั่วคราวมาทดลองดึงข้อมูลเพจ ง่ายๆแค่สามขั้นตอน

  1. เข้าไปที่เว็บ https://developers.facebook.com/tools/explorer เพื่อขอ access token แบบชั่วคราว กดล๊อกอินด้วย facebook account ของเรา
    • คลิ๊กที่ปุ่ม Get Token → Get User Access Token
  2. เปิดโปรแกรม R แล้วใช้ access token ที่ได้รับมาดึงข้อมูล public page ที่เราต้องการ
  3. วิเคราะห์ข้อมูลง่ายๆ เช่น การหา top 10 posts ที่ได้แชร์เยอะที่สุด

สำหรับเพื่อนๆที่ยังไม่มี R สามารถดาวน์โหลดได้ฟรีจากเว็บ CRAN นี้เลย ลงเสร็จแล้ว copy code ได้ล่างไปลองเล่นใน console ได้เลยฮะ

[Optional] เพื่อความเข้าใจอย่างถ่องแท้ เพื่อนๆสามารถอ่านเพิ่มเติมเรื่อง access token และ Graph API Explorer ของ facebook ได้ที่นี่เลย


Four Lines of Code

แทนที่ token ของเราตรง "AAAAABBBBBCCCCC" และเปลี่ยน PAGE_NAME ในฟังชั่น getPage( ) เป็นชื่อ facebook page ที่เราต้องการ เช่น Google, Apple, MSFTTH (Microsoft Thailand)

n=500 ใน getPage( ) ระบุจำนวน posts ที่เราอยากจะดึงออกมา สามารถเปลี่ยนได้ ลอง test ซัก 100 posts ล่าสุดก่อนก็ได้ เรายังสามารถระบุเวลา timeframe ในการดึงข้อมูลได้ด้วย argument since และ until ลองอ่านวิธีการใช้งานฟังชั่น getPage( ) แบบละเอียดได้ที่นี่

# install package Rfacebook 
install.packages("Rfacebook")

# load library
library(Rfacebook)

# token you get from https://developers.facebook.com/tools/explorer
token <- "AAAAABBBBBCCCCC"

# replace "PAGE_NAME" with FB page you want to scrape
page <- getPage("PAGE_NAME", token, n=500)

เขียนโค้ดแค่ 4 ไลน์ก็สามารถดึงโพสต์จาก public page ทั่วโลกได้แล้ว! เดี๋ยวแอดจะลองดึงข้อมูลจากเพจ DataRockie ของเราออกมา 500 โพสต์เพื่อทำ data analysis ง่ายๆในหัวข้อถัดไป


Basic Data Analysis

Data analysis facebook scraping R
Picture: https://unsplash.com/photos/g1Kr4Ozfoac

โอเค! ตอนนี้เราได้ 500 posts ของเพจ DataRockie ออกมาแล้ว เดี๋ยวเราจะมาลอง transform data ง่ายๆด้วย package dplyr เพื่อหาว่า top 10 โพสต์ที่ได้ยอดแชร์เยอะที่สุดของเพจเราคือโพสต์อะไรบ้าง?

# load dplyr and change page df to tibble 
library(dplyr)
page <- as.tbl(page)

# get top 10 most shared posts
top10share <- page %>% select(message, created_time, likes_count,
comments_count, shares_count) %>%
arrange(-shares_count) %>%
head(10)

เสร็จแล้ว ลอง print(top10share) ใน console เพื่อดูโพสต์ที่ได้แชร์เยอะสุดของเพจ DataRockie 10 อันดับแรก โดย post ที่ได้ยอดแชร์เยอะที่สุด 7520 แชร์คือโพสต์แจกฟรี e-book SPSS คือเหรี้ยรัยยย! (ดูโพสต์ต้นฉบับได้ที่นี่)

# A tibble: 10 x 5
   message                                  created_time likes_count comments_count shares_count
                                                                       
 1 "แจกฟรี !! e-book SPSS คือเหรี้ยรัยยย\n~      2017-09-08T~       4412          492          7520
 2 "แจกฟรี e-book สอนใช้งาน Excel แบบคูลๆ ~   2017-05-18T~       2522          182          3751
 3 "p-value ถูกแบน !! ก้าวเล็กๆของนิตยสารง~     2017-01-23T~       2718          142          2271
 4 "ใครที่เคยเรียนสถิติผ่านๆมาบ้าง ต้องเคย~          2016-10-19T~       3201          72.0         1728
 5 "เฮลโหลลลลลล ตอนใหม่มาแล้วทู๊กโคนน\n\nเ~    2016-06-17T~       1211          46.0         1430
 6 "เฮลโหลลลล สวัสดีเพื่อนๆทุกคน ที่รอโพสต~       2016-06-24T~       865           41.0         1075
 7 "รู้หมือไร่ #โปรดอ่าน\n.\nEinstein เคยบ~      2016-10-17T~        1272          121          1056
 8 "\"เรียนรู้เพื่อความชำนาญ ไม่ใช่เพื่อคะ~          2016-10-23T~        610           17.0         1006
 9 "แชร์เก็บรัวๆ! เรียนฟรีกับรองศาสตราจารย~        2018-04-12T~        542           17.0          833
10 "ทำยังไงสมองถึงจะฉลาดกว่านี้?\nบทความวั~      2017-10-28T~        1109          22.0          787

Show Me Data

“เหนือสิ่งอื่นใด จงแสดงข้อมูล (ด้วย visualization)” กล่าวโดยตำนานของสาย visual analytics อย่าง Edward Tufte

Rplot01
Scatter plot shows relationship between likes and shares from facebook page

เราสามารถทำ data analysis ได้อีกเยอะเลยกับข้อมูลชุดนี้ เช่น การหาความสัมพันธ์ระหว่าง likes_count กับ shares_count ด้วย correlation หรือจะลองทำ scatter plot ด้วย package ggplot2​ ตามโค้ดตัวอย่างด้านล่าง

# load ggplot2 
library(ggplot2)

# make scatter plot
ggplot(page, aes(likes_count, shares_count)) +
geom_point() +
geom_smooth()

จาก plot จะเห็นว่าโพสต์ของเพจ DataRockie ส่วนใหญ่จะกระจุกตัวอยู่ต่ำกว่า 500 likes (เส้าจัยยยย) แต่บางโพสต์ที่ปังๆอย่าง e-book SPSS, e-book Excel, p-value ก็ได้ยอด likes + shares ดีมากเลย


Key Learnings

  • ขอ access token จาก facebook Graph API Explorer
  • ใช้ Rfacebook getPage( ) ในการดึงข้อมูล public page ที่เราต้องการ
  • วิเคราะห์ข้อมูลง่ายๆด้วย dplyr และ ggplot2
  • page จะอยู่รอดต้องทำ content ดีๆออกมาให้แฟนเพจอ่านอย่างต่อเนื่อง
  • จากประสบการณ์ของเพจเรา การเขียนและแจก e-book ฟรีภาษาไทย ได้ผลตอบรับดีเสมอ 555+

เท่านี้ เป็นอันจบ !! Analyze Facebook Page ง่ายอะไรเบอร์นี้ ถ้าเห็นว่าบทความนี้เป็นประโยชน์ อย่าลืมกด like กด share ให้เพื่อนได้อ่านด้วยนะคร้าบ #กราบบบ


อ่านวิธีการใช้งาน Rfacebook ได้เพิ่มเติมที่นี่ โดย Pablo Barbera
https://github.com/pablobarbera/Rfacebook

9 responses to “วิเคราะห์ข้อมูล Facebook Page ด้วย R (2018)”

  1. เจ๋งมากครับทอย.. ขอบคุณมากครับที่มาแชร์ 🙂

    ปล. มี typo อันนึงนะ วงเล็บปิดหายไปหลัง shares_count ในคำสั่ง ggplot()

    1. ขอบคุณคร้าบพี่นน 😀

  2. ขอบคุณที่นำเสนอบทความดีๆครับ ผมมีคำถามนิดนึงคับตรง
    # load dplyr and change page df to tibble
    library(dplyr)
    page <- as.tbl(page)
    # get top 10 most shared posts
    top10share % <<% หมายถึงอะไรคับ ตรงนี้ เรากำลังใช้ function จาก dplyr ใช่ไหมครับ (พอดี เป็น libraryที่ยังไม่ได้ศึกษา และ ถ้าใช่ มีเว็บแนะนำตัวpackage นี้ไหมครับ )
    select(message,
    created_time,
    likes_count,
    comments_count,
    shares_count) %>%
    arrange(-shares_count) %>%
    head(10)

    1. %>% คือ Pipe operator ใน R ครับ ใช้เชื่อมโค้ดเข้าด้วยกัน

      สำหรับ dplyr ใช้ง่ายมากครับ ลองอ่านเพิ่มได้ที่บล๊อกของเราอันนี้ครับ https://datarockie.blog/2018/03/26/r-for-data-analysis/

      หรือเข้าไปที่เว็บนี้เพื่ออ่านเพิ่มได้ฮะ https://dplyr.tidyverse.org/

  3. สามารถ ดึงข้อมูล โดยไม่ต้องระบุ ชื่อเจ้าของเฟสหรือเพจ นั้นๆได้ไหมครับ
    ผมอยากได้รูปภาพจากคนไทยทั้งประเทศ มาวิเคราะห์
    ทำML

  4. พี่คะอยากทราบว่าทำได้เฉพาะเพจที่เราเป็นแอดมินหรือเพจอื่นๆได้มั้นคะ

  5. ถ้าเราอยากเซฟข้อมูลที่ดึงมาเป็น txt file เพื่อไปทำการวิเคราะห์ ทำยังไงคะ

  6. […] R เป็นแล้ว ลองดู tutorial […]

  7. […] tutorial วันนี้มาลองดูวิธีการเขียน R เพื่อดึงข้อมูล post, comment, like, share จาก facebook page ที่เราเป็นแอดมิน code ง่ายๆแค่ไม่กี่บรรทัดด้วย package Rfacebook โดย Pablo Barbera [github] ลองอ่านบทความเมื่อปีที่แล้วของเราได้ที่ Facebook Page Analysis Using R (2018) […]

Leave a Reply