Belajar Menganalisis Sentimen Netizen dengan IBM Bluemix Twitter Insights

Yana Permana 6 Desember 2016

Belajar Menganalisis Sentimen Netizen dengan IBM Bluemix Twitter Insights

Apa kabar programmer se-nusantara? Hari ini penulis mau membahas tentang cara menggunakan layanan Twitter Insights milik IBM Bluemix lho. Layanan Twitter Insights bakal berkaitan sama masalah di kehidupan sehari-hari. Contohnya, anda ingin tahu dan penasaran dengan sentimen banyak orang melalui media sosial mengenai suatu topik, peristiwa, dan sebagainya.

Mengapa sentimen analisis melalui media sosial menjadi penting? Analisis sentimen media sosial dapat menjadi sumber informasi dan dapat memberikan wawasan yang berguna dalam beberapa poin yaitu: 1) menentukan strategi pemasaran; 2) meningkatkan keberhasilan kampanye; 3) meningkatkan pesan produk; 4) meningkatkan layanan pelanggan; dan lain-lain. Singkatnya, jika dilakukan dengan benar, analisis sentimen melalui media dapat meningkatkan bisnis Anda.

Baca juga: Belajar Menganalisa Karakter Seseorang dengan IBM Bluemix Watson Personal Insights

Namun, jika anda membuat keputusan menggunakan data analisis sentimen yang salah, hasilnya bisa menjadi bencana. Untuk menghindari hal tersebut, anda bisa mencoba layanan Twitter Insights yang merupakan produk IBM Bluemix. Twitter Insights menggunakan algoritma Deep Natural Language Processing yang mampu melakukan analisis sentimen secara akurat.

Twitter Insights itu apa sih?

Layanan Twitter Insights menyediakan sentimen, pendapat, penilaian dan hal lainnya dalam berbagai bahasa. Layanan Twitter Insights bekerja berdasarkan algoritma pengolahan deep natural language dari IBM Social Media Analytics. Pengolahan data stream Twitter didukung secara real-time dan dapat dikonfigurasi melalui serangkaian requests dengan kata kunci yang diinginkan. Adapun layanan Twitter Insights juga menyediakan Rest API yang memungkinkan anda untuk menyesuaikan (customize) pencarian anda dan dihasilkan dalam format JSON.

Baca juga: Cara Mudah Membuat Aplikasi Android dengan IBM MobileFirst Services Starter

Fitur Twitter Insights itu apa saja sih?

  • Data Twitter
    Mencari konten Twitter melalui Twitter Decahose (10% sampel acak Tweets) dan aliran PowerTrack (akses 100% Tweet). Konten disimpan dengan frekuensi yang sering dan diindeks agar pencarian menjadi dinamis dan cepat.
  • PowerTrackPenyaringan konten Twitter secara real-time diatur dengan PowerTrack. Anda bisa membuat, mengedit, melakukan agregasi, atau menghapus rule dan track sesuai dengan konten yang diinginkan dan mengoptimalkan kinerja aplikasi anda. Akses ke aliran PowerTrack baru tersedia untuk pengguna Entry Plan saja.
  • Enrichments
    Selain melakukan analisis sentimen, layanan Twitter Insights juga memberikan informasik yang kaya secara real-time melalui aliran Twitter Decahose. Misal, informasi gender dan lokasi permanen penulis (didefinisikan dengan negara, negara bagian, dan kota) dan sentimen yang spesifik (misalnya, positif, negatif, ambivalen, atau netral untuk Tweets dalam bahasa Inggris, Jerman, Perancis, dan Spanyol).
  • Kepatuhan Pemeriksaan
    Twitter Insights juga melakukan validasi terhadap hasil pencariannya melalui REST API yang berguna dalam memberi informasi apakah tweet tertentu masih dapat diakses di Twitter.

Bagaimana cara menggunakan layanan Twitter Insights?

Tahap 1 Daftar Akun BlueMix

Jika anda belum memiliki akun, silahkan daftar di website resmi Twitter Insights. Pilih Start Free in BlueMix dan isi form yang tersedia. pi002

Periksa inbox email untuk verifikasi akun anda.pi003

Tahap 2: Login ke IBM Bluemix

Kunjungi halaman Login IBM Bluemix, kemudian masukan identitas akun anda.

 

pi004

Anda akan diarahkan ke halaman dasbor IBM Bluemix. Pilih Create Application.

pi013

Anda akan diarahkan pada halaman katalog IBM Bluemix.

pi006

Pilih Insights for Twitter.

ti-001

Anda akan diarahkan ke halaman Insights for Twitter.

ti002

Anda juga bisa melihat dan memilih Plan yang diinginkan. Pilih Create.

ti003

Anda akan diarahkan ke halaman pengaturan Twitter Insights.

ti005

Untuk penggunaan Twitter Insights, pilih Service Credentials.

ti006

Salin Credentials dibawah ini.

ti007
{
  "username": "3d72e4ca-3767-440f-9da1-275d71e1c495",
  "password": "sdeaIAA0mE",
  "host": "cdeservice.mybluemix.net",
  "port": 443,
  "url": "https://3d72e4ca-3767-440f-9da1-275d71e1c495:sdeaIAA0mE@cdeservice.mybluemix.net"
}

Pencarian Tweets

Untuk melakukan pencarian tweets, anda bisa menggunakan perintah dibawah ini.
curl -s https://{Username}:{Password}@cdeservice.mybluemix.net:443/api/v1/messages/search?q={Query} | python -m json.tool > tweets.json
curl -s https://"3d72e4ca-3767-440f-9da1-275d71e1c495":"sdeaIAA0mE"@cdeservice.mybluemix.net:443/api/v1/messages/search?q=Indonesia | python -m json.tool > tweets.json
Adapun module JSON Python digunakan agar output yang dihasilkan lebih rapi. ti008 ti009

Twitter Insights memberikan output yang sangat rinci, anda bisa melihat berbagai properti dan atribut yang berkaitan dengan tweet tersebut.Dibawah ini merupakan salah satu hasil output yang telah dihasilkan.

{
    "related": {
        "next": {
            "href": "https://cdeservice.mybluemix.net:443/api/v1/messages/search?q=Indonesia&from=100&size=100"
        }
    },
    "search": {
        "current": 100,
        "results": 10732854
    },
    "tweets": [
        {
            "cde": {
                "author": {
                    "location": {
                        "city": "Jakarta",
                        "country": "Indonesia",
                        "state": "Jakarta Raya"
                    },
                    "maritalStatus": {
                        "isMarried": "unknown"
                    },
                    "parenthood": {
                        "isParent": "unknown"
                    }
                }
            },
            "cdeInternal": {
                "compliance": {
                    "isActive": true,
                    "userProtected": false
                }
            },
            "message": {
                "actor": {
                    "displayName": "Muhammad rissa",
                    "favoritesCount": 7,
                    "followersCount": 186,
                    "friendsCount": 220,
                    "id": "id:twitter.com:577113228",
                    "image": "https://pbs.twimg.com/profile_images/535339948153380864/wD9UbZ8s_normal.jpeg",
                    "languages": [
                        "en"
                    ],
                    "link": "http://www.twitter.com/muhammadrissa",
                    "links": [
                        {
                            "href": null,
                            "rel": "me"
                        }
                    ],
                    "listedCount": 1,
                    "location": {
                        "displayName": "Jakarta ",
                        "objectType": "place"
                    },
                    "objectType": "person",
                    "postedTime": "2012-05-11T10:41:50.000Z",
                    "preferredUsername": "muhammadrissa",
                    "statusesCount": 5965,
                    "summary": null,
                    "twitterTimeZone": "Jakarta",
                    "utcOffset": "25200",
                    "verified": false
                },
                "body": "@infoLengkap apa bedanya sama di Indonesia?",
                "favoritesCount": 0,
                "generator": {
                    "displayName": "Twitter for Android",
                    "link": "http://twitter.com/download/android"
                },
                "gnip": {
                    "language": {
                        "value": "id"
                    },
                    "profileLocations": [
                        {
                            "address": {
                                "country": "Indonesia",
                                "countryCode": "ID",
                                "locality": "Jakarta",
                                "region": "Jakarta Raya"
                            },
                            "displayName": "Jakarta, Jakarta Raya, Indonesia",
                            "geo": {
                                "coordinates": [
                                    106.84513,
                                    -6.21462
                                ],
                                "type": "point"
                            },
                            "objectType": "place"
                        }
                    ]
                },
                "id": "tag:search.twitter.com,2005:539056819876814848",
                "inReplyTo": {
                    "link": "http://twitter.com/infoLengkap/statuses/539054504797167616"
                },
                "link": "http://twitter.com/muhammadrissa/statuses/539056819876814848",
                "object": {
                    "id": "object:search.twitter.com,2005:539056819876814848",
                    "link": "http://twitter.com/muhammadrissa/statuses/539056819876814848",
                    "objectType": "note",
                    "postedTime": "2014-11-30T14:02:15.000Z",
                    "summary": "@infoLengkap apa bedanya sama di Indonesia?"
                },
                "objectType": "activity",
                "postedTime": "2014-11-30T14:02:15.000Z",
                "provider": {
                    "displayName": "Twitter",
                    "link": "http://www.twitter.com",
                    "objectType": "service"
                },
                "retweetCount": 0,
                "twitter_entities": {
                    "hashtags": [],
                    "symbols": [],
                    "trends": [],
                    "urls": [],
                    "user_mentions": [
                        {
                            "id": 290896014,
                            "id_str": "290896014",
                            "indices": [
                                0,
                                12
                            ],
                            "name": "informasi Lengkap",
                            "screen_name": "infoLengkap"
                        }
                    ]
                },
                "twitter_filter_level": "medium",
                "twitter_lang": "in",
                "verb": "post"
            }
        },
...

Counting Tweets

Untuk menghitung jumlah tweets anda bisa menggunakan perintah dibawah ini.
curl -s https://"3d72e4ca-3767-440f-9da1-275d71e1c495":"sdeaIAA0mE"@cdeservice.mybluemix.net:443/api/v1/messages/count?q=Indonesia | python -m json.tool > count.json
ti010 ti011
{
    "related": {
        "search": {
            "href": "https://cdeservice.mybluemix.net:443/api/v1/messages/search?q=Indonesia"
        }
    },
    "search": {
        "results": 10732902
    }
}
Berdasarkan hasil diatas, tweets yang mengandung kata kunci `Indonesia`dihasilkan sebanyak 10732902.

Studi Kasus

Anda juga bisa menggunakan layanan Twitter Insights dengan kreatifitas anda. Misalnya anda ingin menghitung dan membuat diagram pie yang dihasilkan dari output layanan Twitter Insights pada topik tertentu.

Untuk studi kasus, mari analisis sentimen pengguna twitter tentang sate buatan orang Indonesia. Karena Twitter Insights belum mendukung bahasa Indonesia sepenuhnya, anda bisa menggunakan kata kunci berbahasa Inggris, dalam contoh ini, Indonesia Satay.

Anda bisa menggunakan kode dibawah ini, untuk menghitung output analisis sentimen yang dihasilkan melalui Twitter Insights. Pada contoh ini, penulis menghitung atribut Sentiment Term dan Polarity pada Evidence konten yang dianalisis.

Kode tersebut ditulis dengan menggunakan bahasa pemrograman Python dan memanfaatkan library Matplotlib untuk membangun diagram pie.

# Author: Yana Permana
# Calculate sentiment analysis's output from Twitter Insights (IBM Bluemix)

import os
import operator
import matplotlib.pyplot as plt

keyword = ['indonesian','satay']
username = "3d72e4ca-3767-440f-9da1-275d71e1c495"
password = "sdeaIAA0mE"
os.system('curl -s https://"{}":"{}"@cdeservice.mybluemix.net:443/api/v1/messages/search?q={} | python -m json.tool > /tmp/blob'.format(username,password,'+'.join(keyword)))

false = False
true = True
null = None

with open('/tmp/blob') as lines:
    fixed = lines.read().rstrip()
    exec("data = {0}".format(fixed))

# All
S1 = []
S2 = []
# Unique
P1 = []
P2 = []

for item in data['tweets']:
    try:
        evidence = item['cde']['content']['sentiment']['evidence']
        for i in xrange(len(evidence)):
            sentimentTerm = evidence[i]['sentimentTerm'].lower()
            polarity = evidence[i]['polarity'].lower()
            S1.append(sentimentTerm)
            S2.append(polarity)
            if sentimentTerm not in P1:
                P1.append(sentimentTerm)
            if polarity not in P2:
                P2.append(polarity)
    except:
        pass

sentimentTerm = {}
polarity = {}

for p1 in P1:
    sentimentTerm[p1] = S1.count(p1)
sentimentTerm = sorted(sentimentTerm.items(), key=operator.itemgetter(1), reverse=True)

for p2 in P2:
    polarity[p2] = S2.count(p2)
polarity = sorted(polarity.items(), key=operator.itemgetter(1), reverse=True)

D1 = {}
print '\n[o] Sentiment Term (Top 10)'
idx=0
for item in sentimentTerm:
    print "{:<16} {:<8}".format(item[0],item[1])
    D1[item[0]] = item[1]
    idx+=1
    if idx == 10+1:
        break

D2 = {}
print '\n[o] Polarity'
for item in polarity:
    print "{:<16} {:<8}".format(item[0],item[1])
    D2[item[0]] = item[1]

def pie(data):
    plt.pie([float(v) for k,v in data.iteritems()], labels=[k for k,v in data.iteritems()], autopct=None)
    plt.title("What people says about "+' '.join(keyword).upper() + "?")
    plt.show()

pie(D1)
pie(D2)

Dibawah ini merupakan hasil output dari kode diatas.

[o] Sentiment Term (Top 10)
enjoy            3       
delicious        3       
spicy            3       
super            3       
favorite         3       
sweet            2       
good             2       
mighty           2       
enjoyed          2       
unforgettable    2       
yummy            2       

[o] Polarity
positive         46      
negative         9       
figure_1

Sebagian besar pengguna Twitter dari data ditas menilai sate buatan orang Indonesia itu nikmat, enak, pedas dan sebagainya.

figure_1-1

Secara umum, sentimen pengguna Twitter sangat positif terhadap sate buatan orang Indonesia.

Itulah beberapa contoh yang bisa anda coba dalam menggunakan layanan Twitter Insights milik IBM Bluemix. Jika Anda ingin menelusuri lebih dalam dan menggunakan fitur Twitter Insights lainnya, anda bisa memilih Entry Plan agar bisa melakukan filter terhadap tweets yang dihasilkan. Adapun dokumentasi lebih lengkap bisa anda kunjungi di alamat resmi Twitter Insights Documentation. Jika anda ingin melihat demo dengan UI yang lebih menarik, anda bisa melihatnya Twitter Insights Demo.

Dan buat kamu yang ingin belajar dan mengenal lebih banyak tentang Bluemix, kamu bisa mengikuti Akademi Dicoding Belajar Membangun Aplikasi Android dengan IBM Bluemix atau bisa juga melalui tutorial-tutorial di Dirakit. Dan, untuk menguji skillmu, kamu juga bisa mengikuti tantangan Bantu Ibu dengan Teknologi.