Analisis Sentimen Twitter Untuk Politik

Bagaimana saya bisa mendapatkan 2.5jt tweet seputar pilpres 2019 dan apa isinya

Andri Oktavianto
Jan 30 · 7 min read
2.5jt tweet yang siap diolah dan divisualisasikan dengan Kibana

7 Januari 2018, 19:22

Saya sedang mencoba menggunakan Tweepy untuk mengambil data Twitter, selain karena belum pernah mencoba mengambil data dari Twitter, saya ingin menguji hipotesis: “Apakah memungkinkan untuk mengenali real-time event hanya dari data Twitter?”

A: “Rald, aku wes berhasil ambil data individual account, ngefilter keywords tertentu pada negara tertentu, bahasa tertentu pake Tweepy.”

Chat diatas saya kirim ke salah satu teman dekat saya, namanya Erald. Dia juga sedang belajar menyelami samudra ‘data’. Kami berdiskusi panjang tentang Twitter, NER (name entity recognition), hingga politik. Karena chatting ini, dari semula ingin menguji hipotesis real-time event detection, saya malah ingin mencoba mengulik percakapan di Twitter yang berkaitan dengan pilpres mendatang.

E: “Misal, daerah mana yang sering ngetweet Prabowo, daerah mana yang sering ngetweet Jokowi

Erald memberi saya ide untuk mining data interaksi politik di Twitter. Data ini bisa digunakan untuk memprediksi ‘kasar’ outcome pilpres 2019, dan ini merupakan latihan sekaligus percobaan yang bagus untuk saya.

Tulisan ini akan membahas petualangan mendapatkan data percakapan seputar pilpres 2019 di Twitter, memprosesnya, memvisualisasikan, dan melakukan analisis sentimen.


Let’s get started

Awalnya saya berniat menggunakan Python dan Tweepy untuk menambang data percakapan seputar pilpres 2019 di Twitter, namun setelah 3 hari belajar cara kerja ELK dan tahu jika data Elasticsearch dapat diexport menjadi .csv, saya langsung mencoba memodifikasi data pipeline yang sudah ada secara sederhana sesuai kebutuhan untuk mengambil data dari Twitter menggunakan ELK stack.
ELK: Elasticsearch, Logstash, and Kibana

Kata kunci yang saya gunakan untuk menambang data percakapan politik di Twitter

Setelah menentukan keyword, barulah Logstash bisa berjalan untuk mengambil tweet yang bermuatan politik, spesifiknya pilpres 2019. Setiap detiknya, setiap tweet yang mengandung salah satu kata atau hashtag yang telah saya tentukan, maka tweet tersebut otomatis akan saya dapatkan.

Struktur data yang didapatkan dari Twitter antara lain: isi tweet, mention, hashtags, jumlah retweet, jumlah favorite, jumlah followers, tanggal tweet tersebut dibuat, dll.

10 Januari 2019, 20:16 — Awal mining
18 Januari 2019, 19:38 — Terakhir mining

2.5jt tweet yang bermuatan politik berhasil didapatkan. Data dari tweet tersebut kemudian saya visualisasikan dengan menggunakan Kibana, dengan Kibana kita bisa membuat visualisasi dengan mudah tanpa harus melakukan proses cleaning maupun membuat baris kode untuk visualisasi seperti halnya pada Jupyter Notebook.

#1 Distribusi tweet

Distribusi tweet mulai tanggal 10 Januari - 18 Januari 2019

Sejak 10 Januari 2019, terjadi tren peningkatan tweet yang bermuatan politik
18 Januari 2019: 464.159 tweet
17 Januari 2019:
752.449 tweet — debat capres cawapres pertama tahun ini
16 Januari 2019:
283.990 tweet
15 Januari 2019:
339.866 tweet —Pidato Kebangsaan Pak Prabowo

#2 Lokasi ngetweet

Hanya sedikit tweet yang memiliki atribut lokasi a.k.a ‘dimana saya ngetweet’, dan jumlah yang sedikit tersebut terpusat di regional Jabodetabek

#3 Distribusi hashtags

Distribusi hashtags ini bisa berguna sebagai keyword target audience untuk kepentingan iklan portal berita maupun media online, seperti detik, tirto, dsb.
(Kalau ada orang media baca ini dan tertarik untuk menerapkannya, kontak saya ada di bawah, hehe)

#4 Hashtags yang paling sering digunakan

Tiga peringkat teratas hashtags yang paling sering digunakan merupakan hashtags yang berkaitan dengan Debat Pilpres 2019.

#5 Akun yang paling sering ngetweet tema ‘pilpres 2019’

Beberapa akun pada grafik diatas terindikasi kuat sebagai bot.

#6 Paling Banyak di Mention dan Retweet

Akun yang sering diretweet berarti memiliki potensi tuk menjadi buzzer politik dan ternyata mayoritas akun tersebut merupakan kubu oposisi. Menarik untuk memetakan sentimen & kata kunci yang sering digunakan ketika memention kubu petahana dan kubu oposisi.

#7 Proporsi Retweet

Rata-rata lebih dari 50% tweet dengan hashtags populer merupakan retweet.

Masih ada satu lagi yang menarik untuk dianalisis: sentimen.

Sentiment Analysis: the process of computationally identifying and categorizing opinions expressed in a piece of text, especially in order to determine whether the writer’s attitude towards a particular topic, product, etc. is positive, negative, or neutral.

Into the Unknown

Ketika memulai keisengan ini, selain mengetahui apa itu analisis sentimen secara konseptual, saya hanya tahu sedikit tentang cara melakukan analisis teks.

Dengan spirit bonek, pertama saya mencoba googling mencari tutorial untuk melakukan analisis sentimen menggunakan ELK tanpa harus ngoding-ini-itu.

Ketemu? Iya.
Berhasil diterapkan? Tidak.
Kenapa? Karena saya sudah terlanjur menambang data terlebih dahulu, sedangkan struktur indeks Elasticsearch (ELK) tidak dapat dirubah dengan mudah seperti layaknya MySQL.

Oke, untungnya dari awal saya sudah memperkirakan ini. Butuh data dalam format .csv untuk bisa menganalisis & memvisualisasikan menggunakan Jupyter Notebook. Data twitter sudah masuk ke Elasticsearch kemudian saya export dalam bentuk .csv melalui interface Kibana.

Apakah berhasil? Berhasil sih.. tapi hanya 50rb’an data yang terexport, sedangkan seharusnya ada 2.5jt data. Coba utak atik sana-sini dan tidak berhasil, saya tidak menyerah. Akhirnya nemu cara untuk export jutaan data tersebut ke .csv menggunakan Logstash. Done!

Selanjutnya saya mencari tutorial cara menganalisis sentimen dengan menggunakan Python. Beberapa tutorial menyarankan menggunakan Keras dan algoritma machine learning, yang mana lumayan kompleks (bagi saya), hingga akhirnya ada tutorial yang sederhana dengan menggunakan TextBlob. YES!!

Setelah dicoba, saya sedih.. karena ternyata TextBlob hanya bisa memproses bahasa inggris dan perancis.. Nyari tutorial lagi. Nemu NLTK alias natural language toolkit. Tetapi NLTK berbeda dari TextBlob, sebelum bisa mengklasifikasikan sentimen dari suatu tweet, NLTK perlu input terlebih dahulu. Bahasa kerennya supervised learning.

Dengan keterbatasan pengetahuan tentang “how to do good sentiment analysis”, saya mencoba membuat training set berisi kalimat positif dan negatif yang dibuat dengan modal intuisi. Training set tersebut digunakan untuk melatih NLTK agar dapat mengklasifikasi sentimen suatu tweet. Metode klasifikasi yang digunakan yaitu Naive Bayes.

Sebelum mulai menggunakan NLTK untuk mengklasifikasi 2.5jt tweet, mari kita tes dulu hasil trainingnya.

Terlepas dari metode yang saya gunakan ini sudah benar atau belum, dengan training set seadanya, NLTK berhasil mengklasifikasikan teks diatas dengan benar. 2.5jt tweet siap dibabat habis!

Masalah utama ketika mengklasifikasi 2.5jt tweet adalah processing time yang luama banget. Lebih dari 6 jam tidur hingga saya bangun pun prosesnya masih belum selesai. Dengan spesifikasi laptop intel i3 dan RAM 4GB, satu-satunya cara yang bisa saya lakukan untuk mempercepat processing time adalah dengan melakukan optimasi.

Finally, proses yang semula memakan waktu > 6 jam, sekarang hanya butuh waktu < 1 jam.

Dari 2.5jt tweet,
Jumlah tweet dengan sentimen positif: 358.129 / 15.4%
Jumlah tweet dengan sentimen negatif: 1.965.953 / 84.6%

Sekarang mari kita lihat kata yang sering muncul pada tweet dengan sentimen negatif & positif

Word cloud tweet dengan sentimen negatif

Menarik untuk memperhatikan kata-kata dan ungkapan berikut dalam kumpulan kata negatif diatas: pelunasan, HAM, klaim, deklarasi. Interpretasi saya: Banyak masyarakat yang kecewa, tidak puas, ataupun marah karena utang negara yang besar, pelunasan utang yang banyak, hak asasi manusia yang kurang diperhatikan, dan deklarasi dukungan alumni PT yang mengatasnamakan ikatan alumni padahal belum tentu seluruh alumni mendukung.

Word cloud tweet dengan sentimen positif

Tweet positif mengandung kata-kata seperti: pengalaman, kerja, bersama, terpercaya. Dalam interpretasi saya, masyarakat cenderung percaya bahwa kandidat ideal mereka adalah orang yang memiliki pengalaman, kerjanya terbukti nyata, merangkul seluruh kalangan untuk bersama membangun Indonesia, dan terpercaya alias jujur alias tidak korupsi.

Bagaimana jika kita visualisasi kata tanpa memperhatikan sentimen?

Word cloud tanpa mempertimbangkan sentimen

Yap, debat capres cawapres 17 Januari 2019 menjadi topik yang paling sering diperbincangkan oleh warga Twitter.

Kesimpulan

Twitter telah menjadi battleground politik Indonesia dengan berisi lelucon, pendapat, serangan politik, propaganda, hoax, dan banyak lagi. Namun apakah Twitter merupakan real battleground? Mengingat jumlah bot (akun dengan followers yang sangat sedikit, baru dibuat sekitar November-Desember tahun lalu terindikasi kuat sebagai akun bot) lumayan banyak. Jawabannya masih belum diketahui.

Analisis sentimen yang saya buat bekerja lebih baik untuk mengklasifikasi tweet negatif ketimbang tweet positif. Masalah muncul ketika tweet tersebut bersifat negasi, sarkastik, atau memiliki referensi atau konteks yang sulit.


Terimakasih telah membaca artikel ini, semoga bermanfaat bagi para pembaca. Jika Anda memiliki pertanyaan, Anda bisa berkomentar disini. Atau jika Anda ingin bertanya secara personal, Anda bisa menghubungi saya di:

Facebook: Andri Oktavianto
LinkedIn: Andri Oktavianto
E-mail: andri16@mhs.mb.its.ac.id

Have a good day!

Andri Oktavianto

Written by

Undergraduate Student at Institut Teknologi Sepuluh Nopember (ITS) | andri16@mhs.mb.its.ac.id

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade