Wednesday, 5 June 2024

JURUS PEMBELAH DATA

Tulisan berikut ini adalah perjalanan penulis membuka data dari sisi pandang data scientist

Pemahaman Bisnis

Judul: Stroke Prediction Dataset

Kolom: id, gender, age, hypertension, heart_disease, ever_married, work_type, Residence_type, avg_glucose_level, bmi, smoking_status, stroke.

Tujuan: analisa dan indentifikasi stroke berdasarkan 10 variabel diatas.

Pemahaman Data

Data set terdiri dari 10 feature dan 1 target. Feature terbagi atas feature kunci dan feature demografi, dengan dimensi 5110x12.  

print("Dataset Length: ", len(dataFrame))
print("Dataset Shape: ", dataFrame.shape)
print("Dataset: ", dataFrame.head())


Data Shape

Selanjutnya statistik dasar dari data set yg dimiliki
Basic Statistic



Tentukan kolom mana yang akan menjadi variabel dan target. sebagai contoh, data stroke, tentunya yang menjadi target adalam kolom stroke (stroke<1> atau tidak stroke<0>).

Ketahui jenis data dengan perintah dataFrame.dtype(), kenali nilai unik pada setiap kolom , menggunakan dataFrame.nunique(). Menjadi perhatian bahwa kolom gender dapat berisikan lebih dari 2 nilai unik.

Lacak nilai null atau NaN dari data yang anda miliki, dengan menjalankan perintah dataFrame.isna(),sum().

Bersihkan NaN dengan memakai langkah eliminasi atau imputasi. imputasi terdiri dari beberapa teknik seperti:

1. Imputasi mean/median/mode.
2. Imputasi regresi
3. Imputasi hot/cold deck
4. Imputasi multiple imputation

Imputasi mean/median/mode adalah imputasi tercepat untuk membersihkan NaN. Target imputasi  adalah output dari perinah dataFrame.isna().sum() memberikan nilai 0.

Langkah tambahan adalah mengelompokan nilai-nilai, seperti umur, pendidikan ataupun pekerjaan. Hal ini akan memudahkan proses klasifikasi dan prediksi. Jika sebagian besar sampling memiliki rentang umur sampai 80 tahun, maka 1 buah sampling dengan usia 100 akan mengganggu analisa. sehingga perlu dikelompokan dalam kategori usia lanjut (60-100).

Klasifikasi KNN, SVM, Decision Tree dan Regresi Linier tidak dapat membaca nilai huruf (laki-laki/perempuan). Untuk mengatasi ini anda perlu melakukan encode terhadap nilai-nilai tersebut. 

Proses encode akan merubah karakter menjadi interger, laki-laki = 1. perempuan = 2 atau anak-anak = 1, remaja =2 dan seterusnya.


Thursday, 30 March 2023

Modifikasi End Of Month di Power BI

Modifikasi End Of Month di Power BI

Pada grup PBI ada sebuah pertanyaan dari member dengan nama Gregory Gue. Dia menanyakan bagaimana membuat rumusan DAX untuk total penjualan per bulan. Jika perusahaannya menggunakan waktu yang berbeda. 
Perusahaan si Gregory ini agak nyeleneh dengan menentukan end of month adalah hari sabtu terakhir tiap bulannya.

Menentukan end of month dalam kondisi normal tentunya sangat mudah pada Power BI. Banyak fungsi yang dapat digunakan, seperti ENDOFMONTH[date] atau MAX[date]. Beda kasusnya jika end of month adalah hari sabtu terakhir... jan ngawur tenan rek

Begini kepusingan si Gregory:

I want to do a measure like

Custom Month to date =

CALCULATE (
    [Total Sales Amount],
    Filter(table name [Invoice_date_stn_inv_dt] >= table [Start of the month]) and table[End of month] )

Saya dan kolega saya pada diskusi grup tersebut, menyarankan solusi dengan menggunakan tabel Kelender/Tanggalan. Logikanya invoice date akan di lookup pada tabel Kalender sehingga akan lebih mudah melakukan pengaturan rentang waktu menggunakan tabel Kalender.
Pada tabel kalender dapat dengan mudah melakukan pembobotan atau indeks dari setiap tanggal atau hari. Perjanjian international telah menentukan urutan nomor hari adalah 1 = Minggu sampai 7 = Sabtu.

Solusinya

Solusinya adalah dengan membuat bobot/indeks/flag atau nilai (1) pada hari sabtu terakhir. sehingga akan dengan mudah menentukan rentang waktu antara awal bulan dengan tanggal yg memiliki nilai (1) pada bulan tersebut.

Pertama, buat kolom nomor hari di tabel kalender (1-7), weekday[Date]
Kedua, buat kolom yang melakukan pembobotan 0 jika tanggal tersebut bukan lah hari sabtu (!=7) dan berikan nilai 1 jika tanggal tersebut adalah hari sabtu terakhir di bulan tersebut

Ekspresi DAX nya adalah:

Hari Sabtu Terakhir = IF(DATEADD(Tanggalan[Date],7,DAY) > ENDOFMONTH(Tanggalan[Date])  &&  Tanggalan[Hari]= 7,1,0)

DATEADD(Tanggalan[Date],7,DAY) = tambahkan 7 hari kedepan pada sebuah tanggal

ENDOFMONTH(Tanggalan[Date]) = menentukan hari terakhir dari bulan terkait

Tanggalan[Hari] = tentukan hari tersebut adalah sabtu (7)







Hasilnya dapat dilihat pada gambar diatas, Tgl 25 Januari 2020 adalah hari sabtu terakhir pada bulan
tersebut.

 
Diskusi lengkap bisa anda lihat pada link berikut ini:

#powerbi
#dax

Friday, 17 March 2023

EXCEL XLOOKUP brooo...!!!

EXCEL XLOOKUP brooo...!!!

Hari ini ada sebuah tawaran unik pada situs upwork.com. Tawarannya adalah sebagai berikut:

URGENT! We need this completed within the hour.

We need help with a quick vlookup formula.

If column B in sheet 1 matches column A in sheet 2, then pull data from column B in sheet 2 and place it into Column P in sheet 1


EZEEET kata anak jaman now

Microsoft Excel memiliki beberapa fungsi lookup yaitu, lookup, vlookup (yang sangat populer) dan hlookup. Silahkan anda cari definisi dari masing-masing fungsi tersebut.

Untuk kebutuhan tugas diatas, terdapat 1 fitur terbaru dari excel yaitu XLOOKUP. XLOOKUP adalah versi fleksibel dari keluarga LOOKUP. Fitur ini dapat melakukan pencocokan dalam rentang data secara kolom maupun baris. XLOOKUP juga dilengkapi dengan kemampuan pencocokan approximate ,exact matching dan wildcards (* ?) untuk pencocokan parsial.

Rumus dasarnya adalah = XLOOKUP(Referensi kolom/nilai; kolom/nilai yang dicocokan; kolom/nilai yang akan ditampilkan)

Mari kita bedah soal diatas


Gambar diatas menampilkan dua buah lembar kerja Excel. Nomor pelanggan pada kolom B menjadi kolom referensi. Cust No, pada kolom A di lembar lainnya menjadi data yang akan dicocokan. sedangkan kolom B pada lembar kerja tersebut menjadi nilai yang akan dikembalikan.

Maka persamaan yang dapat dibuat adalah XLOOKUP(B3;Turnover!$A$2:$A$236;Turnover!$B$2:$B$236;0)

B3 adalah nomor pelanggan
Turnover!$A$2:$A$236 adalah rentang data
Turnover!$B$2:$B$236 adalah nilai yang dikembalikan
0 adalah nilai yang dikembalikan jika tidak ada kecocokan Lookup

XLOOKUP menurut saya adalah fungsi yang sangat memudahkan  dan fleksibel. Tidak hanya LOOKUP sebuah nilai namun penggabungan teks juga dapat dilakukan oleh fitur ini.

Terima Kasih

#excel
#simpeldata
#simpledata
#ETL
#datapreparation



Sunday, 12 March 2023

Ekstrak Data dan Normalisasi Data

 Ekstrak Data dan Normalisasi Data


Tulisan kali ini menyampaikan hasil pekerjaan dengan orang asing. Ini adalah pekerjaan pertama yang saya dapatkan dari situs freelancer www.upwork.com. Silahkan teman-teman mencoba disana.

Ekstrak data dan normalisasi adalah istilah-istilah yang sering saya dengan dan sering saya "lakukan". YA, ada quot pada kata lakukan. Artinya saya merasa telah melakukan ekstrak data dan normalisasi. tapi apakah ekstrak dan normalisasi itu sudah benar. Disini lah ujian pertama yang harus saya hadapi secara remote antara +62 dan +1. 

Sejak memasuki dunia data tahun 2015, ekstrak data dan normalisasi adalah hal yang biasa. Data-data yang diperoleh dari API, Web Service maupun CSV/Excel dibaca dengan mudah menggunakan Pentaho, MS Studio dan Talend Open Studio. YA, mereka terdiri dari ratusan ribu baris, tapi mereka sudah terformat dalam struktur. Apakah itu XML, CSV, JSON dan berisikan 1 buah nilai data untuk setiap cell-nya.Sehingga saya yakin dapat melakukannya. 
Bagaimana dengan data dalam bentuk kalimat tanpa struktur???.. Alhasil butuh 1 minggu agar saya dapat paham bagaimana cara ekstrak data. Berikut contoh datanya.



Yang harus anda lakukan adalah memilah dan mengambil kata, huruf dan angka yang memiliki kontribusi terhadap perhitungan. 
Tempatkan setiap temuan anda dalam usulan rencana kolom/field, dan kumpulkan setiap nilai yang ditemukan dalam usulan nilai. Selanjutnya lakukan normalisasi dari setiap nilai/value dan tentukan bentuk widget yang sesuai (single select, multi select)

Contoh data:
Any disputes or missing time must be made to Qualivis within 21 days from the end of the work week (15
days from invoice date). FILL OUT QUALIVIS TIME CORRECTION FORM AND SUBMIT IT TO BILLINGQUESTIONS@QUALIVIS.COM

Hasil Ekstrak:
  1. Qualivis
  2. 21 
  3. 15
  4. billingquestions@qualivis.com
  5. day(s)
Hasil Normalisasi
  1. Angka/Int = 21,15
  2. String = Qualivis
  3. Email = billingquestions@gualivis.com
  4. Variabel = days

Dari pekerjaan diatas akan disusun kedalam dokumen pengembangan sebagai acuan para programmer dan DBA

Title

Data Type

Field Name

Values

Tooltip

Call Off Option

String

Call Off Option

None, Guaranteed, Not Guaranteed, Varied, Facility

 

Call Off Value

Integer

Call Off Value

1,2,3,12, 24…

Represent number of hour, week, shift

Call Off Units

String

Call Off Var

Shift, hours, weeks

This value represent the unit of value

Call Off Statement

String

Call Off Statement

only if unit is closed,

no call off but they reserve the right to float them to get hours

Holiday facility call off

Additional information regarding to call off


Apa yang telah saya kerjaan tidak 100% memuaskan klien di US, tapi mereka dapat menerimanya. 
Ini pengalaman yang sangat berharga. Saat ini saya bisa mengatakan bahwa mampu dalam ekstrak dan normalisasi data dan bukan jagoan kandang. 

#excel
#ETL
#data analyst
#data extraction
#data normalization

Tuesday, 21 February 2023

Ekstrak Data JSON dengan Talend Open Studio

Ekstrak Data JSON dengan Talend Open Studio

Posting ini kelanjutan dari unggahan sebelumnya thttprequest-tos . Skema JSON dan XML merupakan format standar yang mudah dibaca dalam proses pembuatan pipeline atau integrasi data. Namun proses ekstrak data kerap kali hanya membutuhkan data-data yang spesifik. Pengalaman seorang pipeline builder akan diuji pada pemilihan data mana yang akan di ekstrak. Setiap format atau skema JSON maupun XML memiliki pola yang berbeda-beda. sebagai contoh data banjir 10 tahun (reiver discharge) yang penulis dapatkan dari situs www.open-meteo.com 

{

"latitude": -6.8999977,

"longitude": 109.70001,

"generationtime_ms": 0.42700767517089844,

"utc_offset_seconds": 0,

"timezone": "GMT",

"timezone_abbreviation": "GMT",

"daily_units": {

"time": "iso8601",

"river_discharge": "m³/s"

},

"daily": {

"time": [

"2012-01-01",

"2012-01-02",

"2012-01-03",

"2012-01-04",

"2012-01-05", 

                        ...dstnya


Data yang diharapkan ada pada path "time" dan "river_discharge". Prosesnya adalah sebagai berikut:

  1. Buat proyek baru pada Talend Open Studio (TOS)
  2. Ikuti langkah-langkah pada postingan thttprequest-tos.
  3. Ambil file yang telah di download pada langkah kedua.
  4. Tentukan path JSON yang sesuai dengan pilihan data, yakni "time" dan "river_discharge".
Langkah-langkahnya 
  1. Pada jendela Designer, tempatkan komponen tFileInputJson dan tLogRow. tFileInputJson berfungsi mengambil file yang telah disimpan dan mengekstrak data. tLogRow difungsikan sebagai visualisasi data ekstrak sebelum di load ke dalam database.
  2. Klik ganda pada komponen tFileInputJson untuk membuka tab component.
  3. Pada menu Basic Setting, tentukan kolom data yang dipilih melalui tombol Edit Schema (lingkaran merah). 



    Ubah nama kolom sesuai dengan skema json, tentukan tipe file (date dan double) dan format tanggal (yyyy-MM-dd). Pilih tombol OK untuk kembali pada tab component.
  4. Tentukan Read By: JsonPath Without Loop. Ini adalah bagian yang perhatian khusus. tidak semua skema json dapat menggunakan Read By JsonPath Without Loop. Anda harus melakukan riset untuk menentukan pilihan Read By yang tepat.
  5. Karena menggunakan file yang telah diunduh, maka arahkan filename sesuai letak berkas.
  6. kemudian set mapping untuk kedua kolom dengan isian berikut:
    - $.daily.time[*]
    - $.daily.river_discharge[*]
  7. Selanjutnya klik kanan pada komponen tFileInputJson, hubungkan dengan komponen tLogRow melalui menu row>main.
  8. Pilih mode Table untuk tampilan keluaran data.



  9. keseluruhan disain pipeline seperti gambar berikut.



  10. Eksekusi disain Anda dengan tombul Run pada tab >>Run, dan akan menghasilkan aliran data seperti dibawah ini.



Selamat mencoba dan tinggalkan komentar Anda untuk postingan ini.

#talendopenstudio
#dataintegration
#etl
#pipelinebuilder

Thursday, 9 February 2023

tHttpRequest - Talend Open Studio

 Komponen tHttpRequest pada Talend Open Studio

tHttpRequest adalah komponen magic yang saya sukai pada Talend Open Studio (TOS). Nama komponen tersebut sudah menandakan fungsinya, yaitu melakukan permintaan perintah HTTP baik POST maupun GET.

Banyak petunjuk penggunaan atau tutorial dalam metode ektrak, transfer dan load menggunakan file CSV. Itu mungkin cara yang singkat untuk menulis sebuah tutorial. Kenyataan dalam sebuah sistem adalah "Bisa tidak ambil langsung dari sumbernya?". Khususnya kita warga +62 yang sangat menyukai otomasi. Jika anda sampaikan pada klien bahwa diperlukan admin untuk unduh file, kemudian unggah kembali ke dalam sistem. Maka 99% sistem akan mangkrak setelah serah terima.

Web service atau API adalah urutan perintah permintaan http yang sangat memudahkan dalam proses pengumpulan data. Kita sangat sering berinteraksi dengan web service dalam dunia ektrak, transfer dan load (ETL). Komponen tHttpRequest menjadi favorit saya guna mengambil data secara online untuk membangun pipeline ETL. 

Mudahnya silahkan buka TOS anda, buat repository project dan buat job baru pada menu Job Design. Anda akan dihadapkan dengan kanvas kosong untuk disain pipeline. Pilih tHttpRequest pada palete komponen, kemudian letakkan pada kanvas Anda.


Double klik pada komponen tHttpRequest akan membuka tab Component di jendela bawah kanvas. Atribut pertama adalah properti, yaitu skema dari struktur JSON file sumber. Karena tugasnya hanya untuk unduh file maka atribut properti tidak ada pilihannya. Jika Anda sunting skema, maka kolom yang tersedia adalah "ResponContent" dengan karakter string.

Selanjutnya adalah atribut URI, saya gunakan alamat dari BMKG, yaitu https://peta-maritim.bmkg.go.id/public_api/overview/gelombang.json. Pilih metode GET untuk ambil data json dari alamat tersebut.

Melihat hasil permintaan http dapat dilakukan dengan menambah komponen tLogRow. Hubungkan kedua komponen dengan koneksi Row > Main, klik kanan pada komponen tHttpRequest. Buka Tab Run Job dan eksekusi tombol <Run>, akan menampilkan isi data. Dapat dilihat pada gambar dibawah ini.


Selamat, Anda berhasil mengambil data dalam format JSON. Jika anda hendak menyimpan berkas, aktifkan pilihan <Write respon content to file> pada tab componen tHttpRequest. Masukkan alamat direktori yang sesuai.
Catatan : file json tujuan harus dibuat terlebih dahulu pada direktori tujuan.

Terima Kasih, silahkan beri komentar pada postingan ini

#TOS #talendopenstudio #dataintegration #etl
 

Tuesday, 7 February 2023

Bigquery Google dengan 10 Tahun data Banjir Kota Pekalongan

Membuat Dataset sendiri pada Bigquery Google

Menggunakan Data Banjir 10 Tahun Kota Pekalongan 

Tulisan ini terprovokasi oleh salah satu perusahaan yang mensyaratkan kemampuan BigQuery Google. Penulis pun mulai mencari apa itu Bigquery. Pada dokumentasi google, Bigquery adalah data warehouse enterprise berbasis cloud dengan biaya efektif dan tanpa server. Dibangun lengkap dengan Machine Learning (ML) dan Bisnis Intelejen (BI). Demo video yang dibawakan oleh Lisa Google sangat menyenang, membayangkan mudahnya membuat visual dan insight. Sehingga penulis pun tertarik untuk mencoba.

Google menawarkan sandbox untuk mencoba Bigquery tanpa harus mendaftar kartu kredit, solusi yang cerdas.

https://console.cloud.google.com/bigquery

Note: please comment kalau ada bisa tanpa CC atau DC


Selanjutnya Anda akan diminta mengaktifkan (enable) fitur Bigquery console/API.

Sebagai pendatang baru pada dunia Bigquery, penulis akan mengikuti langkah-langkah pemula membuat query pada BQ. Google menyebutnya sebagai Query a public dataset with the Google Cloud console



Setelah anda memasuki jendala seperti diatas, google akan menyarankan langkah berikutnya, yaitu:

In the Type to search field, enter bigquery-public-data to check whether the public project is starred to the Explorer pane.

Hasilnya 0 found

It's ok, jangan panik, Google menyarankan untuk mencari tabel yang ada pada dataset bigquery-public-data. Contohnya adalah  austin_311 or gsod, and then click Broaden search to all projects. Hasilnya sebagai berikut.


Pada bagian Explore akan tampil dataset Bigquery-public-data beserta tabel-tabel didalamnya. Anda harus mengaktifkan bintang pada dataset tersebut, sebagai tanda dataset yang akan digunakan selama proses query. Pilih Open lewat menu 3 titik disamping dataset tersebut untuk melihat detail data dan kolom-kolomnya.

Saatnya mencoba query, pada bagian editor tuliskan perintah berikut ini:

SELECT

  name, gender,

  SUM(number) AS total

FROM

  `bigquery-public-data.usa_names.usa_1910_2013`

GROUP BY

  name, gender

ORDER BY

  total DESC

LIMIT

  10


Query Per Minute dapat dilihat pada tab Job Information



Sungguh menakjubkan tidak sampai 1 detik, query tersebut dieksekusi oleh Bigquery Google.

Selanjutnya penulis akan mencoba membuat data set sendiri. Menggunakan MyProject > silver-harmony, jalankan perintah create dataset melalui menu titik tiga. 



Saya berikan nama 10years_pekalongan dimana Dataset tersebut akan menampung 10 tahun rekam data debit aliran sungai di kota pekalongan. Sesuai dengan petunjuk dari google, kita harus mengaktifkan tanda bintang pada dataset 10years_pekalongan.


Melalui menu tiga titik, jalankan perintah open untuk membuka database 10years_pekalongan. Kemudian pada bagian editor pilih menu create tabel. Akan menampilkan formulir seperti dibawah ini.


Penulis berharap google dapat langsung mengambil data dari web service. Tapi Google tidak memberikan pilihan tersebut. Asumsi penulis adalah google menginginkan sumber data yang clear & clean.

Mengisi seluruh isian formulir, Saya menggunakan file format csv dengan autodect skema. Lanjut dengan eksekusi perintah create table, google akan menampilan informasi proses telah selesai.



Go to table dan Open


Menyenangkan, kolom-kolom dapat terdeksi secara otomatis. Tab Preview dapat Anda gunakan untuk melihat isi dari suatu tabel. Mari, kita lihat isi dari data banjir 10 tahun Kota Pekalongan. Hasilnya...


Berantakan...

3 row pertama adalah atribute dari data. Konten data dimula dari baris ke 4. Tentunya ini harus diseting terlebih dahulu. Formulir create table memberikan pilihan yang baik untuk antisipasi data-data kosong yang akan di perlukan sebagai null.

Saat Anda merubah source file, sandbox tidak serta mendeteksinya. Jika dipaksakan hanya akan memberikan loading time tanpa ujung. Merefresh uploaded file juga tidak ada gunanya, sehingga tabel yang sudah di buat harus dihapus dan mengulang proses create table dari awal.

Saat anda cretae tabel pada seksi advance ada pilihan berapa row yang harus dilewati, saya pilih tiga baris. Artinya anda harus mengetahui skema dan metadata source data sebelum diupload pada Bigquery. (ingat clean & clear)

Hasil perubahan seting create table dengan opsi autodect field adalah sebagai berikut:


Fitur pengenalan otomatis sandbox tetap tidak mengenali kolom yg ada pada file. Sehingga hanya menuliskan string_field_0 dan string_field_1. Oleh karena itu penulis menempuh cara manual, yang mana memang disarankan dalam demo dari google :-)

Menggunakan perintah teks seperti dibawah ini

time:date,river_discharge:float,f3:string,f4:string,f5:string,f6:string

Masih keluar error karena bigquery tidak mengenali date dan double as float dari file sumber, harus diganti menjadi string. Akhirnya setelah 3 kali mengulang proses create data, tampilan tabel bisa sesuai dengan keinginan penulis.


Secara keseluruhan penilaian penulis adalah tidak memuaskan membuat data set sendiri menggunakan BigQuery.  Harapan untuk dapat melakukan visualisasi sekejap seperti pada video demi juga tidak dapat terwujud karena google langsung mengaktifkan tagihan saat menguji menu BI.


#google #bigquery #datavisualization

JURUS PEMBELAH DATA

Tulisan berikut ini adalah perjalanan penulis membuka data dari sisi pandang data scientist Pemahaman Bisnis Judul: Stroke Prediction Datase...