19 KiB
Bekerja dengan Data: Persiapan Data
![]() |
---|
Persiapan Data - Sketchnote oleh @nitya |
Kuis Pra-Pelajaran
Bergantung pada sumbernya, data mentah mungkin mengandung beberapa ketidakkonsistenan yang dapat menyebabkan tantangan dalam analisis dan pemodelan. Dengan kata lain, data ini dapat dikategorikan sebagai "kotor" dan perlu dibersihkan. Pelajaran ini berfokus pada teknik untuk membersihkan dan mentransformasi data guna menangani tantangan seperti data yang hilang, tidak akurat, atau tidak lengkap. Topik yang dibahas dalam pelajaran ini akan menggunakan Python dan pustaka Pandas dan akan didemonstrasikan dalam notebook di dalam direktori ini.
Pentingnya Membersihkan Data
-
Kemudahan penggunaan dan penggunaan ulang: Ketika data diorganisasi dan dinormalisasi dengan baik, lebih mudah untuk mencari, menggunakan, dan membagikannya dengan orang lain.
-
Konsistensi: Ilmu data sering kali membutuhkan kerja dengan lebih dari satu dataset, di mana dataset dari berbagai sumber perlu digabungkan. Memastikan bahwa setiap dataset memiliki standar yang sama akan memastikan bahwa data tetap berguna ketika digabungkan menjadi satu dataset.
-
Akurasi model: Data yang telah dibersihkan meningkatkan akurasi model yang bergantung padanya.
Tujuan dan Strategi Pembersihan yang Umum
-
Menjelajahi dataset: Eksplorasi data, yang dibahas dalam pelajaran berikutnya, dapat membantu Anda menemukan data yang perlu dibersihkan. Mengamati nilai-nilai dalam dataset secara visual dapat memberikan gambaran tentang apa yang diharapkan dari dataset tersebut atau memberikan ide tentang masalah yang dapat diselesaikan. Eksplorasi dapat melibatkan kueri dasar, visualisasi, dan pengambilan sampel.
-
Pemformatan: Bergantung pada sumbernya, data dapat memiliki ketidakkonsistenan dalam cara penyajiannya. Hal ini dapat menyebabkan masalah dalam pencarian dan representasi nilai, di mana nilai tersebut terlihat dalam dataset tetapi tidak direpresentasikan dengan benar dalam visualisasi atau hasil kueri. Masalah pemformatan umum melibatkan penghapusan spasi, tanggal, dan tipe data. Penyelesaian masalah pemformatan biasanya tergantung pada orang yang menggunakan data. Misalnya, standar tentang bagaimana tanggal dan angka disajikan dapat berbeda di setiap negara.
-
Duplikasi: Data yang memiliki lebih dari satu kemunculan dapat menghasilkan hasil yang tidak akurat dan biasanya harus dihapus. Ini bisa menjadi kejadian umum ketika menggabungkan dua atau lebih dataset. Namun, ada kasus di mana duplikasi dalam dataset gabungan mengandung informasi tambahan yang mungkin perlu dipertahankan.
-
Data yang Hilang: Data yang hilang dapat menyebabkan ketidakakuratan serta hasil yang lemah atau bias. Kadang-kadang ini dapat diselesaikan dengan "memuat ulang" data, mengisi nilai yang hilang dengan perhitungan dan kode seperti Python, atau cukup menghapus nilai dan data yang sesuai. Ada banyak alasan mengapa data mungkin hilang, dan tindakan yang diambil untuk menyelesaikan nilai yang hilang dapat bergantung pada bagaimana dan mengapa data tersebut hilang.
Menjelajahi Informasi DataFrame
Tujuan pembelajaran: Pada akhir bagian ini, Anda harus merasa nyaman menemukan informasi umum tentang data yang disimpan dalam DataFrame pandas.
Setelah Anda memuat data ke dalam pandas, kemungkinan besar data tersebut akan berada dalam bentuk DataFrame (lihat pelajaran sebelumnya untuk gambaran rinci). Namun, jika dataset dalam DataFrame Anda memiliki 60.000 baris dan 400 kolom, bagaimana Anda mulai memahami apa yang sedang Anda kerjakan? Untungnya, pandas menyediakan beberapa alat yang nyaman untuk dengan cepat melihat informasi keseluruhan tentang DataFrame selain beberapa baris pertama dan terakhir.
Untuk menjelajahi fungsionalitas ini, kita akan mengimpor pustaka Python scikit-learn dan menggunakan dataset ikonik: dataset Iris.
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | |
---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.2 |
3 | 4.6 | 3.1 | 1.5 | 0.2 |
4 | 5.0 | 3.6 | 1.4 | 0.2 |
- DataFrame.info: Untuk memulai, metode
info()
digunakan untuk mencetak ringkasan konten yang ada dalamDataFrame
. Mari kita lihat dataset ini untuk melihat apa yang kita miliki:
iris_df.info()
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
Dari sini, kita tahu bahwa dataset Iris memiliki 150 entri dalam empat kolom tanpa entri null. Semua data disimpan sebagai angka floating-point 64-bit.
- DataFrame.head(): Selanjutnya, untuk memeriksa konten aktual dari
DataFrame
, kita menggunakan metodehead()
. Mari kita lihat beberapa baris pertama dariiris_df
kita:
iris_df.head()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
- DataFrame.tail(): Sebaliknya, untuk memeriksa beberapa baris terakhir dari
DataFrame
, kita menggunakan metodetail()
:
iris_df.tail()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
Kesimpulan: Bahkan hanya dengan melihat metadata tentang informasi dalam DataFrame atau beberapa nilai pertama dan terakhir di dalamnya, Anda dapat langsung mendapatkan gambaran tentang ukuran, bentuk, dan konten data yang sedang Anda kerjakan.
Menangani Data yang Hilang
Tujuan pembelajaran: Pada akhir bagian ini, Anda harus tahu cara mengganti atau menghapus nilai null dari DataFrame.
Sebagian besar waktu, dataset yang ingin Anda gunakan (atau harus gunakan) memiliki nilai yang hilang di dalamnya. Cara menangani data yang hilang membawa kompromi halus yang dapat memengaruhi analisis akhir Anda dan hasil dunia nyata.
Pandas menangani nilai yang hilang dengan dua cara. Yang pertama telah Anda lihat sebelumnya di bagian sebelumnya: NaN
, atau Not a Number. Ini sebenarnya adalah nilai khusus yang merupakan bagian dari spesifikasi floating-point IEEE dan hanya digunakan untuk menunjukkan nilai floating-point yang hilang.
Untuk nilai yang hilang selain float, pandas menggunakan objek Python None
. Meskipun mungkin tampak membingungkan bahwa Anda akan menemukan dua jenis nilai yang pada dasarnya mengatakan hal yang sama, ada alasan programatik yang baik untuk pilihan desain ini dan, dalam praktiknya, pendekatan ini memungkinkan pandas memberikan kompromi yang baik untuk sebagian besar kasus. Meskipun demikian, baik None
maupun NaN
memiliki batasan yang perlu Anda perhatikan terkait cara mereka dapat digunakan.
Pelajari lebih lanjut tentang NaN
dan None
dari notebook!
- Mendeteksi nilai null: Dalam
pandas
, metodeisnull()
dannotnull()
adalah metode utama Anda untuk mendeteksi data null. Keduanya mengembalikan masker Boolean atas data Anda. Kita akan menggunakannumpy
untuk nilaiNaN
:
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
0 False
1 True
2 False
3 True
dtype: bool
Perhatikan baik-baik outputnya. Apakah ada yang mengejutkan Anda? Meskipun 0
adalah null aritmatika, itu tetap merupakan bilangan bulat yang valid dan pandas memperlakukannya seperti itu. ''
sedikit lebih halus. Meskipun kita menggunakannya di Bagian 1 untuk mewakili nilai string kosong, itu tetap merupakan objek string dan bukan representasi null menurut pandas.
Sekarang, mari kita balikkan ini dan gunakan metode ini dengan cara yang lebih mirip dengan cara Anda menggunakannya dalam praktik. Anda dapat menggunakan masker Boolean langsung sebagai indeks Series
atau DataFrame
, yang dapat berguna saat mencoba bekerja dengan nilai yang hilang (atau ada) secara terisolasi.
Kesimpulan: Baik metode
isnull()
maupunnotnull()
menghasilkan hasil serupa saat Anda menggunakannya dalamDataFrame
: mereka menunjukkan hasil dan indeks dari hasil tersebut, yang akan sangat membantu Anda saat Anda bergulat dengan data Anda.
- Menghapus nilai null: Selain mengidentifikasi nilai yang hilang, pandas menyediakan cara yang nyaman untuk menghapus nilai null dari
Series
danDataFrame
. (Terutama pada dataset besar, sering kali lebih disarankan untuk menghapus nilai [NA] yang hilang dari analisis Anda daripada menangani mereka dengan cara lain.) Untuk melihat ini dalam tindakan, mari kita kembali keexample1
:
example1 = example1.dropna()
example1
0 0
2
dtype: object
Perhatikan bahwa ini harus terlihat seperti output Anda dari example3[example3.notnull()]
. Perbedaannya di sini adalah, alih-alih hanya mengindeks pada nilai yang dimasker, dropna
telah menghapus nilai yang hilang dari Series
example1
.
Karena DataFrame
memiliki dua dimensi, mereka memberikan lebih banyak opsi untuk menghapus data.
example2 = pd.DataFrame([[1, np.nan, 7],
[2, 5, 8],
[np.nan, 6, 9]])
example2
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | NaN | 7 |
1 | 2.0 | 5.0 | 8 |
2 | NaN | 6.0 | 9 |
(Apakah Anda memperhatikan bahwa pandas mengubah dua kolom menjadi float untuk mengakomodasi NaN
?)
Anda tidak dapat menghapus satu nilai dari DataFrame
, jadi Anda harus menghapus seluruh baris atau kolom. Bergantung pada apa yang Anda lakukan, Anda mungkin ingin melakukan salah satu atau yang lain, dan pandas memberi Anda opsi untuk keduanya. Karena dalam ilmu data, kolom umumnya mewakili variabel dan baris mewakili pengamatan, Anda lebih mungkin menghapus baris data; pengaturan default untuk dropna()
adalah menghapus semua baris yang mengandung nilai null:
example2.dropna()
0 1 2
1 2.0 5.0 8
Jika perlu, Anda dapat menghapus nilai NA dari kolom. Gunakan axis=1
untuk melakukannya:
example2.dropna(axis='columns')
2
0 7
1 8
2 9
Perhatikan bahwa ini dapat menghapus banyak data yang mungkin ingin Anda pertahankan, terutama dalam dataset yang lebih kecil. Bagaimana jika Anda hanya ingin menghapus baris atau kolom yang mengandung beberapa atau bahkan semua nilai null? Anda menentukan pengaturan tersebut dalam dropna
dengan parameter how
dan thresh
.
Secara default, how='any'
(jika Anda ingin memeriksa sendiri atau melihat parameter lain yang dimiliki metode ini, jalankan example4.dropna?
dalam sel kode). Anda dapat secara alternatif menentukan how='all'
sehingga hanya menghapus baris atau kolom yang mengandung semua nilai null. Mari kita perluas DataFrame
contoh kita untuk melihat ini dalam tindakan.
example2[3] = np.nan
example2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | NaN | 7 | NaN |
1 | 2.0 | 5.0 | 8 | NaN |
2 | NaN | 6.0 | 9 | NaN |
Parameter thresh
memberi Anda kontrol yang lebih rinci: Anda menetapkan jumlah nilai non-null yang diperlukan oleh baris atau kolom agar tetap dipertahankan:
example2.dropna(axis='rows', thresh=3)
0 1 2 3
1 2.0 5.0 8 NaN
Di sini, baris pertama dan terakhir telah dihapus, karena hanya mengandung dua nilai non-null.
- Mengisi nilai null: Bergantung pada dataset Anda, terkadang lebih masuk akal untuk mengisi nilai null dengan nilai yang valid daripada menghapusnya. Anda dapat menggunakan
isnull
untuk melakukan ini secara langsung, tetapi itu bisa melelahkan, terutama jika Anda memiliki banyak nilai untuk diisi. Karena ini adalah tugas yang umum dalam ilmu data, pandas menyediakanfillna
, yang mengembalikan salinanSeries
atauDataFrame
dengan nilai yang hilang diganti dengan nilai pilihan Anda. Mari kita buat contohSeries
lain untuk melihat bagaimana ini bekerja dalam praktik.
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
Anda dapat mengisi semua entri null dengan satu nilai, seperti 0
:
example3.fillna(0)
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
Anda dapat mengisi maju nilai null, yaitu menggunakan nilai valid terakhir untuk mengisi null:
example3.fillna(method='ffill')
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
Anda juga dapat mengisi mundur untuk menyebarkan nilai valid berikutnya ke belakang untuk mengisi null:
example3.fillna(method='bfill')
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
Seperti yang mungkin Anda duga, ini bekerja sama dengan DataFrame
, tetapi Anda juga dapat menentukan axis
di sepanjang mana nilai null diisi. Menggunakan kembali example2
yang sebelumnya:
example2.fillna(method='ffill', axis=1)
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
Perhatikan bahwa ketika nilai sebelumnya tidak tersedia untuk pengisian maju, nilai null tetap ada.
Intisari: Ada berbagai cara untuk menangani nilai yang hilang dalam dataset Anda. Strategi spesifik yang Anda gunakan (menghapusnya, menggantinya, atau bahkan bagaimana Anda menggantinya) harus ditentukan oleh karakteristik data tersebut. Anda akan semakin memahami cara menangani nilai yang hilang seiring dengan semakin seringnya Anda bekerja dan berinteraksi dengan dataset.
Menghapus Data Duplikat
Tujuan pembelajaran: Pada akhir bagian ini, Anda diharapkan dapat dengan mudah mengidentifikasi dan menghapus nilai duplikat dari DataFrames.
Selain data yang hilang, Anda sering kali akan menemukan data duplikat dalam dataset dunia nyata. Untungnya, pandas
menyediakan cara mudah untuk mendeteksi dan menghapus entri duplikat.
- Mengidentifikasi duplikat:
duplicated
: Anda dapat dengan mudah menemukan nilai duplikat menggunakan metodeduplicated
di pandas, yang mengembalikan masker Boolean yang menunjukkan apakah sebuah entri dalamDataFrame
adalah duplikat dari entri sebelumnya. Mari kita buat contohDataFrame
lain untuk melihat cara kerjanya.
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
letters | numbers | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
2 | A | 1 |
3 | B | 3 |
4 | B | 3 |
example4.duplicated()
0 False
1 False
2 True
3 False
4 True
dtype: bool
- Menghapus duplikat:
drop_duplicates
: cukup mengembalikan salinan data di mana semua nilaiduplicated
adalahFalse
:
example4.drop_duplicates()
letters numbers
0 A 1
1 B 2
3 B 3
Baik duplicated
maupun drop_duplicates
secara default mempertimbangkan semua kolom, tetapi Anda dapat menentukan agar mereka hanya memeriksa subset kolom tertentu dalam DataFrame
Anda:
example4.drop_duplicates(['letters'])
letters numbers
0 A 1
1 B 2
Kesimpulan: Menghapus data duplikat adalah bagian penting dari hampir setiap proyek data sains. Data duplikat dapat mengubah hasil analisis Anda dan memberikan hasil yang tidak akurat!
🚀 Tantangan
Semua materi yang dibahas tersedia dalam Jupyter Notebook. Selain itu, terdapat latihan setelah setiap bagian, cobalah untuk mengerjakannya!
Kuis setelah kuliah
Tinjauan & Studi Mandiri
Ada banyak cara untuk menemukan dan mendekati persiapan data Anda untuk analisis dan pemodelan, serta membersihkan data adalah langkah penting yang membutuhkan pengalaman "praktis". Cobalah tantangan berikut dari Kaggle untuk mengeksplorasi teknik yang tidak dibahas dalam pelajaran ini.
Tugas
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa terjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.