Kembali ke EDA

1. Installing Pandas

Proses download dan install pandas library dapat dilakukan execute baris di bawah ini di local environment’s console masing-masing:

pip install pandas

Jika menggunakan google colab, maka pandas sudah ada sehingga tidak usah menginstall lagi (cukup import). Bila menggunakan anaconda, dapat run baris tersebut di anaconda prompt.

import pandas
pandas.__version__    #cek versi
'1.0.5'

import pandas dan dinamakan sbg ‘pd’ agar lebih mudah dan efisisen

import pandas as pd

Reviewing Pandas Object

  1. Series : struktur data dasar yang bisa diibaratkan sebagai array satu dimensi yang mempunyai index
  2. DataFrame: struktur data 2 dimensi yang berbentuk tabular (mempunyai baris dan kolom). Kita dapat memikirkan dataframe sebagai kumpulan series
import numpy as np
import pandas as pd

2.1. Pandas Series Object

Series merupakan array 1 dimensi yang mempunyai index. Dapat dibuat dari list maupun array seperti berikut:

data = pd.Series([0.15, 0.5, 0.75, 1.0])
data
0    0.15
1    0.50
2    0.75
3    1.00
dtype: float64

Output Series mempunyai values di sebelah kanan dan index di sebelah kiri

data.values
array([0.15, 0.5 , 0.75, 1.  ])
data.index
RangeIndex(start=0, stop=4, step=1)

Seperti pada Numpy, kita dapat melakukan slicing pada index untuk mengeluarkan output value yang diinginkan

data[1] #Mengambi value data dengan index-1
0.5
data[1:3] #Mengambil value data dari index-1 sampai index-(3-1)=2
1    0.50
2    0.75
dtype: float64
data[-1:] #Mengambil index dari 1 terakhir
3    1.0
dtype: float64

Seperti yang dapat dilihat, Series pandas jauh lebih umum dan fleksibel dibandingkan dengan array satu dimensi.

2.1.1. Series as generalized NumPy array

Membuat series dengan index tertentu. Perhatikan, banyaknya index dan value ditetapkan harus sama jumlahnya.

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])
data
a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64
data['b']  #slicing index
0.5

Dapat juga digunakan index sembarang/bebas dalam membuat sebuah series.

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=[2, 5, 3, 7])
data
2    0.25
5    0.50
3    0.75
7    1.00
dtype: float64
data[5]
0.5

2.1.2 Series as specialized dictionaries

Dictionary adalah koleksi data yang berisi key dan value. Disini, kita akan membuat series dari dictionary.

menu_dict = {'Ayam goreng': 12000,
             'Ayam bakar': 12001,
             'Ayam hidup': 190000,
             'Ayam': 20000,
             'Ayam juga': 20000}     #nama ayam disebut key dan harga disebut value

menu_dict
{'Ayam goreng': 12000,
 'Ayam bakar': 12001,
 'Ayam hidup': 190000,
 'Ayam': 20000,
 'Ayam juga': 20000}
menu = pd.Series(menu_dict)
menu
Ayam goreng     12000
Ayam bakar      12001
Ayam hidup     190000
Ayam            20000
Ayam juga       20000
dtype: int64
menu['Ayam']
20000
menu['Ayam goreng':'Ayam hidup']    #dari ayam goreng sampai ayam hidup saja
Ayam goreng     12000
Ayam bakar      12001
Ayam hidup     190000
dtype: int64
menu[['Ayam goreng','Ayam hidup']] #Kalau ini maksudnya Ayam goreng dan Ayam Hidup saja
Ayam goreng     12000
Ayam hidup     190000
dtype: int64

2.2. Pandas DataFrame Object

DataFrame merupakan array dua dimensi yang mempunyai column serta index yang fleksibel. Kedepannya, konsep penggunaan dataframe ini akan banyak digunakan dalam data science & machine learning, terutama dalam data preprocessing/cleaning sebelum melakukan modelling.

list(menu_dict.items())
[('Ayam goreng', 12000),
 ('Ayam bakar', 12001),
 ('Ayam hidup', 190000),
 ('Ayam', 20000),
 ('Ayam juga', 20000)]
df_menu1 = pd.DataFrame(list(menu_dict.items()),columns = ['Menu','Harga'])
df_menu1
Menu Harga
0 Ayam goreng 12000
1 Ayam bakar 12001
2 Ayam hidup 190000
3 Ayam 20000
4 Ayam juga 20000
#Alternatif, list menu dan list harga terpisah
menu_dict2 = {'Menu':['ayam goreng','ayam bakar','ayam rebus'],'Harga':[17000,15000,10000]}
df_menu2 = pd.DataFrame(menu_dict2)
df_menu2
Menu Harga
0 ayam goreng 17000
1 ayam bakar 15000
2 ayam rebus 10000
menu = ['ayam goreng','ayam bakar','ayam rebus']
harga = [17000,15000,10000]
df_menu3 = pd.DataFrame({'nama':menu,"biaya":harga})
df_menu3
nama biaya
0 ayam goreng 17000
1 ayam bakar 15000
2 ayam rebus 10000

Pertama-tama akan dilakukan Import melalui pd.read_csv (untuk format csv) atau pd.read_excel

Silakan download file nya: dkikepadatankelurahan2013.csv

#jika upload dataset

#contoh path
path = 'F:\Praktikum Semester 2\EDA\[25_03_2021] Pertemuan 1\dkikepadatankelurahan2013.csv' #jangan lupa nama file.csv nya

df = pd.read_csv(path,';')
df
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Laki-Laki 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan
0 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. PANGGANG 0,91 6779 231 235 233 ... 98 106 72 65 36 33 33 20 13 27
1 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. KELAPA 3,76 1705 84 88 99 ... 30 39 29 24 12 21 13 5 5 8
2 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. HARAPAN 3,59 628 255 238 232 ... 139 101 73 56 18 35 24 25 18 26
3 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT P. UNTUNG JAWA 0,59 3625 199 185 178 ... 97 83 58 56 40 54 26 27 16 13
4 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT P. TIDUNG 1,57 3084 98 75 73 ... 37 32 22 13 18 15 10 18 11 17
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
262 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG MUNJUL 1,9 12734 1167 1112 1026 ... 482 482 302 291 173 137 118 94 52 51
263 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG SETU 3,25 6028 937 928 857 ... 392 354 254 211 124 115 64 83 59 64
264 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG BAMBU APUS 3,17 8400 1242 1187 1062 ... 596 476 377 250 169 179 108 96 70 84
265 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG LUBANG BUAYA 3,72 18055 3258 2988 2732 ... 1376 1308 959 739 393 385 293 291 160 165
266 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG CEGER 3,63 5492 1007 930 874 ... 416 390 279 214 110 153 101 53 45 44

267 rows × 25 columns

#Upload Dataset menggunakan url aduh tadi gw apus gitulah pokoknya

bisa tambahkan parameter sep=“,” atau sep = “;” tergantung delimiter file yang kamu upload

#Untuk export/save ke bentuk csv, gunakan .to_csv()
df.to_csv('coba.csv')   #Untuk google colab, file akan muncul di folder layar kiri. Tinggal di download sadja.
pd.DataFrame.info(df)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 267 entries, 0 to 266
Data columns (total 25 columns):
 #   Column                Non-Null Count  Dtype 
---  ------                --------------  ----- 
 0   TAHUN                 267 non-null    int64 
 1   NAMA PROVINSI         267 non-null    object
 2   NAMA KABUPATEN/KOTA   267 non-null    object
 3   NAMA KECAMATAN        267 non-null    object
 4   NAMA KELURAHAN        267 non-null    object
 5   LUAS WILAYAH (KM2)    267 non-null    object
 6   KEPADATAN (JIWA/KM2)  267 non-null    int64 
 7   35-39 Laki-Laki       267 non-null    int64 
 8   35-39 Perempuan       267 non-null    int64 
 9   40-44 Laki-Laki       267 non-null    int64 
 10  40-44 Perempuan       267 non-null    int64 
 11  45-49 Laki-Laki       267 non-null    int64 
 12  45-49 Perempuan       267 non-null    int64 
 13  50-54 Laki-Laki       267 non-null    int64 
 14  50-54 Perempuan       267 non-null    int64 
 15  55-59 Laki-Laki       267 non-null    int64 
 16  55-59 Perempuan       267 non-null    int64 
 17  60-64 Laki-Laki       267 non-null    int64 
 18  60-64 Perempuan       267 non-null    int64 
 19  65-69 Laki-Laki       267 non-null    int64 
 20  65-69 Perempuan       267 non-null    int64 
 21  70-74 Laki-Laki       267 non-null    int64 
 22  70-74 Perempuan       267 non-null    int64 
 23  >75 Laki-Laki         267 non-null    int64 
 24  >75  Perempuan        267 non-null    int64 
dtypes: int64(20), object(5)
memory usage: 52.3+ KB
  1. DataFrame.head() -> menampilkan 5 baris pertama
  2. DataFrame.tail() -> menampilkan 5 baris terakhir
  3. DataFrame.shape -> jumlah baris kolom dan
  4. DataFrame.columns -> menampilkan nama kolom
  5. DataFrame.index -> menampilkan index baris
  6. DataFrame.info(data)-> menampilkan informasi mengenai data
df.head()
#df.head(8) Menampilkan 8 data teratas
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Laki-Laki 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan
0 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. PANGGANG 0,91 6779 231 235 233 ... 98 106 72 65 36 33 33 20 13 27
1 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. KELAPA 3,76 1705 84 88 99 ... 30 39 29 24 12 21 13 5 5 8
2 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. HARAPAN 3,59 628 255 238 232 ... 139 101 73 56 18 35 24 25 18 26
3 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT P. UNTUNG JAWA 0,59 3625 199 185 178 ... 97 83 58 56 40 54 26 27 16 13
4 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT P. TIDUNG 1,57 3084 98 75 73 ... 37 32 22 13 18 15 10 18 11 17

5 rows × 25 columns

df.tail()
#df.tail(8) Menampilkan 8 data terbawah
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Laki-Laki 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan
262 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG MUNJUL 1,9 12734 1167 1112 1026 ... 482 482 302 291 173 137 118 94 52 51
263 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG SETU 3,25 6028 937 928 857 ... 392 354 254 211 124 115 64 83 59 64
264 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG BAMBU APUS 3,17 8400 1242 1187 1062 ... 596 476 377 250 169 179 108 96 70 84
265 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG LUBANG BUAYA 3,72 18055 3258 2988 2732 ... 1376 1308 959 739 393 385 293 291 160 165
266 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG CEGER 3,63 5492 1007 930 874 ... 416 390 279 214 110 153 101 53 45 44

5 rows × 25 columns

df.head(1)  #menampilkan 1 baris pertama saja
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Laki-Laki 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan
0 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. PANGGANG 0,91 6779 231 235 233 ... 98 106 72 65 36 33 33 20 13 27

1 rows × 25 columns

df.columns  #melihat nama kolom apa aja
Index(['TAHUN', 'NAMA PROVINSI', 'NAMA KABUPATEN/KOTA', 'NAMA KECAMATAN',
       'NAMA KELURAHAN', 'LUAS WILAYAH (KM2)', 'KEPADATAN (JIWA/KM2)',
       '35-39 Laki-Laki', '35-39 Perempuan', '40-44 Laki-Laki',
       '40-44 Perempuan', '45-49 Laki-Laki', '45-49 Perempuan',
       '50-54 Laki-Laki', '50-54 Perempuan', '55-59 Laki-Laki',
       '55-59 Perempuan', '60-64 Laki-Laki', '60-64 Perempuan',
       '65-69 Laki-Laki', '65-69 Perempuan', '70-74 Laki-Laki',
       '70-74 Perempuan', '>75 Laki-Laki', '>75  Perempuan'],
      dtype='object')
df.index
RangeIndex(start=0, stop=267, step=1)
df.shape
(267, 25)

### 2.3. Pandas Index Object

Slicing pada Index object dapat dilakukan dalam bentuk list maupun array.

ind = pd.Index([2, 3, 5, 7, 11])   #define sebuah index
ind
Int64Index([2, 3, 5, 7, 11], dtype='int64')
ind[1] # menampilkan elemen pada posisi 1 (index python dimulai dari 0)
3
ind[::2] # menampilkan elemen dimulai dari posisi 0 dua per dua.
Int64Index([2, 5, 11], dtype='int64')

salah satu perbedaan Index object dan array Numpy arrays adalah indices-nya yang immutable. Artinya, indicenya tidak dapat dilakukan modifikasi / update value ke dalamnya.

ind[1] = 0 #akan error
TypeError: Index does not support mutable operations

3. Data Indexing and Selection

3.1. Data Selection in Series

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])      #buat sebuah series
data
a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64
data['d'] = 0.95 # update value dari index 'd' menjadi 0.95
data
a    0.25
b    0.50
c    0.75
d    0.95
dtype: float64
data['e'] = 1.25 # Menambah value baru dengan index 'e'
data
a    0.25
b    0.50
c    0.75
d    0.95
e    1.25
dtype: float64

Melakukan slicing dapat dilakukan dengan dua cara, secara explicit dan implicit (integer index)

data['a':'c']   #explicit
a    0.25
b    0.50
c    0.75
dtype: float64
data[0:3]  #implicit integer index
a    0.25
b    0.50
c    0.75
dtype: float64

Kita dapat menampilkan sekumpulan indices yang telah ditentukan dengan menaruhnya ke dalam sebuah list

data[['a', 'e']]      #  'a' dan 'e' dimasukkan dalam list menjadi ['a','e']
a    0.25
e    1.25
dtype: float64

Perhatikan, saat melakukan slicing dengan explicit index (misal, data ['a':'c']), final index diikutsertakan dalam outputnya, sementara ketika melakukan slicing dengan implicit index (misal, data[0:2]), final index tidak diikutsertakan dalam outputnya. Ketika slicing melalui list (misal, data [['a', 'e']]), semua indices dari a sampai e akan ditampilkan.

3.2. Indexers: loc, iloc for Series

Secara sederhana, loc : slicing & indexing melalui explicit index. Sedangkan iloc : slicing & indexing melalui implisit index (angka)

data = pd.Series(['Hello', 'DPhir', 'world'], index=['a', 'b', 'c'])     #define sebuah series baru
data
a    Hello
b    DPhir
c    world
dtype: object

3.2.1. loc attribute

data.loc['a']    #menampilkan value dari index 'a'
'Hello'

3.2.2. iloc attribute

data.iloc[1]   # menampilkan index ke 1
'DPhir'
data.iloc[1:3]   #menampilkan index ke 1 dan 2
b    DPhir
c    world
dtype: object

3.3. Data Selection in DataFrame

df.head(1)
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Laki-Laki 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan
0 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR P. PANGGANG 0,91 6779 231 235 233 ... 98 106 72 65 36 33 33 20 13 27

1 rows × 25 columns

df['TAHUN']  #menampilkan satu kolom saja (outputnya series)
0      2013
1      2013
2      2013
3      2013
4      2013
       ... 
262    2013
263    2013
264    2013
265    2013
266    2013
Name: TAHUN, Length: 267, dtype: int64

Output yang sama di atas dapat diperoleh dengan :

df.TAHUN    #Tidak dapat dilakukan pada nama kolom yang mempunyai spasi
0      2013
1      2013
2      2013
3      2013
4      2013
       ... 
262    2013
263    2013
264    2013
265    2013
266    2013
Name: TAHUN, Length: 267, dtype: int64
df[['TAHUN']]     #outputnya dataframe

Bisa juga membuat sebuah kolom baru yang diperoleh dari gabungan dua kolom lain. Misalkan disini ingin digabung jumlah laki2 dan perempuan yang berusia 50-54

df['gabungan_50-54'] = df['50-54 Laki-Laki'] + df['50-54 Perempuan']
df[['gabungan_50-54','50-54 Laki-Laki','50-54 Perempuan']] .head(3)   #lihat tiga kolom ini aja
gabungan_50-54 50-54 Laki-Laki 50-54 Perempuan
0 263 137 126
1 63 34 29
2 311 150 161

3.4. Indexers: loc, iloc for DataFrame

Sama seperti pada series, loc digunakan untuk slicing menggunakan explicit index(nama indexnya langsung) dan iloc menggunakan implicit index (angka/urutan)

yang penting pahami bahwa functionnya itu

df.iloc[baris, kolom]

3.4.1. loc attribute

Definisikan sebuah dataframe baru menggunakan dataset penduduk sebelumnya dengan set ‘NAMA KELUARAHAN’ sebagai index (untuk contoh saja)

df1 = df.set_index('NAMA KELURAHAN')
df1.head(3)
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki 40-44 Perempuan ... 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan gabungan_50-54
NAMA KELURAHAN
P. PANGGANG 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR 0,91 6779 231 235 233 210 ... 106 72 65 36 33 33 20 13 27 263
P. KELAPA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR 3,76 1705 84 88 99 88 ... 39 29 24 12 21 13 5 5 8 63
P. HARAPAN 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR 3,59 628 255 238 232 234 ... 101 73 56 18 35 24 25 18 26 311

3 rows × 25 columns

df1.loc[  :'P. TIDUNG', :'NAMA KECAMATAN']   #menampilkan baris hingga 'P. TIDUNG', kolom hingga 'NAMA KECAMATAN'
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN
NAMA KELURAHAN
P. PANGGANG 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. KELAPA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. HARAPAN 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. UNTUNG JAWA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT
P. TIDUNG 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT
df1.loc[['P. KELAPA']]   #menampilkan data dari index 'P. KELAPA'
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki 40-44 Perempuan ... 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan gabungan_50-54
NAMA KELURAHAN
P. KELAPA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR 3,76 1705 84 88 99 88 ... 39 29 24 12 21 13 5 5 8 63

1 rows × 25 columns

3.4.2. iloc attribute

df1.iloc[:5, :4]
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN
NAMA KELURAHAN
P. PANGGANG 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. KELAPA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. HARAPAN 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU UTR
P. UNTUNG JAWA 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT
P. TIDUNG 2013 PROVINSI DKI JAKARTA KAB.ADM.KEP.SERIBU KEP. SERIBU SLT
df1.iloc[[222]]
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki 40-44 Perempuan ... 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan gabungan_50-54
NAMA KELURAHAN
CIPINANG BESAR UTARA 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR JATINEGARA 1,15 48850 2704 2409 2344 2180 ... 1126 742 765 403 441 307 350 228 247 2943

1 rows × 25 columns

3.5. Subsetting a Dataframe

condition = … (disarankan conditionnya dimasukkin ke variabel gini biar ga bingung dalam penulisannya)

df[condition]

ingat bahwa di condition merupakan logical statement dimana harus bernilai TRUE atau FALSE (Boolean)

Memungkinkan kita untuk mengekstrak/filter bagian dari data yang diinginkan. Misal kita ingin menampilkan data yang luas wilayahnya memenuhi 1 (KM2).

df['LUAS WILAYAH (KM2)']>1
TypeError: '>' not supported between instances of 'str' and 'int'
df['KEPADATAN (JIWA/KM2)']>10000
0      False
1      False
2      False
3      False
4      False
       ...  
262     True
263    False
264    False
265     True
266    False
Name: KEPADATAN (JIWA/KM2), Length: 267, dtype: bool

Diperoleh sebuah series yang berisi boolean value. Jika kita slice data awal dengan boolean value ini, maka akan diperoleh data dengan luas wilayah >1 (yang akan ditampilkan adalah yang True saja)

df[df['KEPADATAN (JIWA/KM2)']>10000].head()  #head akan menunjukkan 5 baris pertama, ga pakai head juga sabi
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan gabungan_50-54
7 2013 PROVINSI DKI JAKARTA JAKARTA PUSAT GAMBIR CIDENG 1,26 14584 850 748 749 ... 537 555 343 413 215 259 142 214 165 1377
8 2013 PROVINSI DKI JAKARTA JAKARTA PUSAT GAMBIR PETOJO UTARA 1,12 18987 954 920 914 ... 510 544 421 398 235 241 132 215 159 1415
9 2013 PROVINSI DKI JAKARTA JAKARTA PUSAT GAMBIR PETOJO SELATAN 1,14 14465 752 675 691 ... 466 428 279 328 160 215 116 150 121 1125
10 2013 PROVINSI DKI JAKARTA JAKARTA PUSAT GAMBIR KEBON KELAPA 0,78 15890 592 491 447 ... 329 353 263 246 140 152 100 136 72 858
11 2013 PROVINSI DKI JAKARTA JAKARTA PUSAT GAMBIR DURI PULO 0,72 35628 1213 1106 1105 ... 616 597 404 409 215 255 156 196 138 1682

5 rows × 26 columns

Terlihat yang ditampilkan adalah data2 dengan luas wilayah >1. Bisa juga diberikan 2 kondisi dan gunakan logical operator

df[(df['LUAS WILAYAH (KM2)']>1) & (df['KEPADATAN (JIWA/KM2)'] < 1000)]  #  & (and) artinya dua2nyah harus terpenuhi
TypeError: '>' not supported between instances of 'str' and 'int'
df[(df['LUAS WILAYAH (KM2)']>1) | (df['KEPADATAN (JIWA/KM2)'] < 1000)].head(3)  #  | (or) artinya yg penting salah satu terpenuhi

Selain operator & dan |, dapat digunakan juga operator ~, yaitu negasi.

df[~((df['LUAS WILAYAH (KM2)']>1) & (df['LUAS WILAYAH (KM2)']<3))] .head(3)  #selain yang di range 1-3
TypeError: '>' not supported between instances of 'str' and 'int'
condition = df['NAMA KECAMATAN']=='CIPAYUNG'
df[condition]
TAHUN NAMA PROVINSI NAMA KABUPATEN/KOTA NAMA KECAMATAN NAMA KELURAHAN LUAS WILAYAH (KM2) KEPADATAN (JIWA/KM2) 35-39 Laki-Laki 35-39 Perempuan 40-44 Laki-Laki ... 55-59 Perempuan 60-64 Laki-Laki 60-64 Perempuan 65-69 Laki-Laki 65-69 Perempuan 70-74 Laki-Laki 70-74 Perempuan >75 Laki-Laki >75 Perempuan gabungan_50-54
259 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG CIPAYUNG 3,08 8441 1241 1172 1029 ... 469 374 278 164 177 112 101 61 110 1398
260 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG CILANGKAP 6,03 4396 1237 1276 1195 ... 397 267 235 161 133 77 90 52 62 1263
261 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG PONDOK RANGGON 3,66 6772 1088 1064 969 ... 391 271 227 131 109 80 105 42 82 1320
262 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG MUNJUL 1,9 12734 1167 1112 1026 ... 482 302 291 173 137 118 94 52 51 1290
263 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG SETU 3,25 6028 937 928 857 ... 354 254 211 124 115 64 83 59 64 983
264 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG BAMBU APUS 3,17 8400 1242 1187 1062 ... 476 377 250 169 179 108 96 70 84 1572
265 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG LUBANG BUAYA 3,72 18055 3258 2988 2732 ... 1308 959 739 393 385 293 291 160 165 3554
266 2013 PROVINSI DKI JAKARTA JAKARTA TIMUR CIPAYUNG CEGER 3,63 5492 1007 930 874 ... 390 279 214 110 153 101 53 45 44 996

8 rows × 26 columns

df['NAMA KECAMATAN']=='CIPAYUNG'
0      False
1      False
2      False
3      False
4      False
       ...  
262     True
263     True
264     True
265     True
266     True
Name: NAMA KECAMATAN, Length: 267, dtype: bool