09 Tutorial Python Missing Values
09 Tutorial Python Missing Values
file = "titanicFull.csv"
df = pd.read_csv(file)
T2i) Cetak 4 baris pertama dari kumpulan data
df.head(4)
T2ii) Cetak 6 baris terakhir dari kumpulan data
df.iloc[-6:]
T3) Dapatkan info umum tentang kumpulan
data
df.info()
T4) Eksplorasi kumpulan data dan coba pahami arti
dari setiap variabel (kolom). Identifikasi variabel
mana yang kategoris dan mana yang numerik.
# Answer
# - Pclass: Passenger class (1=1st; 2=2nd; 3=3rd - Categorical - ordinal - transformed into 1,2,3))
# - Survived: Survival (0=No; 1=Yes - Categorical - nominal - transformed into 0 and 1)
# - Name: Passenger's name (Text)
# - Sex: Passenger's sex (Categorical - nominal)
# - Age: Passenger's age (Numerical - discrete)
# - SibSp: Number of Siblings/Spouses Aboard (Numerical - discrete)
# - Parch: Number of Parents/Children Aboard (Numerical - discrete)
# - Ticket: Ticket number (Text)
# - Fare: Passenger fare (Numerical - continuous)
# - Cabin: Cabin number (Categorical - nominal)
# - Embarked: Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton)
T5) Tampilkan bentuk data
df.shape
T6) Tampilkan nama kolom dataframe
df.columns
T7) Apakah menurut Anda kolom (variabel) perlu
lebih mudah untuk dibaca? Khususnya, yang sulit
dipahami pada T4
df.rename(index=str,
columns={"pclass":"ticketClass",
"sibsp":"siblingsSpouses",
"parch":"parentsChildren"}, inplace=True)
df.columns
T8) Apakah ada catatan duplikat?
duplicated = df.duplicated().sum()
print("There are %d duplicated records" %
(duplicated))
T9) Salin kumpulan data sehingga Anda
memanipulasi kumpulan data yang disalin dan
membiarkan yang asli tidak terpengaruh
Hint: Periksa dokumentasi panda untuk bantuan tentang cara menyalin
kerangka data
dff = df.copy()
T10) Membuat dataframe
• Missing variable (column) menunjukkan jumlah data yang hilang untuk setiap variabel
dalam kumpulan data titanic
• Percentage variable menunjukkan persentase data yang hilang di atas ukuran
kumpulan data titanic
# Tampilkan missing data and urutkan dalam urutan secara ascending (naik)
missingDataSummary = dff.isna().sum()
# Hitung persentase of missing data
missingDataPercentage = (dff.isnull().sum()/dff.shape[0])
# Gabungkan dua Seri
missingData = pd.concat([missingDataSummary,
missingDataPercentage], axis=1, keys=['Missing',
'Percentage'])
missingData.sort_values(ascending=False, by='Missing')
axis = 1 merge column
dffClean.isna().sum().sort_values(ascending=False)
T12) Isi missing data yang memiliki tipe
categorical dengan mode
dffClean.info()
dff.isna().sum()
dffClean[dffClean['embarked'].isna()]
dffClean['embarked'] =
dffClean['embarked'].fillna(dffClean['embarked'].mode()[0])
dffClean.isna().sum().sort_values(ascending=False)
T13i) Plot histogram variabel numerik dengan jumlah data hilang
terbesar sehingga dapat ditentukan nilai terbaik untuk mengisi
data yang hilang.
• Tambahkan judul dan nama axis yang sesuai.
• Catatan: Gunakan visualisasi Panda, matplotlib atau seaborn.
#Menggunakan pandas
plt.figure(figsize=(4,3), dpi=100)
ax = dffClean['age'].hist(bins=20)
ax.set_title("Histogram for age variable",fontsize=16)
ax.set_xlabel('Age', fontsize=16) # set x label
ax.set_ylabel('Age (Count)', fontsize=16, rotation=90) # set y label
ax.grid(False)
#Menggunakan seaborn
plt.figure(figsize=(4,3), dpi=100)
g = sns.histplot(dffClean, x='age', kde=True, color='steelblue', bins=20)
g.set_title("Histogram for age variable",fontsize=16)
g.set_xlabel('Age', fontsize=16) # set x label
g.set_ylabel('Age (Count)', fontsize=16, rotation=90) # set y label
#Menggunakan matplotlib
plt.figure(figsize=(4,3), dpi=100)
plt.hist(dffClean['age'], bins=20, alpha=0.5, density=False,
histtype='stepfilled', color='steelblue', edgecolor='none')
# alpha=0.5 -> transparent level
plt.title("Histogram for age variable",fontsize=16)
plt.xlabel('Age',fontsize=16) # set x label
plt.ylabel('Age (Count)',fontsize=16,rotation=90) # set y label
T13ii) Isi missing values dengan nilai yang
sesuai
dffClean.info()
dff.isna().sum()
dffClean[dffClean['age'].isna()]
dffClean['age'] =
dffClean['age'].fillna(dffClean['age'].median())
dffClean.isna().sum().sort_values(ascending=False)
T13iii) Plot histogram lagi untuk variabel dari tugas T13 setelah imputasi dan amati
bagaimana distribusinya berubah.
#Using seaborn
plt.figure(figsize=(4,3), dpi=100)
g = sns.histplot(dffClean, x='age', kde=True, color='steelblue')
g.set_title("Histogram for age variable",fontsize=16)
g.set_xlabel('Age', fontsize=16) # set x label
g.set_ylabel('Age (Count))', fontsize=16, rotation=90) # set y label
T14) Apa yang harus Anda lakukan tentang nilai yang hilang dari variabel akhir?
Pilih strategi imputasi terbaik dan terapkan
dffClean[dffClean['fare'].isna()]
#Karena nilai yang hilang adalah tarif, kemungkinan tiket dari kelas yang sama
mewakili distribusi tarif yang lebih baik. Dengan demikian, kita dapat
menghitung nilai yang hilang dengan nilai rata-rata/median tarif tiket dari
kelas 3.
dffClean['ticketClass'].unique()
#Get the ticket class, i.e., 3
ticketClass = dffClean[dffClean['fare'].isna()]['ticketClass']
if (len(ticketClass)>0):
#Find the median fare of tickets from class 3
fareMedian =
dffClean[dffClean['ticketClass']==ticketClass[0]]['fare'].median()
dffClean.isna().sum().sort_values(ascending=False)
T15i) Simpan dataframe yang telah dibersihkan
sebagai file csv dengan nama "titanicClean.csv"
file = "titanicClean.csv"
dffClean.to_csv(file, index=False)
T15ii) Muat kumpulan data yang telah
dibersihkan ke dalam kerangka data baru
titanicClean = pd.read_csv(file)
titanicClean.info()
T16) Dapatkan beberapa statistik deskriptif untuk
kumpulan data yang hanya memilih variabel yang
statistik deskriptifnya masuk akal
#fungsi deskripsi akan memberikan statistik deskriptif untuk variabel
apa pun yang numerik
#termasuk TicketClass; Namun, variabel ini tidak memiliki arti apapun
#Oleh karena itu, mereka harus dimasukkan dalam kumpulan statistik
deskriptif
titanicClean["familySize"] = titanicClean["siblingsSpouses"] +
titanicClean["parentsChildren"] + 1
T17ii) Cetak catatan untuk keluarga dengan nama
keluarga "Palsson" dan konfirmasikan bahwa hasil
dari tugas T17i benar
titanicClean[titanicClean['name'].str.contains("Palsson")]
T18): Cari tahu dan cetak detail informasi dari
keluarga yang memiliki jumlah terbesar
#Solution1
titanicClean[titanicClean['familySize']==max(titanicClean["familySize"])]
#Solution2
biggestfamily = np.where(titanicClean["familySize"] ==
max(titanicClean["familySize"]))
titanicClean.iloc[biggestfamily]
T19i) Bagaimana pembagian tarif tiket kelas 1? Buat
boxplot dan selidiki apakah ada informasi yang
menarik
#Using Pandas
plt.figure(figsize=(4,3), dpi=100)
ax =
titanicClean[titanicClean['ticketClass']==1].boxplot(column='fare')
ax.set_title("Boxplot for ticket fares of class 1")
ax.set_ylabel('Fare',fontsize=16,rotation=90) # set y label
ax.set_xlabel('Class 1',fontsize=16)
ax.grid(False)
#Using seaborn
d = titanicClean[titanicClean['ticketClass']==1]
plt.subplots(figsize=(4,3), dpi=100)
ax = sns.boxplot(y="fare", data=d)
ax.set_title("Boxplot for ticket fares of class 1")
ax.set_ylabel('Fare',fontsize=20,rotation=90) # set y label
ax.set_xlabel('Class 1',fontsize=20) # set x label
ax.grid(False)
T19ii) Apakah Anda melihat nilai tarif yang aneh?
Periksa apakah ada outlier untuk tarif tiket kelas 1
menggunakan metode standar deviasi.
Outliers:
Data (records) berbeda secara signifikan dari sebagian besar data
dalam kumpulan data (atau population).
T19ii) Apakah Anda melihat nilai tarif yang aneh?
Periksa apakah ada outlier untuk tarif tiket kelas 1
menggunakan metode standar deviasi.
fareClass1 = titanicClean[titanicClean['ticketClass']==1]['fare']
fareStd = np.std(fareClass1)
fareMean = np.mean(fareClass1)
#Solution2
titanicClean.loc[fareOutliers.index]
T20) Mengingat bahwa Titanic berhenti di tiga pelabuhan (C = Cherbourg, Q =
Queenstown, S = Southampton) sebelum berangkat dari Inggris, dapatkah kita
mengidentifikasi pola apa pun terkait pelabuhan tempat penumpang menaiki Titanic?
Buat bar plot untuk mengilustrasikan ini
#Using Pandas
plt.figure(figsize=(4,3), dpi=100)
plt.bar(embarked.index, embarked)
plt.title("Barplot based on embarked port", fontsize=16)
plt.xlabel('Port',fontsize=16) # set x label
plt.ylabel('embarked',fontsize=16,rotation=90) # set y label
ax.grid(False)
• Buat kolom baru 'Title' yang menyertakan panggilan setiap
penumpang dan hanya memiliki entri berikut:
• Master, Miss, Mr, Mss
where
• Miss includes also Mlle and Ms
• Mme includes also Mrs
• all the remaining titles become Rare
sr = pd.Series(['New_York', 'Lisbon', 'Tokyo', 'Paris', 'Munich'])
sr.str.extract('([auieo])')
#sr.str.extract(pat = '([auieo])')
titanicClean['Title'] = titanicClean['Title'].replace(['Lady',
'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir',
'Jonkheer', 'Dona'], 'Rare')