Analisis Tweet — Analisis Entitas

Mr. I
kasta
Published in
5 min readDec 11, 2017

Makassar, Irsyad — Akhirnya menulis juga setelah dapat koneksi yang dari semalem gak bisa connect dengan baik. Hasil crawling juga udah ada dan sudah siap untuk dianalisis. Oh iyah sekedar berbagi juga, ini adalah bentuk kepo yang positif. Mungkin ada yang gak suka dengan orang yang kepo tapi beginilah kalau jadi orang yang kepo. Buat apa seperti ini? Untuk mengetahui influence seseorang. Bagus banget kan untuk pemilihan? Kalau gak mau berhubungan dengan politik bisa juga dimanfaatkan untuk HRD saat melakukan recruitement. Daripada interview panjang lebar, daripada test psikologi yang banyak, lebih baik kepo orangnya langsung via crawling ini. Menghemat biaya jelas, dan kalau interview biasanya banyak formalitas dan banyak yang tidak diketahui dari kandidat. Setidaknya untuk proses awal sebelum interview, interviewer sudah banyak tau aktivitas dan concern kandidatnya. Tapi untuk ke arah itu tutorial ini tidak mengocernya, hanya teknik awal saja. Kesimpulan akhir analisis entitas dapat digabungkan dengan teknik lain dan data dari sumber lain seperti social media lain dan artikel lain tentang target.

Untuk analisis di artikel kali ini saya menggunakan studi kasus Ridwan Kamil dan Najwa Shihab. Kenapa mereka berdua? Karena saya sangat ngefans, dan teman — teman pembaca bisa juga dilakukan ke gebetan atau siapapun yang mau dikepoin. Setidaknya dengan cara ini mengurangi waktu untuk survey tentang gebetan melalui orang lain, gak perlu juga stalker lama — lama dan ketahuan kalau stalker. Oh iyah bagi yang gak tau entitas itu apa, entitas itu subjek yang akan kita kepoin. Bisa orang, bisa perusahaan, bisa badan, atau apapun itu bentuknya. Dan kita bisa melakukan ini untuk semua social media yang digunakan target. Gak cuma Twitter, untuk social media lain akan saya buat di artikel yang terpisah.

Oh iyah, berikut screenshot hasil crawling kemarin. Sebelum analisis lanjut, sekilas dari hasil crawling tersebut sangat jelas perbedaannya, hasil collecting data akun Twitter NajwaShihab ukuran filenya hanya sekitar 9MB dan akun Twitter ridwankamil sebesar 15MB. Dari ukuran file saja kita dapat mengetahui bahwa aktivitas social media khususnya Twitter untuk kedua entitas tersebut adalah Ridwan Kamil paling banyak aktivitas. Reaksi pengguna Twitter lebih tertarik pada Ridwan Kamil dibanding NajwaShihab. Nah hal tersebut bukan patokan seberapa terkenal atau tertariknya publik pada kedua pubic figure tersebut. Kita harus melakukan analisis lebih lanjut lagi.

Hashtag Frequency

Hashtag frequency untuk mengetahui hashtag apa saja yang ada dan menghitung frequency dari hashtag tersebut. Kenapa perlu menganalisis Hashtag? Karena hashtag biasanya digunakan untuk melakukan campaign. Dengan mengetahui hashtag apa saja kita dapat menarik kesimpulan sederhana mengenai seberapa aktif user atau entitas tersebut melakukan campaign. Dan frequency hashtag untuk mengetahui seberapa besar reaksi publik terhadap campaign yang diadakan atau didukung oleh entitas tersebut. Untuk melakukan analisis atau mengetahui tag dan frekuensinya, gunakan code berikut.

import sys
from collections import Counter
import json
def get_hashtags(tweet):
entities = tweet.get('entities', {})
hashtags = entities.get('hashtags', [])
return [tag['text'].lower() for tag in hashtags]
if __name__ == '__main__':
fname = sys.argv[1]
with open(fname, 'r') as f:
hashtags = Counter()
for line in f:
tweet = json.loads(line)
hashtags_in_tweet = get_hashtags(tweet)
hashtags.update(hashtags_in_tweet)
for tag, count in hashtags.most_common(20):
print("{}: {}".format(tag, count))
Hasil yang diperolah dengan menggunakan code di atas hanya mencari tweet yang ada hashtagnya. Untuk menjalankan code di atas gunakan syntax berikut pada command prompt.python twitter_hashtag_frequency.py filename.jsonlSebagai contoh studi kasus saya berikut hasilnya.c:\Users\admin\Desktop\crawling>python twitter_hashtag_frequency.py user_timeline_NajwaShihab.jsonl
matanajwa: 134
catatannajwa: 59
5thmatanajwa: 39
dutabacaindonesia: 29
najwashihab: 27
dutabaca: 22
matanajwaonstagebatu: 21
vcc: 19
menjadinajwa: 16
salamliterasi: 15
catatantanpatitik: 15
halah: 15
mn: 14
coyg: 11
kalem: 11
matanajwaonstage: 10
dibaliklayar: 8
ceritaduasahabat: 8
joged: 8
websummit2017: 7
Dari hasil di atas kita dapat melihat bahwa topik postingan dari NajwaShihab yang mendapat banyak reaksi dari pengguna Twitter adalah tentang Mata Najwa dan Duta Baca. Sedangkan ridwankamil mostly tentang Bandung.c:\Users\admin\Desktop\crawling>python twitter_hashtag_frequency.py user_timeline_ridwankamil.jsonl
persibday: 16
205bdg: 13
ynwa: 11
mea: 11
bandung: 10
hariantikorupsi: 10
bahagiaitusederhana: 9
magribmengaji: 7
bdg206: 7
gpspelajar: 6
rio2016: 6
infobdg: 6
gakpakekorupsi: 6
prung: 6
haripancasila: 5
indonesia: 4
nuhunkangemil: 4
sampurasun: 4
stunningbandung: 3
bandungjuara: 3

Hashtag Statistics

Ikhtisar dari hasil code di atas adalah hashtag yang paling sering digunakan oleh masing - masing user tersebut, akan tetapi kita perlu melakukan analisis lebih lanjut dan sedikit mendalam. Kita dapat menghasilkan statistik yang lebih terdeskriptif untuk memberikan ikhtisar atau rangkuman tentang bagaiman hashtag digunakan dalam tweet pada akun - akun tersebut. Berikut code yang dapat digunakan untuk mengetahui hasilnya.import sys
from collections import defaultdict
import json
def get_hashtags(tweet):
entities = tweet.get('entities', {})
hashtags = entities.get('hashtags', [])
return [tag['text'].lower() for tag in hashtags]
def usage():
print("Usage:")
print("python {} <filename.jsonl>".format(sys.argv[0]))
if __name__ == '__main__':
if len(sys.argv) != 2:
usage()
sys.exit(1)
fname = sys.argv[1]
with open(fname, 'r') as f:
hashtag_count = defaultdict(int)
for line in f:
tweet = json.loads(line)
hashtags_in_tweet = get_hashtags(tweet)
n_of_hashtags = len(hashtags_in_tweet)
hashtag_count[n_of_hashtags] += 1

tweets_with_hashtags = sum([count for n_of_tags, count in hashtag_count.items() if n_of_tags > 0])
tweets_no_hashtags = hashtag_count[0]
tweets_total = tweets_no_hashtags + tweets_with_hashtags
tweets_with_hashtags_percent = "%.2f" % (tweets_with_hashtags / tweets_total * 100)
tweets_no_hashtags_percent = "%.2f" % (tweets_no_hashtags / tweets_total * 100)
print("{} tweets without hashtags ({}%)".format(tweets_no_hashtags, tweets_no_hashtags_percent))
print("{} tweets with at least one hashtag ({}%)".format(tweets_with_hashtags, tweets_with_hashtags_percent))
for tag_count, tweet_count in hashtag_count.items():
if tag_count > 0:
percent_total = "%.2f" % (tweet_count / tweets_total * 100)
percent_elite = "%.2f" % (tweet_count / tweets_with_hashtags * 100)
print("{} tweets with {} hashtags ({}% total, {}% elite)".format(tweet_count,
tag_count,
percent_total,
percent_elite))
Berikut sintaks untuk menjalankan code di atas pada command prompt.
python twitter_hashtag_stats.py user_timeline_<username>.jsonlc:\Users\admin\Desktop\crawling>python twitter_hashtag_stats.py user_timeline_NajwaShihab.jsonl
2578 tweets without hashtags (80.56%)
622 tweets with at least one hashtag (19.44%)
421 tweets with 1 hashtags (13.16% total, 67.68% elite)
53 tweets with 3 hashtags (1.66% total, 8.52% elite)
112 tweets with 2 hashtags (3.50% total, 18.01% elite)
5 tweets with 6 hashtags (0.16% total, 0.80% elite)
6 tweets with 5 hashtags (0.19% total, 0.96% elite)
25 tweets with 4 hashtags (0.78% total, 4.02% elite)
c:\Users\admin\Desktop\crawling>python twitter_hashtag_stats.py user_timeline_ridwankamil.jsonl
2821 tweets without hashtags (88.52%)
366 tweets with at least one hashtag (11.48%)
317 tweets with 1 hashtags (9.95% total, 86.61% elite)
45 tweets with 2 hashtags (1.41% total, 12.30% elite)
4 tweets with 3 hashtags (0.13% total, 1.09% elite)
Menurut saya hasil di atas lebih jelas secara statistik karena sudah ada persentasenya. Dari hasil di atas kita dapat mengetahui bahwa sebagian besar tweet tidak menggunakan hashtag. Jumlahnya sangat jauh dengan tweet yang terdapat hashtagnya. Code di atas terdapat dua tipe perhitungan. Perhitungan pertama menghitung dari total tweet sedangkan perhitungan kedua menghitung dari total tweet yang mengandung setidaknya ada satu hashtag (disebut elite). Persentase tweet dengan satu hashtag mendominasi dari semua tweet yang mengandung hashtag.Ada dua hal yang belum saya bahas di artikel tentang SNA Twitter ini. Yaitu Streaming dan NLP. Kedua hal tersebut gak terlalu susah yang penting kreatif. Streaming harus kreatif menentukan keyword yang sesuai dengan topik SNA dan NLP harus pintar - pintar menentukan kata negatif dan positif. Sebagai contoh kata "Anjing". Kata tersebut mengandung dua arti yaitu negatif dan positif. Positif jika dikategorikan sebagai Hewan dan negatif jika dikategorikan sebagai kata benda. Itu baru dari segi kategori kata, kalau mau ditinjau dari kalimat, kata tersebut dapat menjadi beberapa macam konotasi. Misalnya, "Anjing, lu keren banget lah" yang berarti pujian. Dan kedua misalnya tweet seperti ini, "Anjing lah baru juga masuk udah kritik sana sini" yang konotasinya negatif. Terus dari segi penulisan, orang Indonesia termasuk kreatif, banyak menyingkat dan berkreasi dengan kata. Kata "Anjing" biasanya ditulis dengan "Njing", "Anying", "Anjiiiiing" dst. Yang seru dan menariknya NLP di Indonesia itu bahasa daerah dan dialeg, belum Bahasa Sunda, satu kata banyak arti, Misalnya saya Bahasa Sundanya adalah Abi, Abdi, Urang, Kuring, Uing, Aing. Terus makan Bahasa Sundanya adalaha Dahar, Tuang, Nyatu, Neda, dan lain - lain. Penggunaan dialeg di Indonesia ada Mi, Ji, Pi, Deh (Sulawesi Selatan), Kah (Kalimantan), Bah (Medan), dan banyak lagi.Makanya sampai sekarang belum ada kamus data untuk NLP studi kasus Indonesia. Ada yang buat tapi belum mengcover semua kebutuhan dan belum dapat diterapkan dalam semua studi kasus.

--

--

Mr. I
kasta
Editor for

Code using various programming language commonly based on JVM (Java, Scala, Groovy) with DBMS (Oracle, PostgreSQL & MySQL)