Pandas — это основная библиотека для работы с данными. Вот несколько приёмов, которые я использую, чтобы быстрее и проще выполнять повторяющиеся задачи по работе с данными.
Данная статья переведена с английского с адаптациями в рамках курса Тренажер-практикум Python и SQL для ML и анализа данных
Анализ выборок фреймов данных с помощью df.groupby().__iter__()
Обычно в блокноте Jupyter сложно изучать набор данных построчно или по группам, в отличие от того, что можно сделать в Excel. Один из полезных приёмов — использовать генератор и Ctrl + Enter вместо Shift + Enter, чтобы итеративно просматривать разные выборки в одной ячейке, не создавая беспорядка в блокноте.
Сначала создайте ячейку с генератором с помощью .groupby() (или .iterrows()) и добавьте .__iter__():
![](https://habrastorage.org/getpro/habr/upload_files/2c8/f1d/30f/2c8f1d30fed059915436caa695269547.jpeg)
Затем запустите следующую ячейку столько раз, сколько захотите, чтобы увидеть наиболее важные для вас данные, используя сочетание клавиш Ctrl + Enter:
![](https://habrastorage.org/getpro/habr/upload_files/89d/3da/79e/89d3da79e2a364e74ae350465af8c7ae.jpeg)
Вот пример анализа пассажиров «Титаника», у которых был один и тот же номер билета. У вас нет возможности изолировать каждую группу пассажиров по отдельности, поэтому этот метод позволяет очень просто анализировать одну группу за другой:
![Изучение пассажиров с одинаковым номером «Билета» в наборе данных «Титаник» с помощью df.groupby().__iter__() и сочетания клавиш Ctrl + Enter. Изучение пассажиров с одинаковым номером «Билета» в наборе данных «Титаник» с помощью df.groupby().__iter__() и сочетания клавиш Ctrl + Enter.](https://habrastorage.org/getpro/habr/upload_files/371/484/2e5/3714842e5fe8ebcad01c53b57f5a1e5c.gif)
Pandas Profiling для исследования данных и оценки качества данных
Как это часто бывает в науке о данных, мы склонны писать код для изучения данных с нуля. Поскольку все наборы данных разные, в этом есть смысл. Однако существует волшебный пакет pandas_profiling, который делает эти рассуждения бессмысленными. Пакет фактически автоматизирует этапы изучения данных и оценки их качества! Взгляните:
![](https://habrastorage.org/getpro/habr/upload_files/963/d19/34a/963d1934aa923bf844db3e9b65158657.gif)
![Нажмите «Предупреждения», чтобы оценить качество ваших данных. Нажмите «Предупреждения», чтобы оценить качество ваших данных.](https://habrastorage.org/getpro/habr/upload_files/71f/665/64c/71f66564c83a822a7764f71edf0f33ed.jpeg)
![Анализ корреляции Pandas Profiling. Можно выбрать между 5–6 мерами корреляции. Анализ корреляции Pandas Profiling. Можно выбрать между 5–6 мерами корреляции.](https://habrastorage.org/getpro/habr/upload_files/386/c44/5f4/386c445f4ba59d6987c4524f428cb479.jpeg)
Это работает как по волшебству!
Очевидно, что это не решает все исследования данных, например, если у вас есть свободные текстовые переменные в ваших данных. Но это должно быть способом, которым вы начинаете анализировать любой набор данных.
Множественная цепочка
Работать с Pandas становится по-настоящему интересно, когда вы понимаете, что можете комбинировать несколько операций с помощью метода цепочек. Цепочки — это, по сути, добавление операций в одну «строку» кода.
добавление нового столбца в мой набор данных (.merge)
подсчет доли пассажиров женского пола (.apply(female_proportion))
для групп, состоящих более чем из 1 пассажира (df.Ticket.value_counts()>1)
имея тот же номер билета (.groupby(‘Билет’)).
![](https://habrastorage.org/getpro/habr/upload_files/be2/56b/ff7/be256bff716a331816cb61ee66d9c7b8.jpeg)
И мне не пришлось создавать новые фреймы данных, новые переменные, ничего нового. Метод цепочек позволяет «преобразовывать» ваши мысли в реальные операции.
Построение графиков коэффициентов / важности объектов в стиле
Если вы занимаетесь машинным обучением, то знаете, как сложно объяснить свою модель машинного обучения простыми словами. Один из способов помочь в этом — наглядно представить коэффициенты или важность переменных в вашей модели.
![Вы можете взять коэффициенты (или значения важности переменных) и поместить их в фрейм данных, чтобы визуализировать их. Вы можете взять коэффициенты (или значения важности переменных) и поместить их в фрейм данных, чтобы визуализировать их.](https://habrastorage.org/getpro/habr/upload_files/05b/f2a/add/05bf2aadd92bd999a0d05fffefeb0e65.jpeg)
Я собрал код из нескольких источников, чтобы получить следующую визуализацию, которую я постоянно использую (и не изобретаю велосипед):
![](https://habrastorage.org/getpro/habr/upload_files/92c/433/ede/92c433ede500cba136cac00af23f0f74.jpeg)
Который дает следующий результат:
![Переменные ранжируются в соответствии с коэффициентом (или важностью переменной), а цветная полоса позволяет нам быстро определить наиболее важные переменные. Здесь столбец «Pclass» имеет самый большой (отрицательный) коэффициент, который в два раза больше второго по величине коэффициента по абсолютному значению: «Embarked_Q». Переменные ранжируются в соответствии с коэффициентом (или важностью переменной), а цветная полоса позволяет нам быстро определить наиболее важные переменные. Здесь столбец «Pclass» имеет самый большой (отрицательный) коэффициент, который в два раза больше второго по величине коэффициента по абсолютному значению: «Embarked_Q».](https://habrastorage.org/getpro/habr/upload_files/2f6/8b0/ea0/2f68b0ea02080a384cc2db12b683ca1e.jpeg)
Довольно аккуратно, не правда ли?
sklearn_pandas
Если вы сторонник pandas, то наверняка не раз задумывались о том, что работа с pandas DataFrame и sklearn не всегда является оптимальным решением. Но не останавливайтесь на этом. Несколько заинтересованных разработчиков создали sklearn_pandas — связующее звено между двумя пакетами. Он заменяет ColumnTransformer из sklearn на DataFrameMapper, дружественный к pandas. В последнее время я использую только sklearn_pandas и не разочарован. Жаль, что я не знал об этом раньше.
![](https://habrastorage.org/getpro/habr/upload_files/8f1/37c/bf6/8f137cbf6d043383c3b02b6431980ebc.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/d0a/8ce/93c/d0a8ce93c32073ca95f493f05db86f23.jpeg)
Вот пример вывода после использования метода .fit():
![](https://habrastorage.org/getpro/habr/upload_files/052/8cd/bcf/0528cdbcf3ee3e19497734f19aa6d742.jpeg)
tqdm
При работе с большими наборами данных обработка данных займёт некоторое время. Вместо того чтобы сидеть с унылым видом перед ноутбуком Jupyter Notebook и не знать, что происходит, используйте tqdm, чтобы отслеживать, выполняется ли ваш код и сколько времени это занимает. Это также хороший способ досрочно завершить работу скрипта, который выполняется слишком медленно.
![](https://habrastorage.org/getpro/habr/upload_files/563/9b3/14c/5639b314c5ba459a0b8ff099763c13de.jpeg)
Теперь у всех фреймов данных pandas появились новые методы:
.progress_apply, .progress_applymap
.progress_map для столбцов
![](https://habrastorage.org/getpro/habr/upload_files/27e/64a/b7e/27e64ab7e478dd2fc4f540ffbd6cc2c2.jpeg)
Они работают так же, как apply, applymap и map, с той разницей, что они отображают индикатор выполнения. Как удобно!
![Пример индикатора выполнения, созданного методом tqdm pandas. Пример индикатора выполнения, созданного методом tqdm pandas.](https://habrastorage.org/getpro/habr/upload_files/cc7/082/937/cc708293780bf4626a28514e597dc726.gif)
the.to_clipboard() для вставки в Excel
Будучи активным пользователем Excel, я научился создавать красивые графики и форматировать их, чтобы наглядно отображать данные. Несмотря на то, что в pandas есть множество опций, бывает сложно добиться такого же уровня результатов с минимальным количеством кода.
В конечном итоге я многое сделал, чтобы справиться с этим - экспортировал свои результаты в Excel. Но не используя метод .to_excel . Вместо этого я использую smoother .to_clipboard(index=False), который копирует данные в буфер обмена. Затем я использую Ctrl + V в Excel, чтобы вставить данные в мою текущую электронную таблицу. И вот, пожалуйста, вы можете выпустить на волю зверя Excel, который сидит внутри вас.
Одна вещь, о которой многие специалисты по обработке данных склонны забывать — это то, что специалисты, не работающие с данными, как правило, хорошо разбираются в Excel. Им проще предоставить файл Excel, чем блокнот или блокнот, экспортированный в виде HTML-файла.
Данная статья переведена с английского с адаптациями в рамках курса Тренажер-практикум Python и SQL для ML и анализа данных
Спасибо, что читаете :)
Комментарии (4)
Direvius
15.11.2024 12:04Ну раз chaining, то вот так.
female_proportion = ( df .groupby("Ticket")[["Sex"]] .value_counts() .to_frame() .unstack() .fillna(0)["count"] .apply(lambda r: r["female"] / sum(r) if sum(r) > 1 else None, axis=1) .to_frame(name='proportion_female') ) df2 = df.merge( female_proportion, how='left', on='Ticket' )
CrazyElf
15.11.2024 12:04tqdm лучше импортировать универсально:
from tqdm.auto import tqdm
Он тогда сам разберётся - в ноутбук его импортируют или в простой скрипт. И выберет лучшую реализацию для данной среды.
ayteayoga
Добавил в закладки, пробежал взглядом - много интересного, потом прочитаю, спасибо за статью