Analisis Chat WhatsApp Menggunakan Python: Sebuah Hadiah Ulang Tahun Istri

Iqbal Rahmadhan
9 min readMay 15, 2021

Salah satu tantangan setelah menikah yang tidak saya sadari sebelumnya adalah sulitnya mempersiapkan hadiah kejutan ulang tahun. Terlebih sejak setelah menikah saya dan Aisah hampir menghabiskan seluruh waktu di rumah, saya masih work from home sedangkan Aisah sedang mengikuti kuliah daring dari University of Melbourne. Tentu saja kondisi ini sangat menyenangkan, hanya saja butuh strategi khusus untuk mempersiapkan hadiah ulang tahun yang menarik.

Di tempat wisata Bukit Impian, Kota Sungai Penuh.

Tahun 2020 adalah tahun yang luarbiasa. Tidak hanya kehadiran pandemi yang tidak kita harapkan ini, tetapi juga cerita kami berdua yang sangat dinamik. Jika di serial favorit kami, The Office, Jim dan Pam dapat mengulang kembali kisah mereka dengan melihat hasil mokumentari, saya rasa chat history WhatsApp dapat mewakilkan sebagian dari interaksi kami. Oleh karena itu, sebagai hadiah ulang tahun untuk istriku pada 16 Mei 2021 ini, saya mengolah chat history WhatsApp kami dan mencoba menganalisis data yang mungkin akan memberikan insight baru yang sebelumnya belum terpikirkan. Selain itu di akhir juga saya akan membuat word cloud dari history chat tersebut.

Pada artikel spesial ini saya tidak akan banyak membahas teknisnya secara mendalam seperti artikel-artikel motode numerik sebelumnya, karena.. ya ini hadiah ulang tahun, banyaknya kode akan mengurangi makna hadiah dari artikel ini.

Saya bagi jadi tiga bagian:

  • Preparasi data
  • Visualisasi data, dan
  • Word cloud

Jika Anda yang membaca saat ini adalah Aisah Resti Amelia, semoga Anda menyukainya.

Let’s go!

Preparasi Data

Tentu saja, sesuai judulnya seluruh data diperoleh dari obrolan saya dan Aisah di WhatsApp. Banyak artikel yang membahas metode untuk menarik dan mengolah chat yang ada di WhatsApp, salah satunya adalah artikel berikut yang menjadi acuan utama saya.

Disini saya menggunakan dua metode ekspor chat. Yang pertama adalah menggunakan fitur ekspor chat yang disediakan oleh Whats App, dan menggunakan copy-paste manual. Metode yang kedua dibutuhkan karena walaupun saya sudah beberapa kali melakukan ekspor chat, namun ada beberapa bagian yang kosong.

Berikut merupakan format chat yang pertama:

01/01/20 16.39 - Aisah 💖: Halo
01/01/20 16.43 - Aisah 💖: Halo
01/01/20 16.45 - Iqbal : Hi
01/01/20 16.45 - Iqbal : Hi

Sedangkan untuk format chat yang kedua, melalui copy-paste manual, adalah seperti berikut:

[12:16 AM, 1/1/2020] Aisah 💖: Halo
[12:16 AM, 1/1/2020] Aisah 💖: Halo
[12:17 AM, 1/1/2020] Iqbal : Hi
[12:17 AM, 1/1/2020] Iqbal : Hi

Berbeda, bukan? Sehingga untuk melakukan ekstrak chat menjadi data dibutuhkan dua macam RegEx yang berbeda sesuai format dari chat.

Visualisasi Data

Pertama kita akan mulai dari pertanyaan paling dasar. Berapa banyak chat yang terkirim dari 1 Januari 2020 hingga 31 Desember 2020? Lalu siapakah yang paling banyak mengirimkan chat?

Kita dapat menemukan jawabannya dengan menggunakan bar chart sederhana pada Gambar 1 dimana dapat dilihat bahwa total chat yang terkirim ada sebanyak 89 ribu yang mana saya dan Aisah berbagi ‘hampir’ sama banyak. Aisah mengirim lebih banyak sekitar 3% dari chat yang dikirimkan oleh saya.

Gambar 1

Tetapi apakah Aisah selalu mengirimkan chat lebih banyak di tiap waktu? Kita akan coba selidiki dengan melakukan plot total chat tiap bulan oleh masing-masing saya dan Aisah. Disini kita akan memperoleh memang hampir di tiap bulan Aisah mengirimkan chat lebih banyak. Saya hanya unggul di bulan Februari dan April, sisanya Aisah lebih unggul atau memiliki jumlah chat yang relatif sama.

Gambar 2

Dari Gambar 2 di atas kita bisa lihat jumlah chat dari bulan ke bulan cenderung turun. Apakah ini suatu pertanda yang tidak bagus?

Saya yakin hal ini dikarenakan seiring waktu chat tergantikan dengan voice call maupun video call. Namun sayangnya untuk saat ini saya tidak memiliki data yang dapat memperkuat asumsi saya tersebut. Mungkin bagi pembaca yang mengetahui cara untuk mendapatkan data voice call dan video call bisa berbagai via kolom komentar di bawah.

Oke kita lanjutkan. Kali ini kita akan melihat tren chat dengan lebih detil yakni hingga ke skala per hari. Karena data yang ditampilkan pada Gambar 3 sangat tinggi fluktuasinya, maka saya bantu dengan menambahkan garis ‘7 days rolling average’ sehingga trennya lebih mudah terbaca. Selain itu saya juga tambahkan beberapa momen penting yang mungkin bisa menambahkan pemahaman kita terhadap data.

Gambar 3

Masih berkaitan dengan momen penting, disini saya juga membagi tahun 2020 dengan beberapa periode berdasarkan momen penting tersebut. Periode pertama adalah sebelum Aisah berangkat melakukan penelitian di Timika, Papua. Kemudian tentu saja, periode ketika kami menjalani ‘LDR’ kurang lebih 5 bulan.

Selanjutnya setelah Aisah pulang dari Timika saya menyebutnya sebagai periode preparation karena di periode ini memang dihabiskan untuk persiapan menuju pernikahan. Salah satu momen paling penting adalah hari dimana saya menemui orang tua Aisah dan pertama kali menyampaikan keinginan kami untuk menikah. Yang sangat menarik adalah, bisa dilihat di Gambar 3, hari tersebut merupakan hari dengan chat paling banyak terjadi. Sangat wajar, sejalan dengan betapa mendebarkannya hari itu.

Mendekati periode selanjutnya, periode engagement, tren chat juga cukup meningkat dan cenderung stabil hingga hari pernikahan. Sesuai tebakan, hari setelah menikah jumlah chat turun drastis hingga mendekati angka nol. Karena.. kenapa harus chat ketika Aisah sudah berada di sebelah?

Baik kita lanjutkan ke perspektif yang lebih detil. Pada pukul berapa yang paling sering chat dikirimkan? Pembahasan mengenai pukul berapa ini akan kita olah dengan mempertimbangkan faktor hari apa chat tersebut terjadi. Sehingga grafik yang paling tepat untuk menarik kesimpulan dari pertanyaan ini adalah menggunakan heatmap antara waktu dan hari.

Sebelum masuk ke grafik, mari kita membuat tebakan. Saya rasa, seperti kebanyakan manusia berpasangan lainnya, akhir pekan terutama malam minggu mestinya menjadi waktu yang sudah jelas punya densitas chat yang besar. Namun apakah juga berlaku di sini? Mari kita cek.

Gambar 4

Pada heatmap Gambar 4 di atas, semakin besar rata-rata chat yang dilakukan di waktu tersebut, maka warnanya akan semakin mendekati warna biru gelap. Dari skala bar kita dapat lihat bahwa untuk warna biru yang sangat gelap menandakan rata-rata chat yang terjadi sekitar 30 chat.

Sehingga bisa kita simpulkan bahwa tebakan tadi cukup akurat, secara umum saat weekend intensitas chat cukup besar dibandingkan hari kerja dengan melihat area terang hanya sekitar pukul 1.00 hingga 4.00 dini hari saja. Lebih detilnya, chat sering dilakukan sekitar pukul 19.00–20.00, tetapi paling tinggi pada pukul 19.00 Minggu malam.

Ada yang menarik jika kita perhatikan di hari Selasa pukul 10.00 pagi, nilai rata-rata chat berada di angka yang sangat tinggi, yakni 31 chat. Tentu saja ini menjadi pertanyaan karena hari tersebut adalah hari kerja namun intensitas chatnya sangat tinggi dibandingkan waktu lain. Jadi ada apa di waktu tersebut?

Gambar 5

Kita masuk ke visualisasi data terakhir. Kali ini kita akan mengukur apakah ada korelasi antara intensitas chat yang tinggi di suatu hari dengan banyaknya ungkapan, seperti judul lagunya Buddy Holly dan dinyanyikan kembali oleh The Beatles, “word of love”.

Untuk menjawab pertanyaan ini saya mencoba mengumpulkan ungkapan-ungkapan seperti ‘I love you’, ‘aku sayang kamu’, dan sejenisnya kemudian menghitung berapa banyak ungkapan tersebut dalam satu hari dan membandingkannya dengan jumlah chat.

Hasilnya cukup menarik, sekalipun pada umummnya banyaknya word of love linear dengan banyaknya chat di hari tersebut, ternyata ada dua hari yang banyaknya word of love meleset signifikan dibandingkan dengan garis linear yang dibentuk. Dua hari tersebut adalah tanggal 26 Januari 2020 yang merupakan hari ketika Aisah berangkat ke Timika dan tanggal 1 Juni 2020. Karena terlihat sangat bucin, saya penasaran kira-kira apa saja yang dibahas di dua hari tersebut.

Kita akan coba ‘intip’ dua hari tersebut menggunakan word cloud bersama dengan tanggal saat saya menemui ayahnya Aisah, 28 Juni 2020.

Word Cloud

Word cloud merupakan metode yang cukup populer digunakan terutama pada bidang text mining atau text analysis untuk memvisualisasikan data berupa teks. Singkatnya pada word cloud kita akan memperoleh informasi kata mana saja yang paling sering muncul. Semakin besar frekuensi kata tersebut, maka akan semakin besar ukuran dari kata tersebut pada tampilan word cloud.

Sebelum menhasilkan word cloud biasanya akan dilakukan pembersihan dan standarisasi terhadap data teks terlebih dahulu. Pada projek ini saya melakukan pembersihan dan standarisasi berupa menjadikan lower case, menghilangkan komponen berupa tautan ke suatu website, menghilangkan karakter selain alfanumerik, dan memangkas kata-kata yang biasa disebut stop-words.

Stop-word adalah kata-kata umum yang biasanya tidak memberikan informasi penting dari suatu teks, seperti ‘yang’, ‘dan’, dan seterusnya. Untuk menghilangkan stop-words khususnya untuk bahasa Indonesia saya membutuhkan libary Sastrawi .

Namun karena teks yang dianalisis kali ini berupa teks pesan singkat yang tidak berstuktur formal, maka masih banyak stop-words lain yang belum termasuk dalam library tersebut. Oleh karena itu saya juga menambahkan secara manual kata-kata lain seperti singkatan, ungkapan tawa (contohnya ‘wkwkwkw’, ‘hehehe’, dll), dan lainnya yang perlu untuk dihilangkan.

Setelah dirasa cukup bersih maka kita akan lakukan plot stop word. Pertama kita akan coba plot kata-kata pada hari-hari unik tadi. Hasil word cloud-nya adalah sebagai berikut.

Gambar 6. Word cloud untuk tanggal 26 Januari 2020, hari ketika Aisah berangkat ke Timika
Gambar 7. Word cloud untuk tanggal 1 Juni 2020, hari dengan word of love terbanyak.
Gambar 8. Word cloud untuk tanggal 28 Juni 2020, hari ketika pertama kali saya menyampaikan keinginan untuk menikah dengan Aisah kepada ayahnya.

Bagaimana?

Tentu saja, kata yang paling sering muncul di ketika word cloud adalah ‘sayang’ dan ‘love’. Untuk Gambar 6 cukup jelas percakapan terjadi pada topik tentang keberangkatan. Kata-kata seperti ‘bandara’, ‘ketemu’, ‘jam’, ‘kereta’, ‘nunggu’ memiliki frekuensi yang cukup tinggi. Sedangkan pada Gambar 7 sebenarnya saya masih mencoba mengingat kenapa word of love di hari itu sangat tinggi, kata yang memiliki frekuensi cukup tinggi adalah ‘mukena’ (?), ‘travelling’ (?), ‘kelar’, dan ‘temukan’.

Mungkin jika nanti Aisah telah membaca tulisan ini bisa membantu apa yang terjadi di hari itu.

Kemudian pada Gambar 8, mungkin Anda sama seperti saya, langsung menemukan kata ‘lamaran’. Memang waktu itu seharian kita membahas terkait rencana kedepan, termasuk ‘silaturahmi’, ‘keluarga’, juga tentang ‘Papa’ dan ‘Mama’, dan tentunya ‘nikah’.

Dari tiga contoh ini kita dapat lihat sendiri keunggulan word cloud dalam memberikan kita insight pada data teks at a glance.

Sekarang kita akan coba eksplor fitur dari word cloud dan kali ini khusus untuk istri saya yang semoga suka dengan sedikit sentuhan ‘seni’ ini. Fitur itu adalah melakukan plot word cloud ke suatu mask dengan bentuk tertentu. Saya akan membuat word cloud untuk rentang waktu yang dibagi menjadi tiga yang saya beri nama: early 2020, Aisah at Timika, dan periode Road to Get Married.

Pola dari masing-masing periode akan diambil dari foto atau suasana yang dirasakan waktu tersebut. Sebagai contoh, untuk early 2020 saya mengambil foto ‘siluet’ saat kami mengunjungi Jakarta Aquarium pada awal-awal 2020.

Gambar 9. Foto sebagai referensi pembuatan mask periode Early 2020.

Dengan sedikit kemampuan edit foto menggunakan Paint 3D (bukan ‘Paint ‘ saja, ya) yang dikombinasikan dengan kemampuan manipulasi gambar di PowerPoint, maka saya dapat menghasilkan gambar berikut yang akan digunakan sebagai mask untuk word cloud pada edisi early 2020.

Gambar 10. Mask untuk word cloud periode Early 2020.

Purely art, untuk segmen terakhir ini saya tidak sodorkan analisis, semoga Aisah suka.

Selamat ulang tahun, Istriku. Terima kasih sudah selalu menjadi yang terbaik❤.

Gambar 11. “Early 2020”
Gambar 12. “Aisah at Timika”
Gambar 13. “Road to Married”

--

--