0% menganggap dokumen ini bermanfaat (0 suara)
15 tayangan

09 Tutorial Python Missing Values

Dokumen ini membahas analisis data Titanic menggunakan Pandas dan Python. Dokumen ini menjelaskan cara membersihkan, mengeksplorasi, dan mempelajari pola dalam data Titanic.

Diunggah oleh

hendry ming
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
15 tayangan

09 Tutorial Python Missing Values

Dokumen ini membahas analisis data Titanic menggunakan Pandas dan Python. Dokumen ini menjelaskan cara membersihkan, mengeksplorasi, dan mempelajari pola dalam data Titanic.

Diunggah oleh

hendry ming
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 43

Big Data

BIG DATA – TK13025


T1) Tampilkan data Titanic menggunakan
Pandas
import pandas as pd
import numpy as np

import seaborn as sns


import matplotlib.pyplot as plt

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

axis = 0  merge row


T11) Apa yang harus kita lakukan dengan variabel dengan jumlah data
hilang tertinggi. Pertimbangkan jumlah data yang hilang dibandingkan
dengan jumlah total data yang tersedia.
# Kita perlu membuang variabel Cabin karena data yang hilang adalah
77% dari total data
dffClean = dff.drop(columns='cabin')

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()

#impute the value


dffClean['fare'] = dffClean['fare'].fillna(fareMedian)

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[['survived', 'age', 'siblingsSpouses', 'parentsChildren', 'fare']].describe()


T17i) Untuk setiap penumpang, cari tahu berapa banyak
total anggota keluarganya dan simpan informasi ini
sebagai variabel baru dalam dataframe

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)

fareOutliers = fareClass1[(fareClass1 > fareMean + 3 *fareStd) |


(fareClass1 < fareMean - 3 *fareStd)]

print("Mean=%.3f and standard deviation=%.3f of ticket fares for class 1" %


(fareMean, fareStd))

print("The following could be considered as outliers %s" % (fareOutliers))


T19iii) Cetak informasi untuk penumpang
tersebut
#Solution1
titanicClean[titanicClean['fare']==fareOutliers.iloc[0]]

#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

# Pertama-tama kita perlu mengelompokkan dataframe berdasarkan variabel


embarked
embarked =
titanicClean.groupby('embarked').count()

#Buat dataframe berdasarkan grouping


embarkedDf = pd.DataFrame({'Port': embarked.index,
'Count':embarked['ticketClass']})
#Finally, we plot the barplot
plt.figure(figsize=(4,3), dpi=100)
ax = embarkedDf.plot.bar(x='Port', y='Count')
ax.set_title("Barplot based on embarked port", fontsize=16)
ax.set_ylabel('Count',fontsize=16,rotation=90) # set y label
ax.set_xlabel('Port', fontsize=16)
ax.grid(False)
#Using seaborn
plt.subplots(figsize=(4,3), dpi=100)
ax = sns.countplot(data=titanicClean, x='embarked')
ax.set_title("Barplot based on embarked port", fontsize=16)
ax.set_xlabel('Port',fontsize=16) # set x label
ax.set_ylabel('Embarked',fontsize=16,rotation=90) # set y label
ax.grid(False)
#Using matplotlib

#Pertama-tama kita perlu mengelompokkan item data bersama-sama


#semua entri data pada dataframe yang dihasilkan menghitung jumlah penumpang yang berangkat di setiap Pelabuhan
# embarked = titanicClean.groupby('embarked').count().iloc[:,1]
embarked = titanicClean.groupby('embarked').count()['ticketClass']

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])')

sr = pd.Series(['USA New_York', 'Portugal Lisbon', 'Japan Tokyo', 'France Paris',


'Germany Munich'])
sr.str.extract('([A-Za-z]+) ')
sr.str.extract(' ([A-Za-z]+)')
s = pd.Series(['Allen, Miss. Elisabeth Walton', 'Anderson, Mr. Harry',
'Astor, Col. John Jacob'])
s.str.extract('([A-Za-z,]+) ')

s.str.extract(' ([A-Za-z,]+) ')


s.str.extract(' ([A-Za-z]+)\. ')

s.str.extract(' ([A-Za-z]+)\. ',expand=False)


titanicClean['Title'] = titanicClean.name.str.extract(' ([A-Za-z]+)\.',
expand=False)

titanicClean['Title'] = titanicClean['Title'].replace('Mlle', 'Miss')


titanicClean['Title'] = titanicClean['Title'].replace('Ms', 'Miss')
titanicClean['Title'] = titanicClean['Title'].replace('Mme', 'Mrs')

titanicClean['Title'] = titanicClean['Title'].replace(['Lady',
'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir',
'Jonkheer', 'Dona'], 'Rare')

Anda mungkin juga menyukai