Salah satu bagian yang menarik untuk dipelajari saat bermain-main dengan data adalah bagaimana kita bisa mendapatkan data dari media sosial. Apalagi saat ini, feed media sosial begitu dinamis, contohnya Twitter. Karaktertistik satu akun dengan akun yang lain akan sangat berbeda dan unik. Dalam satuan kurang dari satu detik, kita bisa mengumpulkan begitu banyak data twit sebuah akun. Data-data tersebut nantinya bisa diolah untuk mendapatkan berbagai macam insights.

Pada tutorial kali ini saya menggunakan data-data status Twitter. Namun, sebelum kita mengolah data tersebut lebih jauh, kita harus tahu lebih dulu bagaimana cara mengekstraksi atau mengambil atau scraping atau crawling data yang ada di Twitter agar bisa dibaca oleh Python. Bisa dalam bentuk format teks biasa maupun dalam bentuk dataframe.

Nah, untuk menjalankan tutorial kali ini, saya menggunakan bahasa pemrograman Python versi 3.7.6. Jika Anda menggunakan versi lain, misal versi Python 2.x, kemungkinan ada beberapa sintaks yang error, sehingga Anda perlu menyesuaikan sendiri.

Untuk memudahkan eksekusi kode program, saya menggunakan peranti jupyter notebook. IDE ini biasanya sudah bundling jika Anda menginstall aplikasi Anaconda. Bila belum, Anda bisa mengikuti tutorial instalasi yang ada di tautan ini. Saya anggap, Anda yang ingin mau mempraktikkan tutorial ini sudah familiar dan paham bagaimana menjalankan script Python dan bagaimana cara menginstal library/modul pada sistem operasi masing-masing.

Modul utama yang diperlukan pada tutorial kali ini adalah Tweepy. Tweepy merupakan modul API yang dibuka oleh Twitter untuk mengambil data-data yang ada di Twitter via bahasa pemrograman Python. Untuk mengakses API tersebut, maka diperlukan metode otentikasi agar penggunaan data tersebut bisa dipertanggungjawabkan.

Saat ini Tweepy hanya mengizinkan maksimal 200 twit dalam satu request dengan perintah api.user_timeline (yang juga akan digunakan pada tutorial ini). Sebetulnya Twitter mengizinkan lebih dari 200 twit, lebih tepatnya maksimal 3200 twit. Jika ingin mendapatkan lebih dari 200 twit, maka perlu menggunakan fungsi cursor pada user_timeline.

Berikut langkah dan penjelasan script untuk mengambil status Twitter.

1. Deklarasi library Tweepy

import tweepy
from tweepy import OAuthHandler

2. Untuk mendapatkan izin otentikasi ke API Twitter, perlu dituliskan terlebih dahulu kode aksesnya. Kode akses ini bisa didapatkan atau request melalui tautan ini. Pada contoh berikut ganti tulisan <masukkan kode di sini> sesuai dengan kode yang Anda dapatkan dari tautan tersebut.

access_token = "<masukkan kode di sini>"
access_token_secret ="<masukkan kode di sini>"
consumer_key ="<masukkan kode di sini>"
consumer_secret="<masukkan kode di sini>"

3. Script di bawah ini diperlukan untuk melakukan membuat objek otentikasi dengan memasukkan kode token pada poin 2

authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret) 
authenticate.set_access_token(access_token, access_token_secret) 
api = tweepy.API(authenticate, wait_on_rate_limit = True)

4. Bagian selanjutnya adalah melakukan scraping 200 twit terakhir (jumlah maksimum yang diizinkan atau boleh diganti ke jumlah yang lebih kecil). Jika diperhatikan, di bagian ini kita bisa memasukkan username akun Twitter yang akan diambil datanya melalui variabel screen_name. Misalkan pada contoh ini, akun yang akan diambil datanya adalah akun @jokowi.

posts = api.user_timeline(screen_name="jokowi", count = 200, lang ="en", tweet_mode="extended")

5. Untuk menampilkan 5 twit terakhir gunakan fungsi perulangan for

print("Berikut ini adalah 5 twit terakhir dari akun @jokowi:\n")
i=1
for tweet in posts[:5]:
    print(str(i) +') '+ tweet.full_text + '\n')
    i= i+1

Jika dituliskan secara penuh, maka kode penuhnya sebagai berikut:

# Deklarasi kebutuhan modul/library 
import tweepy
from tweepy import OAuthHandler

# Inisialisasi kode akses token dan kode secret akses token
access_token = "<masukkan kode di sini>"
access_token_secret ="<masukkan kode di sini>"
consumer_key ="<masukkan kode di sini>"
consumer_secret="<masukkan kode di sini>"

# Membuat objek otentifikasi
authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    
# Memasukkan kode akses token dan kode secret akses token
authenticate.set_access_token(access_token, access_token_secret) 
    
# Membuat objek API ketika melewatkan informasi otentifikasi
api = tweepy.API(authenticate, wait_on_rate_limit = True)


# Mengekstrak 200 twit terakhir dari user Twitter
posts = api.user_timeline(screen_name="jokowi", count = 200, lang ="en", tweet_mode="extended")

# Mencetak atau menampilkan 5 twit terakhir
print("Berikut ini adalah 5 twit terakhir dari akun @jokowi:\n")
i=1
for tweet in posts[:5]:
    print(str(i) +') '+ tweet.full_text + '\n')
    i= i+1

Script di atas jika dijalankan akan menghasilkan tampilan sebagai berikut:

Teks Twitter

Menampilkan Tweets dalam bentuk DataFrame

Apa itu dataframe? Dataframe merupakan struktur data dasar yang berbentuk koleksi kolom berurutan dengan nama dan jenis tertentu. Struktur dataframe ini seringkali digunakan oleh library Panda untuk keperluan analisis data. Melalui dataframe, seorang ilmuwan data dapat dengan mudah menampilkan sebuah file dalam bentuk tampilan tabel. Selanjutnya, ia bisa mengolah data tersebut dengan berbagai macam fungsi yang tersedia.

Berhubung pada bahasan sebelumnya kita sudah bisa mendapatkan daftar twit dalam bentuk teks biasa, maka untuk mengubah daftar tersebut menjadi tabel diperlukan dua deklarasi library tambahan, yaitu modul Panda dan modul re.

Sebagai informasi, modul Panda merupakan modul yang sangat populer dalam bahasa pemrograman Python yang dimanfaatkan untuk mengolah data. Library ini bersifat open source. Didalamnya menyediakan fungsi-fungsi struktur data dan analisis data, mudah digunakan, serta mempunyai kinerja yang bisa diandalkan.

Modul re merupakan library yang digunakan untuk memfilter data melalui regular expression. Beberapa karakter yang tidak diperlukan pada data-data yang sudah dikumpulkan bisa dipangkas sedemikian rupa berdasarkan aturan yang dibuat. Misalnya jika twit mengandung hashtag, mention, atau hyperlinks, kita bisa dengan leluasa menghapus bagian-bagian tersebut agar dataframe bersih (clean).

Langkah-langkah untuk membuat dataframe sebagai berikut:

1. Tambahkan deklarasi kedua library di atas pada script sebelumnya sehingga menjadi seperti ini:

import tweepy
from tweepy import OAuthHandler
import pandas as pd
import re

2. Di bagian paling bawah, tambahkan baris berikut untuk membuat sebuah dataframe dengan kolom bernama Tweets

df = pd.DataFrame([tweet.full_text for tweet in posts], columns=['Tweets'])

3. Bagian selanjutnya yaitu membuat fungsi cleanTxt untuk menghapus mentions, hashtags, RT, dan hyperlink

def cleanTxt(text):
    text = re.sub('@[A-Za-z0–9]+', '', text) # Menghapus @mentions
    text = re.sub('#', '', text) # Menghapus '#' hash tag
    text = re.sub('RT[\s]+', '', text) # Menghapus RT
    text = re.sub('https?:\/\/\S+', '', text) # Menghapus hyperlink
    return text

4. Bagian ini digunakan untuk mengaplikasikan fungsi cleanTxt pada dataframe Tweets

df['Tweets'] = df['Tweets'].apply(cleanTxt)

5. Bagian ini digunakan untuk menampilkan dataframe 10 twit terakhir yang sudah dibersihkan

df.head(5)

Jika dituliskan secara penuh, maka kode penuhnya sebagai berikut:

# Deklarasi kebutuhan modul/library 
import tweepy
from tweepy import OAuthHandler
import pandas as pd
import re

# Inisialisasi kode akses token dan kode secret akses token
access_token = "64621366-PMOtX6xplVTdHKYbxZmDljcZZn9gRBtr1lIFEkxfe"
access_token_secret ="CphwR8ebAevqkjgpcu4W3KqDygyzBix15eTmWa6TLhLTQ"
consumer_key ="ig4LJejtAwvPfZcvTISDfi5An"
consumer_secret="adBYZ74Da4Ff8sk20y6S09551HxSuKArwIKfhcrNkqE9m44U91"

# Membuat objek otentifikasi
authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    
# Memasukkan kode akses token dan kode secret akses token
authenticate.set_access_token(access_token, access_token_secret) 
    
# Membuat objek API ketika melewatkan informasi otentifikasi
api = tweepy.API(authenticate, wait_on_rate_limit = True)


# Mengekstrak 200 twit terakhir dari user Twitter
posts = api.user_timeline(screen_name="jokowi", count = 200, lang ="en", tweet_mode="extended")

# Mencetak atau menampilkan 5 twit terakhir
print("Berikut ini adalah 5 twit terakhir dari akun @jokowi:\n")
i=1
for tweet in posts[:5]:
    print(str(i) +') '+ tweet.full_text + '\n')
    i= i+1
    
# Membuat dataframe dengan kolom bernama Tweets 
df = pd.DataFrame([tweet.full_text for tweet in posts], columns=['Tweets'])


# Membuat fungsi untuk membersihkan twit
def cleanTxt(text):
    text = re.sub('@[A-Za-z0–9]+', '', text) # Menghapus @mentions
    text = re.sub('#', '', text) # Menghapus '#' hashtag
    text = re.sub('RT[\s]+', '', text) # Menghapus RT
    text = re.sub('https?:\/\/\S+', '', text) # Menghapus hyperlink
    return text


# Proses membersihkan dataframe menggunakan fungsi cleanTxt
df['Tweets'] = df['Tweets'].apply(cleanTxt)

# Menampilkan 5 twit terakhir yang sudah dibersihkan dalam bentuk dataframe
df.head(5)

Script di atas jika dijalankan akan menghasilkan tampilan sebagai berikut. Bisa dibandingkan tampilan data teks biasa dengan format dataframe.

Dataframe Twitter

Pada tutorial selanjutnya, saya akan mencoba membuat tutorial untuk menyimpan data stream Twitter ke dalam sebuah file.

Referensi:

Komentar