Sebelum belajar lebih jauh terkait data analisis, hal terpenting adalah memahami terlebih dahulu mengenai konsep dari data. Data merupakan sekumpulan fakta dengan bentuk yang beragam. Data banyak sekali jenisnya dan tersebar dimana-mana, salah satunya contoh data pada suatu perusahaan yang memilik beragam variasi serta jumlah yang sangat banyak. Tetapi, data hanyalah sekedar data apabila tidak dimanfaatkan dengan baik. Oleh karena itu, disinilah pentingnya peran data analyst.
Data analysis memiliki definisi yaitu proses mengolah data mentah menjadi informasi yang berguna dan dapat dijadikan sebagai insight. Sedangkan orang yang melakukan pengolahan tersebut disebut data analyst.
Selain belajar menggunakan SQL, kita nantinya juga akan belajar terkait Python dan Data Visualization yang bisa diakses melalui link berikut :
Bagaimana proses seorang data analyst melakukan proses pengolahan data menjadi sebuah insight?
Ada 5 point yang dapat dilakukan yaitu :
- Mendefinisikan sebuah masalah
- Menentukan kebutuhan data
- Praproses data
- Melakukan analisa data
- Interpretasi hasil analisa
Step krusial dari melakukan analisa data adalah yaitu menentukan latar belakang mengapa analisis ini perlu dilakukan, yang biasanya diawali oleh sebuah permasalahan dan kita diminta untuk menyelesaikan permasalahan tersebut. Contohnya ada seseorang yang akan menjadi investor di suatu perusahaan dan ia meminta untuk track report data penjualan pada 3 tahun terakhir. Namun yang tak kalah pentingnya adalah kita perlu mengkomunikasikan dengan stakeholder terkait urgensi yang sebetulnya dibutuhkan untuk menjawab suatu permasalahan tersebut, seperti apakah yang dibutuhkan hanya fokus pada data penjualan saja atau apakah data yang dibutuhkan mencakup penjualan di seluruh cabang, dsb.
Setelah jelas terkait permasalahan yang akan dipecahkan, selanjutnya akan dengan mudah menentukan data seperti apa dan bagaimana yang akan digunakan. Jenis data dibagi menjadi 3 yaitu data internal yang merupakan data milik perusahaan itu sendiri (contoh : data produksi perusahaan), data external merupakan data yang diprovide untuk internal perusahaan (contoh: data dari vendor), dan open data yang merupakan data dapat diakses oleh semua orang (contoh: data negara, data kota, data kecamatan yang ada di dunia).
Step selanjutnya setelah menentukan data seperti apa yang digunakan, maka diperlukan tahapan praproses data dengan cara merapikan data yang tujuannya adalah menghilangkan data duplikat, data anomali, data yang menjadi bias hingga menyamakan format dan tipe data agar kesimpulan yang dihasilkan menjadi valid dan sesuai dengan yang dibutuhkan.
Apabila semua data sudah berhasil, langkah utama dalam data analysis yaitu melakukan analisa data. Media yang digunakan dalam analisa dapat menggunakan tiga pilihan yaitu
- SQL Based (MySQL, PostgreSQL)
- Spreadsheet Based (Google Spreadsheet, Microsoft Excel)
- Coding Based (Python, R)
Ketika melakukan analisa, ada banyak formula yang dapat digunakan seperti contohnya max untuk menentukan nilai maksimal dari data, min untuk menentukan nilai minimal dari data, average untuk menentukan nilai rata-rata dari data, dsb.
Tahapan terakhir adalah menjadikan hasil analisa menjadi suatu insight yang berharga, biasanya menggunakan data visualisasi berupa grafik atau tabel tergantung kebutuhan dengan syarat harus menyajikan semua data yang memang dibutuhkan sesuai permasalahan yang telah didefinisikan di awal.
Bagaimana cara implementasinya?
Pada artikel terkait data analysis ini, media/alat pertama yang akan digunakan untuk melakukan analisa adalah menggunakan SQL Based yaitu PostgreSQL. Terkait cara penginstallannya cukup mudah, untuk pengguna windows, bisa didownload melalui link https://www.enterprisedb.com/downloads/postgres-postgresql-downloads sesuaikan dengan tipe windows masing-masing. Setelah berhasil diinstall, selanjutnya kita membuka aplikasi pgAdmin dan masukkan password yang mudah diingat, karena tersebut harus diinputkan ketika kita akan membuka pgAdmin.
Setelah berhasil install dan masuk ke pgAdmin, selanjutnya adalah membuat database baru dengan cara klik kanan pada PostgreSQL 15 > Create > Database. Beri nama database sesuai dengan kebutuhan.
Untuk contoh disini menggunakan database “unicorn” karena database tersebut akan berisi terkait data unicorn yang ada diseluruh dunia. Untuk melakukan upload data pada database yang telah dibuat, silahkan bisa dilakukan dengan cara klik kanan pada database yang baru saja dibuat > klik Restore, maka akan muncul pop up untuk memilih lokasi file .csv mana yang akan kita upload.
Ada 4 tabel yang akan digunakan disini yaitu
- Companies berisi detail data dari unicorn tersebut seperti nama unicorn dan berada di kota, negara, serta benua mana (terdapat 5 atribut dan 1074 data).
- Dates berisi detail data dimana unicorn tersebut ditemukan dan bergabung (terdapat 4 atribut dan 1074 data).
- Funding berisi detail data investor beserta pendanaan serta valuasi dari tiap unicorn (terdapat 3 atribut dan 1074 data).
- Industries berisi detail data terkait bidang yang digeluti oleh unicorn tersebut (terdapat 2 atribut dan 1074 data).
Contoh penggunaan SQL dalam memecahkan suatu permasalahan
Seorang stakeholder melontarkan sebuah pertanyaan “ada berapa banyak industri yang ada saat ini dan berapa perusahaan yang bergerak di masing-masing bidang industri tersebut?”
Disini apabila kita hanya melihat berdasarkan data yang ada tanpa dilakukan pengolahan kategori, maka kita akan kesulitan untuk menjawab pertanyaan tersebut. Oleh karena itu, untuk memudahkan seorang analis, SQL dapat dimanfaatkan untuk mengerucutkan data yang sangat banyak itu menggunakan suatu script query seperti berikut
select
industry,
count(1)
from
unicorn_companies uc,
unicorn_industries ui
where
uc.company_id = ui.company_id
group by 1
order by 2 desc
penjelasannya adalah sebagai berikut :
- select merupakan perintah yang digunakan untuk memilih / menampilkan kolom mana yang ingin ditampilkan dari suatu tabel.
- from merupakan perintah yang digunakan untuk menunjuk tabel mana yang akan digunakan berdasarkan kolom yang akan ditampilkan.
- where merupakan perintah untuk menentukan kondisi khusus berupa pengkategorian hasil yang ingin ditampilkan.
- group by merupakan perintah untuk mengelompokkan data yang memiliki value yang sama.
- order by merupakan perintah untuk mengurutkan tampilan data (apakah ascending atau descending).
apabila script query tersebut dijalankan, maka hasilnya adalah sebagai berikut
keterangan dari hasil tersebut adalah menampilkan seluruh industri yang ada dengan jumlah company yang bergerak di bidang industri tersebut dan diurutkan berdasarkan jumlah industri terbanyak.
Contohnya ada 224 company yang bergerak di bidang industri Fintech, ada 205 company yang bergerak di bidang industri Internet Software & Service, dst. Sehingga, dapat diambil kesimpulan bahwa ada kemungkinan industri Fintech lebih banyak memiliki prospek kedepannya dibandingkan dengan industri lainnya.
Namun, kesimpulan tersebut belum valid, karena itu masih kesimpulan awal dan hanya diambil berdasarkan jumlah companynya saja. Sedangkan, mungkin bisa jadi ada kemungkinan lain yang dapat mempengaruhi kesimpulan tersebut seperti contohnya berapa laba pertahun yang diperoleh oleh masing-masing industri? dan belum tentu industri yang memiliki jumlah terbanyak menjadi industri yang memperoleh laba terbesar pertahunnya.
Permasalahan Nomor 1 : Urutkan benua berdasarkan jumlah company terbanyak. Benua mana yang memiliki unicorn paling banyak?
Script yang digunakan untuk persoalan nomor 1 hanya menggunakan 1 tabel saja yaitu unicorn_companies.
select continent, sum(1)
from unicorn_companies
group by 1
order by 2 desc
Penjelasan script query diatas adalah sbb :
- select continent digunakan untuk menampilkan seluruh benua yang ada pada tabel.
- select sum(1) digunakan untuk menampilkan jumlah seluruh company yang ada berdasarkan benua. (1) menunjukkan bahwa ia merujuk pada kolom 1 yang akan ditampilkan.
- from unicorn_companies digunakan untuk menunjuk tabel mana yang digunakan.
- group by 1 digunakan untuk menunjukkan bahwa pengelompokkan jumlah harus berdasarkan kolom 1.
- order by 2 desc digunakan untuk mengurutkan tampilan berdasarkan jumlah benua terbanyak
Kesimpulan yang didapat untuk persoalan nomor 1 adalah ada 6 benua dan yang memiliki company paling banyak adalah North America dengan jumlah company sebanyak 589 company.
Permasalahan Nomor 2 : Negara apa saja yang memiliki jumlah unicorn di atas 100? (Tampilkan jumlahnya)
Untuk permasalahan nomor 2 masih sama dengan nomor 1, yaitu hanya menggunakan 1 tabel saja yaitu unicorn_companies.
select country, count(1)
from unicorn_companies
group by 1
having count(1) > 100
order by 2 desc
untuk penjelasan script query yang digunakan juga masih sama dengan nomor 1, namun ada satu perintah baru yang digunakan disini yaitu having count.
having count(1) > 100 menunjukkan bahwa disini kita melihat mana hasil penjumlahan pada kolom 2 yang nilainya lebih dari 100 berdasarkan kolom 1 (negara).
Dan dari hasil tersebut ternyata hanya ada 2 negara yang memiliki company lebih dari 100 yaitu United States dengan jumlah company sebanyak 562 dan China dengan jumlah company sebanyak 173 company.
Permasalahan Nomor 3 : Industri apa yang paling besar di antara unicorn company berdasarkan total fundingnya? Berapa rata-rata valuasinya?
select industry,
sum(funding),
round(avg(valuation),0)
from unicorn_industries ui, unicorn_funding uf
where
ui.company_id = uf.company_id
group by 1
order by 2 desc
Pada permasalahan nomor 3 ini, sudah mulai menggunakan join 2 tabel. Sehingga penggunaan from nya bisa menggunakan seperti berikut from tabel1, tabel2 where tabel1.primarykey1 = tabel2.primarykey2. Penjelasannya adalah kita harus menghubungkan field yang menjadi primary key di tabel A dan menjadi foreign key di tabel B. Sebenarnya fungsi join sendiri bisa dituliskan menggunakan
select tabel1.* , tabel2.*
from tabel1 join tabel2 on tabel1.primarykey1 = tabel2.primarykey2
Akan tetapi akan lebih mudah supaya tidak terlalu panjang querynya, maka saya tidak biasa menggunakan query seperti di atas.
Selain terdapat fungsi join 2 tabel, pada persoalan ini dijumpai query baru yaitu round. Round berfungsi untuk melakukan pembulatan terhadap hasil perhitungan aritmatika. Untuk penulisan round sendiri bisa seperti berikut :
round(field, 0) --> 356
round(field, 1) --> 355,8
round(field, 2) --> 355,83
round(field, 3) --> 355,831
Persoalan Nomor 4 : Berdasarkan dataset ini, untuk industri jawaban nomor 3 berapakah jumlah company yang bergabung sebagai unicorn di tiap tahunnya di rentang tahun 2016–2022?
Apabila di nomor sebelumnya kita telah belajar join 2 tabel, maka di persoalan ini kita akan menggunakan join 3 tabel dengan penulisan script sebagai berikut :
select date_part('year', date_joined), sum(1)
from
unicorn_companies uc,
unicorn_industries ui,
unicorn_dates ud
where uc.company_id = ui.company_id
and uc.company_id = ud.company_id
and date_part('year', date_joined) between 2016 and 2022
group by 1
order by 1
Secara query tidak berbeda jauh dengan 3 nomor sebelumnya. Namun disini kita menjumpai suatu query baru yaitu date_part. Date_part adalah fungsi yang digunakan untuk memecah atau mengambil bagian tertentu dari sebuah field yang berformat date/datetime. Seperti contohnya apabila ada field “tanggal” yang isi datanya adalah “2022–01–05 12:01:25 PM”, maka fungsi date_part berikut dapat digunakan :
date_part('date',tanggal) --> 05
date_part('month',tanggal) --> 01
date_part('year',tanggal) --> 2022
Selain itu, ada satu lagi fungsi yang baru muncul pada persoalan nomor 4 ini, yaitu “between” yang merupakan fungsi untuk menentukan data antara. Jika diatas menggunakan query date_part(‘year’, date_joined) between 2016 and 2022, maka hasil eksekusi query tersebut akan mengambil tahun berdasarkan field date_joined hanya antara tahun 2016 sd 2022 saja.
Persoalan Nomor 5 : Tampilkan data detail company (nama company, kota asal, negara dan benua asal) beserta industri dan valuasinya. Dari negara mana company dengan valuasi terbesar berasal dan apa industrinya? Bagaimana dengan Indonesia? Company apa yang memiliki valuasi paling besar di Indonesia?
select uc.*, industry, valuation
from unicorn_companies uc,
unicorn_industries ui,
unicorn_funding uf
where uc.company_id = ui.company_id
and uc.company_id = uf.company_id
and country = 'Indonesia'
order by valuation desc
Persoalan nomor 5 masih menggunakan struktur query yang sama dengan sebelumnya dan melibatkan 3 tabel, hanya saja ada penambahan kondisi disini dengan berfokus pada country yang hanya “Indonesia” saja, sehingga query kondisinya cukup ditambahkan :
where country = 'Indonesia'
Persoalan Nomor 6 : Berapa umur company tertua ketika company tersebut bergabung menjadi unicorn company? Dari negara mana company tersebut berasal?
select company, country,
date_part('year', date_joined), year_founded,
date_part('year', date_joined) - year_founded
from unicorn_companies uc, unicorn_dates ud
where uc.company_id = ud.company_id
Apabila pada soal nomor 4 date_part berdiri sendiri, maka pada soal nomor ini, dapat kita jumpai bahwa ternyata hasil pemecahan dari date_part dapat dilakukan operasi aritmatika dengan field lain (namun dengan syarat tipe data kedua field tersebut harus sama).
Persoalan Nomor 7 : Untuk company yang didirikan tahun antara tahun 1960 dan 2000 (batas atas dan bawah masuk ke dalam rentang), berapa umur company tertua ketika company tersebut bergabung menjadi unicorn company (date_joined)? Dari negara mana company tersebut berasal?
select company, country,
date_part('year', date_joined), year_founded,
date_part('year', date_joined) - year_founded
from unicorn_companies uc, unicorn_dates ud
where uc.company_id = ud.company_id
and year_founded between 1968 and 2000
order by 5 desc
Untuk menyelesaikan permasalahan pada soal nomor 7, dapat menggunakan penggabungan antara penjelasan di soal nomor 6 dengan 4 yaitu menggunakan operasi aritmatika pada hasil query date_part dan juga menggunakan between pada kondisi yang dibutuhkan.
Persoalan Nomor 8A : Ada berapa company yang dibiayai oleh minimal satu investor yang mengandung nama ‘venture’?
Untuk menyelesaikan persoalan ini, cukup mudah dan hanya menggunakan 1 tabel saja yaitu
select count(distinct(company_id))
from unicorn_funding
where lower(select_investors) like '%venture%'
Namun yang baru kita jumpai disini adalah lower(nama_field) like ‘%yang dicari%’. Untuk apa sebenarnya fungsi tersebut? Mari kita lihat bersama-sama pada contoh berikut :
Apabila ada list nama berikut :
Ratna, ratnawati, ratnAmbarwati, Retno Tri, retnoSuliswati
nama like 'ratna' --> no result
nama like 'Ratna' --> 1 record yaitu Ratna
nama like 'ratna%' --> 1 record yaitu ratnawati
nama like 'rat%' --> 2 record yaitu ratnawati dan ratnAmbarwati
nama like '%wati' --> 3 record yaitu ratnawati, ratnAmbarwati, dan retnoSuliswati
nama like '%bar%' --> 1 record yaitu ratnAmbarwati
lower(nama) like 'ratna' --> 1 record yaitu ratna
lower(nama) like 'ratna%' --> 2 record yaitu ratnawati dan ratnAmbarwati
jadi dapat disimpulkan bahwa penggunaan lower adalah melepas case sensitive, sehingga apabila ada huruf besar, maka ia akan dibaca menjadi huruf kecil semua.
Sedangkan penggunaan % pada SQL like adalah
- apabila % diawal kalimat (%ratna), maka perintah tersebut digunakan untuk menampilkan semua nama berawal apapun asalkan semua berakhiran ‘ratna’ (ex : sulistya ratna)
- apabila % diakhir kalimat (ratna%), maka perintah tersebut digunakan untuk menampilkan semua nama berakhiran apapun asalkan semua berawalan ‘ratna’ (ex : ratna gumilar rahardjo)
- apabila % diawal dan diakhir kalimat (%ratna%), maka perintah tersebut digunakan untuk menampilkan semua nama berawal dan berakhiran apapun asalkan kata tengahnya mengandung ‘ratna’ (ex : mulia ratna dewi)
Persoalan Nomor 8B : Ada berapa company yang dibiayai oleh minimal satu investor yang mengandung nama: Venture, Capital, Partner
select
count(distinct case when lower(select_investors) like '%venture%' then company_id end) as investor_venture,
count(distinct case when lower(select_investors) like '%capital%' then company_id end) as investor_capital,
count(distinct case when lower(select_investors) like '%partner%' then company_id end) as investor_partner
from unicorn_funding uf
Penjelasan terhadap script query nomor 8 adalah
- distinct digunakan untuk menampilkan nilai tunggal atas data tersebut (sebenarnya fungsinya hampir mirip dengan group by) — apabila ada list nama sbb : Nana, Nana, Nana, Mira, Mira, Bila, Dana — maka sebenarnya dalam list nama tersebut hanya terdapat 4 nama berbeda yaitu Nana, Mira, Bila, dan Dana.
- case when biasa digunakan untuk membuat kategori atau pengelompokan baru — apabila ada list nama obat sbb : Panadol, Bodrex, OBH, Komix, Cataflam — maka kita akan menambahkan pengkategorian sbb ‘apabila nama obat adalah Panadol dan Bodrex, maka ia akan dikategorikan sebagai obat panas’ dan ‘apabila selain Panadol dan Bodrex, ia akan dikategorikan sebagai obat pendukung’.
Persoalan Nomor 9 : Di Indonesia terdapat banyak startup yang bergerak di bidang layanan logistik. Ada berapa startup logistik yang termasuk unicorn di Asia? Berapa banyak startup logistik yang termasuk unicorn di Indonesia?
select
count(distinct uc.company_id) as total_asia,
count(distinct case when country = 'Indonesia' then uc.company_id end) as total_indonesia
from unicorn_companies uc, unicorn_industries ui
where uc.company_id = ui.company_id
and industry = '"Supply chain, logistics, & delivery"'
and continent = 'Asia'
Untuk menyelesaikan persoalan nomor 9 tidak terlalu berbeda jauh dengan penjelasannya dengan soal sebelumnya, hanya saja dia menggabungkan beberapa script untuk mendapatkan kesimpulan yang diinginkan.
Pembelajaran dan pembahasan soal data analysis dengan SQL kita cukupkan sampai sini dulu. Selanjutnya ada materi yang lebih menarik yaitu menggunakan python dan juga visualisasi data.