Lab 1 Data Science & Analysis
Bagian 1
Petunjuk:
1. Anda diharuskan mencoba sendiri setiap materi yang diberikan.
2. Kerjakan semua (6) soal yang terdapat pada tutorial.
3. Setelah sesi lab berakhir akan ada tugas yang diberikan pada dokumen yang berbeda.
Lab ini menggunakan Bahasa Pemrograman Python yang mengacu pada buku pedomanyang
digunakan di kelas. Anda bebas untuk menggunakan software apapun untuk mengerjakan
(Jupyter Notebook, JupyterLab, Google Colab, Spyder, Kaggle).
A. Numpy
import numpy as np
1. Konversi List ke Numpy Array
Numpy memiliki beberapa fungsi built-in untuk membuat array baru, tetapi jika anda
belum terbiasa dengan numpy, anda selalu dapat membuat numpy array (1D) dari
python list.
risuto = [8, 777, 6, 4, 114514, 7, 21, 42, 888]
numpy_array = [Link](risuto)
print('ini adalah list biasa :', risuto, type(risuto))
print('ini adalah numpy array :', numpy_array, type(numpy_array))
Output:
ini adalah list biasa : [8, 777, 6, 4, 114514, 7, 21, 42, 888]
<class 'list'>
ini adalah numpy array : [8 777 6 4 114514 7 21 42 888]
<class '[Link]'>
2. Operasi Dasar Numpy Array
# mengakses element dengan index 3
print('elemen ke-3 :', numpy_array[3])
# menambahkan elemen ke dalam list, dan mengembalikan list
tersebut
appended_array = [Link](numpy_array, 9999)
print('original array :', numpy_array)
print('appended array :', appended_array)
Output:
elemen ke-3 : 4
original array : [8 777 6 4 114514 7 21 42 888]
appended array : [8 777 6 4 114514 7 21 42 888
9999]
3. Mengambil Nilai Statistik dari Array
Numpy memiliki beberapa fungsi built-in untuk mempermudah pengambilan nilai-nilai
statistik.
print('rata-rata dari array:', numpy_array.mean())
print('nilai maksimum dari array:', numpy_array.max())
Output:
rata-rata dari array: 12918.555555555555
nilai maksimum dari array: 114514
Soal 1
Cari dan tampilkan nilai median, minimum, standar deviasi, variance, dan jumlah dari
array np_risuto!
4. Sort Numpy Array
sorted_array = [Link](numpy_array)
print(sorted_array)
Output:
[ 4 6 7 8 21 42 777 888 114514]
5. Elementwise Operation antar 2 Numpy Array
a = [Link]([1, 6, 21])
b = [Link]([0.1, 0.2, 0.3])
print('hasil penjumlahan:', [Link](a, b))
print('hasil perkalian:', [Link](a, b))
Output:
hasil penjumlahan: [ 1.1 6.2 21.3 ]
hasil perkalian: [ 0.1 1.2 6.3 ]
Soal 2
Carilah dan print array hasil elementwise substraction dan elementwise division dari
array a dan b di atas!
6. Menampilkan Nilai Unik dari Array
jo_array = [Link](['johnny', 'johnny', 'johnny', 'jolyne',
'johnny', 'joseph', 'jonathan', 'jolyne',
'jolyne', 'joseph', 'johnny', 'johnny',
'jolyne','johnny', 'jolyne', 'jolyne'])
# nilai unik dari array
unique = [Link](jo_array)
print(unique)
Output:
['johnny' 'jolyne' 'jonathan' 'joseph']
# nilai unik beserta jumlahnya
unique, counts = [Link](jo_array, return_counts=True)
nilai_unik = dict(zip(unique, counts))
print(nilai_unik)
Output:
{'johnny': 7, 'jolyne': 6, 'jonathan': 1, 'joseph': 2}
7. Membuat Matriks dengan Numpy
matrix_a = [Link](
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
)
matrix_b = [Link](
[[1, 4, 3],
[2, 6, 6],
[7, 0, 9]]
)
8. Operasi Dasar Matriks
# Transpose
transposed_matrix = [Link](matrix_a)
print('transposed:')
print(transposed_matrix)
# Invers
inversed_matrix = [Link](matrix_b)
print('inversed:')
print(inversed_matrix)
Output:
transposed:
[[1 4 7]
[2 5 8]
[3 6 9]]
inversed:
[[ 2.25000000e+00 -1.50000000e+00 2.50000000e-01]
[ 1.00000000e+00 -5.00000000e-01 9.25185854e-18]
[-1.75000000e+00 1.16666667e+00 -8.33333333e-02]]
9. Operasi Dua Matriks
# dot product
print([Link](matrix_a , matrix_b))
# penjumlahan
print([Link](matrix_a , matrix_b))
# pengurangan
print([Link](matrix_a , matrix_b))
Output:
[[ 26 16 42]
[ 56 46 96]
[ 86 76 150]]
[[ 2 6 6]
[ 6 11 12]
[14 8 18]]
[[ 0 -2 0]
[ 2 -1 0]
[ 0 8 0]]
B. Pandas
import pandas as pd
1. Membaca Dataset
# Membaca dataset dari url
cancer_df = pd.read_csv(
'[Link]
cancer-wisconsin/[Link]',header=None)
# Membaca dataset dari lokal
drinks = pd.read_csv('[Link]')
display(drinks)
Output:
Perhatikan bahwa index data dimulai dari 0 bukan 1. Untuk mengetahui dimensi data,
gunakan fungsi variabel [Link]
print('shape dataset:', [Link])
print('artinya, dataset terdiri dari {} baris dan {}
kolom'.format([Link][0], [Link][1]))
Output:
shape dataset: (193, 6)
artinya, dataset terdiri dari 193 baris dan 6 kolom
2. Menampilkan Tipe data dari tiap kolom
[Link]
Output:
country object
beer_servings int64
spirit_servings float64
wine_servings int64
total_litres_of_pure_alcohol float64
continent object
dtype: object
3. Menampilkan Nilai-Nilai Statistik dari Setiap Kolom Numerikal
Gunakan fungsi describe() untuk menampilkan gambaran statistik singkat dari
keseluruhan data atau kolom/fitur tertentu dari data.
[Link]()
Output:
Fungsi describe() akan menampilkan statistik standar (mean, std, min, max) untuk
kolom/atribut bertipe kuantitatif sedangkan untuk kolom bertipe kualitatif maka informasi
yang akan ditampilkan berupa:
1. count: Jumlah filled in/ row yang terisi
2. unique: Berapa banyak nilai unik/level
3. top: Nama item yang paling banyak muncul
4. dataFreq: Seberapa sering top item umum muncul dalam data
Perhatikan perbedaan output describe() dari kedua kolom berikut:
drinks['continent'].describe()
Output:
count 170
unique 5
top AF
freq 53
Name: continent, dtype: object
drinks['beer_servings'].describe()
Output:
count 193.000000
mean 106.160622
std 101.143103
min 0.000000
25% 20.000000
50% 76.000000
75% 188.000000
max 376.000000
Name: beer_servings, dtype: float64
4. Menampilkan Pearson Correlation dari DataFrame
[Link](method='pearson')
Output:
5. Menghitung Jumlah Elemen
Pada contoh dibawah terlihat bahwa terdapat kolom dengan jumlah elemen kurang dari
jumlah baris, artinya kolom tersebut memiliki missing value.
# Menghitung jumlah elemen tidak null
[Link]()
Output:
country 193
beer_servings 193
spirit_servings 189
wine_servings 193
total_litres_of_pure_alcohol 193
continent 170
dtype: int64
6. Missing Values
Missing values adalah informasi yang tidak tersedia untuk sebuah objek (kasus). Missing
value terjadi karena informasi untuk sesuatu tentang objek tidak diberikan, sulit dicari,
atau memang informasi tersebut tidak ada. Missing Value biasanya ditandai dengan
“NA” atau “NaN” dalam sebuah data.
Beberapa cara mengatasi missing values (disesuaikan dengan kebutuhan) seperti:
menghapus tuple data yang tidak lengkap, menghapus variable (kolom data), mengisi
missing value dengan mean/median/mode, mengisi missing value dengan nilai
prediction. Silahkan dipelajari lebih lanjut.
# Menghitung jumlah missing values dengan
[Link]().sum()
Output:
country 0
beer_servings 0
spirit_servings 4
wine_servings 0
total_litres_of_pure_alcohol 0
continent 23
dtype: int64
Berikut kita adalah contoh menangani missing value dengan mengganti NA/NaN dengan
nilai rata-rata atau nilai tertentu. Misalnya semua nilai NA/NaN pada kolom continent
akan diganti dengan nilai yang paling sering muncul yaitu “AF” dan semua nilai NaN
pada kolom spirit serving akan diganti dengan nilai rata-rata dari kolom tersebut.
Silahkan pelajari lebih lanjut pada link berikut:
[Link]
l
filled_drinks = [Link]()
average_spirit = filled_drinks['spirit_servings'].mean()
filled_drinks['spirit_servings'].fillna(average_spirit, inplace =
True)
filled_drinks['continent'].fillna('AF', inplace = True)
print('before fill:')
display([Link][[192]])
print('after fill:')
display(filled_drinks.iloc[[192]])
Output:
Soal 3
- Buat dan tampilkan DataFrame baru yang dihasilkan dari dataset drinks
dengan mendrop row yang berisi missing value (minimal satu). hint: bisa
dilakukan dengan satu baris
- Tampilkan shape, count, dan isnull().sum() dari DataFrame baru tersebut
7. Sorting DataFrame
Contoh di bawah melakukan sort DataFrame berdasarkan nilai kolom beer_servings,
secara ascending. Artinya baris teratas adalah negara dengan beer servings paling
kecil.
drinks_sorted_by_beer_servings =
drinks.sort_values('beer_servings')
display(drinks_sorted_by_beer_servings)
Output:
8. Query pada DataFrame
Terdapat beberapa aliran untuk melakukan query pada DataFrame. Pada lab ini
digunakan query.
# dataframe dengan beer servings lebih dari 20
high_beer = [Link]('beer_servings > 200')
display(high_beer)
Output:
Soal 4
Tampilkan baris-baris pada dataset drinks dimana beer_servings nya 0 dan continent
nya AS.
9. Menampilkan Beberapa Baris dan kolom
# menampilkan baris 0-2, baris 1-4
drinks_subset = [Link] [0:3, 1:5]
display(drinks_subset)
Output:
# dataframe yang hanya berisi column country
countries = drinks[['country']]
display(countries)
Output:
# pandas series yang berisi column country
countries_pandas_series = drinks['country']
type(countries_pandas_series)
print('ini pandas series', countries_pandas_series)
print()
# numpy array yang berisi column country
countries_numpy_array = countries_pandas_series.values
type(countries_numpy_array)
print('ini numpy array', countries_numpy_array)
Output:
# Mengambil Row 2
row_2 = [Link][2]
display(row_2)
Output:
country Algeria
beer_servings 25
spirit_servings 0
wine_servings 14
total_litres_of_pure_alcohol 0.7
continent AF
Name: 2, dtype: object
# Mengubah row menjadi python dictionary
row_2.to_dict()
Output:
{'beer_servings': 25,
'continent': 'AF',
'country': 'Algeria',
'spirit_servings': 0.0,
'total_litres_of_pure_alcohol': 0.7,
'wine_servings': 14}
C. Plotting
Untuk memahami data dan memperoleh informasi yang terkandung dalam data, kita
perlu untuk menganalisis data tersebut. Salah satu bentuk analisis data adalah melihat
visualisasi data dalam bentuk graph, plot, dan lain-lain. Visualisasi data tersebut
dilakukan dengan tujuan:
● Presentasi,
● Sarana untuk mengkomunikasikan data,
● Melihat keterhubungan antar data,
● Memahami data dengan cepat.
Berikut ini berbagai bentuk visualisasi data yang dapat dibuat di Python. Anda dapat
menggunakan library pandas, numpy, [Link], dan seaborn untuk melakukan
visualisasi data. Untuk tutorial ini Anda akan menggunakan tips dataset.
import pandas as pd
import numpy as np
import [Link] as plt
import seaborn as sns
tips = sns.load_dataset('tips')
[Link]()
Output:
1. Scatter Plot
Goal: Untuk melihat keterhubungan antar dua variabel. Anda akan melakukan plotting
terhadap variabel total_bil dan tip menggunakan lmplot().
[Link](x='total_bill', y='tip', data=tips, fit_reg = False)
[Link]()
Output:
# menggambarkan scatter plot sekaligus garis regresi
[Link](x='total_bill', y='tip', data=tips)
[Link]()
Output:
Selanjutnya, kita dapat melihat keterhubungan antara variabel total_bil dan tip
berdasarkan faktor jenis kelamin menggunakan hue = (nama_variabel).
# scatterplot yang warnanya dibedakan berdasarkan suatu nilai,
dibawah ini
# dibedakan dengan sex
[Link](x='total_bill', y='tip', data=tips, hue='sex',
fit_reg=False,
palette='Set1')
[Link]()
Output:
2. Line Graphs
Goal: Melihat perubahan suatu variabel dalam jangka waktu tertentu. Anda akan
melakukan plotting pada variabel tip dan numb menggunakan [Link]()
tips['numb'] = range(1,245)
x = tips['numb']
y = tips['tip']
# normal plot
[Link](x,y)
# plot with data point marker
[Link](x,y, marker='o', color='purple', linewidth=0.1)
[Link]()
Output:
3. Bar Charts
Goal: Membandingkan variabel di berbagai kelompok. Anda akan melakukan ploting
terhadap variabel tip dan day menggunakan barplot() untuk melihat seberapa banyak tip
yang diperoleh pada setiap harinya.
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
[Link](x="day", y="total_bill", data=tips)
[Link]()
Output:
# Bar plot dipisah berdasarkan gender.
[Link](x="day", y="total_bill", hue="sex", data=tips)
[Link]()
Output:
Soal 5
Tampilkan barplot yang menampilkan beer_servings dari 5 negara dengan nilai
beer_servings terbesar, diurutkan dari yang paling besar (kiri = besar).
4. Histograms
Goal: Menampilkan distribusi frekuensi dari satu variabel kuantitatif dengan memisahkan
data berdasarkan range. Anda akan melakukan plotting terhadap variabel total_bil
menggunakan hist().
tips['tip_pct'] = 100 * tips['tip']
tips['tip_pct'].hist(bins=20)
[Link]()
Output:
Soal 6
Tampilkan histogram plot wine servings dari negara di EU, dari dataset drinks.
5. Box Plots
Goal: Melihat distribusi suatu nilai.
● Nilai minimum
● Nilai Q1
● Nilai median / Q2
● Nilai Q3
● Nilai maksimum
Anda akan melakukan plotting pada variabel day dan tip menggunakan boxplot().
Selain itu anda juga dapat memperoleh informasi mengenai data outlier. Seperti pada
gambar di bawah ini, terdapat titik-titik kecil hitam yang merupakan data outlier.
[Link](x='day', y='tip', data=tips)
[Link]('tip ($)')
[Link]()
[Link](x='sex', y='tip', data=tips)
[Link]('tip ($)')
[Link]()
Output:
6. Plotting Dimensi Tinggi
Untuk melakukan plotting dimensi tinggi (lebih dari 4), kita dapat menggunakan
scatterplot matrix. Plot dibawah menunjukan scatter plot 2D dari setiap pasangan atribut.
import [Link] as px
df = [Link]()
display(df)
fig = px.scatter_matrix(df,
dimensions=["sepal_width", "sepal_length", "petal_width",
"petal_length"],
color="species")
[Link]()
Output: