วิธีปิด Autoplay วีดีโอของ Facebook ไม่ให้เล่นเอง
November 23, 2019
อย่าทำแบบนี้! ถ้าอยากประสบความสำเร็จในการทำ Social Marketing
January 1, 2021

ไม่ชอบลองดี แต่อยากลอง R

 

หลายๆคนคงเคยได้ยินกันมาบ้างหรือบางคนอาจจะเคยใช้งานหรือใช้งานอยู่ก็เป็นได้ สำหรับผมเองได้ยินเจ้าภาษา R นี่มาสักพักนึงแล้วแต่ไม่เคยได้ลองเล่นดูซักที วันนี้เลยเจียดเวลาที่มีเศษเสี้ยว แว้บมาลองเล่นดูสักหน่อย เพราะช่วงนี้เจ้าภาษา R กำลังมาแรงแซงโค้งอย่างมาก และมีแนวโน้มจะบูมมากขึ้นเรื่อยๆ

แล้วภาษา R คืออะไร

R นั้นเป็นภาษาที่น้องของพ่อใช้สื่อสาร.. ถุ้ยย! นั่นมัน อา เจ้าภาษา R มันคือภาษาโปรแกรม ที่เหมาะกับการประมวลผลเชิงสถิติ  ซึ่งเพียบพร้อมไปด้วยการประมวลผลแบบต่างๆไว้มากมาย ไม่ว่าจะเป็น Linear / Non-linear modeling, Classification, Clustering, หรือ Time-Series analysis เป็นต้น และมันเป็น Opensource สามารถใช้งานได้ Free ซึ่งเกิดมานานม้ากกกกกมากกแล้ว ตั้งแต่ปี 1993 โดยได้พื้นฐานมาจากภาษา S เอ้า R.. S นะไม่ใช่ GRAMMY (ตึงงงง..) ขอไม่กล่าวถึงภาษา S เดี๋ยวจะงงกันไปใหญ่เนอะ ภาษา R รองรับทั้งบน Linux, Windows, และ OSX เป็นที่นิยมอย่างแพร่หลายในกลุ่มนักวิจัย จึงทำให้มันเติบโตและมี Community ที่กว้างมากในปัจจุบัน

เริ่มต้นเขียน R กัน

เรื่อง Syntax ภาษา R นั้น ค่อนข้างจะแตกต่างจากภาษาที่ผมเคยๆเขียนมาอยู่พอสมควร แต่ก็ไม่ยากเกินกว่าจะปรับความเข้าใจได้ และเนื่องด้วยมี package ที่สามารถเรียกใช้งานได้มากมาย และสามารถโหลดมาติดตั้งเพิ่มได้อย่างง่ายดาย ผ่านคำสั่งง่ายๆเพียงบรรทัดเดียว จึงทำให้การเขียนภาษา R นั้นง่ายดายมากยิ่งขึ้น

ตัวอย่างนี้จะไม่ลงลึกในส่วน Basic การเขียนภาษา R โดยละเอียดนะครับ จะทดลองเขียนสคริปท์ขึ้นมาเล่นๆดูตัวนึง และจะอธิบายถึงฟังก์ชันที่ใช้ในตัวอย่างเท่านั้น ส่วน Basic ของภาษา R อื่นๆ สามารถเรียนด้วยตนเองได้ที่ TryR CodeSchool ซึ่งทำไว้เข้าใจง่ายดีครับ สามารถทำตามไปได้ทีละ step

ปล. แนะนำว่าลองเข้าไปเล่น TryR ใน CodeSchool อย่างน้อย 2 บทแรกก่อนจะดูตัวอย่างต่อ เพื่อความเข้าใจมากยิ่งขึ้น

ก่อนอื่นต้องโหลดสิ่งที่จะใช้ในตัวอย่างนี้กันมาก่อน

– ติดตั้ง R จาก mirror ของไทย หรือเข้าจากเว็บหลักได้ที่ r-project.org
   ขั้นตอนลงไม่ยุ่งยากอะไร เป็นตัว installer คลิกๆ ลงตาม default setting ไปได้เลยครับ

– (optional) RStudio เป็น IDE สำหรับเขียนภาษา R ซึ่งจริงๆตัว R จะมี RGui มาให้ในตัวแล้ว แต่ถ้าใช้ RStudio จะสะดวกสบายกว่า และสวยใสไฮโซ เหมาะกับวัย ด้วยนะ
ขั้นตอนการลงก็เหมือนลงโปรแกรมปกติ ลงตาม default ได้เลยครับ

สำหรับบทความนี้จะลองเขียนตัวอย่างที่มีโจทย์คือ

 

“ดึงทวีตจาก Twitter แท็ก #movietwit และนำแท็กที่อยู่ในทวีตเหล่านั้นมาแสดงข้อมูลรวมกันเป็นกราฟวงกลม”

 

ฟังดูอาจจะคิดว่า โอ้โห เพิ่งหัดเขียนครั้งแรก จะเขียนขนาดนี้เลยเหรอ.. ตอนท้ายบทความคุณอาจจะเปลี่ยนความคิดใหม่ก็ได้นะ

1. เริ่มต้น

เริ่มต้นด้วยการเปิด RStudio ขึ้นมาโลด

หน้าตา IDE โล่งสบายตา เพราะหลักๆก็เป็นแค่ Console ในการรันคำสั่งเท่านั้น ส่วนอื่นๆเดี๋ยวจะไปพูดถึงตอนที่รันสคริปท์กัน


2. สร้างสคริปท์ใหม่

สร้างไฟล์สคริปท์ขึ้นมาใหม่ โดยกด File > New File > R Script (หรือกด Ctrl + Shift + N สำหรับ Windows)

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


3. Hello World

แต่ก่อนจะไปเขียนโจทย์ที่กำหนดไว้ เรามาลอง Hello World กันซักนิดก่อน เพื่อแน่ใจว่าเรารันได้หรือไม่ โดยใช้คำสั่งนี้

cat(“Hello TaroWorldTaro!”)

จากนั้นกด Source ที่ด้านบนขวาของแถบนี้ เพื่อทำการรันทั้งสคริปท์ จะได้ข้อมูลออกมาที่แถบ Console ด้านล่างดังภาพ เรียบร้อย


4. ติดตั้ง packages

เอาล่ะ ได้เวลาเริ่มเขียนสคริปท์จากโจทย์ โดยสิ่งที่จำเป็นคือ package ที่จะใช้สำหรับเชื่อมต่อ Twitter โดยผมจะใช้ตัวที่ชื่อว่า twitteR และ package อื่นๆที่จะใช้ในตัวอย่าง วิธีติดตั้งทำได้ง่ายดาย เพียงสั่งด้วยคำสั่งนี้เท่านั้น สามารถพิมพ์คำสั่งลงในช่อง Console ได้เลยและกด Enter เพื่อสั่งรัน

install.packages(c(“devtools”, “rjson”, “bit64”, “httr”, “base64enc”))

library(devtools)

install_github(“geoffjentry/twitteR”)

และรอติดตั้ง packages สักครู่หนึ่ง


5. สร้าง Twitter App

เมื่อติดตั้ง packages ที่จำเป็นเสร็จเรียบร้อยแล้ว ก่อนจะไปเริ่มเขียนโค้ดส่วนติดต่อ Twitter เราจะต้องมี apps ที่ไว้สำหรับเชื่อมต่อกับ Twitter เสียก่อน ให้เข้าไปที่ https://apps.twitter.com/ และสร้าง app ขึ้นมาใหม่ 1 ตัว (โดยที่ account Twitter ของคุณจะต้องผูกเบอร์มือถือไว้แล้ว จึงจะสร้าง app ได้) ในส่วน Callback URL สามารถเว้นว่างไว้ได้ เมื่อสร้างเรียบร้อยแล้วจะได้ดังภาพ

 


6. สร้าง Twitter access token

เข้าไปที่แถบ Keys and Access Tokens และ คลิก Generate Access Token ด้านล่างขึ้นมา 1 ตัว เราจะใช้ ค่าเหล่านี้ในการเชื่อมต่อจากสคริปท์ของเรา

หมายเหตุ หากมีปัญหาไม่สามารถเชื่อมต่อ twitter จากสคริปท์ได้ ให้ทำการ modify app permissions ให้เป็น Read, Write and Access direct messages และ regenerate token ใหม่อีกครั้งครับ


7. โค้ดจากโจทย์

คราวนี้มาดูโค้ดที่ทำโจทย์ข้อนี้กัน

library(stringr)

library(twitteR)

โดยการเรียก library({ชื่อlib}) จะเป็นการเรียกใช้ lib นั้นๆ ตัว stringr จะใช้ตอนตัดแท็กออกมาจากข้อความทวีต และ twitteR สำหรับติดต่อและดึงทวีตครับ

consumerKey <- ‘กรอก consumer key จาก twitter’

consumerSecret <- ‘กรอก consumer secret จาก twitter’

accessToken <- ‘กรอก access token จาก twitter’

accessSecret <- ‘กรอก access secret จาก twitter’

setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)

ข้างต้นคือการกำหนดค่าเก็บไว้ในตัวแปร 4 ตัว คือ consumerKey, consumerSecret, accessToken, accessSecret (ลูกศร <- ไม่ใช่ผมชี้บอกนะครับ แต่เป็น syntax การ assign ค่าของภาษา R) และนำไปส่งให้ฟังก์ชันสำหรับติดต่อกับ twitter ชื่อ setup_twitter_oauth เป็นอันเสร็จสิ้นขั้นตอนการเชื่อมต่อ oauth กับ twitter ครับ (ง่ายจุง)

s <- searchTwitter(‘#movietwit’, n=400)

หลังจากที่เชื่อมต่อกับ twitter ได้แล้ว สามารถเรียกใช้ฟังก์ชัน searchTwitter(“คำค้น”, n=จำนวน) จากนั้นนำผลลัพธ์ที่ได้จาก twitter มาเก็บไว้ในตัวแปร s (จะได้เป็น list ของทวีตที่ดึงมาทั้งหมด)

tweets <- sapply(s, function(x) if(x$getIsRetweet()==F) { x$getText()})

ทำการตัดทวีตที่มาจากการรีทวีตออกไป (ไม่งั้นจะมีทวีตซ้ำรัวๆ) โดยใช้ฟังก์ชัน sapply และดึงข้อความจากทวีตออกมา เฉพาะทวีตที่ไม่ใช่การรีทวีต แล้วเก็บไว้ในตัวแปร tweets (ไม่งงเนอะ)

s1<-str_extract_all(tweets, “#(?!movietwit)[:alnum:]*”)

นำข้อความทวีตมาดึงเอาเฉพาะแท็กโดยใช้ str_extract_all ดึงมาเฉพาะข้อความที่มี # และไม่ใช่ movietwit (เพราะมีทุกอันนั่นแหละ) จากนั้นนำมาเก็บไว้ในตัวแปร s1

f<-unlist(s1)

เนื่องด้วยข้อความทวีตที่ได้ออกมา บางข้อความอาจมีหลายแท็กในทวีต ทำให้ structure ของ list s1 ตอนนี้เป็น list ที่มีขนาดแต่ละช่องไม่เท่ากันได้ (บางอันมี 1 บางอันมี 3 เป็นต้น) ทำให้ไม่สามารถนำไป plot เป็นกราฟเลยได้ จึงต้องใช้คำสั่ง unlist เพื่อรวมข้อมูลทั้งหมดให้ออกมาจาก list เพื่อนำมาเก็บไว้ในตัวแปร f โดยจะเก็บเป็น list ชั้นเดียวแล้วตอนนี้

pie(table(f), main=”Trends จาก #movietwit”)

เมื่อมีข้อมูล f แล้ว สามารถนำไปแปลงเป็นรูปแบบตารางได้ด้วยคำสั่ง table เพื่อให้พร้อมที่จะนำไปใช้กับฟังก์ชันวาดกราฟวงกลม pie ได้ทันที

และนี่คือโค้ดทั้งหมดของตัวอย่างนี้ครับ

library(stringr)
library(twitteR)

consumerKey <- ‘กรอก consumer key จาก twitter’
consumerSecret <- ‘กรอก consumer secret จาก twitter’
accessToken <- ‘กรอก access token จาก twitter’
accessSecret <- ‘กรอก access secret จาก twitter’

setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)

s <- searchTwitter(‘#movietwit’, n=400)
tweets <- sapply(s, function(x) if(x$getIsRetweet()==F) { x$getText()})
s1<-str_extract_all(tweets, “#(?!movietwit)[:alnum:]*”)
f<-unlist(s1)
pie(table(f), main=”Trends จาก #movietwit”)


8. ผลลัพธ์

คราวนี้เรามาลองรันสคริปท์นี้กันดูว่าผลลัพธ์ที่ได้จะออกมาเป็นอย่างไร โดยกดที่ source ด้านบนขวาของแถบสคริปท์ครับ จะได้ผลลัพธ์แสดงอยู่ในแถบ plot ด้านขวาล่าง (หากรันแล้ว Console ถามว่าต้องการต่อแบบ direct auth หรือไม่ ให้ตอบ 1 ครับ)

นี่ละครับ ความง่ายของการประมวลผลข้อมูลด้วยภาษา R ที่มีสิ่งต่างๆมาให้ใช้อยู่เยอะพอสมควรอยู่แล้วอยากรู้ว่า R มีคำสั่งอะไรมาให้อีกบ้าง สามารถเข้าไปดูได้ใน Rdocumentation หรือจาก Help ในโปรแกรม RStudio เองก็ได้เช่นกัน

อันนี้เป็นเพียงแค่การทดลองเล่นอะไรนิดๆหน่อยๆเท่านั้น สำหรับภาษา R ยังมีความสามารถมากมายกว่านี้อีกหลายขุมทีเดียว ยังไงก็ลองหาข้อมูลเพิ่มเติมแล้วเล่นกันดูนะครับ กับภาษา R ซึ่งเป็นภาษาที่กำลังมาแรงมากขึ้นเรื่อยๆในช่วงนี้ ใครเขียนสคริปท์เจ๋งๆก็เอามาโชว์กันบ้างนะครับ แล้วพบกับ เผือกเดฟ ใหม่ในคราวถัดไปนะครับ บายยย 😀


ข้อมูลบางส่วนจาก Rstudio, Wikipedia, R-Project