EDA-01: Pendahuluan Exploratory Data Analysis


  1. Pendahuluan EDA
  2. Importing Data
  3. Dasar Data Preparation (tipe data, duplikasi, var selection)
  4. Noise vs Outliers
  5. Missing Values dan Imputasi
  6. Basic Statistics
  7. Video EDA-01
  8. Code EDA-01
  9. Referensi
“In God we trust. All others must bring data.” – W. Edwards Deming

Code Lesson EDA-01

Code dari lesson ini dapat di akses di Link berikut (wajib login ke Google/Gmail): Code EDA-01
Di link tersebut anda langsung bisa merubah code dan menjalankannya. Keterangan lebih lanjut di video yang menyertai lesson ini.
Sangat disarankan untuk membuka code dan video berdampingan/"side-by-side" untuk mendapatkan pengalaman belajar yang baik. Silahkan modifikasi (coba-coba) hal lain, selain yang ditunjukkan di video untuk mendapatkan pengalaman belajar yang lebih mendalam. Tentu saja juga silahkan akses berbagai referensi lain untuk memperkaya pengetahuan lalu diskusikan di forum yang telah disediakan.

"Side-by-Side": Ilustrasi bagaimana menggunakan code dan video dalam pembelajaran di tau-data. untuk mendapatkan pengalaman belajar yang baik.

Video EDA-01

eda-01

tau-data Indonesia

Exploratory Data Analysis-01: Data Preparations

(C) Taufik Sutanto

https://tau-data.id/eda-01/

Outline:

  • Pendahuluan EDA
  • Importing Data
  • Dasar Data Preparation (tipe data, duplikasi, var selection)
  • Noise vs Outliers
  • Missing Values dan Imputasi
  • Basic Statistics

Pendahuluan:

  • Exploratory Data Analysis (EDA) bagaikan jiwa bagi semua proses analisa data. Kemampuan untuk melakukan EDA dengan baik adalah syarat dasar utama bagi seluruh profesi yang terkait dengan pengolahan data, baik itu business intelligence, data analyst, data scientist, dan sebagainya. EDA juga menjadi tahapan awal dari kebanyakan proses analisa data dan menjadi suatu tahapan yang amat menentukan seberapa baik analisa data selanjutnya akan dihasilkan.

  • Diperkenalkan oleh John Tukey 1961: " Procedures for analyzing data, techniques for interpreting the results of such procedures, ways of planning the gathering of data to make its analysis easier, more precise or more accurate, and all the machinery and results of (mathematical) statistics which apply to analyzing data."

  • Komponen EDA meliputi preprocessing, perhitungan berbagai nilai statistics dasar (e.g. ukuran pusat dan penyebaran data), visualisasi, penyusunan hipotesis (dugaan awal), pemeriksaan asumsi, hingga story-telling dan reporting. Di dalamnya juga termasuk proses penanganan missing values, outlier, reduksi dimensi, pengelompokkan, transformasi dan distribusi data.

  • Tools: Python, R, S-Plus, etc

Tujuan EDA

  • Suggest hypotheses about the causes of observed phenomena
  • Assess assumptions on which statistical inference will be based
  • Support the selection of appropriate statistical techniques
  • Provide a basis for further data collection

Data(set)

  • Koleksi entitas/objek data dan atributnya
  • Atribut adalah sifat atau karkteristik dari objek
  • Contoh pada objek manusia: umur, berat badan, tinggi badan, jenis kelamin, dsb.
  • Setiap atribut memiliki beberapa kemungkinan "state", sebagai contoh: pria/wanita.
  • koleksi atribut mendefinisikan suatu objek.

Seringkali pada saat terjun ke lapangan, data yang kita dapat tidak datang dalam keadaan rapi dan bersih, bahkan seringkali data yang kita peroleh sangat berantakan, diperlukan usaha ekstra untuk mempersiapkan data tersebut untuk siap dilakukan analisis

image Source: https://miro.medium.com/max/1869/0*1-i9w0e4kklVQl5B.jpg

Preprocessing

  • Kunci utama dalam mendapatkan model Data Science yang valid & reliable.
  • Preprocessing yang berbeda akan menghasilkan kesimpulan/insight yang berbeda.

Beberapa Proses Dasar

  • Seleksi variable dan "Join"
  • Data Cleaning : Duplikasi, Noise dan Outliers
  • Transformasi Data
  • Dimensional Reduction

Data Understanding: Relevance

  • Data apa yang tersedia?
  • Seberapa banyak (dan lama) data tersedia?
  • Ada yang memiliki label? (Variabel Target)
  • Apakah data ini relevan? Atau bisa dibuat relevan?
  • Bagaimana dengan kualitas data ini?
  • Ada data tambahan (eksternal)?
  • Siapa yang memahami tentang data ini dengan baik di perusahaan?

Mengapa perlu preprocessing?

  • Data di dunia nyata biasanya tidak sebersih/indah data di buku akademik.
    • Noise: Misal gaji bernilai negatif
    • Ouliers: Misal seseorang dengan penghasilan >500 juta/bulan.
    • Duplikasi: Banyak di media sosial
    • Encodings, dsb: Banyak di Big Data, karena masalah bagaimana data disimpan/join.
  • Tidak lengkap: hanya agregat, kurang variabel penting, dsb.
  • Analisa pada data yang tidak di preprocess biasanya menghasilkan insight yang tidak/kurang tepat.

Garbage in-Garbage out

Beberapa langkah utama:

  1. Data Gathering:
    • Data warehouse, database, web crawling/scrapping/streaming.
    • Identifikasi, ekstraksi, dan integrasi data
  2. Data Cleaning:
  3. Transformasi data (misal encoding var kategorik)
  4. Normalisasi/standarisasi
  5. Data reduction:
    • variable selection (domain knowledge/automatic)
    • Feature Engineering
    • Variable reduction

Studi Kasus

  • Misal seorang Data Scientist ditugaskan untuk menentukan investasi properti terbaik.
  • Tujuan analisa di modul ini adalah menemukan harga rumah yang lebih rendah dari harga pasaran
  • Asumsikan kita memiliki data harga rumah yang ditawarkan dan variabel-variabel terkait lainnya.
  • Untuk membuat keputusan investasi, kita akan melakukan EDA dan membuat pada data yang ada.

Contoh Kasus Data Harga Property Rumah

  • Sumber Data: http://byebuyhome.com/
  • Objective: menemukan harga rumah yang berada di bawah pasaran.
  • Variable:
    • Dist_Taxi – distance to nearest taxi stand from the property
    • Dist_Market – distance to nearest grocery market from the property
    • Dist_Hospital – distance to nearest hospital from the property
    • Carpet – carpet area of the property in square feet
    • Builtup – built-up area of the property in square feet
    • Parking – type of car parking available with the property
    • City_Category – categorization of the city based on the size
    • Rainfall – annual rainfall in the area where property is located
    • House_Price – price at which the property was sold

Catatan penting:

Harap pelajari https://tau-data.id/dfds-01/ & https://tau-data.id/adsp-01/ dengan baik*.

In [ ]:
# Importing Some Python Modules
import warnings; warnings.simplefilter('ignore')
import scipy, itertools, pandas as pd, matplotlib.pyplot as plt, seaborn as sns, numpy as np
from scipy import stats
from sklearn.preprocessing import StandardScaler, MinMaxScaler

plt.style.use('bmh'); sns.set()
In [ ]:
# Importing CSV data  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
try:
    # Running Locally 
    price = pd.read_csv('data/price.csv')
except:
    # Running in Google Colab
    !mkdir data
    !wget -P data/ https://raw.githubusercontent.com/taudata-indonesia/eLearning/master/data/price.csv
    price = pd.read_csv('data/price.csv')

Prefer XLS atau CSV di Data Science/Machine Learning ... Mengapa?

In [ ]:
# Tipe Datanya : DataFrame (df)
print(type(price))
# Ukuran Data
N, P = price.shape
'baris = ', N, ', Kolom = ', P
In [ ]:
# "Mengintip" beberapa data pertamanya
price.head(7)
In [ ]:
# "Mengintip" beberapa data akhirnya
price.tail(9)
In [ ]:
# chosen at random
price.sample(10)

Removing a variable(s)

In [9]:
# perhatikan perintahnya tidak menggunakan tanda "()" ==> Properties 
price.columns
Out[9]:
Index(['Observation', 'Dist_Taxi', 'Dist_Market', 'Dist_Hospital', 'Carpet',
       'Builtup', 'Parking', 'City_Category', 'Rainfall', 'House_Price'],
      dtype='object')
In [10]:
# Drop kolom pertama karena tidak berguna (hanya index)
price.drop("Observation", axis=1, inplace=True)

Mengoreksi Tipe variabel

In [11]:
# tipe data di setiap kolom
# Wajib di periksa apakah tipe datanya sudah tepat?
# Perhatikan df sebagaimana semua variable di Python diperlakukan seperti object
price.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 936 entries, 0 to 935
Data columns (total 9 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   Dist_Taxi      923 non-null    float64
 1   Dist_Market    923 non-null    float64
 2   Dist_Hospital  935 non-null    float64
 3   Carpet         928 non-null    float64
 4   Builtup        921 non-null    float64
 5   Parking        936 non-null    object 
 6   City_Category  936 non-null    object 
 7   Rainfall       936 non-null    int64  
 8   House_Price    936 non-null    int64  
dtypes: float64(5), int64(2), object(2)
memory usage: 65.9+ KB
In [12]:
# dataframe types: https://pbpython.com/pandas_dtypes.html
price['Parking'] = price['Parking'].astype('category')
price['City_Category'] = price['City_Category'].astype('category')
price.dtypes
Out[12]:
Dist_Taxi         float64
Dist_Market       float64
Dist_Hospital     float64
Carpet            float64
Builtup           float64
Parking          category
City_Category    category
Rainfall            int64
House_Price         int64
dtype: object

Removing Duplicate Data

  • Banyak di temukan di sistem Big Data.
  • mempengaruhi model dan analisa yang berdasarkan frekuensi.
  • Terkadang kita sengaja membuat duplikasi (misal pada kasus imbalanced learning).

image source: http://www.dagdoo.org/excel-learning/power-query/

In [13]:
#mengecek apakah ada duplikat data?
print(price.shape)
price.duplicated().sum()
(936, 9)
Out[13]:
4
In [14]:
#menghapus entri yang memiliki data duplikat 
price.drop_duplicates(inplace=True)
print(price.duplicated().sum()) # no more duplicates
print(price.shape) # re-check by printing data size
0
(932, 9)

Variable Selection

In [15]:
# Memilih hanya variable dengan tipe tertentu
price_num = price.select_dtypes(include = ['float64', 'int64'])
price_num.head()
# Perhatikan price_num adalah variable df baru! ... (hati-hati di data yang besar)
Out[15]:
Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup Rainfall House_Price
0 9796.0 5250.0 10703.0 1659.0 1961.0 530 6649000
1 8294.0 8186.0 12694.0 1461.0 1752.0 210 3982000
2 11001.0 14399.0 16991.0 1340.0 1609.0 720 5401000
3 8301.0 11188.0 12289.0 1451.0 1748.0 620 5373000
4 10510.0 12629.0 13921.0 1770.0 2111.0 450 4662000
In [16]:
# Memilih hanya variable dengan tipe tertentu
price_cat = price.select_dtypes(include = ['category'])
price_cat.head()
Out[16]:
Parking City_Category
0 Open CAT B
1 Not Provided CAT B
2 Not Provided CAT A
3 Covered CAT B
4 Not Provided CAT B

Dasar Pengolahan variabel Kategorik: Dummy Variable

In [17]:
df = pd.get_dummies(price['Parking'], prefix='Park')
df.head()
Out[17]:
Park_Covered Park_No Parking Park_Not Provided Park_Open
0 0 0 0 1
1 0 0 1 0
2 0 0 1 0
3 1 0 0 0
4 0 0 1 0

Menggabungkan dengan data awal (concat)

In [18]:
df2 = pd.concat([price, df], axis = 1)
df2.head().transpose()
Out[18]:
0 1 2 3 4
Dist_Taxi 9796 8294 11001 8301 10510
Dist_Market 5250 8186 14399 11188 12629
Dist_Hospital 10703 12694 16991 12289 13921
Carpet 1659 1461 1340 1451 1770
Builtup 1961 1752 1609 1748 2111
Parking Open Not Provided Not Provided Covered Not Provided
City_Category CAT B CAT B CAT A CAT B CAT B
Rainfall 530 210 720 620 450
House_Price 6649000 3982000 5401000 5373000 4662000
Park_Covered 0 0 0 1 0
Park_No Parking 0 0 0 0 0
Park_Not Provided 0 1 1 0 1
Park_Open 1 0 0 0 0

Memilih Data Secara Manual

In [19]:
# Choosing some columns manually
X = price[['House_Price','Dist_Market']] 
X[:7]
Out[19]:
House_Price Dist_Market
0 6649000 5250.0
1 3982000 8186.0
2 5401000 14399.0
3 5373000 11188.0
4 4662000 12629.0
5 4526000 5142.0
6 7224000 11869.0

Noisy Data

  • Noise dapat terjadi karena:
    • Kesalahan instrumen pengukuran: Misal di alat IoT pada saat cuaca buruk/baterai yang lemah.
    • Kesalahan input/entry
    • Transmisi yang tidak sempurna
    • inkonsistensi penamaan

Outliers

  • Data yang memiliki karakteristik secara signifikan berbeda dengan kebanyakan data lainnya menurut suatu kriteria tertentu yang ditetapkan.
    • Datanya valid (bukan Noise)
    • di Big Data sangat umum terjadi.
  • Apa yang sebaiknya dilakukan ke outliers?

Apakah ada kecenderungan perbedaan harga rumah akibat dari tipe tempat parkir?

In [20]:
p= sns.catplot(x="Parking", y="House_Price", data=price)
# Apa yang bisa dilihat dari hasil ini?

Outlier atau noise? How to decide?

Univariate Outlier removal

Perlu asumsi "distribusi" dari datanya

Normality Assumption

In [21]:
# Distributions
p = sns.distplot(price['House_Price'], kde=True, rug=True)
In [22]:
# Misal dengan asumsi data berdistribusi normal
# dan menggunakan 95% confidence interval di sekitar variabel "harga"

df = np.abs(price.House_Price - price.House_Price.mean())<=(2*price.House_Price.std())
# mu-2s<x<mu+2s
print(df.shape)
df.head()
(932,)
Out[22]:
0    True
1    True
2    True
3    True
4    True
Name: House_Price, dtype: bool
In [24]:
price2 = price[df] # Data tanpa outliers
print(price2.shape, price.shape)
# Perhatikan disini sengaja data yang telah di remove outliernya 
# disimpan dalam variabel baru "Price2"
# Jika datanya besar hati-hati melakukan hal ini
(931, 9) (932, 9)
In [25]:
# Distributions
p = sns.distplot(price2['House_Price'], kde=True, rug=True)
In [26]:
p= sns.catplot(x="Parking", y="House_Price", data=price2)
# Apa yang bisa dilihat dari hasil ini?

Missing Values

Salah satu proses dalam ‘membersihkan data’ itu adalah mengidentifikasi dan menghandle missing value, apa itu missing value? Missing value adalah istilah untuk data yang hilang

Penyebab Missing Value

Data yang hilang ini bisa disebabkan oleh beberapa hal, salah satu contohnya adalah

  • Error pada data entry, baik itu human error ataupun kesalahan pada sistem
  • Pada data survey, bisa disebabkan oleh responden yang lupa mengisi pertanyaan, pertanyaan yang sulit dimengerti, ataupun pertanyaan enggan diisi karena merupakan pertanyaan yang sensitif

Bagaimana cara mendeteksi Missing Value?

Biasanya untuk menandakan bahwa suatu data hilang, cell tersebut dibiarkan kosong

Nah, permasalahan yang dihadapi pada data di lapangan adalah, penandaan untuk mengatakan bahwa data tersebut missing sangat beragam, bisa ditulis ‘?’ (tanda tanya), bisa ditulis ‘-‘ (strip), bisa suatu bilangan yang sangat besar atau sangat kecil (misal 99 atau -999)

Sebagai ilustrasi, perhatikan berikut ini:

Perhatikan bahwa data ini memiliki berbagai macam cara untuk mengatakan bahwa data pada cell tertentu adalah missing, misalnya:

  • cellnya dikosongkan
  • ditulis dengan n/a, NA, na, ataupun NaN
  • ditulis dengan symbol –
  • ataupun mempunyai nilai yang cukup aneh seperti nilai 12 pada kolom OWN_OCCUPIED, ataupun HURLEY pada kolom NUM_BATH

Ketika kita meng-load data ini ke python menggunakan pandas, beberapa notasi missing yang umum otomatis dikategorikan sebagai NaN (notasi missing value pada python)

Tipe Missing Value

Missing completely at random (MCAR)

Data hilang secara acak, dan tidak berkaitan dengan variabel tertentu

Missing at random (MAR)

Data di suatu variabel hilang hanya berkaitan dengan variabel respon/pengamatan. Sebagai contoh, orang yang memiliki rasa was-was tinggi (x) cenderung tidak melaporkan pendapatan (y) mereka, walaupun missing value bergantung pada berapa nilai x, tapi seberapa besar nilai y yang missing tersebut masih tetap acak

Missing not at random (MNAR)

Data di suatu variabel y berkaitan dengan variabel itu sendiri, tidak terdistribusi secara acak. Sebagai contoh, orang yang pendapatannya rendah cenderung tidak melaporkan pendapatannya. Tipe missing value ini yang relatif paling sulit untuk di handle



Pada MCAR dan MAR, kita boleh menghilangkan data dengan missing value ataupun mengimputasinya. Namun pada kasus MNAR, menghilangkan data dengan missing value akan menghasilkan bias pada data. mengimputasinya pun tidak selalu memberikan hasil yang baik

Menangani Missing Value

Setelah kita mengenali apa itu missing value, bagaimana biasanya missing value itu ditulis, dan juga apa saja tipe missing value. Sekarang akan dijelaskan bagaimana cara menghandle missing value

sumber gambar : https://towardsdatascience.com/how-to-handle-missing-data-8646b18db0d4

Perlu dicatat bahwa, tidak ada metode yang benar benar terbaik dalam menghandle missing value, metode yang dapat digunakan akan bergantung pada tipe data dan masalah yang ditelaah

Menghindari data dengan missing value

yaitu drop data / menghapus data yang mengandung missing value ataupun menghapus variabel yang memiliki banyak sekali missing value

Cara menghapus data inipun ada beberapa macam

  1. Listwise Deletion, yaitu menghapus row yang mempunyai satu atau lebih missing

  1. Pairwise Deletion, yaitu hanya menghapus missing value pada variabel variabel yang ingin digunakan, misal kita ingin mencari korelasi antara glucose_conc dan diastolic_bp, kita hanya perlu menghapus row berikut ini

  1. Menghapus variabel, yaitu membuang variabel jika data pada kolom tersebut banyak sekali yang missing, misalkan hampir 50%.

Mengabaikan missing value

Beberapa algoritma machine learning atau metode analisis lainnya dapat dengan sendirinya menghandle missing value, contohnya adalah decision tree, k-Nearest Neighbors (kNN), Gradient Boosting Method (GBM) yang dapat mengabaikan missing value, ataupun XGBoost yang dapat mengimputasi sendiri missing value pada data

Ataupun jika ada beberapa kolom yang tidak memberikan informasi apa apa, kita dapat membiarkan missing value ada di kolom tersebut karena kolom tersebut pun tidak memberikan informasi yang signifikan, contohnya adalah nomor tiket pada data penerbangan, kita tidak perlu sulit-sulit memikirkan bagaimana cara mengimputasi kolom tersebut.

Mengimputasinya

Kita dapat menggantikan missing value tersebut dengan suatu nilai, ada beberapa metode dalam mengimputasi missing value

• Univariate Imputation

Imputasi dengan median / mean / modus

Imputasi dengan median / mean digunakan pada data numerik, idenya kita mengganti missing value pada kolom dengan median / mean dari data yang tidak missing, sedangkan imputasi dengan modus digunakan pada data kategorik.

(catatan : Jika distribusi data cukup skewed (menceng kanan atau kiri), atau terdapat nilai nilai ekstrim, median lebih di sarankan daripada mean)

Alternatifnya, kita pun dapat membedakan imputasi berdasarkan variabel kategorik tertentu, misalnya untuk yang penderita diabetes, akan diimputasi dengan rata rata dari penderita diabetes, dan sebaliknya

• Multivariate Imputation

Single Imputation

Metode metode yang dapat digunakan adalah memprediksi nilai missing dengan menggunakan metode metode supervised learning seperti kNN, regresi linear, regresi logistik (untuk data kategorik)

Kasus Lainnya

Salah satu cara menangani missing value pada data kategorik dapat dijadikan level tersendiri

missing value pada data Time Series, imputasi dapat dilakukan dengan:

  • mengisi nilai yang missing dengan nilai sebelumnya yang tidak missing, sering disebut juga dengan Last Observation Carried Forward (LOCF) ataupun dengan nilai selanjutnya yang tidak missing, sering disebut juga Next Observation Carried Backward (NOCB)

  • Menggunakan Interpolasi Linear

  • Menggunakan Interpolasi Linear dengan memperhitungkan tren seasonal

Missing Values

In [27]:
# General Look at the Missing Values
print(price2.isnull().sum())
Dist_Taxi        13
Dist_Market      13
Dist_Hospital     1
Carpet            8
Builtup          15
Parking           0
City_Category     0
Rainfall          0
House_Price       0
dtype: int64
In [28]:
set(price2['Parking'])
Out[28]:
{'Covered', 'No Parking', 'Not Provided', 'Open'}

Gambaran yang Lebih baik tentang MV terutama di Big Data

In [29]:
sns.heatmap(price2.isnull(), cbar=False)
plt.title('Heatmap Missing Value')
plt.show()
In [30]:
(price2.isnull().sum()/len(price2)).to_frame('persentase missing')
Out[30]:
persentase missing
Dist_Taxi 0.013963
Dist_Market 0.013963
Dist_Hospital 0.001074
Carpet 0.008593
Builtup 0.016112
Parking 0.000000
City_Category 0.000000
Rainfall 0.000000
House_Price 0.000000
In [31]:
# Simplest solution, if the MV is not a lot
# drop rows with missing values : Ada berbagai cara
X = price.dropna() # jika ada MV minimal satu di salah satu kolom, maka baris di hapus
price2.dropna(how='all') # jika ada MV di semua kolom, maka baris di hapus
price2.dropna(thresh=2) # jika ada MV minimal di salah 2 kolom, maka baris di hapus
price2.dropna(subset=['Dist_Hospital'])[:7] # jika ada MV minimal satu di salah kolom Dist_Hospital
# inplace=True if really really sure
price2.dropna(inplace=True)
In [32]:
print(price2.isnull().sum())
Dist_Taxi        0
Dist_Market      0
Dist_Hospital    0
Carpet           0
Builtup          0
Parking          0
City_Category    0
Rainfall         0
House_Price      0
dtype: int64

Central Tendency is not enough

Keragaman Data

Statistika Deskriptif

In [33]:
price2.describe()
Out[33]:
Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup Rainfall House_Price
count 897.000000 897.000000 897.000000 897.000000 897.000000 897.000000 8.970000e+02
mean 8234.092531 11014.810479 13086.516165 1485.586399 1782.282051 785.340022 5.932165e+06
std 2526.851636 2528.087365 2567.090681 250.153381 299.795462 266.956895 1.720409e+06
min 146.000000 1666.000000 3227.000000 775.000000 932.000000 -110.000000 1.492000e+06
25% 6486.000000 9367.000000 11302.000000 1317.000000 1576.000000 600.000000 4.638000e+06
50% 8230.000000 11161.000000 13192.000000 1477.000000 1774.000000 780.000000 5.860000e+06
75% 9963.000000 12675.000000 14860.000000 1653.000000 1985.000000 970.000000 7.183000e+06
max 16850.000000 18281.000000 22407.000000 2229.000000 2667.000000 1560.000000 1.163200e+07
In [34]:
# Statistika Sederhana dari data "Numerik"-nya
price2.describe(include='all')
Out[34]:
Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup Parking City_Category Rainfall House_Price
count 897.000000 897.000000 897.000000 897.000000 897.000000 897 897 897.000000 8.970000e+02
unique NaN NaN NaN NaN NaN 4 3 NaN NaN
top NaN NaN NaN NaN NaN Open CAT B NaN NaN
freq NaN NaN NaN NaN NaN 353 347 NaN NaN
mean 8234.092531 11014.810479 13086.516165 1485.586399 1782.282051 NaN NaN 785.340022 5.932165e+06
std 2526.851636 2528.087365 2567.090681 250.153381 299.795462 NaN NaN 266.956895 1.720409e+06
min 146.000000 1666.000000 3227.000000 775.000000 932.000000 NaN NaN -110.000000 1.492000e+06
25% 6486.000000 9367.000000 11302.000000 1317.000000 1576.000000 NaN NaN 600.000000 4.638000e+06
50% 8230.000000 11161.000000 13192.000000 1477.000000 1774.000000 NaN NaN 780.000000 5.860000e+06
75% 9963.000000 12675.000000 14860.000000 1653.000000 1985.000000 NaN NaN 970.000000 7.183000e+06
max 16850.000000 18281.000000 22407.000000 2229.000000 2667.000000 NaN NaN 1560.000000 1.163200e+07
In [35]:
# ini adalah parameter tambahan jika kita juga ingin mendapatkan statistik sederhana seluruh datanya
# (termasuk data kategorik)
price[['Dist_Taxi','Parking']].describe(include='all')
Out[35]:
Dist_Taxi Parking
count 919.000000 932
unique NaN 4
top NaN Open
freq NaN 372
mean 8229.727965 NaN
std 2561.985008 NaN
min 146.000000 NaN
25% 6476.000000 NaN
50% 8230.000000 NaN
75% 9937.000000 NaN
max 20662.000000 NaN

Distribusi nilai pada setiap variabel kategorik

In [36]:
# get all unique values of a variable/column
for col in price_cat.columns:
    print(col,': ', set(price[col].unique()))
Parking :  {'Not Provided', 'No Parking', 'Covered', 'Open'}
City_Category :  {'CAT C', 'CAT B', 'CAT A'}
In [37]:
price['Parking'].unique()
Out[37]:
['Open', 'Not Provided', 'Covered', 'No Parking']
Categories (4, object): ['Open', 'Not Provided', 'Covered', 'No Parking']
In [ ]:
# price
# Jika yang dibutuhkan memang hanya nama kolom, maka kita bisa melakukan hal ini untuk menghemat penggunaan memory
numVar = price.select_dtypes(include = ['float64', 'int64']).columns
list(numVar)
In [38]:
# Distribusi tiap data
price['Parking'].value_counts()
# kita bisa juga visualisasikan informasi ini
Out[38]:
Open            372
Not Provided    227
Covered         188
No Parking      145
Name: Parking, dtype: int64

Two-Way Tables (contingency tables)

In [39]:
CT = pd.crosstab(index=price2["City_Category"], columns=price2["Parking"])
CT
Out[39]:
Parking Covered No Parking Not Provided Open
City_Category
CAT A 72 50 80 115
CAT B 59 51 88 149
CAT C 49 40 55 89

Data Grouping

In [40]:
# Slicing DataFrame - Just like query in SQL
price2[price2["City_Category"] == "CAT B"].describe()
# Bisa ditambahkan .drop("Parking", axis=1) untuk menghilangkan kolom dengan single value
Out[40]:
Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup Rainfall House_Price
count 347.000000 347.000000 347.000000 347.000000 347.000000 347.000000 3.470000e+02
mean 8079.703170 10693.945245 12855.314121 1500.380403 1799.806916 780.259366 5.520006e+06
std 2475.693863 2534.441833 2588.293527 252.359775 301.620757 260.422493 1.324843e+06
min 604.000000 4950.000000 4922.000000 869.000000 1050.000000 0.000000 2.130000e+06
25% 6400.500000 8891.000000 11088.500000 1317.000000 1577.500000 590.000000 4.613500e+06
50% 7998.000000 10711.000000 12950.000000 1487.000000 1787.000000 770.000000 5.438000e+06
75% 9794.000000 12535.000000 14685.000000 1688.000000 2023.500000 950.000000 6.369000e+06
max 15082.000000 17101.000000 19617.000000 2214.000000 2647.000000 1560.000000 9.661000e+06

Saving (preprocessed) Data

In [41]:
# Saving the preprocessed Data for future use/analysis
price2.to_csv("data/price_PreProcessed.csv", encoding='utf8')

End of Module


Referensi

  1. Cox, V. (2017). Exploratory data analysis. In Translating Statistics to Make Decisions (pp. 47-74). Apress, Berkeley, CA.
  2. DuToit, S. H., Steyn, A. G. W., & Stumpf, R. H. (2012). Graphical exploratory data analysis. Springer Science & Business Media.
  3. Bock, H. H., & Diday, E. (Eds.). (2012). Analysis of symbolic data: exploratory methods for extracting statistical information from complex data. Springer Science & Business Media.
  4. Cleveland, W.S., 1993. Visualizing Data. Hobart Press.
  5. Cleveland, W.S., 1994. The elements of graphing data. Hobart Press.
  6. Few, S., 2009. Now you see it. Analytics Press.
  7. Harris, R.L., 1999. Information Graphics. Oxford University Press.
  8. Healy, K., 2018. Data Visualization: A Practical Introduction. Princeton University Press.
  9. Knaflic, C.N., 2015. Storytelling with Data. Wiley.
  10. Robbins, N.B., 2005. Creating More Effective Graphs. Wiley.
  11. Tufte, E.R., 2001. The Visual Display of Quantitative Information, 2nd ed. Cheshire, CT: Graphics Press.
  12. Tufte, E.R., 1997. Visual Explanations. Cheshire, CT: Graphics Press.
  13. Tufte, E.R., 2006. Beautiful evidence. Cheshire, CT: Graphics Press.
  14. Wainer, H., 2009. Picturing the Uncertain World. Princeton University Press.
  15. Yau, N., 2013. Data Points – Visualization that means something. Wiley.
  16. Huff, D. (1993). How to lie with statistics. WW Norton & Company.
  17. Reinhart, A. (2015). Statistics done wrong: The woefully complete guide. No starch press.

Warning, you need to login (to tau-data & Google) to view the quiz.

(Registration is free and easy: click here)

What's Next?

[Latihan Soal][Diskusi][Next Lesson][Kembali ke Kurikulum]

No comments:

Post a Comment

Relevant & Respectful Comments Only.