Latihan - Eksplorasi data bagian 1 - Memeriksa outlier

Selesai

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]])

HasilScreenshot showing DataFrame box plots.

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.