data = pd.read_csv("train.csv")
X = data.iloc[:,0:20] #independent columns
y = data.iloc[:,-1] # pick last column for the target feature
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_) #use inbuilt class
# feature_importances of tree based classifiers
#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.
columns)
feat_importances.nlargest(5).plot(kind='barh')
plt.show()
Program di atas bertujuan untuk mengevaluasi pentingnya fitur dalam kumpulan data dengan
menggunakan model berbasis pohon bernama `ExtraTreesClassifier` dari pustaka `scikit-learn`.
Mari kita uraikan langkah demi langkah:
1. Impor Pustaka
- `ExtraTreesClassifier` dari `sklearn.ensemble`: Ini adalah model klasifikasi berbasis pohon yang
biasanya digunakan untuk mengevaluasi pentingnya fitur.
- `numpy`: Pustaka untuk komputasi numerik.
- `matplotlib.pyplot`: Pustaka untuk visualisasi data.
- `pandas`: Pustaka untuk manipulasi dan analisis data.
2. Pemuatan Data
- Data diimpor dari file bernama "train.csv" menggunakan `pd.read_csv()`. Kumpulan data ini
tampaknya memiliki 20 fitur independen dan satu fitur target.
3. Pembagian Data
- `X = data.iloc[:,0:20]`: Ini mengambil semua baris dan 20 kolom pertama dari kumpulan data
sebagai fitur independen.
- `y = data.iloc[:,-1]`: Ini mengambil semua baris dan kolom terakhir sebagai fitur target.
4. Pembuatan dan Pelatihan Model
- Model `ExtraTreesClassifier` dibuat dan dilatih menggunakan data `X` dan `y` dengan metode
`fit()`.
5. Evaluasi Pentingnya Fitur
- `model.feature_importances_`: Setelah model dilatih, kita dapat mengevaluasi pentingnya fitur
dengan menggunakan atribut `feature_importances_` dari model. Ini mengembalikan array yang
menunjukkan pentingnya masing-masing fitur dalam kumpulan data.
6. Visualisasi Pentingnya Fitur
- `pd.Series(model.feature_importances_, index=X.columns)`: Ini mengkonversi importansi fitur
menjadi objek Series pandas dengan nama fitur sebagai indeks.
- `feat_importances.nlargest(5).plot(kind='barh')`: Ini mengambil lima fitur terpenting dan
menampilkan mereka dalam bentuk grafik batang horizontal.
- `plt.show()`: Menampilkan grafik.
Jadi, inti dari program ini adalah untuk memuat kumpulan data, melatih model klasifikasi berbasis
pohon, dan kemudian mengevaluasi serta memvisualisasikan pentingnya fitur dalam kumpulan data
tersebut. Evaluasi ini bermanfaat untuk memahami fitur mana yang paling berkontribusi terhadap
keputusan model dan mungkin berguna untuk pemilihan fitur atau rekayasa fitur di masa depan.
Grafik batang horizontal ini menunjukkan pentingnya fitur dalam model klasifikasi yang telah dilatih.
Panjang setiap batang mencerminkan seberapa penting fitur tersebut dalam memprediksi variabel
target.
1. int_memory: Ini adalah fitur dengan pentingnya tertinggi dalam model, dengan skor sekitar
0.21. Ini berarti bahwa int_memory memiliki pengaruh terbesar dalam memprediksi variabel
target dibandingkan dengan fitur lainnya.
2. battery_power: Fitur ini memiliki skor penting sekitar 0.19, menunjukkan bahwa
battery_power juga memiliki pengaruh signifikan dalam memprediksi variabel target.
3. clock_speed: Dengan skor penting sekitar 0.16, clock_speed juga berkontribusi signifikan
dalam model.
4. fc: Fitur ini memiliki skor penting sekitar 0.17, menunjukkan bahwa fc juga berkontribusi
dalam memprediksi variabel target.
5. four_g: Meskipun four_g memiliki skor penting yang lebih rendah dibandingkan fitur lainnya
(sekitar 0.15), fitur ini masih berkontribusi dalam model.
Secara keseluruhan, grafik ini memberikan gambaran tentang fitur mana yang paling penting dalam
model klasifikasi Anda dan seberapa besar pengaruh mereka terhadap prediksi variabel target.
PROGRAM 2
import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
data = pd.read_csv("train.csv")
X = data.iloc[:,0:20] #independent columns
y = data.iloc[:,-1] #pick last column for the target feature
#apply SelectKBest class to extract top 5 best features
bestfeatures = SelectKBest(score_func=chi2, k=5)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
scores = pd.concat([dfcolumns,dfscores],axis=1)
scores.columns = ['specs','score']
print(scores.nlargest(5,'score')) #print the 5 best features
Program ini bertujuan untuk menyeleksi fitur-fitur terbaik dari kumpulan data berdasarkan pengujian
chi-kuadrat. Pengujian chi-kuadrat digunakan untuk menentukan apakah ada perbedaan signifikan
antara frekuensi harapan dan frekuensi yang diamati dalam satu atau lebih kategori.
1. **Impor Pustaka**
- `pandas` dan `numpy`: Digunakan untuk manipulasi data.
- `SelectKBest` dari `sklearn.feature_selection`: Sebuah metode seleksi fitur yang bekerja dengan
memilih sejumlah k fitur terbaik berdasarkan pengujian statistik tertentu.
- `chi2` dari `sklearn.feature_selection`: Ini adalah fungsi pengujian chi-kuadrat yang akan
digunakan bersama dengan `SelectKBest`.
2. **Pemuatan Data**
- Data diimpor dari file "train.csv" dengan menggunakan `pd.read_csv()`. Dari deskripsi
sebelumnya, kita tahu bahwa kumpulan data ini memiliki 20 fitur independen dan satu fitur target.
3. **Pembagian Data**
- `X = data.iloc[:,0:20]`: Mengambil semua baris dan 20 kolom pertama dari kumpulan data sebagai
fitur independen.
- `y = data.iloc[:,-1]`: Mengambil semua baris dan kolom terakhir sebagai fitur target.
4. **Seleksi Fitur**
- `SelectKBest(score_func=chi2, k=5)`: Ini menginisialisasi objek seleksi fitur yang akan
menggunakan pengujian chi-kuadrat untuk mengevaluasi fitur dan memilih 5 fitur terbaik.
- `fit = bestfeatures.fit(X,y)`: Ini melatih selektor fitur pada data `X` dan `y`.
**Output:**
Dari hasil ini, kita dapat melihat bahwa fitur `int_memory` dan `battery_power` memiliki skor yang
jauh lebih tinggi dibandingkan dengan fitur lainnya, menunjukkan bahwa mereka mungkin memiliki
relevansi yang lebih besar terhadap fitur target.
PROGRAM 3
import pandas as pd
import numpy as np
data = pd.read_csv("train.csv")
correlation_matrix = data.corr()
top_corr_features = correlation_matrix.index
plt.figure(figsize=(20,20))
g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap="RdYlGn
")
Kode Python yang Anda berikan adalah untuk menghasilkan sebuah heatmap korelasi dari fitur-fitur
dalam dataset Anda. Heatmap ini memberikan visualisasi grafis dari korelasi antara setiap pasangan
fitur.
1. Membaca file CSV ‘train.csv’ menggunakan pandas dan membagi data menjadi dua bagian:
X (kolom independen) dan y (kolom target).
2. Menghitung matriks korelasi dari data menggunakan metode .corr() dari pandas
DataFrame.
3. Mengambil indeks dari matriks korelasi, yang merupakan nama fitur.
4. Membuat figur matplotlib dengan ukuran tertentu.
5. Menggunakan seaborn untuk menggambar heatmap dari matriks korelasi. Nilai-nilai korelasi
ditampilkan dalam plot dan skema warna ‘RdYlGn’ digunakan, di mana ‘Rd’ berarti merah
(red), ‘Yl’ berarti kuning (yellow), dan ‘Gn’ berarti hijau (green).
Heatmap yang dihasilkan oleh kode ini berkorelasi dengan gambar yang Anda berikan. Heatmap
tersebut menunjukkan korelasi antara setiap pasangan fitur dalam data Anda, dengan warna yang
mencerminkan nilai korelasi: hijau untuk korelasi positif, merah untuk korelasi negatif, dan kuning
untuk sedikit atau tidak ada korelasi.
Harap dicatat bahwa heatmap ini hanya menunjukkan korelasi linier antara fitur. Fitur dengan korelasi
rendah mungkin masih memiliki hubungan non-linier yang signifikan.
PROGRAM 4
threshold = 0.6
#Drop columns with a missing value rate higher than threshold
data = data[data.columns[data.isnull().mean() < threshold]]
#Drop rows with missing value rate higher than threshold
data = data.loc[data.isnull().mean(axis=1) < threshold]
threshold = 0.6
#Drop columns with a missing value rate higher than threshold
data = data[data.columns[data.isnull().mean() < threshold]]
#Drop rows with missing value rate higher than threshold
data = data.loc[data.isnull().mean(axis=1) < threshold]
print(data)
Program ini bertujuan untuk membersihkan kumpulan data dengan menghapus kolom dan baris yang
memiliki tingkat nilai yang hilang (missing values) di atas ambang batas tertentu.
Mari kita uraikan langkah demi langkah:
PROGRAM 5
#Filling all missing values with 0
data = data.fillna(0)
#Filling missing values with medians of the columns
data = data.fillna(data.median())
print(data)
Program ini menunjukkan bagaimana mengisi nilai yang hilang (missing values) dalam kumpulan data
dengan menggunakan dua pendekatan berbeda.
- `data = data.fillna(0)`: Fungsi `fillna()` digunakan untuk mengisi nilai yang hilang. Dalam baris ini,
semua missing values dalam kumpulan data diisi dengan nilai 0.
- `data = data.fillna(data.median())`: Sekali lagi, fungsi `fillna()` digunakan, tetapi kali ini nilai yang
hilang diisi dengan median dari kolom masing-masing. Median merupakan nilai tengah dalam
distribusi data yang telah diurutkan, dan sering digunakan sebagai pengganti missing values karena ia
kurang sensitif terhadap outlier dibandingkan dengan rata-rata.
**Output:**
Output menampilkan kumpulan data yang sudah diisi missing values-nya. Namun, berdasarkan
output yang diberikan, tampaknya kumpulan data awalnya tidak memiliki missing values atau telah
berhasil diisi dengan 0 pada langkah pertama, sehingga tidak ada perubahan lebih lanjut saat
mencoba mengisi dengan median.
- Ada 7 kolom: `battery_power`, `blue`, `clock_speed`, `dual_sim`, `fc`, `four_g`, dan `int_memory`.
Dalam prakteknya, Anda hanya perlu memilih salah satu pendekatan (isi dengan 0 atau isi dengan
median) sesuai dengan konteks data dan kebutuhan analisis Anda. Memilih keduanya secara
berurutan seperti dalam program ini mungkin tidak umum dilakukan, kecuali jika ada alasan khusus
untuk itu.
PROGRAM 6
#Max fill function for categorical columns
import pandas as pd
data = pd.read_csv("dataset.csv")
data['color'].fillna(data['color'].value_counts().idxmax(),
inplace=True)
print(data)
Program ini menunjukkan cara mengisi nilai yang hilang pada kolom kategorikal dalam kumpulan
data dengan menggunakan moda (nilai yang paling sering muncul) dari kolom tersebut.
**Output:**
Output menampilkan kumpulan data dengan kolom 'index' dan 'color'. Berdasarkan output yang
diberikan:
- Kolom 'color' tidak memiliki missing values.
- Nilai yang paling sering muncul pada kolom 'color' adalah 'red'. Jadi, jika awalnya ada nilai yang
hilang pada kolom 'color', mereka akan diisi dengan 'red'.
Dengan meninjau output, kita dapat melihat bahwa 'red' adalah warna yang paling dominan dalam
kolom 'color', dan semua missing values (jika ada sebelumnya) telah diisi dengan 'red'.
PROGRAM 7
#Dropping the outlier rows with standard deviation
import pandas as pd
data = pd.read_csv("train.csv")
#Dropping the outlier rows with standard deviation
factor = 2
upper_lim = data['battery_power'].mean () +
data['battery_power'].std() * factor
lower_lim = data['battery_power'].mean () -
data['battery_power'].std() * factor
data = data[(data['battery_power'] < upper_lim) &
(data['battery_power'] > lower_lim)]
print(data)
Program ini bertujuan untuk mengidentifikasi dan menghapus baris yang dianggap sebagai outlier
berdasarkan kolom 'battery_power' dengan menggunakan metode deviasi standar.
- Dalam pendekatan ini, outlier didefinisikan sebagai poin data yang berada di luar batas tertentu
dari mean.
- `upper_lim` dan `lower_lim` didefinisikan sebagai mean ditambah dan dikurangi dengan beberapa
kali deviasi standar (dalam kasus ini, faktornya adalah 2). Sehingga, batas atas dan bawah ini
mencakup sekitar 95.4% dari data jika distribusinya normal.
3. **Menghapus Outlier**
**Output:**
Output menampilkan kumpulan data yang telah dibersihkan dari outlier pada kolom 'battery_power'.
Namun, berdasarkan output yang diberikan:
- Ada 7 kolom: `battery_power`, `blue`, `clock_speed`, `dual_sim`, `fc`, `four_g`, dan `int_memory`.
Dari output ini, kita dapat menyimpulkan bahwa entah tidak ada outlier yang terdeteksi berdasarkan
definisi yang diberikan, atau kumpulan data yang ditampilkan mungkin tidak menunjukkan semua
baris dan beberapa baris mungkin telah dihapus. Jika kita benar-benar ingin memeriksa jumlah baris
setelah pemrosesan, kita seharusnya mencetak `data.shape[0]` untuk mendapatkan jumlah baris
yang tersisa.
PROGRAM 8
#Dropping the outlier rows with Percentiles
upper_lim = data['battery_power'].quantile(.99)
lower_lim = data['battery_power'].quantile(.01)
data = data[(data['battery_power'] < upper_lim) &
(data['battery_power'] > lower_lim)]
print(data)
Program ini bertujuan untuk mengidentifikasi dan menghapus baris yang dianggap sebagai outlier
berdasarkan kolom 'battery_power' dengan menggunakan metode persentil.
- `upper_lim` dihitung sebagai persentil ke-99 dari kolom 'battery_power'. Ini berarti bahwa 99%
dari data berada di bawah batas ini.
- `lower_lim` dihitung sebagai persentil ke-1 dari kolom 'battery_power'. Ini berarti bahwa 1% dari
data berada di atas batas ini.
2. **Menghapus Outlier**
**Output:**
Output menampilkan kumpulan data yang telah dibersihkan dari outlier pada kolom 'battery_power'
berdasarkan metode persentil:
- Ada 7 kolom: `battery_power`, `blue`, `clock_speed`, `dual_sim`, `fc`, `four_g`, dan `int_memory`.
Dari output ini, kita dapat melihat bahwa 43 baris telah dihapus dari kumpulan data asli (karena
sebelumnya ada 2000 baris). Ini berarti 43 baris dianggap sebagai outlier berdasarkan batas persentil
yang didefinisikan.
PROGRAM 9
#Capping the outlier rows with percentiles
upper_lim = data['battery_power'].quantile(.99)
lower_lim = data['battery_power'].quantile(.01)
data.loc[(data['battery_power'] > upper_lim), 'battery_power'] =
upper_lim
data.loc[(data['battery_power'] < lower_lim), 'battery_power'] =
lower_lim
print(data)
Program ini bertujuan untuk membatasi (capping) nilai-nilai pada kolom 'battery_power' yang
dianggap sebagai outlier dengan menggunakan metode persentil.
Mari kita uraikan langkah demi langkah:
- Seperti sebelumnya, `upper_lim` dihitung sebagai persentil ke-99 dari kolom 'battery_power', dan
`lower_lim` dihitung sebagai persentil ke-1.
2. **Capping Outlier**
**Output:**
Output menampilkan kumpulan data dengan nilai 'battery_power' yang telah dibatasi:
- Ada 7 kolom: `battery_power`, `blue`, `clock_speed`, `dual_sim`, `fc`, `four_g`, dan `int_memory`.
- Ada 1957 baris, yang berarti tidak ada baris yang dihapus dari kumpulan data asli.
Dalam output, semua nilai di kolom 'battery_power' yang sebelumnya dianggap sebagai outlier
sekarang telah diganti dengan batas atas atau batas bawah yang didefinisikan. Ini memastikan bahwa
semua nilai dalam kolom 'battery_power' berada dalam rentang yang didefinisikan oleh persentil ke-
1 dan ke-99.
Pendekatan capping ini berguna jika Anda tidak ingin kehilangan data tetapi juga ingin mengurangi
efek dari outlier.
PROGRAM 10
import pandas as pd
data = pd.read_csv("dataset.csv")
encoded_columns = pd.get_dummies(data['color'])
data = data.join(encoded_columns).drop('color', axis=1)
print(data)
Program ini menunjukkan proses "one-hot encoding" untuk kolom kategorikal 'color' dalam
kumpulan data.
3. **Menggabungkan Kolom yang Di-encode ke DataFrame Asli dan Menghapus Kolom 'color'**
- `.drop('color', axis=1)`: Ini menghapus kolom 'color' dari DataFrame yang telah diperbarui.
**Output:**
Output menampilkan kumpulan data dengan kolom 'color' yang telah diubah menjadi kolom-kolom
biner berdasarkan one-hot encoding:
- Ada 6 kolom baru yang mewakili setiap warna yang ada dalam kolom 'color' awal: `black`, `green`,
`purple`, `red`, `white`, dan `yellow`.
- Setiap baris memiliki nilai `True` atau `False` untuk setiap kolom warna, menunjukkan warna asli
dari kolom 'color'. Misalnya, baris pertama memiliki nilai `True` hanya untuk kolom `green`, yang
berarti warna aslinya adalah hijau.
Dengan one-hot encoding, data kategorikal diubah menjadi format yang lebih mudah dianalisis dan
dapat diterima oleh banyak algoritma machine learning.
PROGRAM 11
#Log Transform Example
data = pd.DataFrame({'value':[3,67, -17, 44, 37, 3, 31, -38]})
data['log+1'] = (data['value']+1).transform(np.log)
#Negative Values Handling
#Note that the values are different
data['log'] = (data['value']-data['value'].min()
+1) .transform(np.log)
print(data)Program ini menunjukkan cara melakukan transformasi logaritmik pada suatu kolom
dalam DataFrame, serta bagaimana menangani nilai negatif saat melakukan transformasi logaritmik.
1. **Pembuatan DataFrame**
- DataFrame `data` dibuat dengan satu kolom bernama 'value' yang berisi sejumlah nilai, termasuk
beberapa nilai negatif.
- Kolom baru, 'log+1', dibuat dengan menambahkan 1 ke setiap nilai dalam kolom 'value' dan
kemudian mengambil logaritma natural dari hasilnya menggunakan `transform(np.log)`.
- Penambahan 1 sebelum mengambil logaritma adalah pendekatan umum untuk menangani nilai 0
dalam data karena logaritma dari 0 tidak terdefinisi.
- Kolom baru, 'log', dibuat dengan mengurangkan nilai minimum dari kolom 'value' dari setiap nilai
di kolom tersebut, menambahkan 1, dan kemudian mengambil logaritma natural.
- Tujuan dari pendekatan ini adalah untuk menggeser semua nilai dalam kolom 'value' sehingga
menjadi positif, sehingga kita dapat mengambil logaritma dari mereka tanpa menghasilkan nilai yang
tidak terdefinisi.
**Output:**
Output menampilkan DataFrame `data` dengan kolom 'value', 'log+1', dan 'log':
- Kolom 'log' menunjukkan hasil transformasi logaritmik setelah menggeser semua nilai menjadi
positif. Tidak ada nilai NaN dalam kolom ini karena semua nilai telah digeser menjadi positif sebelum
transformasi.
Transformasi logaritmik adalah teknik yang sering digunakan dalam analisis data untuk mengubah
distribusi data yang skew (miring) menjadi lebih mendekati distribusi normal. Namun, perlu diingat
bahwa logaritma dari angka negatif atau nol tidak terdefinisi, sehingga kita harus menggunakan
pendekatan tertentu untuk menangani kasus-kasus tersebut, seperti yang ditunjukkan dalam
program ini.
PROGRAM 12
data = pd.DataFrame({'value':[7,25, -47, 73, 8, 22, 53, -25]})
data['normalized'] = (data['value'] - data['value'].min()) /
(data['value'].max() - data['value'].min())
print(data)Program ini menunjukkan cara melakukan normalisasi pada suatu kolom dalam
DataFrame menggunakan metode Min-Max Normalization.
1. **Pembuatan DataFrame**
- DataFrame `data` dibuat dengan satu kolom bernama 'value' yang berisi sejumlah nilai, termasuk
beberapa nilai negatif.
2. **Min-Max Normalization**
\[
\]
- Dengan kata lain, setiap nilai dalam kolom 'value' dikurangi dengan nilai minimum dari kolom
tersebut dan dibagi dengan rentang (maksimum dikurangi minimum) dari kolom tersebut.
**Output:**
Output menampilkan DataFrame `data` dengan kolom 'value' dan 'normalized':
- Kolom 'normalized' menunjukkan nilai yang telah dinormalisasi ke rentang [0,1] dengan
menggunakan metode Min-Max Normalization.
- Nilai minimum dari kolom 'value', yaitu -47, menjadi 0 setelah normalisasi.
- Nilai maksimum dari kolom 'value', yaitu 73, menjadi 1 setelah normalisasi.
- Semua nilai lainnya dinormalisasi ke rentang [0,1] berdasarkan posisi relatif mereka antara nilai
minimum dan maksimum.
Min-Max Normalization adalah teknik yang sering digunakan dalam analisis data dan pemrosesan
awal sebelum menerapkan algoritma machine learning untuk mengubah fitur ke skala yang sama. Ini
membantu dalam konvergensi yang lebih cepat dan dapat meningkatkan kinerja beberapa algoritma.
PROGRAM 13
data = pd.DataFrame({'value':[7,25, -47, 73, 8, 22, 53, -25]})
data['standardized'] = (data['value'] - data['value'].mean()) /
data['value'].std()
print(data)
Program ini menunjukkan cara melakukan standarisasi pada suatu kolom dalam DataFrame
menggunakan metode Z-Score Standardization (atau dikenal juga sebagai Zero-Mean Normalization).
1. **Pembuatan DataFrame**
- DataFrame `data` dibuat dengan satu kolom bernama 'value' yang berisi sejumlah nilai, termasuk
beberapa nilai negatif.
2. **Z-Score Standardization**
\[
\]
- Di sini, setiap nilai dalam kolom 'value' dikurangi dengan rata-rata (mean) dari kolom tersebut dan
kemudian dibagi dengan deviasi standar (std) dari kolom tersebut.
**Output:**
- Kolom 'standardized' menunjukkan nilai yang telah distandarisasi menggunakan metode Z-Score.
- Nilai dengan standarisasi mendekati 0 berarti nilai tersebut mendekati rata-rata kolom 'value'.
- Nilai dengan standarisasi positif berarti nilai tersebut di atas rata-rata kolom 'value', dan sebaliknya
untuk nilai dengan standarisasi negatif.
- Nilai dengan standarisasi lebih dari 1 atau kurang dari -1 menunjukkan bahwa nilai tersebut lebih
dari satu deviasi standar dari rata-rata.
Z-Score Standardization adalah teknik yang sering digunakan dalam analisis data dan pemrosesan
awal sebelum menerapkan algoritma machine learning. Teknik ini mengubah fitur sehingga memiliki
rata-rata 0 dan deviasi standar 1, yang dapat membantu dalam konvergensi yang lebih cepat dan
meningkatkan kinerja beberapa algoritma.