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:
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.
Pada tutorial selanjutnya, saya akan mencoba membuat tutorial untuk menyimpan data stream Twitter ke dalam sebuah file.
Referensi:
- https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline
- https://medium.com/better-programming/twitter-sentiment-analysis-15d8892c0082