You are on page 1of 21

2023

BPPMPV KPTK
ß

PROJECT PELATIHAN
DATA SCIENCE
Indeks Standar Pencemaran Udara
(ISPU) PROVINSI DKI JAKARTA
Tahun 2020

AHMAD FAISAL AMIN, S.PD


SMK NEGERI 1 PEMALANG
projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.
2023KPK
BPPMPV
Project: Prediksi Kualitas Udara Di Provinsi DKI Jakarta

1. Tujuan

Untuk mengembangkan model klasifikasi yang dapat memprediksi kualitas udara di


Provinsi DKI Jakarta dalam empat kategori: BAIK, SEDANG, TIDAK SEHAT, dan
SANGAT TIDAK SEHAT.

2. Sumber data, Ukuran Data


• Pada proyek ini data yang digunakan merupakan jenis public dataset yang diambil
dari website https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-
tahun-2020
• Dataset terdiri dari beberapa variabel Medis yang merupakan variabel prediktor
(Independent) dan satu variabel target “categori” (Dependent).
• Variabel prediktor (Independent) yaitu: 'tanggal', 'stasiun', 'pm10', 'so2', 'co', 'o3', 'no2',
'max', 'critical'.
• Variabel target (Dependent) yaitu: ‘categori’ yang berisi nilai 0, 1, 2, dan 3 yang
menunjukkan apakah kualitas udara BAIK(3), SEDANG(2), TIDAK SEHAT(1) atau
SANGAT TIDAK SEHAT(0)
• Tipe data pada varibel yaitu:

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 tanggal 605 non-null object

1 stasiun 605 non-null object

2 pm10 605 non-null object

3 so2 605 non-null object

4 co 605 non-null object

5 o3 605 non-null object

6 no2 605 non-null object

7 max 602 non-null float64

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
8 critical 600 non-null object

9 categori 605 non-null object

• Penjelasan tentang variabel dataset:

tanggal : Tanggal pengukuran kualitas udara

stasiun : Lokasi pengukuran di stasiun

pm10 : Partikulat salah satu parameter yang diukur

so2 : Sulfida (dalam bentuk SO2) salah satu parameter yang diukur

co : Carbon Monoksida salah satu parameter yand diukur

o3 : Ozon salah satu parameter yang diukur

no2 : NItrogen dioksida salah satu parameter yang diukur

max : Nilai ukur paling tinggi dari seluruh parameter yang diukur dalam waktu yang
sama

critical : Parameter yang hasil pengukurannya paling tinggi

categori : Kategori hasil perhitungan indeks standar pencemaran udara

3. Metode/cara penyiapan dan pembersihan data

Pada proyek ini dataset dipahami dan dicoba dengan menggunakan tools dalam bentuk
bahasa pemrograman python dengan menggunakan google colab. Melalui langkah-
langkah berikut:

a. Menghubungkan google colab dengan drive

#mengkoneksikan colab ke google drive


from google.colab import drive
drive.mount('/content/drive')

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
b. Mengimport libraries yang diperlukan

#mengimport library yg akan digunakan pada lembar kerja


nanti
import numpy as np # linear algebra
import pandas as pd # data processing
import matplotlib.pyplot as plt #to plot charts
import seaborn as sns #used for data visualization
import warnings #avoid warning flash
import graphviz
warnings.filterwarnings('ignore')
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report,
f1_score, precision_score, recall_score
from sklearn.metrics import confusion_matrix
from sklearn.tree import export_graphviz
from pandas.core import missing
from sklearn.impute import SimpleImputer

c. Memuat (loading) dataset

Dalam projek ini saya menggunakan 4 file dataset(dataset_januari, dataset_februari,


dataset_maret dan dataset_april) yang di marge menjadi satu dataset

#mengambil dataset yang telah disimpan pada google drive


dan menampilkannya
df_januari=pd.read_csv('/content/drive/MyDrive/pelatihan
IoT 2023/dataset/UKK/indeks-standar-pencemar-udara-di-
spku-bulan-januari-tahun-2020.csv')
df_februari=pd.read_csv('/content/drive/MyDrive/pelatihan
IoT 2023/dataset/UKK/indeks-standar-pencemar-udara-di-
spku-bulan-februari-tahun-2020.csv')

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
df_maret=pd.read_csv('/content/drive/MyDrive/pelatihan
IoT 2023/dataset/UKK/indeks-standar-pencemar-udara-di-
spku-bulan-maret-tahun-2020.csv')
df_april=pd.read_csv('/content/drive/MyDrive/pelatihan
IoT 2023/dataset/UKK/indeks-standar-pencemar-udara-di-
spku-bulan-april-tahun-2020.csv')

#menggabungkan dataset dari beberapa file csv]


df= pd.concat([df_januari, df_februari],
ignore_index=True)
df= pd.concat([df, df_maret], ignore_index=True)
df= pd.concat([df, df_april], ignore_index=True)

d. Menelaah Data
1) Melihat data pada dataset yang telah di margin
# Tampilkan hasil merging
print(df.head())

2) Mengetahui bentuk kumpulan data melalui


df.columns

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
3) Melihat jumlah kolom dan baris yang terdapat pada dataset_januari(155,10),
dataset_februari(145,10), dataset_maret(155,10) dan dataset_april(150,10) serta
dataset yang telah digabungkan (df=605,10)

4) Informasi tentang kumpulan data


#menampilkan info dataset
df.info()

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
5) Menelaah informasi kolom ‘statisun’
Terlihat banyak data yang tidak diketahui dan nantinya pada proses cleaning kolom
‘stasiun’ akan di drop selain banyak data yang tidak diketahui juga tidak
berbepengaruh pada objek ‘categori’
df['stasiun'].unique()

6) Menelaah informasi kolom ‘categori’


Dari informasi yg didapat terdapat variable 'TIDAK ADA DATA' yagng nantinya
akan di drop pada saat proses cleaning
df['categori'].unique()

df['categori'].value_counts()

e. Data Cleaning
1) Meng copy dataset awal dengan yg baru agar dataset awal tidak berubah
df_clean = df.copy()

2) Menghapus kolom yang tidak digunakan (‘stasiun’, ‘tanggal’, ‘max’, ‘critical’)


#Menghapus kolom yang tidak digunakan
df_clean.drop(['stasiun'], axis=1, inplace=True)
df_clean.drop(['tanggal'], axis=1, inplace=True)
df_clean.drop(['max'], axis=1, inplace=True)
df_clean.drop(['critical'], axis=1, inplace=True)

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
3) Menghilangkan whitespace pada kolom ‘categori’
#menghilangkan whitespce
df_clean['categori']=df_clean['categori'].str.strip()

4) Menghapus nilai ‘TIDAK ADA DATA’ pada kolom ‘categori’


#mengahpuas data pada kolom 'categori' yang memiliki
nilai 'TIDAK ADA DATA'
df_clean = df_clean.drop(df[df['categori'] == 'TIDAK
ADA DATA'].index)
df_clean['categori'].value_counts()

5) Me replace nilai pada ‘categori’ menjadi numerik


#mengubah nilai pada kolom categori menjadi numerik
agar bisa diproses oleh mesin
df_clean['categori'] =
df_clean['categori'].replace({'BAIK': 3, 'SEDANG': 2,
'TIDAK SEHAT': 1, 'SANGAT TIDAK SEHAT':0})

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
6) Mengubah type data variable independent menjadi numerik (‘pm10’, ‘so2’, ‘co’,
‘o3’, ‘no2’)

Terjadi eror ketika merubah type data pada variable independent karena terdapat
data “---” maka kita perlu cleaning dengan mengubah data menjadi NaN
# Mengganti nilai non-numerik menjadi null pada kolom
df_clean['pm10'] = pd.to_numeric(df_clean['pm10'],
errors='coerce')
df_clean['so2'] = pd.to_numeric(df_clean['so2'],
errors='coerce')
df_clean['co'] = pd.to_numeric(df_clean['co'],
errors='coerce')
df_clean['o3'] = pd.to_numeric(df_clean['o3'],
errors='coerce')
df_clean['no2'] = pd.to_numeric(df_clean['no2'],
errors='coerce')

df_clean['pm10'] = df_clean['pm10'].astype(float)
df_clean['so2'] = df_clean['so2'].astype(float)

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
df_clean['co'] = df_clean['co'].astype(float)
df_clean['o3'] = df_clean['o3'].astype(float)
df_clean['no2'] = df_clean['no2'].astype(float)

7) Memeriksa nilai NaN


#cek mising values
df_clean.isna().sum()

8) Penanganan missing values


# penanganan missing values
# dengan mengganti nilai null menjadi nilai yg paling
sering muncul
imputer = SimpleImputer(missing_values = np.nan,
strategy = 'most_frequent')

df_clean[['pm10','so2','co','o3','no2']] =
imputer.fit_transform(df_clean[['pm10','so2','co','o3'
,'no2']])

#cek mising values


df_clean.isna().sum()

9) Mengecek apakah ada nilai 0 pada variable independen


#mengecek apakah ada nilai 0 pada variable independen
print('nilai 0 pada sensor pm10 : ',
df_clean[df_clean['pm10']==0].shape[0])
print('nilai 0 pada sensor so2 : ',
df_clean[df_clean['so2']==0].shape[0])

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
print('nilai 0 pada sensor co : ',
df_clean[df_clean['co']==0].shape[0])
print('nilai 0 pada sensor o3 : ',
df_clean[df_clean['o3']==0].shape[0])
print('nilai 0 pada sensor no2 : ',
df_clean[df_clean['no2']==0].shape[0])

10) Melihat hasil proses cleaning data


df_clean.head()

df_clean.info()

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
df_clean.describe()

f. Visualisasi Data
1) Count plot ‘categori’
Berdasarkan ‘pm10’

sns.countplot(x='categori', hue='pm10', data=df_clean)

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
Berdasarkan ‘o3’

sns.countplot(x='categori', hue='o3', data=df_clean)

2) Histogram distribusi dari masing-masing data

df_clean.hist(bins=10,figsize=(10,10))
plt.show()

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
g. Mengkonstruksi Data

#Melihat variable yang berbpengaruh terhadap variable


lain
corrmat=df_clean.corr()
sns.heatmap(corrmat, annot=True)

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
4. Pemodelan (Modeling)

Pemodelan menggunakan pohon keputusan (Decision Tree Classifier) dan


LogisticRegression serta Metrik evaluasi yaitu: akurasi, presisi, F1 dan Recall yang
divisualisasi menggunakan Confusion Matrix. Model ini juga menggunakan Grid Search,
menggunakan kombinasi yang berbeda dari semua hypermarameter yang ditentukan, serta
menghitung kinerja dari setiap kombinasi dan memilih nilai terbaik untuk hyperparameter.

a. Decision Tree Classifier

#Pemodelan menggunakan DecisionTreeClassifier


# Pisahkan variabel independen dan dependen
X = df_clean[['pm10', 'so2', 'co', 'o3', 'no2']] #
Variabel independen
y = df_clean['categori'] # Variabel dependen

# Bagi data menjadi data latih dan data uji


X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2, random_state=42)

# Inisialisasi model Decision Treea


model = DecisionTreeClassifier()

# Latih model dengan data latih


model.fit(X_train, y_train)

# Prediksi kategori menggunakan data uji


y_pred = model.predict(X_test)

# Hitung akurasi model


accuracy = accuracy_score(y_test, y_pred)
print("Akurasi:", accuracy)

b. LogisticRegression

# Pemodelan menggunakan LogisticRegression


# Pisahkan variabel independen dan dependen
X = df_clean[['pm10', 'so2', 'co', 'o3', 'no2']] #
Variabel independen
y = df_clean['categori'] # Variabel dependen

# Bagi data menjadi data latih dan data uji


X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2, random_state=42)
projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.
BPPMPV KPK
# Inisialisasi model Logistic Regression
model = LogisticRegression()

# Latih model dengan data latih


model.fit(X_train, y_train)

# Prediksi kategori menggunakan data uji


y_pred = model.predict(X_test)

# Hitung akurasi model


accuracy = accuracy_score(y_test, y_pred)
print("Akurasi:", accuracy)

5. Hasil Pemodelan

Dari pemodelan yang dilakukan yaitu menggunakan Decision Tree Classifier dan
LogisticRegressionmaka dihasilkan model sebagai berikut:
a. Decision Tree Classifier

# Prediksi kategori menggunakan data uji


y_pred = model.predict(X_test)

# Hitung akurasi model


accuracy = accuracy_score(y_test, y_pred)
print("Akurasi:", accuracy)

# Classification Report
print("Classification Report is:\n",
classification_report(y_test, y_pred))

# F1 Score
f1 = f1_score(y_test, y_pred, average='weighted')
print("\nF1 Score:", f1)

# Precision Score
precision = precision_score(y_test, y_pred,
average='weighted')
print("Precision Score:", precision)

# Recall Score
recall = recall_score(y_test, y_pred, average='weighted')
print("Recall Score:", recall)

# Confusion Matrix

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')

b. LogisticRegression

# Prediksi kategori menggunakan data uji


y_pred = model.predict(X_test)

# Classification Report
print("Classification Report is:\n",
classification_report(y_test, y_pred))

# F1 Score
print("\n F1 Score:\n", f1_score(y_test, y_pred,
average='weighted'))

# Precision Score

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
print("\n Precision Score is:\n", precision_score(y_test, y_pred,
average='weighted'))

# Recall Score
print("\n Recall Score is:\n", recall_score(y_test, y_pred,
average='weighted'))

# Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')

# Menampilkan plot
plt.title('Confusion Matrix')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()

6. Analisis/Interpretasi Hasil Pemodelan

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
a. Decision Tree Classifier
Kategori :
'BAIK': 3
'SEDANG': 2,
'TIDAK SEHAT': 1
'SANGAT TIDAK SEHAT':0
o Dalam Classification Report, terlihat precision, recall, dan f1-score untuk setiap
kelas prediksi.
§ Kelas 0 memiliki precision, recall, dan f1-score sebesar 1.00,
menunjukkan bahwa model mampu mengidentifikasi dengan sempurna
kelas tersebut.
§ Kelas 1 memiliki precision sebesar 0.94, recall sebesar 1.00, dan f1-
score sebesar 0.97. Ini menunjukkan bahwa model memiliki tingkat
keakuratan yang tinggi dalam mengidentifikasi kelas 1.
§ Kelas 2 memiliki precision sebesar 0.98, recall sebesar 0.98, dan f1-
score sebesar 0.98. Hal ini menunjukkan bahwa model memiliki tingkat
keakuratan yang baik dalam mengidentifikasi kelas 2.
§ Kelas 3 memiliki precision sebesar 1.00, recall sebesar 0.98, dan f1-
score sebesar 0.99. Ini menunjukkan bahwa model memiliki tingkat
keakuratan yang tinggi dalam mengidentifikasi kelas 3.
o F1-score secara keseluruhan (weighted avg) adalah 0.9834105763517528,
menunjukkan tingkat kesesuaian yang sangat baik dalam memprediksi seluruh
kelas.
o Precision score secara keseluruhan (weighted avg) adalah
0.9838235294117648, menunjukkan tingkat keakuratan yang sangat baik dalam
memprediksi seluruh kelas.
o Recall score secara keseluruhan (weighted avg) adalah 0.9833333333333333,
menunjukkan tingkat kesesuaian yang sangat baik dalam mengidentifikasi
seluruh kelas.

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
b. LogisticRegression
Kategori :
'BAIK': 3
'SEDANG': 2,
'TIDAK SEHAT': 1
'SANGAT TIDAK SEHAT':0
o Dalam Classification Report, terlihat precision, recall, dan f1-score untuk setiap
kelas prediksi.
§ Kelas 0 memiliki precision, recall, dan f1-score sebesar 0.00,
menunjukkan bahwa model tidak dapat mengidentifikasi dengan benar
kelas tersebut.
§ Kelas 1 memiliki precision sebesar 1.00, recall sebesar 0.31, dan f1-
score sebesar 0.48. Hal ini menunjukkan bahwa model memiliki tingkat
keakuratan yang tinggi dalam mengidentifikasi kelas 1, tetapi terdapat
beberapa kasus false negative.
§ Kelas 2 memiliki precision sebesar 0.74, recall sebesar 0.98, dan f1-
score sebesar 0.84. Ini menunjukkan bahwa model memiliki tingkat
keakuratan yang baik dalam mengidentifikasi kelas 2.
§ Kelas 3 memiliki precision sebesar 0.97, recall sebesar 0.79, dan f1-
score sebesar 0.87. Hal ini menunjukkan bahwa model memiliki tingkat
keakuratan yang tinggi dalam mengidentifikasi kelas 3.
o F1-score secara keseluruhan (weighted avg) adalah 0.7973137973137974,
menunjukkan tingkat kesesuaian yang cukup baik dalam memprediksi seluruh
kelas.
o Precision score secara keseluruhan (weighted avg) adalah
0.8501785714285715, menunjukkan tingkat keakuratan yang baik dalam
memprediksi seluruh kelas.
o Recall score secara keseluruhan (weighted avg) adalah 0.8166666666666667,
menunjukkan tingkat kesesuaian yang cukup baik dalam mengidentifikasi
seluruh kelas.

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK
Kesimpulan :

Secara keseluruhan, model Decision Tree lebih unggul dalam hal akurasi dan
kemampuan untuk mengklasifikasikan kualitas udara dengan presisi yang tinggi
untuk setiap kelas. Model Logistic Regression, meskipun memiliki akurasi yang
masih dapat diterima, menunjukkan keterbatasan dalam mengidentifikasi beberapa
kelas dengan baik. Dalam konteks pemodelan kualitas udara di Provinsi DKI Jakarta,
model Decision Tree dapat menjadi pilihan yang lebih baik dalam memprediksi dan
menganalisis kualitas udara.

projekPelatihan_dataScience_2023_Ahmad Faisal Amin, S.Pd.


BPPMPV KPK

You might also like