Workflow 2: Analisis Faktor Risiko Penyakit Jantung
Workflow ini menganalisis hubungan antara faktor antropometri, gaya hidup, dan kondisi klinis dengan insiden penyakit kardiovaskular. Data masukan berasal dari dataset yang telah dibersihkan pada Workflow 1.
Tujuan Analisis
Workflow 2 memiliki tiga tujuan utama:
- Menganalisis hubungan antara Body Mass Index (BMI) dan insiden kardiovaskular.
- Menganalisis pola aktivitas fisik, kebiasaan merokok, dan konsumsi alkohol pada pasien berusia lebih dari 40 tahun.
- Menganalisis pola risiko berdasarkan kombinasi kadar kolesterol dan glukosa.
Hasil analisis menunjukkan pola pada data observasional. Hasil ini tidak dengan sendirinya membuktikan hubungan sebab-akibat klinis.
Ringkasan Workflow
| Komponen | Nilai |
|---|---|
| Dataset masukan | /cardiovascular/dataCardiovascular/cardiovascularClean |
| Sumber dataset | Hasil cleansing Workflow 1 |
| Lokasi workflow | Project cardiovascular -> cardiovascularAnalysis.csd |
| Engine | HGrid247 DE Web dengan Cascading/Hadoop MapReduce |
| Jumlah cabang | 3 cabang analisis paralel |
Output Sink
| Cabang | Output path |
|---|---|
| BMI | /cardiovascular/dataCardiovascular/BMI |
| Lifestyle | /cardiovascular/dataCardiovascular/LifeStyle |
| Clinical Risk | /cardiovascular/dataCardiovascular/ClinicalRisk |
Prasyarat
- Dataset
cardiovascularCleandari Workflow 1 sudah tersedia di HDFS. - Project
cardiovasculardapat diakses pada HGrid DE Web. - Folder output dapat dibuat atau ditulis oleh pengguna workflow.
- Untuk proses eksekusi, pengguna memiliki akses ke menu Generate, Run Workflow, Job Management, dan HDFS Browser.
Membangun Workflow
1. Membuat Workflow Baru
Buka HGrid DE Web: https://hgridde.labs247.id/app/.
Klik New Workflow pada toolbar utama.

Pada dialog Create New Workflow, pilih Existing Project.
Pilih project
cardiovascular.Masukkan nama workflow
cardiovascularAnalysis, lalu klik OK.
Pastikan kanvas kosong untuk
cardiovascularAnalysis.csdberhasil dibuat di dalam projectcardiovascular.
2. Menambahkan Sumber Data
Drag and drop node HfsSource dari palet Source ke kanvas.

Double-click node HfsSource, lalu klik Search.

Masukkan input path berikut:
text/cardiovascular/dataCardiovascular/cardiovascularClean
Pilih
hdfs://pada Default File System.Dataset hasil cleansing tersimpan sebagai partisi terdistribusi pada HDFS, bukan sebagai satu file lokal. Penggunaan
hdfs://memungkinkan engine HGrid membaca dan memproses seluruh partisi dari cluster secara paralel.
Periksa konfigurasi, pastikan nilainya sesuai, lalu klik OK.

3. Menyiapkan Transformasi dan Percabangan
Drag and drop node Transformator dari palet Assembly ke kanvas. Node tersebut menjadi
Transformator_1.
Hubungkan
HfsSource_1keTransformator_1.
Double-click
Transformator_1, lalu tambahkan operasi RegexSplitter dengan delimiter\\tatau tab. Hasil HFS Sink Workflow 1 harus menggunakan delimiter yang sama.
Deklarasikan 13 field output berikut, lalu klik Link to all output fields:
id,age,gender,height,weight,ap_hi,ap_lo,cholesterol,gluc,smoke,alco,active, dancardio.
Gambar di atas menunjukkan tipe awal hasil parsing. Ubah tipe data field sebagai berikut sebelum menghubungkan cabang:
id,age,ap_hi,ap_lo,cholesterol,gluc,smoke,alco,active, dancardiomenjadiInteger;heightdanweightmenjadiDouble;gendertetapString. TipeDoubleuntuk tinggi dan berat memastikan perhitungan BMI menggunakan nilai desimal. Field numerik lainnya diperlukan untuk filter dan agregasi.
Drag and drop PipeSplitter dari palet Assembly ke kanvas. Node tersebut menjadi
PipeSplitter_1.Hubungkan
Transformator_1kePipeSplitter_1.PipeSplitter membagi satu aliran data menjadi tiga cabang analisis yang dapat diproses secara independen.


4. Cabang 1: Analisis BMI
4.1 Menghitung BMI
Drag and drop Transformator ke kanvas sebagai
Transformator_2.Hubungkan
PipeSplitter_1keTransformator_2.
Double-click
Transformator_2.Tambahkan field
bmibertipeDoublepadaOutputRecordmelalui Add Output Field(s). Teruskan juga semua field input yang diperlukan pada output Transformator, termasukcardiountuk agregasi berikutnya.

Tambahkan operasi Calculation dengan ekspresi berikut:
textweight / ((height / 100.0) * (height / 100.0))
Ekspresi tersebut menghitung BMI menggunakan berat badan dalam kilogram dan tinggi badan dalam sentimeter. Konstanta 100.0 memastikan konversi tinggi memakai pembagian desimal, bukan pembagian integer.


Setelah Calculation dikonfigurasi, hubungkan hasil Calculation langsung ke field output
bmitanpa menghubungkannya ke input lain.
4.2 Mengelompokkan Kategori BMI
Drag and drop Transformator kedua ke kanvas sebagai
Transformator_3.Hubungkan
Transformator_2keTransformator_3.
Double-click
Transformator_3.Teruskan field input yang diperlukan, termasuk
bmidancardio, lalu tambahkan fieldbmi_categorybertipeStringpadaOutputRecord.Tambahkan operasi SwitchCase untuk mengelompokkan BMI:
Kondisi Nilai kategori bmi < 18.5Thinbmi < 25NormalSelain dua kondisi tersebut Obesitysebagai nilai default (BMI = 25)Obesitydi sini adalah label operasional untuk kelompok BMI = 25 pada analisis ini, bukan diagnosis klinis individual.

Double-click SwitchCase, lalu klik Add row.

Pada Conditional Dialog, isi field, operation, value, dan constant value. Buat kondisi untuk
bmi < 18.5danbmi < 25.
Masukkan
Obesitypada Return Expression untuk nilai default, tanpa menambahkannya sebagai kondisi baru.
Hubungkan output SwitchCase ke field
bmi_category.
4.3 Mengagregasi Hasil BMI
Drag and drop GroupBy sebagai
GroupBy_1.Hubungkan
Transformator_3keGroupBy_1.Atur
bmi_categorysebagai group field.

Drag and drop Aggregator sebagai
Aggregator_1dan hubungkan dariGroupBy_1.
Pada konfigurasi Aggregator:
- Hubungkan red line untuk
bmi_category. - Tambahkan
ConditionSum(cardio=1)sebagaicardio_count. - Tambahkan
Countsebagaitotal_count. - Jika field belum tersedia, tambahkan
cardio_countdantotal_countmelalui Output Record -> Add Output Field(s).

- Hubungkan red line untuk
Drag and drop Transformator sebagai
Transformator_4dan hubungkan dariAggregator_1. Teruskanbmi_category,cardio_count, dantotal_countpada output sebelum menambahkancardio_pct.
Tambahkan operasi Calculation untuk menghitung persentase kasus kardiovaskular berdasarkan
cardio_countdantotal_count.
Tambahkan field output
cardio_pctbertipeDouble.
Hubungkan Calculation ke field
cardio_pct. Gunakan ekspresi(cardio_count * 100.0) / total_countagar pembagian menghasilkan nilai desimal.
Drag and drop HfsSink sebagai
HfsSink_1, lalu hubungkan dariTransformator_4.Atur output path ke
/cardiovascular/dataCardiovascular/BMIdan gunakanSinkModeREPLACE.


5. Cabang 2: Analisis Lifestyle
Drag and drop Filter sebagai
Filter_1.Hubungkan
PipeSplitter_1keFilter_1.
Double-click
Filter_1, lalu buat satu baris predikat:- Field:
age - Operator:
greater_than - Nilai:
40
Gunakan satu baris predikat agar konfigurasi tetap kompatibel dengan engine Cascading MapReduce.

- Field:
Drag and drop GroupBy sebagai
GroupBy_2dan hubungkan dariFilter_1.
Atur kombinasi field gaya hidup berikut sebagai group fields:
smoke,alco, danactive.
Drag and drop Aggregator sebagai
Aggregator_2, lalu hubungkan dariGroupBy_2.
Pada konfigurasi Aggregator:
- Hubungkan red line untuk
smoke,alco, danactive. - Tambahkan
ConditionSum(cardio=1)sebagaicardio_count. - Tambahkan
Countsebagaitotal_count.

- Hubungkan red line untuk
Drag and drop Transformator sebagai
Transformator_5dan hubungkan dariAggregator_2. Teruskan fieldsmoke,alco,active,cardio_count, dantotal_countpada output.
Tambahkan field output
cardio_pctbertipeDouble, lalu tambahkan Calculation dengan ekspresi berikut:text(cardio_count * 100.0) / total_count
Drag and drop HfsSink sebagai
HfsSink_2, lalu hubungkan dariTransformator_5.

- Atur output path ke
/cardiovascular/dataCardiovascular/LifeStyledan gunakanSinkModeREPLACE.

6. Cabang 3: Risiko Klinis
Drag and drop GroupBy sebagai
GroupBy_3dan hubungkan dariPipeSplitter_1.
Atur
cholesteroldanglucsebagai group fields.
Drag and drop Aggregator sebagai
Aggregator_3, lalu hubungkan dariGroupBy_3.
Pada konfigurasi Aggregator:
- Hubungkan red line untuk
cholesteroldangluc. - Tambahkan
Avg(ap_hi)sebagaiavg_ap_hi. - Tambahkan
Avg(ap_lo)sebagaiavg_ap_lo. - Tambahkan
ConditionSum(cardio=1)sebagaicardio_count. - Tambahkan
Countsebagaitotal_count.

- Hubungkan red line untuk
Drag and drop Transformator sebagai
Transformator_6dan hubungkan dariAggregator_3. Teruskancholesterol,gluc,avg_ap_hi,avg_ap_lo,cardio_count, dantotal_countpada output.
Tambahkan field output
cardio_pctbertipeDouble, lalu tambahkan Calculation dengan ekspresi berikut:text(cardio_count * 100.0) / total_count
Drag and drop HfsSink sebagai
HfsSink_3, lalu hubungkan dariTransformator_6.
Atur output path ke
/cardiovascular/dataCardiovascular/ClinicalRiskdan gunakanSinkModeREPLACE.
7. Menyimpan dan Menjalankan Workflow
Periksa kanvas keseluruhan. Workflow terdiri atas 18 node dan 17 koneksi pipa.
Klik Save pada toolbar untuk menyimpan struktur workflow ke server HGrid DE.

Klik Generate untuk membangun executable Hadoop MapReduce JAR.
Klik Run Workflow untuk menjalankan pipeline.

Pantau riwayat eksekusi melalui Tools -> Job Management sampai seluruh task berstatus
SUCCESS.
Buka Tools -> HDFS Browser untuk memverifikasi bahwa ketiga direktori output sudah dibuat dan berisi partisi hasil agregasi:
/cardiovascular/dataCardiovascular/BMI/cardiovascular/dataCardiovascular/LifeStyle/cardiovascular/dataCardiovascular/ClinicalRisk

Penjelasan Data dan Metode
Sumber Data
Data masukan adalah dataset cardiovascular yang telah dibersihkan pada Workflow 1. Dataset tersebut disimpan sebagai partisi field-delimited di HDFS dan digunakan sebagai sumber untuk tiga cabang analisis pada Workflow 2. Pastikan delimiter keluaran Workflow 1 berupa tab (\\t), sesuai dengan RegexSplitter pada Workflow 2.
Karakteristik data hasil cleansing yang relevan untuk Workflow 2:
ap_hidipertahankan pada rentang 1 sampai 250.ap_lodipertahankan pada rentang 1 sampai 149.agedinyatakan dalam tahun bulat, hasil pembagian integeragedalam hari dengan 365; bagian pecahan dipotong.gendertersedia dalam format teks, yaituwanitaataupria.- Tinggi dan berat badan tidak difilter berdasarkan rentang pada Workflow 1.
- Nilai tekanan darah di luar rentang tersebut telah dikeluarkan pada Workflow 1.
Jumlah 68.899 pada tabel hasil merupakan jumlah record setelah filter tekanan darah pada dataset referensi ini. Jumlah tersebut juga menjadi pemeriksaan silang untuk cabang BMI dan Clinical Risk.
Field yang Digunakan
Dataset memiliki 13 field berikut:
| Field | Tipe data | Deskripsi |
|---|---|---|
id | Integer | Identifier unik pasien |
age | Integer | Usia pasien dalam tahun bulat |
gender | String | Jenis kelamin pasien (wanita/pria) |
height | Integer atau Double | Tinggi badan dalam sentimeter |
weight | Double | Berat badan dalam kilogram |
ap_hi | Integer | Tekanan darah sistolik |
ap_lo | Integer | Tekanan darah diastolik |
cholesterol | Integer | Level kolesterol |
gluc | Integer | Level glukosa |
smoke | Integer | Status merokok |
alco | Integer | Status konsumsi alkohol |
active | Integer | Status aktivitas fisik |
cardio | Integer | Label insiden penyakit kardiovaskular |
Metode Tiap Cabang
Cabang BMI
Cabang BMI menggunakan weight dan height untuk menghitung BMI:
BMI = weight / ((height / 100.0) ^ 2)Nilai BMI dikelompokkan menjadi Thin (bmi < 18.5), Normal (18.5 = bmi < 25), dan Obesity (bmi = 25). Obesity merupakan label operasional yang digunakan workflow, bukan diagnosis klinis individual. Setiap kategori kemudian diagregasi untuk menghitung jumlah pasien dengan cardio=1, jumlah seluruh pasien, dan persentase kasus kardiovaskular. Gunakan pembagian desimal untuk perhitungan BMI dan persentase.
Cabang Lifestyle
Cabang Lifestyle memfilter pasien dengan nilai age tahun bulat lebih dari 40, kemudian mengelompokkan data berdasarkan kombinasi smoke, alco, dan active. Karena umur pada WF1 dibulatkan dengan pemotongan bagian pecahan, batas ini berarti age > 40 pada nilai integer hasil konversi. Hasil agregasi digunakan untuk menghitung persentase kasus kardiovaskular pada setiap profil gaya hidup.
Cabang Clinical Risk
Cabang Clinical Risk mengelompokkan pasien berdasarkan kombinasi cholesterol dan gluc. Agregasi menghitung rata-rata ap_hi, rata-rata ap_lo, jumlah kasus cardio=1, jumlah seluruh pasien, dan persentase kasus kardiovaskular pada setiap kombinasi biomarker.

Hasil Analisis dan Insight
Ringkasan Hasil
Analisis terhadap 68.899 pasien menunjukkan beberapa pola utama:
Catatan pembaruan hasil: angka dan visualisasi di bawah adalah hasil run referensi yang sudah ada. Setelah menerapkan tipe data numerik dan batas kategori BMI
<25pada workflow, jalankan ulang WF2 dan verifikasi kembali tabel, insight, serta visualisasi karena kategori di dekat ambang BMI dapat berubah.
- Kategori
Obesitymencakup 63,50% kohort dan memiliki prevalensi kasus kardiovaskular 55,38%, dibandingkan 39,52% pada kategoriNormal. - Pada kelompok berusia lebih dari 40 tahun, kelompok aktif memiliki prevalensi yang lebih rendah daripada kelompok inaktif pada seluruh kombinasi status merokok dan konsumsi alkohol yang tersedia pada output.
- Kombinasi kolesterol level 3 memiliki prevalensi kasus kardiovaskular tertinggi pada beberapa kelompok glukosa, dengan nilai tertinggi 81,99% ketika glukosa berada pada level 1.
Angka-angka tersebut menggambarkan perbedaan prevalensi antarkelompok. Angka tersebut tidak boleh ditafsirkan sebagai bukti bahwa satu faktor secara langsung menyebabkan penyakit.

Cabang 1: BMI dan Insiden Kardiovaskular
Tabel Output BMI
bmi_category | cardio_count | total_count | cardio_pct |
|---|---|---|---|
| Normal | 9.688 | 24.514 | 39,52% |
| Obesity | 24.227 | 43.748 | 55,38% |
| Thin | 174 | 637 | 27,32% |
Rincian Proporsi Kohort
| Kategori BMI | Rentang BMI | Kasus sehat (0) | Kasus cardio (1) | Total pasien | Proporsi kohort | Prevalensi cardio |
|---|---|---|---|---|---|---|
| Thin | < 18.5 | 463 | 174 | 637 | 0,92% | 27,32% |
| Normal | 18.5 = BMI < 25 | 14.826 | 9.688 | 24.514 | 35,58% | 39,52% |
| Obesity | BMI = 25 | 19.521 | 24.227 | 43.748 | 63,50% | 55,38% |
| Total | Semua pasien | 34.810 | 34.089 | 68.899 | 100,00% | 49,48% |

Insight:
- Prevalensi meningkat dari
Thin(27,32%) keNormal(39,52%), lalu keObesity(55,38%). - Kategori
Obesitymerupakan kelompok terbesar, yaitu 43.748 pasien atau 63,50% kohort. - Perbedaan prevalensi antara
ObesitydanNormaladalah sekitar 15,86 poin persentase. Dalam data ini, prevalensi pada kategoriObesitysekitar 40,1% lebih tinggi secara relatif dibandingkan kategoriNormal.
Cabang 2: Gaya Hidup dan Aktivitas Fisik
Filter cabang ini menggunakan pasien berusia lebih dari 40 tahun. Total kohort yang dianalisis adalah 67.134 pasien.
Tabel Output Lifestyle
smoke | alco | active | cardio_count | total_count | cardio_pct |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 6.429 | 11.957 | 53,77% |
| 0 | 0 | 1 | 23.497 | 47.494 | 49,47% |
| 1 | 0 | 0 | 391 | 701 | 55,78% |
| 1 | 0 | 1 | 1.618 | 3.423 | 47,27% |
| 0 | 1 | 0 | 151 | 287 | 52,61% |
| 0 | 1 | 1 | 799 | 1.529 | 52,26% |
| 1 | 1 | 0 | 151 | 270 | 55,93% |
| 1 | 1 | 1 | 632 | 1.473 | 42,91% |
Profil Gaya Hidup
| Profil | Rokok | Alkohol | Aktivitas | Kasus sehat | Kasus cardio | Total pasien | Prevalensi cardio |
|---|---|---|---|---|---|---|---|
| Non-smoker / abstainer | Tidak | Tidak | Inaktif | 5.528 | 6.429 | 11.957 | 53,77% |
| Non-smoker / abstainer | Tidak | Tidak | Aktif | 23.997 | 23.497 | 47.494 | 49,47% |
| Smoker only | Ya | Tidak | Inaktif | 310 | 391 | 701 | 55,78% |
| Smoker only | Ya | Tidak | Aktif | 1.805 | 1.618 | 3.423 | 47,27% |
| Alcohol only | Tidak | Ya | Inaktif | 136 | 151 | 287 | 52,61% |
| Alcohol only | Tidak | Ya | Aktif | 730 | 799 | 1.529 | 52,26% |
| Smoker + alcohol | Ya | Ya | Inaktif | 119 | 151 | 270 | 55,93% |
| Smoker + alcohol | Ya | Ya | Aktif | 841 | 632 | 1.473 | 42,91% |
| Total kohort (>40) | - | - | - | 33.466 | 33.668 | 67.134 | 50,15% |

Insight:
- Pada setiap kombinasi gaya hidup di output ini, kelompok
active=1memiliki prevalensi yang lebih rendah daripada kelompokactive=0. - Perbedaan terbesar terlihat pada kelompok perokok sekaligus peminum alkohol, yaitu 55,93% pada kelompok inaktif dan 42,91% pada kelompok aktif, dengan selisih 13,02 poin persentase.
- Pada kelompok tanpa rokok dan alkohol, prevalensi sebesar 49,47% pada kelompok aktif dibandingkan 53,77% pada kelompok inaktif, dengan selisih 4,30 poin persentase.
- Perbedaan antarkelompok menunjukkan pola yang konsisten pada dataset, tetapi belum mengendalikan faktor perancu atau membuktikan efek kausal aktivitas fisik.
Cabang 3: Risiko Klinis
Tabel Output Risiko Klinis
Output cabang ini juga memuat avg_ap_hi dan avg_ap_lo; tabel ringkasan berikut menampilkan jumlah pasien dan prevalensi.
cholesterol | gluc | cardio_count | total_count | cardio_pct |
|---|---|---|---|---|
| 1 | 1 | 20.653 | 48.010 | 43,02% |
| 1 | 2 | 1.180 | 2.204 | 53,54% |
| 1 | 3 | 674 | 1.468 | 45,91% |
| 2 | 1 | 3.940 | 6.581 | 59,87% |
| 2 | 2 | 1.403 | 2.377 | 59,02% |
| 2 | 3 | 222 | 371 | 59,84% |
| 3 | 1 | 3.268 | 3.986 | 81,99% |
| 3 | 2 | 408 | 502 | 81,27% |
| 3 | 3 | 2.341 | 3.400 | 68,85% |
Profil Biomarker
| Status kolesterol | Status glukosa | Kasus sehat | Kasus cardio | Total pasien | Proporsi kohort | Prevalensi cardio |
|---|---|---|---|---|---|---|
| Normal (1) | Normal (1) | 27.357 | 20.653 | 48.010 | 69,68% | 43,02% |
| Normal (1) | Di atas normal (2) | 1.024 | 1.180 | 2.204 | 3,20% | 53,54% |
| Normal (1) | Sangat tinggi (3) | 794 | 674 | 1.468 | 2,13% | 45,91% |
| Di atas normal (2) | Normal (1) | 2.641 | 3.940 | 6.581 | 9,55% | 59,87% |
| Di atas normal (2) | Di atas normal (2) | 974 | 1.403 | 2.377 | 3,45% | 59,02% |
| Di atas normal (2) | Sangat tinggi (3) | 149 | 222 | 371 | 0,54% | 59,84% |
| Sangat tinggi (3) | Normal (1) | 718 | 3.268 | 3.986 | 5,79% | 81,99% |
| Sangat tinggi (3) | Di atas normal (2) | 94 | 408 | 502 | 0,73% | 81,27% |
| Sangat tinggi (3) | Sangat tinggi (3) | 1.059 | 2.341 | 3.400 | 4,93% | 68,85% |
| Total populasi | - | 34.810 | 34.089 | 68.899 | 100,00% | 49,48% |

Insight:
- Kombinasi kolesterol level 3 dan glukosa level 1 memiliki prevalensi tertinggi pada tabel, yaitu 81,99%.
- Ketiga kombinasi dengan kolesterol level 3 memiliki prevalensi di atas 68%, sedangkan kombinasi kolesterol level 1 dan glukosa level 1 memiliki prevalensi 43,02%.
- Kelompok kolesterol normal dan glukosa normal merupakan kelompok terbesar, yaitu 48.010 pasien atau 69,68% kohort.
- Perbedaan prevalensi antarkombinasi biomarker dapat digunakan untuk eksplorasi lebih lanjut, tetapi tidak cukup untuk menyimpulkan hubungan kausal atau menentukan terapi klinis.
Ringkasan Profil Risiko
| Profil pada data | Biomarker dan gaya hidup | Rentang prevalensi cardio | Interpretasi deskriptif |
|---|---|---|---|
| Lebih rendah pada output | BMI Thin/Normal, aktif, atau biomarker normal | 27,32% - 49,47% | Kelompok dengan prevalensi lebih rendah pada hasil agregasi |
| Menengah pada output | BMI Obesity atau usia >40 tahun dengan gaya hidup inaktif | 49,47% - 55,93% | Kelompok dengan prevalensi menengah hingga tinggi |
| Tinggi pada output | Kolesterol level 2 | 59,02% - 59,87% | Kelompok dengan prevalensi lebih tinggi dibanding kolesterol level 1 |
| Paling tinggi pada output | Kolesterol level 3 | 68,85% - 81,99% | Kelompok dengan prevalensi tertinggi pada beberapa kombinasi |
Catatan Istilah
cardio_count: jumlah pasien dengan nilaicardio=1pada suatu kelompok.total_count: jumlah seluruh pasien pada suatu kelompok.cardio_pct: persentasecardio_countterhadaptotal_count.- Komorbiditas: keberadaan dua atau lebih penyakit atau kondisi kesehatan pada waktu yang sama.