Майкл Маколей

Повинен знати функції панд для подорожі машинного навчання

Вихідний вузол: 1865356

Ця стаття була опублікована як частина Блогатон науки про дані

Вступ

Що ж, є хороша можливість!

Для дослідників даних, які використовують Python як основну мову програмування, пакет Pandas є обов’язковим інструментом аналізу даних. У пакеті Pandas є все, що потрібно спеціалісту з обробки даних, і кожен курс спочатку вчив нас, як ним користуватися. Він такий великий, потужний і виконує майже всі табличні маніпуляції, які ви можете собі уявити. Однак ця широта іноді може бути недоліком.

Він має багато чудових функцій, які вирішують рідкісні крайні випадки та різні сценарії.

Одним із ключових недоліків pandas є те, що він погано працює з великими наборами даних, оскільки pandas зберігає свої структури даних в оперативній пам’яті, якої може стати недостатньо зі збільшенням розміру даних. Для цього використовуйте PySpark або Dask.

Незважаючи на те, що пакет Pandas широко використовується, все ще є багато функцій, які люди можуть не помічати, чи тому, що він використовується менше, чи тому, що вони не знають про його існування. Ця публікація має на меті ще раз познайомити вас із цими функціями та продемонструвати, що Pandas набагато компетентніша, ніж ви знали раніше.

Труба

Щоб виконати очищення даних у стислій та компактній формі в pandas, можна використовувати функції Pipe, які дозволяють об’єднати кілька функцій в одній операції.

Наприклад, якщо ви хочете застосувати такі функції, як drop_duplicates, encode_categoricals, remove_outliers, які приймають його аргументи.

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

Розкласти на множники

Ця функція є альтернативою Sklearns Label Encoder.

# Зверніть увагу на [0] у кінці diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Ім'я: cut_enc, dtype: int64

Розкладіть результати на кортеж значень: закодоване значення та список унікальних категорій.

значення, унікальний = pd.factorize(діаманти["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> унікальний ["Ідеальний", "Преміум", "Дуже добре", "Добре", "Задовільно"]

Explode

Вибухнути | функції панди

Фото Едева Фостер on Unsplash

Explode — функція з цікавою назвою. Почнемо з прикладу, а потім пояснення:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("брудний") >>> df
дані | функції панди
Зображення автора

Стовпець функцій має два рядки, позначені списками. Цей тип даних доступний в опитуваннях, де кілька запитань допускають кілька варіантів.

>>> df.explode("брудний", ignore_index=True)
дані вибухають
Зображення автора

Ця функція приймає клітинку з масивом значень і розбиває її на кілька рядків. Щоб зберегти порядок числового індексу, використовуйте ignore_index як True.

між

Для логічного індексування числових функцій у діапазоні ось зручна функція:

# Отримайте діаманти за ціною від 3500 до 3700 доларів diamonds[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
між даними | функції панди
Зображення автора

 

T

DataFrame має простий атрибут T, відомий як транспонування. Ми можемо не використовувати його часто, метод опису корисний під час перегляду кадрів даних.

>>> boston.describe().T.head(10)
транспонувати
Зображення автора

 

Параметри Pandas

Можна використовувати глобальні налаштування панд, які допомагають налаштовувати та змінювати поведінку за замовчуванням.

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

Складається з 5 модулів. Давайте подивимося доступні опції під дисплеєм. Є багато доступних варіантів, але я переважно використовую max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'ширина']

Більшість людей використовують max_columns і precision

# Видалити обмеження на відображення кількості стовпців pd.options.display.max_columns = None # Показувати лише 5 чисел після десяткового дробу pd.options.display.precision = 5 # позбутися наукової нотації

Convert_dtypes

Ми всі знаємо, що панди мають прикру звичку позначати деякі стовпці як типи даних об’єктів. Замість того, щоб безпосередньо визначати їх типи, ви можете використовувати метод convert dtypes, який намагається визначити найкращий тип даних:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId об'єкт CO float64 O3 float64 AQI_Bucket об'єкт dtype: об'єкт >>> sample.convert_dtypes().dtypes StationId рядок CO float64 O3 float64 AQI_Bucket рядок dtype: об'єкт

Select_dtypes

Я вважаю, що з назви зрозуміло, що виконує функція. Ви можете використовувати параметри включення та виключення, щоб указати стовпці, які включають або пропускають певні типи даних.

Виберіть лише числові стовпці з np.number, наприклад:

# Виберіть лише числові стовпці diamonds.select_dtypes(include=np.number).head()
виберіть dtypes
Зображення автора

 

Маска

Ця функція допомагає замінити значення, якщо настроювана умова не виконується.

# Створення зразків даних ages = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
маска | даних
Зображення автора

Після виконання вищевказаної операції.

виконано маскування
Зображення автора

Мін і макс

Хоча min і max добре відомі, він має деякі кращі властивості для деяких крайових випадків.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) для бібліотек у бібліотеках}, index=index ) >>> df
мін. і макс
Зображення автора 

Вигаданий DataFrame вище показує результати чотирьох різних бібліотек підвищення градієнта на п’яти наборах даних. Ми шукаємо пакет, який найкраще працює з кожним набором даних. Ось як це зробити за допомогою max у стильній манері:

>>> df.max(axis=1) Діаманти 99.52684 Титанік 99.63650 Ірис 99.10989 Хвороба серця 99.31627 Позика за замовчуванням 97.96728 dtype: float64

Nнайбільший і Nsнайменший

nlargest і nsmallest корисні для перегляду перших N або ~(верхніх N) значень змінної.

diamonds.nlargest(5, "ціна")
найбільший і найменший
Зображення автора
diamonds.nsmallest(5, "ціна")
nsнайменший
Зображення автора

 

Idxmax і Idxmin

Pandas повертає найбільше/найменше число, коли ви називаєте max або min у стовпці. Однак бувають ситуації, коли вам потрібна позиція min/max, яку ці функції не забезпечують.

Замість цього ви можете використовувати idxmax/idxmin:

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

Підрахунки_значення

Поширений спосіб знайти відсоток пропущених значень — поєднати isnull і sum і поділити на розмір масиву.

Але value_counts з відповідними аргументами робить те саме:

житло = pd.read_csv("train.csv") >>> житло["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 Назва: FireplaceQu, dtype: float64

Кліп

Функція відсікання допомагає знаходити викиди за межами діапазону та замінювати їх жорсткими обмеженнями.

>>> ages.clip(50, 60)
дані для кліпу
Зображення автора

 

At_time і Betweeen_time

Ці функції корисні під час роботи з часовими рядами високої деталізації.

at_time допомагає отримати значення на певну дату чи час.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time приклад | функції панди
Зображення автора

>>> df.at_time(“15:00”)

.at_time | функції панди
Зображення автора

between_time використовується для отримання рядків у межах спеціального діапазону.

from datetime import datetime >>> df.between_time("09:45", "12:00")
між_часом
Зображення автора

 

Діапазон_дат

Ця функція допомагає створювати часові ряди індексів з частотою робочих днів. Фінансовий світ має таку частоту. Отже, ця функція може бути корисною під час переіндексації часових рядів за допомогою функції повторного індексування.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Період в один місяць >>> len(series) 21

At і Iat

Ці два інструменти доступу є значно швидшими, ніж loc та iloc. Однак у них є недолік. Вони дозволяють вибирати або замінювати лише одне значення за раз:

# [індекс, мітка] >>> diamonds.at[234, "cut"] 'Ідеальний' # [індекс, індекс] >>> diamonds.iat[1564, 4] 61.2 # Замінити 16541-й рядок стовпця з цінами >> > diamonds.at[16541, "ціна"] = 10000

Argsort

Ця функція допомагає отримати індекси, які сортують масив ознак.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Тепер відсортуйте чайові на основі total_bill tips.iloc[sort_idx].head()
arg_sort
Зображення автора

 

Cat Accessor

Панди дозволяють вбудовані функції python для дат і рядків за допомогою засобів доступу, таких як str або dt.

>>> diamonds.dtypes карат float64 категорія вирізання колір категорія чіткість категорія глибина float64 таблиця float64 ціна int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Можна використовувати багато спеціальних функцій, використовуючи cat accessor для категорійних стовпців. Він має такі функції, як категорії для пошуку унікальних, rename_categories для перейменування функцій.

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

Перегляньте це, щоб отримати додатковий список функцій у розділі котячий аксесуар.

Вичавлювати

Стискання – це функція, яка використовується в рідкісних, але обтяжливих обставинах.

Коли з умови, що використовується для підмножини DataFrame, повертається одне значення, це один із таких випадків. Розглянемо такий сценарій:

підмножина = diamonds.loc[diamonds.index >> підмножина
price

Навіть якщо є лише одна комірка, поверніть DataFrame. Це незручно, оскільки для отримання ціни тепер потрібно використовувати файл loc як із назвою стовпця, так і з індексом.

Вам не потрібно, якщо ви вмієте віджиматися. За допомогою цієї функції вісь можна видалити з одноклітинного DataFrame або Series. Розглянемо такий сценарій:

>>> subset.squeeze() 326

Можна вказати вісь для видалення. Зараз він повернув лише скаляр.

>>> subset.squeeze("columns") # або "rows" 0 326 Ім'я: price, dtype: int64

Зауважте, що ця функція працює лише для Series або DataFrame з окремими значеннями.

Excel_writer

Це загальний клас для створення файлів Excel і запису в них DataFrame. Розглянемо, ми маємо ці два набори даних.

# Завантажити два набори даних diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Записати в той самий файл Excel за допомогою pd.ExcelWriter("data/data.xlsx") як записувача: diamonds.to_excel (writer, sheet_name="діаманти") tips.to_excel(writer, sheet_name="підказки")

Він має властивості для визначення формату DateTime для використання, чи потрібен вам новий файл чи зміна існуючого, що станеться, якщо аркуш існує. Перевір це документація для більш докладної інформації.

Висновок

Це не вичерпний огляд панд, а документація містить більше інформації про код і функції. Я рекомендую вам поекспериментувати з різними варіантами наведених тут фрагментів коду, а також різними параметрами. Зробивши це, можна повністю зрозуміти силу панд.

Такі бібліотеки, як Dask і datatable, поступово витісняють Pandas своїми яскравими новими функціями для обробки великих наборів даних, Pandas залишається найбільш широко використовуваним інструментом обробки даних у спільноті Python Data Science. Завдяки тому, наскільки добре вона вписується в поточний стек SciPy, бібліотека служить парадигмою для інших пакетів, які слід створювати та створювати.

Сподіваюся, ця публікація була для вас змістовною, і дякую за прочитання.

Носії, показані в цій статті, не належать Analytics Vidhya і використовуються на розсуд автора.

Джерело: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Часова мітка:

Більше від Аналітика Vidhya