Belajar Data Analysis dengan Python

Nindy AA
7 min readNov 22, 2022

--

Jika sebelumnya kita sudah belajar pernah belajar terkait konsep data analysis menggunakan SQL, sekarang saatnya melanjutkan pembelajaran menggunakan Python.

Untuk materi lainnya dapat diakses pada link berikut :

Apa itu Python?

Python merupakan bahasa pemrograman dengan beragam library yang dapat digunakan untuk melakukan interpretasi data. File Python biasa ditandai dengan ekstensi bertandakan .ipynb.

Ada beberapa library yang dapat dimanfaatkan dan biasa digunakan antara lain :

Bagaimana untuk cara penggunaan Python?

Disini, kita memanfaatkan fitur yang ada di Google yaitu Google Colaboratory atau dapat diakses melalui https://colab.research.google.com/.

Adapun cara mudahnya bisa dilakukan dengan cara seperti berikut :

  1. Buka Google Drive > Pilih New / Baru > Pilih Lainnya / Others > Pilih Hubungkan Aplikasi Lainnya / Connect to Others

2. Apabila muncul pop up “Google Workspace Marketplace”, maka pada bagian pencarian bisa langsung dicari dengan keyword “Colaboratory” dan install pada aplikasi dengan logo CO berwarna kuning orange.

3. Setelah berhasil terinstall, selanjutnya adalah membuka workspace tersebut. Untuk akses ke Google Colab juga bisa melalui link https://colab.research.google.com/. Kemudian jika ingin membuat dokumen baru, bisa dengan cara klik File > New Document maka akan muncul tampilan seperti dibawah ini dengan tipe file .ipynb seperti yang telah dijelaskan di awal.

Apa yang perlu kita lakukan terhadap worksheet tersebut?

Hal utama dan wajib pertama kali dilakukan adalah memasukkan library apa saja yang dibutuhkan

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re
sns.set()

Penjelasan dari library diatas adalah :

  • pandas digunakan untuk memanipulasi data
  • numpy digunakan untuk perhitungan aritmatika
  • matplotlib digunakan untuk visualisasi grafik
  • seaborn digunakan untuk mempercantik hasil visualisasi
  • re (regex) digunakan untuk mencocokkan data
  • as digunakan untuk mengaliaskan atau menyingkat nama library agar penulisan nanti pada script tidak terlalu panjang

Disini, kita akan menggunakan dataset online yaitu ‘Hotel Booking Demand’ yang dapat diakses melalui link github ini dengan type file .csv. Sehingga untuk memanggilnya cukup menggunakan perintah berikut

df_hotels = pd.read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-02-11/hotels.csv')
df_hotels.head()
  • df_hotels merupakan variabel yang nantinya kita pakai untuk menyimpan data hotel.
  • pd merupakan nama alias dari pandas. Jadi disini menggunakan library pandas.
  • read_csv merupakan fungsi yang ada pada library pandas untuk memanggil dataset berformat csv yang akan digunakan.
  • head() digunakan untuk menampilkan 5 line teratas dari dataset yang digunakan. Apabila kita mengatur jumlah head yang ditampilkan, kita dapat menuliskannya dengan head(10) atau head(20) tergantung kebutuhan.

Berikut adalah hasil apabila script diatas dijalankan

Namun, dapat kita lihat bahwa dalam dataset tersebut ternyata tidak memiliki unique identifier dan kita dapat menambahkannya sendiri dengan script berikut

df_hotels = df_hotels.reset_index().rename(columns={'index':'id'})
df_hotels.head()

Disitu kita memanggil fungsi untuk menambahkan auto index dengan nama kolom yaitu ‘index’, namun kita dapat juga mengubahnya menjadi ‘id’ seperti berikut jika dijalankan :

Jika sampai tahap ini berhasil, seharusnya data kita sudah siap. Selanjutnya kita dapat melakukan explore terhadap data tersebut seperti melihat ada berapa variabel yang digunakan, melihat type data dari masing-masing variabel, melihat apakah data yang null, berapa total record dari data tersebut, dsb. Beberapa fungsi yang dapat digunakan adalah

df_hotels.columns
df_hotels.dtypes
df_hotels.isna().sum(axis=0)

Penjelasannya adalah

  • df_hotels.columns merupakan perintah untuk menampilkan seluruh nama kolom yang ada pada database df_hotels
  • df_hotels.dtypes merupakan perintah untuk menampilkan type data dari seluruh kolom yang ada pada database df_hotels
  • df_hotels.isna().sum(axis=0) merupakan perintah untuk menampilkan null value yang ada pada tiap kolom di database df_hotels

Selanjutnya kita akan membahas contoh persoalan yang mungkin terjadi dan bagaimana script yang digunakan untuk penerapan jawabannya

Persoalan Nomor 1 : Buatlah fungsi dengan : 1 argumen berupa dataframe untuk mengecek data type, untuk mengecek jumlah null value, untuk mengecek percent null value, serta jumlah unique value tiap kolom yang ada di sebuah dataframe

def check_values(df):
data = []
for col in df.columns:
data.append([col, \
df[col].dtype, \
df[col].isna().sum(), \
round(100*(df[col].isna().sum()/len(df)),2), \
df[col].nunique()
])
return pd.DataFrame(columns=['dataFeatures', 'dataType','null','nullPct','nunique'], data=data)

fungsi diatas bisa disebut membuat method yang mana dalam argumen tersebut terdapat looping sebanyak jumlah kolom pada tabel dan setiap looping akan melakukan pengecekan type data (menggunakan dtype), melakukan pengcekan jumlah kolom null (menggunakan isna dan sum), melakukan perhitungan persentase n. ull (dengan cara menghitung total kolom null dibagi dengan panjang data kemudian dikali 100 dan dibulatkan dengan 2 angka dibelakang koma), dan yang terakhir melakukan perhitungan unique value (menunggunakan nunique).

Persoalan Nomor 2 : Ada berapa berapa jumlah pengunjung yang membatalkan reservasi dan yang tidak? Dan dari jumlah tersebut buatlah kesimpulan mengenai proporsisi masing-masing!

df_hotels.is_canceled.value_counts()

Kita menghitung jumlah data yang ada pada kolom is_canceled terlebih dahulu. Dan didapatkan hasilnya

Type untuk kolom is_canceled adalah integer, sehingga isi dari kolom tersebut adalah 0 dan 1 yang mana 0 menunjukkan false, dan 1 menunjukkan true atau jika dibaca berdasarkan hasilnya berarti ada 75166 yang tidak melakukan pembatalan reservasi dan ada 44224 yang melakukan pembatalan reservasi.

Karena sekarang kita sudah mendapatkan angkanya, maka selanjutnya kita bisa menggambarnya menggunakan grafik untuk mempermudah cara membacanya dengan menggunakan perintah

sns.countplot(data=df_hotels, x='is_canceled')
plt.title('Pembatalan Reservasi')
plt.show()

Persoalan Nomor 3 : Masih berkaitan dengan persoalan nomor 2, berapakah pembatalan reservasi untuk City Hotel dan Resort Hotel ?

Untuk persoalan nomor 3 ini masih sama dengan nomor 2 yaitu menggunakan acuan dari kolom is_canceled. Pertama yang kita lakukan adalah melihat berapa jumlah is_canceled dari masing-masing jenis hotel dan juga melihat berapa jumlah total recordnya.

df_hotels[df_hotels.hotel=='City Hotel'].is_canceled.value_counts()
df_hotels[df_hotels.hotel=='Resort Hotel'].is_canceled.value_counts()
len(df_hotels[(df_hotels.hotel=='City Hotel')])
len(df_hotels[(df_hotels.hotel=='Resort Hotel')])

Sebelum kita eksekusi menggunakan script, kita coba hitung manual terlebih dahulu

  • Perhitungan persentase pembatalan reservasi pada City Hotel :

→ (jumlah pembatalan/jumlah total City Hotel) x 100%

→ (33102/79330) x 100%

→ 41,7%

  • Perhitungan persentase pembatalan reservasi pada Resort Hotel :

→ (jumlah pembatalan/jumlah total Resort Hotel) x 100%

→ (11122/40060) x 100%

→ 27,8%

Jika dilihat dengan kasat mata, pembatalan reservasi lebih banyak terjadi pada City Hotel. Namun untuk melihat valid atau tidaknya, kita gunakan script berikut

round(len(df_hotels[(df_hotels.hotel=='City Hotel') & (df_hotels.is_canceled==1)]) / len(df_hotels[(df_hotels.hotel=='City Hotel')]) * 100,1)
round(len(df_hotels[(df_hotels.hotel=='Resort Hotel') & (df_hotels.is_canceled==1)]) / len(df_hotels[(df_hotels.hotel=='Resort Hotel')]) * 100,1)

Dan hasilnya pun sama seperti dengan perhitungan manualnya yaitu City Hotel lebih sering mengalami pembatalan reservasi dibandingkan dengan Resort Hotel.

Persoalan Nomor 4 : Lakukan filter sehingga hanya menampilkan data pengunjung yang tidak membatalkan reservasi. Dan simpan hasilnya dalam variabel df_checkout.

Masih menggunakan kolom yang sama yaitu is_canceled, namun disini kita menampung pada variabel baru yaitu df_checkout dan mengambil hanya pada data yang is_canceled nya false atau 0

df_checkout = (df_hotels[df_hotels.is_canceled==0])
df_checkout.shape

Persoalan Nomor 5 : Tampilkan jumlah reservasi tiap bulan kedatangan untuk masing-masing jenis hotel. Lalu di bulan apa terdapat reservasi yang paling banyak di masing-masing jenis hotel? Buatlah kesimpulan apakah trennya sama di kedua jenis hotel? Lakukan juga namun dengan nama bulan yang sudah di-mapping menjadi bulan dalam angka

Pada python, terdapat library yang dapat digunakan untuk membaca bulan yaitu calendar. Sehingga kita perlu import calendar terlebih dahulu.

import calendar

for i in calendar.month_name:
print(i)

Sekarang, karena ada permintaan untuk mengubah nama bulan menjadi angka sesuai urutan, maka kita buat variabel baru yaitu month_dict dan variabel itu nantinya akan melakukan convert nama bulan menjadi urutan bulan berupa angka

month_dict = {month: index for index, month in enumerate(calendar.month_name) if month}
month_dict

Jika sudah berhasil tersimpan, maka selanjutnya kita akan melihat berapa jumlah reservasi dari masing-masing jenis hotel di tiap bulannya dengan menggunakan script berikut

df_checkout.groupby(['hotel','arrival_date_month_num']).size()

Jika dilihat secara kasat mata, pada keduanya sama-sama memiliki jumlah pengunjung tertinggi pada bulan 8 (Agustus). Namun apabila hanya melihat berupa angka seperti itu, kita akan sedikit kesusahan karena dibutuhkan ketilitian membaca satu-persatu. Sehingga, dapat kita visualisasikan melalui grafik untuk mempermudah pemahaman dengan menggunakan script

sns.countplot(data=df_checkout, x='arrival_date_month_num',hue='hotel')
plt.xlabel('bulan kedatangan')
plt.ylabel('jumlah reservasi')
plt.show()

Jika dilihat menggunakan grafik, tentunya lebih mudah kan? Dengan sekali lihat, kita bisa langsung paham bahwa untuk City Hotel (warna orange), paling tinggi berada pada bulan 8 dengan jumlah reservasi lebih dari 5000 pengunjung. Dan pada Resort Hotel (warna biru), ada sedikit selisih antara bulan 7 dan bulan 8 yang mana keduanya melebihi 3000 pengunjung. Namun, bulan 8 masih lebih banyak daripada bulan 7.

Sehingga, kesimpulannya kedua jenis hotel tersebut, sama-sama memiliki jumlah reservasi yang tinggi di bulan 8 namun dengan jumlah pengunjung yang berbeda.

Pembelajaran dan pembahasan soal data analysis dengan Python kita cukupkan sampai sini dulu. Selanjutnya ada materi yang tak kalah menariknya yaitu mengenai visualisasi data.

--

--

Nindy AA
Nindy AA

No responses yet