Для тех, кто хочет начать работу с анализом данных в Python
В этой статье будут представлены Jupyter Notebook и Jupyter Lab (совместно называемые Jupyter), очень надежные инструменты для анализа данных в Python.
Jupyter уже широко используется в мире науки о данных, но я хотел бы показать его преимущества с помощью демонстрации.
Предположения
В этой статье я анализирую данные при следующих условиях.
- Анализируйте табличные данные, а не неструктурированные данные, такие как изображения и тексты.
- Анализируйте данные нескольких ГБ или десятков тысяч записей, а не данные нескольких ТБ или сотен миллионов записей
- Проводите предварительный анализ, а не рутинный анализ
Что не написано
Следующие пункты не рассматриваются в этой статье. Если вы хотите использовать Jupyter после прочтения этой статьи, обратитесь к другим веб-сайтам или книгам.
- Как создать среду Jupyter Notebook и Jupyter Lab
- Основные операции Jupyter Notebook и Jupyter Lab
- Как использовать структуры данных и методы pandas
Какой трудоемкий процесс анализа данных!
Исследовательский анализ данных занимает много времени. Я думаю, это потому, что это требует тысяч проб и ошибок. В обычной разработке метод проб и ошибок часто означает исправление ошибки в коде или изменение алгоритма. Однако с точки зрения данных существует гораздо больше проб и ошибок, когда дело доходит до анализа данных. Вы должны смотреть на данные с разных сторон, проверять качество данных и даже изменять код, когда понимаете, что определение данных, которое вы услышали от бизнес-отдела, отличается…
Поэтому при исследовательском анализе данных важно иметь возможность проводить пробы и ошибки как можно быстрее.
Вам также необходимо сообщить о результатах исследовательского анализа данных своему начальнику или клиентам. Из-за характера представления результатов анализа отчет (PowerPoint и т. д.) будет содержать множество таблиц и графиков, что является неожиданно сложной и трудоемкой задачей.
Поэтому также важно уметь быстро составлять таблицы и графики.
Два преимущества Jupyter
Отнимающая много времени проблема исследовательского анализа данных, но Jupyter может смягчить эту проблему. Например, он имеет следующие преимущества.
- Быстрая итерация методом проб и ошибок
— Вы можете получать результаты выполнения для каждой строки (каждой ячейки)
— Переменные сохраняются во время работы Jupyter, поэтому их можно использовать несколько раз - Легко увидеть результаты выполнения
— Табличные данные легко читать
— Графики печатаются прямо под кодом
Я хотел бы продемонстрировать эти преимущества с помощью демонстрации.
Демонстрация с данными об аренде квартир
Я буду использовать данные о съемных квартирах в Тюо-ку, Токио, которые я получил от SUUMO (японский веб-сайт по аренде квартир), чтобы продемонстрировать преимущества Jupyter(*1). Мне нравится Jupyter Lab, поэтому я буду использовать его для этой демонстрации.
Целью исследования данных является визуализация распределения арендной платы за аренду квартир.
Во-первых, нам нужно импортировать pandas и загрузить данные. Если ошибка кодировки возникает из-за японских символов или символов Windows, передайте encoding=’CP932’ в качестве аргумента.
# Load the library import pandas as pd # Read in the data apart = pd.read_csv('apartments_20210410_chuo.csv')
Когда данные будут прочитаны, используйте метод head() для отображения и проверки данных. Этот метод head() настолько хорош, что вы можете легко и четко видеть табличные данные. На мой взгляд, скриншот этой таблицы можно использовать для отчетов. (Конечно, это зависит от того, кому вы отчитываетесь. Если вы работаете с внешним клиентом, лучше экспортировать в файл CSV и использовать таблицу PowerPoint.)
# Display the data apart.head()
Вывод по умолчанию составляет 5 строк, но вы можете изменить количество строк вывода, передав число в качестве аргумента. В моем использовании я использую 5 строк (по умолчанию), когда я хочу увидеть столбцы и значения данных, 1 строку, когда я хочу сохранить данные, чтобы увидеть их позже, и 100 строк, когда я хочу увидеть сами данные.
Цель этой демонстрации — визуализировать арендную плату. Арендная плата представлена в форме «10 万円», которая содержит кандзи, поэтому нам нужно опустить эти символы и преобразовать их в число типа int.
Мы объединим лямбда-выражение с функцией карты, чтобы исправить столбец арендной платы. Одним из преимуществ Jupyter является то, что вы можете выполнять итерации таким образом, думая и выполняя процессы на лету. (Это может быть хорошим замечанием об интерактивной среде, а не о Jupyter…)
# Erase '円' # If there is '万', remove it and multiply by 10000 apart[‘rent_yen’] = list(map(lambda x: x.replace(‘円’, ‘’), apart.rent)) apart[‘rent_yen’] = list(map(lambda x: float(x.replace(‘万’, ‘’))*10000 if ‘万’ in x else x, apart.rent_yen)) apart[‘rent_yen’] = apart[‘rent_yen’].astype(‘int’)
В пандах есть функция apply(), которая может делать то же самое, что и map(), но я рекомендую использовать map() за его скорость. Однако map() может одновременно обрабатывать только один столбец DataFrame, поэтому, если вам нужно одновременно обрабатывать значения из нескольких столбцов в одной строке, используйте применить().
Кстати, когда вы снимаете квартиру в Японии, вы обычно подписываете контракт на два года. также требуются плата за кондоминиум и чаевые. Для более точного расчета всей стоимости попробуем рассчитать стоимость за два года. В частности, мы рассчитаем сумму двухлетней арендной платы (24 месяца) плюс два года платы за кондоминиум (24 месяца) плюс чаевые.
# Erase ‘円’ # If there is ‘万’, remove it and multiply by 10000 apart[‘condo_fee_yen’] = list(map(lambda x: x.replace(‘円’, ‘’), apart.condo_fee)) apart[‘condo_fee_yen’] = list(map(lambda x: float(x.replace(‘万’, ‘’))*10000 if ‘万’ in x else x, apart.condo_fee_yen)) apart[‘condo_fee_yen’] = apart[‘condo_fee_yen’].astype(‘int’)
Мы конвертируем плату за кондоминиум в иены так же, как и арендную плату.
Но когда мы применили ту же функцию, мы получаем ошибку. Кажется, его нельзя было преобразовать в числовой тип, потому что был дефис.
Проверяем данные и видим, что дефис указывает на то, что плата кондоминиума бесплатна.
Даже если возникают ошибки, сам Jupyter продолжает работать. Таким образом, вычисленные и загруженные переменные и библиотеки остаются в силе, поэтому мы можем повторить попытку. Это еще одно преимущество Jupyter.
Мы создадим функцию для обработки дефисов, но писать ее как лямбда-функцию слишком сложно, поэтому мы напишем ее как метод.
def extract_jpy(x): “”” — Erase ‘円’ — hyphen is replaced by 0 — If there is ‘万’, remove it and multiply by 10000 — convert into integer “”” x = x.replace(‘円’, ‘’) x = x.replace(‘-’, ‘0’) if ‘万’ in x: x = x.replace(‘万’, ‘’) x = float(x)*10000 return int(x) apart[‘condo_fee_yen’] = list(map(extract_jpy, apart.condo_fee))
Похоже, мы успешно преобразовали плату за кондоминиум в число.
Теперь мы можем сделать то же самое для чаевых.
apart[‘gratuity_yen’] = list(map(extract_jpy, apart.gratuity))
Поскольку здесь мы выполняем ту же обработку, что и для расходов на кондоминиум, мы можем скопировать ячейки и использовать их. В Jupyter есть несколько полезных сочетаний клавиш, которые можно использовать для быстрых операций. В частности, я часто использую c: скопировать ячейку, x: вырезать ячейку, v: вставить ячейку, z: отменить операцию с ячейкой, a: добавить новую ячейку выше, b: добавить новую ячейку ниже. Я также рекомендую использовать ESC: перейти в режим работы с ячейкой и Enter: перейти в режим ввода кода, так как они ускорят вашу работу.
Мы видим, что три созданных нами столбца хорошо обработаны.
apart.head()
Похоже, что «rent_yen», «condo_fee_yen» и «gratuity_yen» хорошо извлекаются в виде числовых значений.
Теперь давайте посчитаем общую стоимость за два года, используя функцию применения pandas.
apart[‘cost_2years’] = apart.apply(lambda x: (x.rent_yen + x.condo_fee_yen)*24 + x.gratuity_yen, axis=1) apart.head()
Похоже, мы успешно подсчитали всю стоимость за два года. Теперь мы готовы визуализировать данные.
Теперь мы будем визуализировать данные. Мы будем использовать сюжет. Это моя любимая библиотека из-за простоты использования и красивой визуализации. В частности, внешний вид великолепен, так что его можно использовать для PowerPoint как есть. (В отличие от seaborn/matplotlib, японский язык по умолчанию не искажен, что тоже приятно.)
# Load the library import plotly.express as px # Visualize fig = px.histogram(apart, x='cost_2years') fig.show()
Гистограмма показывает широкое распределение от 200 тыс. до 23 млн. Квартиры за 20 миллионов иен слишком дороги для меня, поэтому мы отфильтруем порог до 10 миллионов, который покрывает большую часть данных.
fig = px.histogram(apart.query(‘cost_2years <= 10000000’), x=’cost_2years’) fig.show()
Мы видим, что на этом графике есть несколько гор. Распределение может отличаться в зависимости от планировки помещения, поэтому давайте попробуем визуализировать его с помощью цветового кодирования в соответствии с планировкой.
fig = px.histogram(apart.query(‘cost_2years <= 10000000’), x=’cost_2years’, color=’layout’,barmode=’overlay’) fig.show()
Мы видим, что распределение отличается в зависимости от планировки комнаты. Теперь сравним раздачу 1K и 1LDK. Поскольку большая часть данных составляет до 7 миллионов иен, мы будем фильтровать по 7 миллионам.
fig = px.histogram(apart.query(‘cost_2years <= 7000000 and (layout == “1K” or layout == “1LDK”)’), x=’cost_2years’, color=’layout’,barmode=’overlay’) fig.show()
Теперь мы можем визуализировать, что распределение аккуратно разделено на две горы. Это конец анализа в этой демонстрации, но есть много вещей, которые нужно изучить, например, что влияет на распределение цен, помимо планировки помещения.
Таким образом, Jupyter эффективен, когда вы впервые просматриваете данные и не знаете, какие данные, какой тип данных, какой формат данных и какое распределение или работа, которую необходимо выполнить, возникает при изучении данных.
Приложение: Проблемы с Jupyter и способы их решения
Наконец, я хотел бы перечислить некоторые из моих опасений по поводу использования Jupyter и способы их решения. Увеличение технического долга — проблема не только для Jupyter, но и для систем машинного обучения, и я думаю, что еще есть куда совершенствоваться.
- Внешний вид
› В JupyterLab по умолчанию можно выбрать темную тему. - Завершение кода
› Используйте библиотеку для завершения (например, jupyterlab-lsp) - Увеличение технического долга
› Используйте jupytext для создания файлов .py и версии их с помощью git
› При необходимости вырезайте код в файлы py и используйте их в качестве методов
› Напишите документацию
› Напишите тестовый код
*1: Сбор данных с веб-сайтов для анализа данных не нарушает какие-либо законы Японии, если только он не касается личной информации или не создает высокой нагрузки на серверы.