
Советы и рекомендации, особенно в программировании, могут быть очень полезны. Маленький шоткат, аддон или хак может сэкономить кучу времени и серьёзно увеличить производительность. Я собрала свои самые любимые и сделала из них эту статью. Какие-то из советов ниже уже известны многим, а какие-то появились совсем недавно. Так или иначе, я уверена, они точно не будут лишними, когда вы в очередной раз приступите к проекту по анализу данных.
1. Профилирование Pandas Dataframe
Профилирование помогает лучше понять наши данные, и пакет Pandas Profiling создан как раз для этого. Библиотека даст возможность просто и быстро выполнить разведочный анализ Pandas Dataframe. Обычно в таких случаях в качестве первого шага используются функции df.describe() и df.info(), но они сообщают мало и плохо справляются с большими наборами данных. Одна строка кода с использованием Pandas Profiling, напротив, выведет много информации в интерактивном HTML-отчете.
Вот что вычисляется для заданного набора данных:

Установка
pip install pandas-profiling
или
conda install -c anaconda pandas-profiling
Использование
Давайте используем набор данных о пассажирах Титаника, чтобы продемонстрировать возможности профайлера.
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
df = pd.read_csv('titanic/train.csv')
pandas_profiling.ProfileReport(df)
Это всё что нужно для вывода результатов профилирования. Отчёт изобилует деталями, включая, где это необходимо, диаграммы.

Отчёт можно экспортировать в интерактивный HTML файл:
profile = pandas_profiling.ProfileReport(df)
profile.to_file(outputfile="Titanic data profiling.html")

Кликните здесь, чтобы посмотреть вживую.
(папка с примерами — прим. перев.)
2. Делаем графики Pandas интерактивными
У класса DataFrame в Pandas есть встроенная функция .plot(). Однако визуализация создаваемая с её помощью, не является интерактивной, что хотелось бы усовершенствовать. С другой стороны, отказываться от простоты использования функции тоже не хочется. Что если бы мы могли сделать графики Pandas интерактивными, практически не внося изменений в код? Именно это возможно с библиотекой Cufflinks.
Cufflinks связывает силу plotly с гибкостью Pandas для построения интерактивных графиков. Давайте посмотрим, как можно установить библиотеку и заставить её работать с Pandas.
Установка
pip install plotly # Plotly должен быть установлен до Cufflinks
pip install cufflinks
Использование
# импортируем Pandas
import pandas as pd
#импортируем plotly и cufflinks в оффлайн режиме
import cufflinks as cf
import plotly.offline
cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)
Время увидеть всю мощь инструмента на данных о пассажирах Титаника.
df.iplot()


Визуализация снизу показывает статическую диаграмму, в то время как верхняя диаграмма является интерактивной и более подробной, и всё это без каких-либо существенных изменений в синтаксисе.
Здесь можно посмотреть больше примеров.
3. Немного магии
Magic commands — это набор удобных функций в ноутбуках Jupyter, предназначенных для решения распространенных задач стандартного анализа данных. Вы можете посмотреть все доступные функции с помощью %lsmagic.

Магические команды бывают двух видов: line magics, которые начинаются с единственного символа % и работают на одной строке; и cell magics, которые ассоциированы с двойным %% и работают на нескольких строках.
Давайте рассмотрим те из них, которые полезны в общих задачах анализа данных:
- %pastebin
%pastebin загружает код в Pastebin и возвращает урл. Pastebin — это сайт, где мы можем сохранить обычный текст, например фрагмент исходного кода, чтобы затем передать ссылку на него другим. Фактически, GitHub Gist сродни Pastebin, хотя и с контролем версий.
Рассмотрим такой скрипт:
# file.py
def foo(x):
return x
Использование %pastebin в Jupyter Notebook создаст урл на Pastebin.

- %matplotlib notebook
Команда %matplotlib inline используется для визуализации статических графиков matplotlib в Jupyter Notebook. Замените inline на notebook, чтобы получить масштабируемые и изменяемые диаграммы. Только убедитесь, что команда добавлена перед импортом matplotlib.

- %run
Команда %run запускает скрипт внутри Jupyter Notebook.
%run file.py
- %%writefile
%%writefile записывает содержимое ячейки в файл. Код ниже будет записан в файл с именем foo.py и сохранён в текущем каталоге.

- %%latex
Функция %%latex отображает содержимое ячейки как LaTeX. Это полезно для написания математических формул и уравнений в ячейке.

4. Поиск и устранение ошибок
Интерактивный отладчик также является магической командой, но я дала ему собственную категорию. Если при запуске ячейки с кодом возникает исключение, введите на новой строке команду %debug и выполните её. Откроется интерактивная среда отладки, которая покажет место, где возникло исключение. Вы сможете проверять значения переменных и выполнять различные операции. Для выхода из отладчика нажмите клавишу q.

5. Вывод может быть красивым
Если вы хотите, чтобы ваши структуры данных выводились красиво, то pprint — ваш выбор. Это особенно полезно при печати словарей или данных JSON. Давайте рассмотрим код, который использует как print, так и pprint для вывода.


6. Выделение заметок
Мы можем использовать алерты в наших Jupyter Notebooks, чтобы выделять что-то важное. Цвет будет зависеть от типа алерта. Просто добавьте любой или все из следующих кодов в ячейку, которую хотите выделить.
- Синий алерт: информация
<div class="alert alert-block alert-info">
<b>Tip:</b> Use blue boxes (alert-info) for tips and notes.
If it’s a note, you don’t have to include the word “Note”.
</div>

- Жёлтый алерт: Предупреждение
<div class="alert alert-block alert-warning">
<b>Example:</b> Yellow Boxes are generally used to include additional examples or mathematical formulas.
</div>

- Зелёный алерт: Успех
<div class="alert alert-block alert-success">
Use green box only when necessary like to display links to related content.
</div>

- Красный алерт: Опасность
<div class="alert alert-block alert-danger">
It is good to avoid red boxes but can be used to alert users to not delete some important part of code etc.
</div>

7. Печать каждого вывода в ячейке
Рассмотрим ячейку Jupyter Notebook, содержащую такой код:
In [1]: 10+5
11+6
Out [1]: 17
Это нормальное свойство ячейки, что печатается только последний вывод, а для других нам нужно добавить функцию print(). Что ж, оказывается, мы можем распечатать все выводы, добавив сверху следующий фрагмент:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Теперь все выводы печатаются один за другим.
In [1]: 10+5
11+6
12+7
Out [1]: 15
Out [1]: 17
Out [1]: 19
Чтобы вернуться к исходной настройке:
InteractiveShell.ast_node_interactivity = "last_expr"
8. Запуск скриптов на Python с опцией '-i'.
Типичный способ запуска скрипта на Python из командной строки: python hello.py. Однако, если вы добавите параметр -i, т.е. вызовите python -i hello.py то получите гораздо больше. Посмотрим, что же именно.
- Во-первых, как только конец программы достигнут, Python теперь не выходит из интерпретатора. Таким образом, мы можем проверить значения переменных и правильность функций, определенных в нашей программе.

- Во-вторых, так как мы всё ещё находимся в интерпретаторе, мы можем легко вызвать отладчик питона:
import pdb
pdb.pm()
Это приведёт нас к месту, где произошло исключение, и мы сможем продолжить работу над кодом.
Оригинальный источник фичи.
9. Автоматическое (рас)комментирование кода
Ctrl/Cmd + / автоматически комментирует выделенные строки в ячейке. Повторное нажатие комбинации раскомментирует те же строки.
(Это, кстати, верно и для других редакторов типа Pycharm или Sublime Text — прим. перев.)

10. Отмена случайных действий
Вы когда-нибудь случайно удаляли ячейку Jupyter Notebook? Если да, то вот шоткаты, которые отменят это действие.
- В случае, если вы удалили содержимое внутри ячейки, вы можете легко восстановить его, нажав CTRL/CMD+Z
- Если вам нужно восстановить саму удаленную ячейку — ESC+Z или EDIT > Undo Delete Cells

Вывод
В этой статье я перечислила основные советы, которые помогают мне при работе с Python и Jupyter Notebooks. Надеюсь, они помогут и вам. Счастливого кодинга!
Комментарии (4)
v_m_smith
26.06.2019 13:45Лозунг сайта Proglib: «Мастера рерайтинга — это мы!»
proglib.io/p/analysis-hacks/amp
superstarstas306
1 и 2 вообще супер для первичного EDA, спасибо!
CrazyElf
Но нужно иметь в виду, что на датафрейме с множеством сложных фич Pandas Profiling может сильно тормозить и в процессе обработки и при отображении потом всего этого добра ноутбук тоже может сильно тормозить.
superstarstas306
Согласен, но если уж на то пошло — прожёвывать большой и сложный датафрейм на ноутбуке — моветон :)