Michael Makalay

Harus tahu Fungsi Pandas untuk Machine Learning Journey

Node Sumber: 1865356

Artikel ini diterbitkan sebagai bagian dari Blogathon Ilmu Data

Pengantar

Nah, ada kemungkinan bagus Anda bisa!

Untuk ilmuwan data yang menggunakan Python sebagai bahasa pemrograman utama mereka, paket Pandas adalah alat analisis data yang harus dimiliki. Paket Pandas memiliki semua yang dibutuhkan ilmuwan data, dan setiap kursus mengajari kami cara menggunakannya pada awalnya. Ini sangat besar, kuat, dan melakukan hampir semua manipulasi tabel yang dapat Anda bayangkan. Namun, luasnya ini kadang-kadang bisa menjadi kerugian.

Ini memiliki banyak fitur indah yang memecahkan kasus tepi yang langka, skenario yang berbeda.

Salah satu kelemahan utama panda adalah ia berjuang dengan kumpulan data besar karena panda menyimpan struktur datanya dalam RAM, yang dapat menjadi tidak mencukupi seiring bertambahnya ukuran data. Gunakan PySpark atau Dask untuk ini.

Meskipun paket Pandas sudah banyak digunakan, masih banyak fungsi yang mungkin diabaikan orang, entah karena jarang digunakan atau karena tidak mengetahui keberadaannya. Posting ini bermaksud untuk memperkenalkan kembali Anda pada fitur-fitur tersebut dan menunjukkan bahwa Pandas jauh lebih kompeten daripada yang Anda sadari sebelumnya.

Pipe

Untuk melakukan pembersihan data secara ringkas dan ringkas di panda, seseorang dapat menggunakan fungsi Pipe, yang memungkinkan Anda untuk menggabungkan beberapa fungsi dalam satu operasi.

Misalnya, jika Anda ingin menerapkan fungsi seperti drop_duplicates, encode_categoricals, remove_outliers yang menerima argumennya.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

Menguraikan pd pengali

Fungsi ini merupakan alternatif untuk Sklearns Label Encoder.

# Perhatikan [0] di akhir diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nama: cut_enc, dtype: int64

Faktorkan hasil sebuah tupel nilai: nilai yang disandikan dan daftar kategori unik.

nilai, unik = pd.factorize(berlian["cut"], sort=True) >>> nilai[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unik ['Ideal', 'Premium', 'Sangat Bagus', 'Bagus', 'Sedang']

meledak

Meledak | fungsi panda

Foto oleh Edewaa Asuh on Unsplash

Explode adalah fungsi dengan nama yang menarik. Mari kita mulai dengan sebuah contoh dan kemudian penjelasan:

df = pd.Seri([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("kotor") >>> df
data | fungsi panda
Gambar oleh penulis

Kolom fitur memiliki dua baris yang dilambangkan dengan daftar. Jenis data ini tersedia dalam survei di mana beberapa pertanyaan menerima pilihan ganda.

>>> df.explode("kotor", abaikan_index=Benar)
data meledak
Gambar oleh penulis

Fungsi ini mengambil sel dengan array nilai dan meledak dalam beberapa baris. Untuk mempertahankan urutan indeks numerik, gunakan abaikan_index sebagai True.

Antara

Untuk fitur numerik pengindeksan boolean dalam suatu rentang, inilah fungsi praktisnya:

# Dapatkan berlian dengan harga antara 3500 dan 3700 dolar berlian[diamonds["price"].between(3500, 3700, inklusif="tidak ada")].sample(5)
antar data | fungsi panda
Gambar oleh penulis

 

T

DataFrame memiliki atribut T sederhana, yang dikenal sebagai transpose. Kami mungkin tidak sering menggunakannya, metode deskripsi sangat membantu saat melihat kerangka data.

>>> boston.describe().T.head(10)
mengubah urutan
Gambar oleh penulis

 

Pilihan Panda

Seseorang dapat menggunakan pengaturan global panda yang membantu mengubah dan mengubah perilaku default.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

Terdiri dari 5 modul. Mari kita lihat opsi yang tersedia di bawah layar. Ada banyak opsi yang tersedia, tetapi saya kebanyakan menggunakan max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'lebar']

Kebanyakan orang menggunakan max_columns dan presisi

# Hapus batas untuk menampilkan jumlah cols pd.options.display.max_columns = None # Hanya tampilkan 5 angka setelah desimal pd.options.display.precision = 5 # menghilangkan notasi ilmiah

Konversi_dtypes

Kita semua sadar bahwa panda memiliki kebiasaan mengganggu untuk menandai beberapa kolom sebagai tipe data objek. Daripada mendefinisikan tipenya secara langsung, Anda dapat menggunakan metode convert dtypes, yang mencoba menyimpulkan tipe data terbaik:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId objek CO float64 O3 float64 AQI_Bucket objek dtype: objek >>> sample.convert_dtypes().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

Pilih_dtypes

Dari namanya, saya yakin sudah jelas apa fungsinya. Anda dapat menggunakan opsi sertakan dan kecualikan untuk menentukan kolom yang menyertakan atau menghilangkan tipe data tertentu.

Pilih hanya kolom numerik dengan np.number, misalnya:

# Pilih hanya kolom numerik diamonds.select_dtypes(include=np.number).head()
pilih tipe d
Gambar oleh penulis

 

Masker

Fungsi ini membantu mengganti nilai di mana kondisi kustom tidak terpenuhi.

# Buat sampel data umur = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") umur
topeng | data
Gambar oleh penulis

Setelah melakukan operasi di atas.

penyamaran dilakukan
Gambar oleh penulis

Min dan Max

Meskipun min dan max sudah dikenal, ia memiliki beberapa properti yang lebih baik untuk beberapa kasus tepi.

index = ["Berlian", "Titanic", "Iris", "Penyakit Jantung", "Default Pinjaman"] perpustakaan = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) untuk lib di perpustakaan}, index=index ) >>> df
min dan maks
Gambar oleh Penulis 

DataFrame fiktif di atas menunjukkan hasil dari empat pustaka penambah gradien yang berbeda pada lima kumpulan data. Kami sedang mencari paket yang melakukan yang terbaik pada setiap kumpulan data. Inilah cara mencapainya dengan max dengan cara yang berkelas:

>>> df.max(axis=1) Berlian 99.52684 Titanic 99.63650 Iris 99.10989 Penyakit Jantung 99.31627 Default Pinjaman 97.96728 dtype: float64

Terbesar dan Terkecil

Nlargest dan nsmallest berguna untuk melihat nilai N teratas atau ~(N teratas) dari suatu variabel.

diamonds.nlargest(5, "harga")
terbesar dan terkecil
Gambar oleh penulis
berlian.nsmallest(5, "harga")
terkecil
Gambar oleh penulis

 

Idxmax dan Idxmin

Panda mengembalikan nomor terbesar/terkecil saat Anda memanggil maks atau min pada kolom. Namun, ada situasi ketika Anda membutuhkan posisi min/max, yang tidak disediakan oleh fungsi ini.

Sebagai gantinya, Anda dapat menggunakan idxmax/idxmin:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

Nilai_Jumlah

Cara umum untuk menemukan persentase nilai yang hilang adalah dengan menggabungkan isnull dan sum dan membaginya dengan ukuran array.

Tapi, value_counts dengan argumen yang relevan melakukan hal yang sama:

housing = pd.read_csv("train.csv") >>> housing["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Nama: FireplaceQu, dtype: float64

Klip

Fungsi klip membantu menemukan outlier di luar jangkauan dan menggantinya dengan batas keras.

>>> age.clip(50, 60)
data untuk klip
Gambar oleh penulis

 

Pada_waktu dan Antara_waktu

Fungsi-fungsi ini sangat membantu saat bekerja dengan deret waktu dengan granularitas tinggi.

at_time membantu mendapatkan nilai pada tanggal atau waktu tertentu.

indeks = pd.date_range("2021-08-01", periode=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
contoh saat_waktu | fungsi panda
Gambar oleh penulis

>>> df.at_time(โ€œ15:00โ€)

.at_time | fungsi panda
Gambar oleh penulis

antara_waktu digunakan untuk mengambil baris dalam rentang khusus.

dari datetime import datetime >>> df.between_time("09:45", "12:00")
antara_waktu
Gambar oleh penulis

 

Tanggal_rentang

Fungsi ini membantu membuat indeks deret waktu dengan frekuensi hari kerja. Dunia keuangan memiliki jenis frekuensi ini. Jadi, fungsi ini mungkin berguna pada saat mengindeks ulang deret waktu dengan fungsi indeks ulang.

seri = pd.bdate_range("2021-01-01", "2021-01-31") # Jangka waktu satu bulan >>> len(seri) 21

Di dan Ia

Kedua pengakses ini secara substansial lebih cepat daripada loc dan iloc. Namun, mereka memiliki kelemahan. Mereka hanya memungkinkan Anda untuk memilih atau mengganti satu nilai pada satu waktu:

# [indeks, label] >>> diamonds.at[234, "cut"] 'Ideal' # [indeks, indeks] >>> diamonds.iat[1564, 4] 61.2 # Ganti 16541 baris kolom harga >> > diamonds.at[16541, "harga"] = 10000

Argsort

Fungsi ini membantu mengekstrak indeks yang akan mengurutkan larik fitur.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Sekarang, urutkan `tips` berdasarkan total_bill tips.iloc[sort_idx].head()
arg_sort
Gambar oleh penulis

 

Aksesor Kucing

Panda memungkinkan fungsi python bawaan pada tanggal dan string menggunakan pengakses seperti str atau dt.

>>> diamonds.dtypes carat float64 cut kategori kategori warna kategori kejelasan kedalaman tabel float64 harga float64 int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Seseorang dapat menggunakan banyak fungsi khusus menggunakan pengakses cat pada kolom kategorikal. Ini memiliki fungsi seperti kategori untuk menemukan yang unik, rename_categories untuk mengganti nama fitur.

diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='objek')

Lihat ini untuk daftar fungsi lainnya di bawah aksesoris kucing.

Meremas

Squeeze adalah fungsi yang digunakan dalam situasi tepi yang jarang namun memperparah.

Ketika satu nilai dikembalikan dari kondisi yang digunakan untuk mensubset DataFrame, ini adalah salah satu dari kasus ini. Pertimbangkan skenario berikut:

subset = diamonds.loc[diamonds.index >> subset
harga pompa cor beton mini

Bahkan jika hanya ada satu sel, kembalikan DataFrame. Ini merepotkan karena Anda sekarang harus menggunakan.loc dengan nama kolom dan indeks untuk mendapatkan harganya.

Anda tidak perlu melakukannya jika Anda tahu cara memeras. Sumbu dapat dihapus dari DataFrame atau Seri sel tunggal menggunakan fungsi ini. Pertimbangkan skenario berikut:

>>> subset.squeeze() 326

Dimungkinkan untuk menentukan sumbu yang akan dihapus. Itu hanya mengembalikan skalar sekarang.

>>> subset.squeeze("columns") # atau "rows" 0 326 Nama: harga, dtype: int64

Perhatikan bahwa fungsi ini hanya berfungsi untuk Seri atau DataFrame dengan nilai tunggal.

Excel_penulis

Ini adalah kelas umum untuk membuat file excel dan menulis DataFrame di dalamnya. Pertimbangkan, kami memiliki dua set data ini.

# Muat dua kumpulan data diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Tulis ke file excel yang sama dengan pd.ExcelWriter("data/data.xlsx") sebagai penulis: diamonds.to_excel (penulis, sheet_name="berlian") tips.to_excel(penulis, sheet_name="tips")

Ini memiliki properti untuk menentukan format DateTime yang akan digunakan, apakah Anda memerlukan file baru atau memodifikasi yang sudah ada, apa yang terjadi jika ada lembar. Periksa ini dokumentasi  lebih lanjut.

Kesimpulan

Ini bukan ikhtisar lengkap tentang panda, dan dokumentasi berisi informasi lebih lanjut tentang kode dan fitur. Saya menyarankan Anda bereksperimen dengan berbagai variasi cuplikan kode yang disediakan di sini, serta berbagai parameter. Seseorang dapat sepenuhnya memahami kekuatan panda dengan melakukan ini.

Pustaka seperti Dask dan datatable secara bertahap menggantikan Pandas dengan fitur barunya yang mencolok untuk menangani kumpulan data besar, Pandas tetap menjadi alat manipulasi data yang paling banyak digunakan dalam komunitas ilmu data Python. Karena seberapa cocoknya dengan tumpukan SciPy saat ini, perpustakaan berfungsi sebagai paradigma untuk diikuti dan dibangun oleh paket lain.

Saya harap Anda telah menemukan posting ini berwawasan dan terima kasih telah membaca.

Media yang ditampilkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan atas kebijaksanaan Penulis.

Sumber: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Stempel Waktu:

Lebih dari Analisis Vidhya