Jupyter-фишки, которые облегчат жизнь аналитику


Если ты работаешь аналитиком или пока еще изучаешь предмет, наверняка, твой основной рабочий инструмент - Jupyter Notebook. И все дело в том, что аналитики используют Python немного по-другому, в отличие от Python-программистов. Конечно, можно делать исследования и в какой-нибудь навороченной IDE, но работа в Jupyter уже давно стала стандартом для аналитиков. А сегодня посмотрим на фишки Jupyter, которые помогут сделать твою работу еще более продуктивной и интересной.


Конечно ты знаешь такие pandas команды для обзора датафрейма, как info и describe. Но что, если можно было бы одной командой узнать гораздо больше информации и причем сразу вывести ее в интерактивном  чарте? 

Pandas profiling

Эта библиотека позволяет выводить расширенную информацию о датафрейме, которую , кстати, можно сохранить в HTML-файл. 

Установка

Устанавливать Pandas profiling советую не через pip, а через conda. Причем, лучше сразу указывать последнюю версию. Мне по умолчанию conda поставила версию 1.4.1, которая, ну совсем, не хотела работать. Поэтому, идем на Github проекта, смотрим на номер последней версии:


 и пишем в терминале такую команду:

conda install pandas-profiling==2.9.0

Далее, подключаем библиотеку и наш датасет:

import pandas as pd
import numpy as np
import pandas_profiling as pp
df = pd.read_csv('SpaceMissions.csv', parse_dates=True))

Запускаем одной командой:

pp.ProfileReport(df)

Pandas profiling покажет все дескриптивные статистики, unique values, missing values, квантили и даже построит корреляционную матрицу.


А сохранить результаты в виде HTML-странички можно такой командой:

pp.ProfileReport(df).to_file('Output.html')

Интерактив в чартах

Устал от скучного и плоского matplotlib ? И даже seaborn не радует?
Пора переходить на более продвинутые библиотеки для визуализации. Одной из таких является Plotly. Это библиотека построена на javascript движке d3.js и поэтому у ее чартов гораздо больше возможностей. Ну а дополнительно к ней я рекомендую поставить плагин Cufflinks, который позволяет запускать чарты одной командой.
Просто теперь вместо df.plot нужно набрать df.iplot

Установка

Пишем в терминале Python:

pip install plotly
pip install cufflinks

Давайте смотрим, что нам может предложить стандартный pandas-plot:

import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.bar()


А теперь сделаем тоже самое. с помощью cufflinks:

cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)
df.iplot(kind='bar')




Подробнее. я рассказывал про библиотеку Plotly в этом посте. А посмотреть на чарты сделанные с помощью cufflinks - здесь
Выше мы рассмотрели сторонние библиотеки, которые устанавливаются в окружение Python. А сейчас перейдем уже непосредственно к самому Jupyter

Магия

В Jupyter есть набор так называемых магических команд, которые делают работу с оболочкой более удобной. Полный список команд можно вывести так:

%lsmagic

Часть команд начинается с одинарного символа %, а часть с двойного %% Первые работают только с однострочными выражениями, а вторые могут применяться, если у вас несколько строк кода для обработки магической командой.
Рассмотрим несколько таких команд.

%pastebin - аплодит выбранную часть кода в сервис Pastebin и возвращает ссылку. Ссылкой потом можно поделиться или расшарить в соцсетях:


В ячейке 18 у меня есть часть когда, тогда я просто пишу %pastebin 18
и код из этой ячейки аплодится на pastebin, а jupyter выдает мне ссылку.
Переходим по ссылке:




%history - команда, которая выводит список введенных ранее команд.
Бывает полезно, если вы удалили ячейки с кодом, но не знаете, как их вернуть (расскажу об этом в конце). Можно задать, чтобы была выведена конкретная ячейка или диапазон ячеек.

%history -n 18

Давайте сделаем комбо из pastebin + history!

%pastebin %history -n 1-7




Выше мы уже говорили про интерактивность в чартах. Наверняка. многие из вас знают такую команду, как %matplotlib inline, позволяющую выводить чарты прямо в ячейки Jupyter. Но у этой команды есть еще и брат-близнец:

%matplotlib notebook

Команда позволяет не только вывести чарт в ячейку, но и добавить некоторые элементы интерактивности: чарт можно зумить, двигать и сохранить в файл.


Но я по сравнению с plotly выглядит все-равно бедновато.


%%writefile - удобная команда, которая позволяет записывать код в файл. Пишем саму команду, затем имя файла, строчками ниже наш код.


Файл сохранится в домашней директории. Ну, а если вам лениво открывать файл и копипастить оттуда код в jupyter, тогда вызываем команду %run, позволяющую выполнить код из внешнего файла:


Оптимизируем вывод

Если вы часто работаете со списками, словарями и прочими JSON-объектами, то следующая фича просто мастхев. Pprint позволяет распечатывать содержимое структур с данными в более удобном и приятном глазу виде. Создадим простой словарь и выведем его содержимое стандартным print:

dict = {"Product":{"0":"Desktop Computer","1":"Tablet","2":"iPhone","3":"Laptop"},"Price":{"0":700,"1":250,"2":800,"3":1200}}
print (dict)



А теперь тоже самое, но с помощью pprint:


Добавим цвета

Если вы часто делитесь ноутбуками и хотите обозначить какую-то часть кода с помощью алерта или заметки, то в Jupyter есть возможность создавать ячейки с цветовыми схемами. Цвет ячейки зависит от типа указанного предупреждения. Просто добавьте любой или все следующие коды в ячейку, которую нужно выделить:


<div class="alert alert-block alert-info">
<b>Совет:</b> Включи режим Markdown для этой ячейки 
</div>


<div class="alert alert-block alert-warning">
<b>Пример:</b>Желтым цветом хорошо помечать примеры или шорткоды
</div>



<div class="alert alert-block alert-success">
Код отработал без сбоев? - Подсвети зеленым!
</div>



<div class="alert alert-block alert-danger">
Сигнал, что произошла какая-то жопа
</div>



Заставляем Jupyter показывать полный вывод результатов.

По умолчанию Jupyter выводит только последний результат группы вычислений. А если хотим видеть все? Можно конечно использовать и команду display. Но есть и другой вариант.
Перед блоком с вычислениями пишем:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

И теперь нам выдаст все результаты:



Чтобы вернуть в исходный режим меняем параметр 
"all" на "last_expr" 

Hotkeys

Напоследок, несколько полезных hotkeys. Если нужно закоментить сразу несколько строк кода, используйте комбинацию CTRL /, предварительно выделив нужные строчки:



Второй важный hotkey - если вы часто используете функции в коде. Написание функции требует задавать табуляцию. Но, что делать, если код был написан plain и теперь вы хотите обернуть его в виде функции? Я раньше ставил tab перед каждой строчкой, пока не узнал волшебный hotkey:

CTRL ] - добавить отступ. CTRL [ - убрать отступ


И, наверное, два самых частых хоткея, который я использую CTRL Z  и Z. Позволяют откатить обратно изменения в коде. Случайно удалили часть кода в ячейке?Используйте CTRL Z и он вернет все обратно. А если удалили всю ячейку? Для такого случая используйте хоткей просто Z
А полный список горячих клавиш можно посмотреть, зайдя в меню Help, или просто вынести курсор из ячейки и нажать H 


Заключение

Сегодня мы изучили несколько полезных приемов при работе с Jupyter Notebook. Пользуйтесь ими и пусть ваш кодинг будет удобным!







Комментарии

Популярные сообщения из этого блога

Быстрый импорт в базу данных с помощью DBeaver

Два способа загрузить свой датасет в Python

5 приемов при работе с модулем datetime в Python

Чистка и препроцессинг данных. Готовим датасет для ML.