ลอง Visualize Data จาก Social Network กัล

Blog นี้ดองไว้นานเหมือนกัน ขึ้นโครงไปเรื่อยๆ ค่อยเติมมาเกือบเดือน ถึงเสร็จครับ มาเขียน Blog เก็บไว้ เพราะผมงงครับ 55555 กับวิชา SNA ครับ ติดมาอยู่ 2 Week และก็ไม่มีเวลามาหาว่าผิดตรงไหน การบ้านท่วมตัวครับ เข้าเรื่องกันดีกว่าครับ

สิ่งที่ต้องมี

  • Python - ผมใช้ Python 3 ครับ
  • Editor - ผมใช้ VSCode (จริงๆ  ใช้ Jupyter ใน Anaconda ก็ได้นะครับ ครบครันดี)
  • Internet - เอาไว้เก็บข้อมูลจาก Social

เก็บข้อมูล

  • ลองเล่น Graph API  ของ Facebook กันก่อนครับ
  • มัน Powerful มากเลยครับ สามารถลอง Query แบบต่างๆได้เลย
  • หลังจากเล่นมาสักพักและ ลองกำหนดโจทย์กันดีกว่าครับ
  • Code Python ที่เขียนครับ (อันนี้ปรับมาจาก Code ตัวอย่างของ อ สุกรีครับ  Blog รายวิชา SNA)
import requests
import json

ACCESS_TOKEN = 'Your Token'
base_url = 'https://graph.facebook.com/v2.10/CH3Thailand'
#เปลี่ยน URL จาก ME ไปเป็น อย่างอื่นก็ได้ เช่น workpointTV
fields = 'posts{created_time,likes{name}}'

url = '%s?fields=%s&access_token=%s' % (base_url,fields,ACCESS_TOKEN)

content = requests.get(url).json()

list_of_like = []

list_of_feed = [f for f in content['posts']['data']]
try:
    while True:
        for f in list_of_feed:
            print(f['created_time'])
            if 'likes' in f:
                list_of_like += [(ll['id'],f['id']) for ll in f['likes']['data']]
                f_content = {}
                f_content['paging'] = {'next':''}
                if 'next' in f['likes']['paging']:
                    url = f['likes']['paging']['next']
                else:
                    url = ''
                while url != '':
                    print('Getting next likes of '+f['id'])
                    f_content = requests.get(url).json()
                    list_of_like += [(ll['id'],f['id']) for ll in f_content['data']]
                    if 'next' not in f_content['paging']:
                        url = ''
                    else:
                        url = f_content['paging']['next']
                    print(url)
        if 'posts' in content:
            if 'paging' not in content['posts'] or 'next' not in content['posts']['paging']:
                break;
            url = content['posts']['paging']['next']
        elif 'data' in content:
            #if 'next' not in content['paging']:
            if len(content['data']) == 0 or 'next' not in content['paging']:
                break
            url = content['paging']['next']
        print('Getting next feed')
        content = requests.get(url).json()
        list_of_feed = [f for f in content['data']]

except Exception as ex: 
    print(ex.message)
finally:
    f=open('all_likes_CH3Thailand','w')
    for t in list_of_like:
        f.write(t[0]+','+t[1]+'\n')
    f.close()
  • โดย Code ชุดนี้ มันเก็บข้อมูลเก็บ csv มี 2 Column นะครับ ที่ทำแบบนี้ เพราะ เอาไป Visualize Data ผ่านตัว Gephi
  • อ๋อ และก็อย่าลืมเติมหัว Column เป็น Source กับ Target ตามรูปนะครับ

มาลอง Visualize กัน

  • เปิด Gephi >> New Project โลดด
  • เลือก Import Spreadsheet
  • เอาไฟล์ที่ได้จากขั้นตอนที่แล้วมาใส่ครับ อย่าลืมดูว่าเป็น Edges Table ครับ
  • มาที่ Overview Conifg ตามรูปเลยครับ โดยในครั้งนี้เลือกเอา Algorithm OpenOrd มา Visulize Data ครับ
  • ผลลัพธ์ตอน Preview