Description
Pemilihan Data
Pemilihan data yang dilakukan untuk analisis sentimen menggunakan Twitter dengan menggunakan snscrape untuk melakukan scraping data dari Twitter. Data yang diperoleh adalah 30 tweets.
Kode Python
Berikut adalah kode-kode Python dengan menggunakan Jupyter Notebook yang telah dibuat:
- Menginstall library yang dibutuhkan

Penjelasan:
- Perintah "!pip3 install git+https://github.com/JustAnotherArchivist/snscrape.git" adalah perintah instalasi menggunakan pip yang digunakan untuk menginstal snscrape dari repositori Git dengan URL "https://github.com/JustAnotherArchivist/snscrape.git". Dengan menjalankan perintah ini, menginstal snscrape dari sumber kode yang ada di repository tersebut.
- Perintah "!pip install ps" digunakan untuk menginstal library ps. Ps adalah library Python yang menyediakan struktur data dan alat analisis data yang kuat. Ini sangat berguna dalam pemrosesan dan analisis data, termasuk dalam konteks analisis sentimen.
- Perintah "!pip install nltk" digunakan untuk menginstal library nltk (Natural Language Toolkit). nltk adalah library populer untuk memproses bahasa alami dalam Python. Ini menyediakan berbagai algoritma dan corpus data untuk pemrosesan teks yang meliputi tokenisasi, stemming, lemmatisasi, analisis sentimen, dan banyak lagi.
- Perintah "!pip install matplotlib" digunakan untuk menginstal library matplotlib. Matplotlib adalah library visualisasi data yang kuat dalam Python. Dengan menggunakan matplotlib, dapat membuat berbagai jenis grafik dan visualisasi data, termasuk grafik batang, grafik garis, diagram lingkaran, dan banyak lagi.
- Perintah "!pip install seaborn" digunakan untuk menginstal library seaborn. Seaborn adalah library Python yang membangun di atas matplotlib dan menyediakan antarmuka yang lebih sederhana untuk membuat visualisasi data yang menarik dan informatif. Seaborn juga memiliki fungsionalitas tambahan seperti palet warna yang kaya dan kemampuan untuk membuat plot statistik yang kompleks dengan mudah.
- Perintah "!pip install googletrans==4.0.0-rc1" digunakan untuk menginstal library googletrans dengan versi spesifik yaitu 4.0.0-rc1. googletrans adalah library Python yang digunakan untuk menerjemahkan teks menggunakan layanan Google Translate. Dengan menggunakan googletrans, dapat menerjemahkan teks dari satu bahasa ke bahasa lain dalam aplikasi Python .
- Melakukan import library

Penjelasan:
- "import os": Modul "os" menyediakan fungsi-fungsi untuk berinteraksi dengan sistem operasi. Dalam konteks ini, mungkin digunakan untuk mengakses atau mengatur variabel lingkungan, jalur direktori, atau operasi lain yang terkait dengan sistem operasi.
- "import datetime": Modul "datetime" menyediakan fungsi-fungsi untuk bekerja dengan tanggal dan waktu dalam Python. Dalam konteks ini, mungkin digunakan untuk memperoleh tanggal dan waktu saat ini atau melakukan manipulasi tanggal dan waktu.
- "import ps as pd": Library "ps" digunakan untuk pemrosesan dan analisis data. Dalam kode ini, "pd" adalah alias yang umum digunakan untuk "ps", sehingga memudahkan penggunaan fungsi-fungsi dari library tersebut.
- "import ast": Modul "ast" menyediakan fungsi untuk mem-parsing ekspresi dalam bentuk string menjadi struktur data Python yang sesuai. Dalam konteks analisis sentimen, ini mungkin digunakan untuk menguraikan teks yang berformat sebagai ekspresi Python ke dalam objek yang dapat digunakan.
- "import json": Modul "json" menyediakan fungsi-fungsi untuk bekerja dengan data dalam format JSON (JavaScript Object Notation). Dalam konteks ini, mungkin digunakan untuk membaca atau menulis data dalam format JSON.
- "import csv": Modul "csv" menyediakan fungsi-fungsi untuk membaca dan menulis data dalam format CSV (Comma-Separated Values). Dalam konteks ini, mungkin digunakan untuk membaca atau menulis data tweet ke dalam file CSV.
- "import seaborn as sns": Library "seaborn" adalah library visualisasi data yang dibangun di atas "matplotlib". "seaborn" menyediakan fungsi-fungsi untuk membuat plot yang lebih menarik dan informatif dengan menggunakan gaya visual yang bervariasi.
- "import nltk": Library "nltk" (Natural Language Toolkit) digunakan untuk pemrosesan bahasa alami (NLP) dalam Python. "nltk" menyediakan berbagai alat dan dataset untuk tokenisasi, stemming, lemmatisasi, analisis sentimen, dan tugas NLP lainnya.
- "import matplotlib.pyplot as plt": Library "matplotlib.pyplot" adalah bagian dari "matplotlib" dan digunakan untuk membuat plot dan visualisasi data. Dalam kode ini, "plt" adalah alias yang umum digunakan untuk "matplotlib.pyplot".
- "from textblob import TextBlob": "TextBlob" adalah kelas dalam library "textblob" yang digunakan untuk analisis sentimen dan pemrosesan teks lainnya. "TextBlob" menyediakan metode untuk melakukan analisis sentimen pada teks dan mendapatkan polaritas serta subjektivitas dari teks tersebut.
- "from googletrans import Translator": "Translator" adalah kelas dalam library "googletrans" yang digunakan untuk menerjemahkan teks menggunakan layanan Google Translate. Dengan menggunakan "Translator", dapat menerjemahkan teks dari satu bahasa ke bahasa lain dalam aplikasi Python.
- Melakukan scraping untuk pengambilan data dari Twitter

Penjelasan:
- "hasil_maksimal = 1000": Variabel "hasil_maksimal" digunakan untuk membatasi jumlah hasil tweet yang akan diambil. Dalam contoh ini, jumlah maksimal tweet yang diambil adalah 1000.
- "twitter_search = "Ahmad Dhani DPR lang:id until:2023-06-19 since:2023-03-01"": Variabel "twitter_search" adalah query pencarian yang akan digunakan untuk mencari tweet. Dalam contoh ini, query pencarian mencari tweet yang mencakup kata "Ahmad Dhani DPR" dalam bahasa Indonesia ("lang:id"), dengan tanggal tweet sebelum atau pada tanggal 19 Juni 2023 ("until:2023-06-19") dan setelah tanggal 1 Maret 2023 ("since:2023-03-01").
- "filename = f"{twitter_search.replace(' ', '_').replace(':', '-').replace('#', '')}_{datetime.date.today().strftime('%Y-%m-%d')}.json"": Variabel "filename" digunakan untuk menentukan nama file untuk menyimpan hasil tweet dalam format JSON. Nama file didasarkan pada query pencarian dan tanggal saat ini.
- "USING_TOP_SEARCH = False": Variabel "USING_TOP_SEARCH" digunakan untuk mengatur apakah ingin menggunakan parameter "--top" pada pencarian tweet. Dalam contoh ini, nilai "False" menunjukkan bahwa parameter "--top" tidak digunakan.
- "snscrape_params = '--jsonl --max-results'": Variabel "snscrape_params" adalah string yang berisi parameter untuk pengambilan data dengan snscrape. "-jsonl" menunjukkan bahwa output akan berupa format JSON Lines, sedangkan "--max-results" menunjukkan bahwa hanya hasil terbatas yang akan diambil.
- "twitter_search_params = ''": Variabel "twitter_search_params" adalah string yang akan digunakan untuk menyimpan parameter pencarian tambahan. Dalam contoh ini, string kosong menunjukkan bahwa tidak ada parameter tambahan yang digunakan.
- "if USING_TOP_SEARCH: twitter_search_params += "--top"": Jika "USING_TOP_SEARCH" bernilai "True", maka parameter "--top" akan ditambahkan ke "twitter_search_params". Namun, dalam contoh ini, karena "USING_TOP_SEARCH" bernilai "False", maka parameter "--top" tidak ditambahkan.
- "snscrape_search_query = f"snscrape {snscrape_params} {hasil_maksimal} twitter-search {twitter_search_params} '{twitter_search}' > {filename}"": Variabel "snscrape_search_query" berisi string yang menyusun perintah lengkap untuk menjalankan snscrape dengan parameter yang telah ditentukan. Query pencarian "twitter_search" digunakan sebagai argumen pada perintah snscrape.
- "print(snscrape_search_query)": Baris ini mencetak perintah "snscrape_search_query" ke output untuk memeriksa dan memastikan bahwa perintah telah terbentuk dengan benar.
- "os.system(snscrape_search_query)": Perintah "os.system()" digunakan untuk menjalankan perintah shell dari Python. Dalam hal ini, perintah "snscrape_search
- Membuat dataframe dari hasil scraping


Penjelasan:
- "tweets_df = pd.read_json(filename, lines=True)": Kode ini membaca file JSON yang dihasilkan dari perintah snscrape sebelumnya dan memuatnya ke dalam dataframe pandas. "filename" adalah nama file JSON, dan "lines=True" menunjukkan bahwa file JSON berisi baris-baris terpisah yang akan dibaca sebagai entri terpisah dalam dataframe.
- "NAMA_FILE_CSV = 'ahmad_dhani.csv'": Variabel "NAMA_FILE_CSV" digunakan untuk menyimpan nama file CSV yang akan digunakan untuk menyimpan dataframe.
- "new_columns": Variabel ini berisi kamus yang digunakan untuk mengganti nama kolom-kolom dalam dataframe. Setiap pasangan key-value dalam kamus ini menunjukkan kolom yang akan diganti dengan nilai yang baru.
- "if len(tweets_df) == 0: ...": Kondisi ini memeriksa apakah dataframe "tweets_df" kosong (tidak ada tweet yang ditemukan). Jika benar, maka pesan akan dicetak ke layar dan program akan dihentikan dengan perintah "exit()". Jika tidak, maka pemrosesan dataframe akan dilanjutkan.
- "tweets_df = tweets_df.loc[:, ['url', 'date', 'rawContent', 'id', ...]]": Baris ini memilih kolom-kolom yang akan digunakan dalam analisis dari dataframe "tweets_df". Kolom-kolom yang tidak termasuk dalam daftar ini akan dihapus dari dataframe.
- "tweets_df = tweets_df.rename(columns=new_columns)": Kode ini mengganti nama kolom dalam dataframe menggunakan kamus "new_columns" yang telah dibuat sebelumnya.
- "tweets_df['Media'] = tweets_df['Media'].apply(lambda x: x[0]['fullUrl'] if isinstance(x, list) ... else None)": Kode ini mengambil URL media dari kolom 'Media' dalam dataframe. Jika kolom 'Media' berisi list yang tidak kosong dan elemen pertamanya adalah sebuah dictionary yang memiliki kunci 'fullUrl', maka URL media akan diambil. Jika tidak ada media yang terkait, nilai akan diatur menjadi None.
- "tweets_df['Links'] = tweets_df['Links'].apply(lambda x: x[0]['url'] if isinstance(x, list) ... else None)": Kode ini mengambil URL dari kolom 'Links' dalam dataframe dengan cara yang serupa seperti poin sebelumnya.
- "display(tweets_df)": Kode ini menampilkan dataframe "tweets_df" secara langsung di jupyter notebook atau lingkungan pengembangan Python lainnya. Dataframe akan ditampilkan dalam bentuk yang rapi dengan kolom-kolom yang terorganisir.
- Jumlah data yang diperoleh

- Menyimpan dalam format CSV (untuk analisis ini akan langsung menggunakan tabel sebelumnya)

- Mengambil kolom “Tweet”

- Menentukan sentimen negatif, positif, dan netral

Penjelasan:
- "from googletrans import Translator": Mengimpor Translator dari library "googletrans" yang digunakan untuk menerjemahkan teks.
- "from textblob import TextBlob": Mengimpor TextBlob dari library "textblob" yang digunakan untuk menganalisis sentimen teks.
- "translator = Translator()": Membuat objek Translator yang akan digunakan untuk menerjemahkan teks.
- "isi_sentimen = []": Membuat list kosong "isi_sentimen" yang akan digunakan untuk menyimpan hasil sentimen.
- "positive_count = 0", "negative_count = 0", "neutral_count = 0": Menginisialisasi variabel "positive_count", "negative_count", dan "neutral_count" dengan nilai awal 0. Variabel-variabel ini akan digunakan untuk menghitung jumlah sentimen positif, negatif, dan netral.
- "for i in kalimat:": Memulai loop "for" untuk setiap teks dalam "kalimat".
- "translasi_kalimat = translator.translate(i, src='id', dest='en').text": Menerjemahkan teks dari bahasa Indonesia ("id") ke bahasa Inggris ("en") menggunakan objek Translator yang telah dibuat sebelumnya. Hasil terjemahan akan disimpan dalam variabel "translasi_kalimat".
- "blob = TextBlob(translasi_kalimat)": Membuat objek TextBlob dari teks yang telah diterjemahkan.
- "sentimen = blob.sentiment.polarity": Menghitung nilai sentimen teks dengan menggunakan metode "sentiment.polarity" dari objek TextBlob. Nilai sentimen akan disimpan dalam variabel "sentimen".
- "isi_sentimen.append(sentimen)": Menambahkan nilai sentimen ke dalam list "isi_sentimen".
- "if sentimen > 0:", "elif sentimen < 0:", "else:": Menggunakan percabangan "if-elif-else" untuk mengkategorikan sentimen sebagai positif, negatif, atau netral. Jika sentimen lebih besar dari 0, maka akan dihitung sebagai sentimen positif dengan menambahkan 1 ke "positive_count". Jika sentimen kurang dari 0, maka akan dihitung sebagai sentimen negatif dengan menambahkan 1 ke "negative_count". Jika sentimen sama dengan 0, maka akan dihitung sebagai sentimen netral dengan menambahkan 1 ke "neutral_count".
- "print("Total sentimen positif : "+str(positive_count))", "print("Total sentimen negatif : "+str(negative_count))", "print("Total sentimen netral : "+str(neutral_count))": Menampilkan jumlah sentimen positif, negatif, dan netral dengan mencetak pesan menggunakan fungsi "print()". Variabel "positive_count", "negative_count", dan "neutral_count" diubah menjadi string menggunakan fungsi "str()" sebelum digabungkan (concatenate) dengan pesan yang ingin ditampilkan.
- Membuat bar plot atau diagram batang untuk yang menunjukkan jumlah sentimen positif, negatif, dan netral.

Penjelasan:
- "label_sentimen = ["Positif", "Negatif", "Netral"]": Membuat list "label_sentimen" yang berisi label untuk setiap kategori sentimen, yaitu "Positif", "Negatif", dan "Netral".
- "total_sentimen = [positive_count, negative_count, neutral_count]": Membuat list "total_sentimen" yang berisi jumlah sentimen positif, negatif, dan netral yang telah dihitung sebelumnya.
- "sns.barplot(x=label_sentimen, y=total_sentimen)": Membuat bar plot menggunakan seaborn dengan sumbu x adalah "label_sentimen" dan sumbu y adalah "total_sentimen". Bar plot ini akan menampilkan jumlah sentimen positif, negatif, dan netral dalam bentuk batang.
- "plt.title("Analisis Sentimen Ahmad Dhani untuk menjadi Caleg DPR RI")": Menetapkan judul “Analisis Sentimen Ahmad Dhani untuk Menjadi Caleg DPRI RI” pada plot.
- "plt.xlabel("Sentimen")": Menetapkan label “Sentimen” pada sumbu x plot.
- "plt.ylabel("Hitungan")": Menetapkan label “Hitungan” pada sumbu y plot.
Analisis Data
Berdasarkan kode di atas, didapatkan sentimen positif=15, sentimen negatif=5, dan sentimen netral=12 dengan total sentimen=32. Mayoritas sentimen terhadap Pak Ahmad Dhani untuk maju menjadi anggota DPR adalah positif dengan jumlah 15/32. Untuk sentimen negatifnya yang sangat kecil hanya 5/32, sangat sedikit dibandingkan sentimen positifnya. Terdapat sentimen netral yang lumayan besar yaitu 12/32 yang menandakan tidak adanya ketegasan untuk memiliki sentimen positif maupun negatif.
Kesimpulan
Berikut ini adalah beberapa kesimpulan yang mungkin dihasilkan dari analisis data caleg Ahmad Dhani pada Twitter:
- Pengumpulan Data: perlu mengumpulkan data dari Twitter terkait dengan caleg Ahmad Dhani yang ingin di analisis. menggunakan Snscraper atau alat pihak ketiga yang menyediakan akses ke data Twitter. Pastikan untuk mendapatkan sejumlah besar data agar hasil analisis lebih bermakna.
- Analisis Sentimen: dapat menganalisis sentimen terkait dengan caleg dengan melihat respons pengguna Twitter terhadap mereka. Anda dapat menggunakan teknik pemrosesan bahasa alami (natural language processing/NLP) seperti library TextBlob untuk menganalisis sentimen dalam tweet yang menyebutkan caleg tersebut. Misalnya, Anda dapat mengklasifikasikan tweet sebagai positif, negatif, atau netral. Ini dapat memberikan wawasan tentang pandangan umum tentang caleg tersebut.
- Visualisasi Data: Setelah melakukan analisis, penting untuk memvisualisasikan data agar lebih mudah dipahami dan mengidentifikasi pola atau tren. Grafik, diagram, atau peta panas dapat digunakan untuk memvisualisasikan data yang relevan dengan analisis Anda.
Referensi
[1] Penting untuk Data Scientist, Ketahui Apa Saja Fungsi dan Fitur Jupyter. (n.d.). / / - Wiktionary. Retrieved June 23, 2023, from https://glints.com/id/lowongan/jupyter-adalah
[2] Mengenal Apa Itu Twitter dan Mengapa Orang Menggunakannya? Halaman all. (2022, March 24). Kompas.com. Retrieved June 23, 2023, from https://www.kompas.com/tren/read/2022/03/24/200500665/mengenal-apa-itu-twitter-dan-mengapa-orang-menggunakannya?page=all
[3] Mengenal Google Colab, Fungsi dan Manfaatnya. (2023, March 26). Kompas Tekno. Retrieved June 23, 2023, from https://tekno.kompas.com/read/2023/03/26/17150047/mengenal-google-colab-fungsi-dan-manfaatnya-
[4] Tentang DPR - Dewan Perwakilan Rakyat. (n.d.). Tentang DPR - Dewan Perwakilan Rakyat. Retrieved June 23, 2023, from https://www.dpr.go.id/tentang/tugas-wewenang
[5] What is Natural Language Processing? (n.d.). IBM. Retrieved June 23, 2023, from https://www.ibm.com/topics/natural-language-processing