Cup E Analysis Using Rfacebook

Cup E Analysis Using RfacebookChaiyasit BunnagBlockedUnblockFollowFollowingMar 14สวัสดีค้าบผู้อ่าน เนื่องจาก Facebook เปิดให้ดึง API เพื่อดึงข้อมูลในเพจต่างๆ มาใช้ได้ฟรี เพียงแค่ลงชื่อใช้งานเป็น Facebook Developer ก็สามารถดึงมาใช้เพื่อวิเคราะห์เพจต่างๆ ได้เรยย เมื่อรู้ว่าทำได้ผมก็ไม่รอช้าเข้าไปดึงเพจที่คิดว่า ผช ไทยหลายคนน่าจะกด Follow กันอยู่ นั่นคือ Cup E ????สิ่งที่ผมทำคือดึงข้อมูลแล้วมาทำ Analysis ใน R เพื่อตอบคำถามต่อไปนี้ครับ :ใครกลับมาเป็นนางแบบซ้ำให้กับ Page มากที่สุดใครคือนางแบบที่มียอด Likes, Shares, Comments มากที่สุดใครคือช่างกล้องที่กลับมาฝากผลงานมากที่สุดช่วงความถี่ของจำนวน Likes, Shares, Comments ที่สาวๆ ได้รับกันนางแบบคนไหนทำงานกับช่างกล้องหลากหลายที่สุดData ที่ผมดึงมาใช้ตั้งแต่วันที่ 1 มกราคม 2561–10 มีนาคม 2561 ครับ โดยขึ้นตอนการทำประกอบด้วย : การดึงข้อมูล > การ Clean ข้อมูล > การทำ Visualisationเรามาเริ่มกันเลยครับ :’)#ดึงข้อมูลจาก Page Cup Eลำดับแรกเราต้องลงทะเบียนเป็น Facebook Developer ได้ที่ลิ้งค์นี้ครับ :Facebook for DevelopersFacebook Platform helps developers build, grow and monetize their businessdevelopers.facebook.comหลังจากนั้นให้เราไปที่ Add Products แล้วกด + เลยครับเลือก Product ชื่อว่า Facebook Login เมื่อแอดเรียบร้อยจะเข้ามาอยู่ใต้ Products ของเราครับหลังจากนั้นใต้ Product Facebook Login ให้เลือก Settings แล้วทำการ Add Site URL : ตามรูปครับเมือ Add แล้วกด Save Changes ได้เลยครับคราวนี้เราต้องมาทำให้ R มันคุยกับ Facebook API รู้เรื่องครับโดย Download Packages Rfacebook และ RCurl เหล่านี้ (ส่วน tidyverse ผมใช้ในการ Clean และ Visualise ครับ)Install แล้วก็เรียกใช้ Packages ครับต่อมาให้กลับไปยังที่ Facebook Developer เพื่อเอาเลข App ID และ App Secret ตามรูปครับ :ไปที่ Settings > Basicหลังจากได้เลขแล้วให้เราเอามาใส่ใน Script เพื่อยืนยันตัวใน R Script ครับ โดยใช้ Code ดังรูปข้างล่างนำ App Id & App Secret มาวาง ผมได้ฝาก Script การยืนยันตัวไว้ใน Object ที่ชื่อว่า fb_oauthหลังจากกด Run ไปแล้วจะขึ้นหน้าตาฝั่ง Console ตามรูปล่างครับหลังจากกด Enter แล้วเราจะเด้งไปยัง Browser เพื่อรับแจ้งว่าเราได้ทำการยืนยันและเชื่อมต่อเรียบร้อยตามรูปครับถ้ายืนยันสำเร็จบน Browser จะขึ้นข้อความแบบนี้ครับ ????ต่อมาให้เราทำการ Get Data มาจาก Page ครับ โดยเป้าหมายของเราคือ Cup E โดยใช้ Script ด้านล่างนี้ครับผมทำการ Store Data ไว้ใน Object CupE โดย Token ให้เราใส่เป็น Object ที่เราฝากไว้ตอนยืนยันตัวครับ สำหรับ n ผมใส่ให้มันเยอะๆ เพราะไม่รู้ว่ามันมีจำนวน Post ตั้งแต่ต้นปีเท่าไร แต่มันจะดึงมาให้แค่เท่าที่มีนะครับ หลังจากนั้นรอมัน Run จน Fetch Data เสร็จ สำหรับชื่อ Page ที่ถูกต้องนั้นเราสามารถดูได้ตามหลัง Domain Facebook ครับ เช่น https://www.facebook.com/cupemagเมื่อใช้คำสั่ง View(Data)เราจะเห็นว่ามันถูกเก็บให้อยู่ในรูปของ Table เรียบร้อยครับหน้าตาของ Data ที่เรา Get มาได้ครับ ซึ่งจะวิเคราะห์เลยไม่ได้นะครับเพราะ Column “post” แม่งโคดเละ 555 (เลข 5 มีน้ำตาซ่อนอยู่ ????)#Clean Dataผมเริ่มจากการเปลี่ยนชื่อ Column ก่อนครับ โดยใช้ dplyrซึ่งเป็น Package ย่อยในตัวแม่ tidyverseเปลี่ยนชื่อตามชอบเรยยหลังจากนั้นผมจัดการไอ้การเว้นบรรทัดที่ R มันอ่านเป็น..ครับจงหายไปเจ้า?.ต่อมาผมจะ Extract เอาชื่อนางแบบออกมาโดยใช้ tidyrซึ่งเป็น Package ย่อยใน tidyverseครับแต่ชื่อที่ถูก Split ออกมายัง Column Model มันยังปนกับชื่อช่างภาพอยู่ดังนั้นผมจะ Split ชื่อช่างภาพไปอยู่อีก Column นึงครับ โดยใช้ Regex เข้ามาช่วยในโพสต์สิ่งที่ Indicate ชื่อช่างภาพคือ Photo ครับ แต่ไม่ใช่ทุกโพสที่จะใช้คำว่า Photo ????เรายังไม่ได้ชื่อช่างภาพมานะครับ เราต้องตัดพวก Chunks หรือ Text ที่ไม่เกี่ยวข้องออกไปด้วย ซึ่งผมใช้ Regex ในการตัด ที่ยกมาเป็นส่วนหนึ่งของการตัดคำนะครับ แต่ไม่ใช่ทั้งหมดนะ ตามรูปด้านล่างเรยยเราต้องค่อยๆ ทำความเข้าใจว่า Pattern ไหนใน Column เป็นตัวแบ่งระหว่าง Information ที่เราต้องการและไม่ต้องการต่อมาก็ถึงขั้นตอนทำความสะอาดน้องๆ กันนะครับ (หมายถึง Clean Data นะ อิอิ) โดยหลังจาก Clean ตากล้องเสร็จผมก็ฝากไว้ใน Object ใหม่ ที่ชื่อว่า CupE.extNames3ที่จริงมีการคลีนน้องๆ เกิดขึ้นอีกเยอะเลยครับ เราต้องค่อยๆ ทำความเข้าใจรูปแบบของ Text ใน Column นั้นไปเรื่อยๆ ถ้าหยิบมาหมดเด๋วยาว 555** หลังจาก Cleaned Data เสร็จแล้วให้เรา Export ออกมาเป็น .csv ใน Directory ก่อนนะครับ ไม่งั้นถ้า Restart คอมพ์ใหม่ Object หายหมด เพราะเราต้องไป Fetch Data จาก Facebook ใหม่นั่นเองครับ (โดนมากับตัวเลยครับ ????) **Export เป็น .csv เก็บไว้เรยย#Visualisation#ใครกลับมาเป็นนางแบบซ้ำให้กับ Page มากที่สุดผมเริ่มจากการ Subset ข้อมูลโดยใช้ Count การนับ Row ที่เจอชื่อนางแบบซ้ำ ก่อนทำ Chart ครับCount of Comebacks คือจำนวนการกลับมาถ่ายต่อมาก็เป็นหน้าตาหลังจาก Visualise โดยใช้ ggplot2ซึ่งเป็นหนึ่งใน Package ย่อยของ tidyverseคนที่กลับมาถ่ายเยอะสุดคือน้อง Pichana Yoosukน้อง Pichana Yoosukงดงามมากคั้บ ????#ช่างกล้องที่กลับมาฝากผลงานบ่อยที่สุดScript ในการ RunVisualise ออกมาได้ …Gee Nikon คือคนที่กลับมาฝากผลงานกับ Cup E มากสุด#แล้วน้องคนไหนได้ Likes, Shares, Comments เยอะสุดผมใช้ชุดนี้เป็น Template แล้วเปลี่ยนตัวแปรที่ต้องการหาค่าออกมาครับVisualise ออกมาเป็น …เนื่องจากกลับมาถ่ายเยอะน้อง Pichana Yookul เลยครองจำนวนไลค์เยอะสุดไปรร ~~มาดูกันว่าถ้าเปลี่ยนมาเป็นแชร์เป็นน้องคนเดิมป่าวน๊าา ????คราวนี้เป็นน้อง Jajah Wantranaน้อง Jajah Wantranaอยากเป็นใบบัวจุง ????แล้วใครน๊าาได้ Comments เยอะสุดจากพี่ๆ ใน Pageคราวนี้เป็นน้อง สุกัญญา กออินน้อง สุกัญญา กออินเชื่อว่าพี่ๆ คงแพ้ชุด นศ.กันมากมายย ????#ช่วงความถี่ของจำนวน Likes, Shares, Comments ที่สาวๆ ได้รับกันในแต่ละโพสต์คราวนี้มาดูกันว่าแต่ละโพสต์ของน้องๆ นั้นไปกองกันที่จำนวน Likes, Shares, Comments ที่จำนวนเท่าไรกันDistribution Code Templateผมปรับ binwidth เพื่อให้เหมาะสมแต่ละช่วงของแต่ละ Metric นะครับ โดย Likes binwidth = 1,000, Shares binwidth = 100, Comments binwidth = 50Likes Distributionจะเห็นว่าจำนวนไลค์ของแต่ละโพสต์จะไปกระจุกตัวอยู่ที่ 4–7 พัน (binwidth แต่ละแท่งคือ 1,000) และจะเห็นได้ว่าข้อมูลไม่วิ่งเป็น Normal Distribution หรือมีพวก Extreme Values อยู่ค่อนข้างเยอะShares Distributionจะเห็นว่ามีน้องๆ บางคนนั้นคนแชร์กันเป็นหลักหมื่นต่อโพสต์ หรือ Right-Skewed เป็นอย่างมาก ชาร์ตนี้ผมปรับ Binwidth อยู่ที่ 100Comments DistributionComments ก็เป็นไปใน Pattern เดียวกันคือเบ้ขวา เพราะมีน้องๆ บางคนนั้นคนเม้นท์กันเป็นพันต่อโพสต์ ชาร์ตนี้ผมปรับ Binwidth = 50 เพื่อให้เห็น Distribution ชัดขึ้นเมื่อทำ Shapito Test เพื่อเช็คว่ามันไม่เป็น Bell Curve จริงๆ นะ ผมเลยเขียน function shapiro.test + format adjust p-value ทีเดียวเลยครับ ได้เป็นรูปด้านล่างทำงานง่ายๆ ครับ เมื่อ Test เสร็จแล้วให้ Turn P-value เป็นตัวเลขธรรมดาไม่เป็นเลขฐานวิทยาศาสตร์Findings คือ ทั้ง Likes, Shares, Comments นั้นวิ่งไม่เป็น Normal Distribution โดยทั้งสามตัวให้ P-value < 0.05 หมดเลยครับ ล้ม Null Hypothesis ที่ว่าแต่ละตัวนั้น Normally Distributedเมื่อ Distribution มันเอียงไปทางขวามากผมจึงเลือก Trim ข้อมูลที่ 20% เพื่อหาค่าเฉลี่ย โดยเขียน Function ขึ้นมาตามรูปล่างครับเขียนง่ายๆ เลยครับ Trim ข้อมูลที่ 20% แล้วค่อยหาค่า Mean หลังจากนั้นให้ Round เป็นจำนวนเต็ม ต่อมาผมจำกัด Vector ให้ Length อยู่แค่ Numeric สุดท้ายใช้ map_dbl() เพื่อทำ Loop Function ที่เขียนไปทุก Column ครับค่าเฉลี่ยของ Engagement Metric ต่างๆAverage Likes ที่สาวๆ ได้รับต่อโพสต์ = 5,756Average Shares ที่สาวๆ ได้รับต่อโพสต์ = 423Average Comments ที่สาวๆ ได้รับต่อโพสต์ = 79#นางแบบคนไหนทำงานกับช่างกล้องหลากหลายที่สุดเริ่มแรกผมทำการสร้าง Table เพื่อจับคู่น้องๆ กับช่างกล้องด้วย Script ด้านล่างครับเพื่อทำการหาว่าน้องคนนี้ได้ร่วมงานกับช่างภาพคนนี้กี่ครั้งหน้าตาของ Table จากตารางนี้หมายความว่าถ้ามีชื่อน้องปรากฏอีกครั้งในอีก Row คือเป็นการร่วมงานกับช่างภาพอีกคนครับหลังจากนั้นมาดูว่าใครทำงานกับช่างกล้องหลายคนที่สุดอาจเป็นไปได้ว่าน้อง Pichana Yoosuk กลับมาถ่ายให้กับ Cup E มากที่สุด จึงมีโอกาสได้ร่วมงานกับช่างภาพหลายท่านครับและนี่คือนามช่างภาพที่น้อง Pichana Yoosuk เคยร่วมงานด้วยครับสรุปการดึง API เพียงแค่คุณเป็นคนเล่น Facebook ก็สามารถทำได้ครับ และเรื่องการเขียน Code เป็นเรื่องที่ฝึกทีหลังได้ แต่สิ่งที่สำคัญกว่าคือ ความรู้พื้นฐานทางสถิติ และความรู้ในสายอาชีพคุณ ยิ่งคุณรู้สิ่งเหล่านี้เยอะ คุณก็จะสามารถตั้งคำถามสำคัญได้อีกมากมาย และค่อยใช้ Tool ไม่ว่าจะเป็น Python, R ในการหาคำตอบครับ ผมก็เป็นในหนึ่งคนที่จบไม่ตรงสาย (ภาษาศาสตร์) แต่ผมเชื่อว่าถ้าคุณตั้งใจแล้วล่ะก็ ฝึกและเก่งได้แน่นอนครับ สู้ๆ ครับทุกคล ???.????Consistency หรือความสม่ำเสมอในการฝึกฝนนั้นสำคัญมากครับAnswer the questions that make an impact on the business, and don’t make things complicated — Jonathan Ma, Ex-facebook Data Scientist. More details

Leave a Reply