Latihan - Eksplorasi data bagian 1 - Memeriksa outlier
Anda masih memiliki beberapa nilai yang hilang, tetapi mari kita kesampingkan nilai-nilai yang hilang itu sejenak. Jika tidak, Anda mungkin tergoda untuk mengaitkan nilai penggantian, dan kemungkinan outlier dalam himpunan data mungkin membuat penggantian Anda tidak tepat.
Outlier adalah nilai data yang jauh di luar distribusi nilai lain yang menimbulkan pertanyaan apakah nilai data termasuk dalam himpunan data. Outlier sering muncul dari kesalahan data atau gangguan lain yang tidak diinginkan. Anda harus selalu memeriksa dan menangani kemungkinan outlier sebelum menganalisis data.
Cara cepat untuk mengidentifikasi outlier adalah dengan menggunakan fungsi describe()
pandas:
player_df.describe()
Hasil
Baris | ID | points | penguasaan | team_pace | GP | MPG | TS% | AST | TO | USG | ORR | DRR | REBR | PER |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
jumlah | 42.000000 | 42.000000 | 42.000000 | 42.000000 | 36.000000 | 37.00000 | 42.000000 | 42.000000 | 42.000000 | 42.000000 | 42.000000 | 42.000000 | 42.000000 | 33.000000 |
mean | 23.738095 | 1592.380952 | 1346.323810 | 106.526190 | 59.861111 | 35.27027 | 0.596357 | 26.221429 | 13.083333 | 30.478571 | 4.280952 | 14.850000 | 8.497619 | 22.594242 |
std | 13.826555 | 351.876707 | 214.503887 | 6.676791 | 5.576239 | 1.91135 | 0.029284 | 5.199275 | 2.038282 | 4.919079 | 2.074025 | 7.277538 | 4.995876 | 7.255338 |
min | 1.000000 | 183.000000 | 147.300000 | 89.700000 | 48.000000 | 30.50000 | 0.511000 | 14.800000 | 9.200000 | 16.500000 | 0,000000 | 0.900000 | -2.900000 | 8.710000 |
25% | 12.250000 | 1390.750000 | 1283.650000 | 102.400000 | 55.750000 | 34.10000 | 0.572250 | 23.275000 | 11.350000 | 26.975000 | 2.925000 | 8.475000 | 5.225000 | 20.120000 |
50% | 23.500000 | 1680.000000 | 1369.800000 | 106.800000 | 60.500000 | 35.40000 | 0.604000 | 27.200000 | 13.500000 | 30.650000 | 4.650000 | 16.800000 | 9.150000 | 24.230000 |
75% | 35.750000 | 1826.250000 | 1444.050000 | 111.950000 | 64.000000 | 36.90000 | 0.618750 | 30.550000 | 14.775000 | 34.850000 | 5.900000 | 20.325000 | 12.875000 | 28.380000 |
maks | 46.000000 | 2062.000000 | 1542.000000 | 118.800000 | 69.000000 | 38.80000 | 0.645000 | 33.200000 | 16.200000 | 36.700000 | 8.300000 | 29.400000 | 16.400000 | 34.260000 |
Di sini Anda melihat, misalnya, bahwa rata-rata untuk semua 42 pemain adalah 1592,38 poin. Tetapi, lihat angka min (183), 25% (1390,75), 50% (1680,0), 75% (1826,25), dan maks (2062). Di sini, poin min (183) mungkin merupakan outlier. Anda dapat menggunakan plot kotak untuk memvisualisasikan nilai dan menentukan kemungkinan outlier.
Membuat plot kotak untuk kolom
Alat tradisional untuk menyelidik nilai data terluar adalah plot kotak. Kotak dalam plot kotak mengacu pada kotak yang digambar di sekitar rentang data dari persentil ke-25 hingga persentil ke-75. (Persentil ini membatasi bagian penting dari data. Rentangnya disebut rentang interkuartil.) Kotak ini adalah 50% tengah dari nilai data untuk variabel tertentu (kolom dalam DataFrame). Anda menggunakan baris lain untuk menandai median data, yang merupakan persentil ke-50.
Plot kotak juga disebut plot kotak-dan-kumis karena Anda menggambar bentuk T di atas dan di bawah kotak untuk mencakup nilai maksimum dan minimum data, tidak termasuk outlier. Bagian terakhir ini penting untuk tujuan Anda karena memungkinkan Anda mengidentifikasi outlier secara grafis.
Idealnya, Anda akan menghasilkan plot kotak untuk kolom Anda dalam satu matriks yang dapat Anda pindai dengan mudah. Sayangnya, tidak ada fungsi tunggal yang menghasilkan beberapa plot kotak, jadi Anda akan menulis perulangan for
sebagai gantinya.
Karena cara kerja pustaka Seaborn di Python, Anda perlu secara eksplisit menyatakan sel dalam matriks tempat Anda ingin merender setiap plot kotak. Gunakan operator pembagian lantai Python (//
) untuk membagi 13 kolom yang diinginkan (Anda tidak perlu melihat ID
) menjadi beberapa baris. Gunakan operator modulo (%
) untuk menurunkan kolom.
Pertama, impor pustaka Matplotlib dan Seaborn ke dalam buku catatan Anda:
import matplotlib.pyplot as plt
import seaborn as sns
Catatan
Jika Anda mendapatkan kesalahan saat mengimpor matplotlib
atau seaborn
, Anda mungkin perlu menginstal pustaka. Untuk informasi selengkapnya, lihat panduan penginstalan Matplotlib dan panduan penginstalan Seaborn.
Anda seharusnya tidak melihat output, yang menunjukkan bahwa pustaka berhasil diimpor. Sekarang Anda bisa:
- Buat daftar nama kolom, kecuali
ID
. Gunakan daftar untuk menemukan nilai tertentu dalam setiap baris. - Buat matriks subplot sehingga Anda memiliki satu gambar yang menunjukkan semua 13 kolom.
- Tambahkan pengisi di sekitar subplot agar lebih mudah dibaca.
- Buat plot kotak berdasarkan data di setiap kolom, di semua baris.
# Create a list of all column names, except for ID.
cols = list(player_df.iloc[:, 1:])
# Create a 3x5 matrix of subplots.
fig, axes = plt.subplots(3, 5, figsize=(18, 11))
# Create padding around subplots to make the axis labels readable.
fig.tight_layout(pad=2.0)
# Loop over the columns of the DataFrame and create a box plot for each one.
for i in range(len(cols)):
sns.boxplot(ax=axes[i//5, i%5], y=player_df[cols[i]])
Memang benar, Anda dapat melihat dua outlier di points
dan possessions
. Outlier ini direpresentasikan sebagai berlian di dekat bagian bawah dari dua plot kotak pertama yang memvisualisasikan kolom points
dan possessions
. Nilainya sangat jauh di luar kisaran data lain sehingga kemungkinan besar mewakili data sampah dan bukan pemain yang berkinerja sangat buruk.
Di sini, keahlian materi subjek menjadi penting. Dalam kasus ini keahlian tersebut adalah pengetahuan tentang bola basket. Kemungkinan seorang pemain profesional hanya mencetak satu poin dalam karier mereka sangat kecil. Demikian pula, kemungkinan seorang pemain memiliki 1.400 kepemilikan lebih sedikit daripada jumlah rata-rata kepemilikan juga sangat kecil. Jadi, Anda dapat yakin bahwa data yang luar biasa ini tidak benar.
Dalam himpunan data yang berbeda, faktornya mungkin berbeda. Jadi, berhenti untuk mengevaluasi outlier dengan hati-hati sangat penting untuk perjalanan ilmu data.
Mengidentifikasi dan menghapus baris yang berisi nilai outlier
Anda dapat menggali lebih jauh ke dalam data jika perlu. Apakah beberapa data salah ketik atau rusak? Dengan keahlian materi subjek yang cukup atau penguasaan dengan cara data dikumpulkan, Anda dapat mencoba untuk memperbaiki nilai yang salah. Tetapi Anda juga dapat mengambil risiko memperkenalkan bias atau prasangka Anda sendiri tentang data ke dalam himpunan data. Kecelakaan-kecelakaan itu pada akhirnya dapat merusak analisis Anda. Karena Anda memiliki 42 catatan yang tersisa dalam data, cara paling aman adalah menghapus baris yang melanggar atau baris.
Tetapi, plot kotak hanya memberi tahu Anda bahwa nilai-nilai terluar ada. Anda sekarang perlu mencari tahu baris tempat nilai muncul.
Karena kedua nilai muncul di bawah nilai minimum kolom masing-masing, Anda dapat menggunakan metode idxmin()
pada kedua kolom. Metode ini mengembalikan nomor indeks dari baris tempat nilai minimum muncul. (Anda akan perlu memeriksa setiap nilai secara terpisah.)
# Identify the index number of the row that has the lowest value in 'points'.
points_outlier = player_df['points'].idxmin()
points_outlier
35
# Identify the index number of the row that has the lowest value in 'possession'.
possession_outlier = player_df['possessions'].idxmin()
possession_outlier
35
Untungnya, outlier keduanya berada di baris yang sama. Anda sekarang dapat menggunakan fungsi drop()
lagi untuk menghapus baris secara manual.
Anda dapat secara manual memasukkan nomor indeks untuk baris tersebut. Tetapi, perubahan manual ini akan menyebabkan kemungkinan salah ketik. Sebagai gantinya, gunakan variabel yang Anda buat untuk menyimpan nilai minimum.
# Drop the row that has the outlying values for 'points' and 'possessions'.
player_df.drop(player_df.index[points_outlier], inplace=True)
# Check the end of the DataFrame to ensure that the correct row was dropped.
player_df.tail(10)
Hasil
Baris | ID | points | penguasaan | team_pace | GP | MPG | TS% | AST | TO | USG | ORR | DRR | REBR | PER |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 36 | 2062.0 | 1505.7 | 111.5 | NaN | 37.0 | 0.620 | 29.8 | 15.6 | 36.2 | 4.9 | 23.9 | +14.7 | 27.86 |
32 | 37 | 1845.0 | 1435.7 | 113.1 | 69.0 | 36.9 | 0.634 | 33.2 | 14,0 | 36.5 | 4.1 | 21.5 | 16.4 | 34.26 |
33 | 38 | 1778.0 | 1526.4 | 109.3 | 66.0 | 34.9 | 0.612 | 30.6 | 15.9 | 35.9 | 5.5 | 18,8 | 13.7 | 28.65 |
34 | 39 | 1901.0 | 1444.1 | 109.7 | 67.0 | 36.5 | 0.609 | 27.2 | +14.8 | 35.5 | 5.0 | 21.8 | 8.9 | 20.12 |
36 | 41 | 2030.0 | 1431.0 | 112.3 | 68,0 | 37.0 | 0.618 | 32.5 | 15.3 | 34.5 | 5.7 | 15.7 | 13.2 | 30.07 |
37 | 42 | 1631.0 | 1465.7 | 110.1 | 66.0 | 37,5 | 0.613 | 28.4 | 14,4 | 35.7 | 6.5 | 20.7 | 14,0 | 28.40 |
38 | 43 | 1828.0 | 1507.2 | 112.7 | 64,0 | 36.5 | 0.618 | 31.3 | 14,0 | 34.9 | 5,9 | 21.3 | 14,5 | NaN |
39 | 44 | 1821.0 | 1443.7 | 118.8 | 66.0 | 36.6 | 0.609 | 27.3 | 13,5 | 35.8 | 7,0 | 23.8 | 11.5 | 22.96 |
40 | 45 | 1740.0 | 1443.9 | 114.1 | 68,0 | 37.1 | 0.611 | 26.6 | 15.2 | 29.3 | 8.3 | 17.7 | 11.1 | 21.22 |
41 | 46 | 1993.0 | 1459.0 | 112,5 | NaN | 36.9 | 0.627 | 30.4 | 15.0 | 33.7 | 6.3 | 19.3 | 14.1 | 28.76 |
Seperti fungsi head()
, fungsi tail()
menunjukkan lima nilai terakhir dari DataFrame. Dan, tentu saja, Anda telah menghapus baris yang perlu Anda hapus (misalnya, baris dengan indeks 35).
Anda dapat mengatur ulang indeks untuk DataFrame lagi guna memastikan akurasi dalam data:
# Renumber the DataFrame index to reflect the dropped rows.
player_df.reset_index(drop=True, inplace=True)
Jika Anda menjalankan player_df.tail(10)
lagi, Anda akan melihat indeks dalam urutan sekarang hingga baris 40.
© 2021 Warner Bros. Ent. Semua Hak Dilindungi Undang-Undang.