Напишите пакет Python для общих задач науки о данных.
Большая часть кода в науке о данных и мире машинного обучения, как правило, линейна и написана в блокнотах Jupyter. Хотя блокноты — отличный способ начать работу, они не подходят для написания модульного кода. В вашем рабочем процессе Data Science есть много задач, которые вы, возможно, захотите выполнять снова и снова. Вы должны написать функции для этих задач и сгруппировать функции, которые выполняют аналогичные задачи в пакете. Таким образом, вы можете использовать эти пакеты из одного проекта в другой. В этой статье мы рассмотрим пакет, который содержит функции для заполнения пропущенных значений и стандартизации имен всех столбцов в нижнем регистре. Это повторяемые задачи, которые можно настроить как функции в пакете предварительной обработки.
Первый шаг — настроить каталог пакетов. Есть 2 способа сделать это:
- Настройте собственный каталог базовых пакетов. В нем должны быть две вещи: файл __init__.py и скрипт. Этот каталог пакетов представляет собой локальный модуль, который вы можете скопировать и вставить в каждый проект, а затем импортировать и использовать.
- Используйте формочки для печенья, чтобы создать шаблон проекта с инструментами настройки. Вы можете установить это на уровень среды, а затем импортировать как numpy или pandas. При использовании пакета cookiecutter и шаблона автоматически создается шаблон пакета с важными шаблонами файлов, такими как файл readme и файл установки. Вы можете заполнить эти шаблоны до требуемого уровня детализации.
Часть 1. Написание базового пакета
Чтобы написать базовый пакет, вам нужно создать папку с именем вашего пакета. В этой папке вам нужен файл __init__.py. Этот файл сообщает python, что этот каталог является пакетом. Обычно это пустой файл. Вам также нужно будет создать файл с вашими функциями.
Файл __init__.py и файл с кодом предварительной обработки с именем pre1 хранятся в папке модуля с именем preprocessing.
Файл pre1 содержит функции для стандартизации заголовков столбцов фрейма данных и заполнения отсутствующих значений. Функции являются общими и могут принимать любой фрейм данных в качестве входных данных. См. приведенный ниже код и некоторые примечания:
- Нам нужны и numpy, и pandas, поэтому мы импортировали их вверху файла pre1.
- Ниже мы написали наши функции. Хорошей практикой является использование строк документации с тройными кавычками для каждой функции. Стандартная строка документации содержит
- Краткое описание функции
- Параметры, какие параметры принимает функция
- Возвращает, какой тип значения возвращает функция
import numpy as np import pandas as pd def low_case_columns(df): """Function to standardize column headers to lower case Parameters ---------- df : pandas dataframe pandas data frame for which you need lower case columns Returns ------- df: pandas data frame dataframe with transformed column headers to lower case """ df.columns = df.columns.str.lower() return df def impute_numeric_values(df,method=np.mean): """Takes a data frame and imputes missing values for the all the numeric columns Parameters ---------- df : pandas dataframe data frame with missing values method : func, optional method used to impute missing values, by default np.mean Returns ------- df : pandas data frame dataframe with missing values imputed """ num_cols=df.select_dtypes(include=['int','float']).columns for col in num_cols: df[col] = df[col].fillna(value=np.mean(df[col])) return(df) def impute_object_columns(df): """Takes a dataframe and imputes using mode for object columns with nan Parameters ---------- df : pandas dataframe Dataframe with missing values """ obj_cols=df.select_dtypes(include='object').columns for col in obj_cols: df[col] = df[col].fillna(value = df[col].value_counts()[0])
Теперь мы можем использовать этот пакет. Единственное предостережение заключается в том, что ваш скрипт должен находиться в том же каталоге, что и каталог пакета. В противном случае вы получите ошибку импорта.
Мы импортируем модуль pre1 из предварительной обработки, используя запись через точку, как показано в строке 1 выше. Затем мы можем получить доступ к функциям в модуле pre1. Поскольку это общие функции для любого фрейма данных, мы использовали их на игрушечном фрейме данных, который мы определили во второй строке кода. Здесь мы видим, что функции low_case_columns и impute_numeric_values работают как положено.
В этом случае мы создали пакет с некоторыми функциями общего пользования и использовали его в локальной папке. Во второй части мы увидим, как установить пакет в нашей среде.
Часть 2. Написание пакета на уровне среды
В этом случае мы используем формочку для печенья и ссылку на шаблон пакета. Затем резак для печенья задает ряд вопросов и создает папку шаблона пакета. В этой папке у вас будет набор файлов шаблонов и папка с кодом.
- Установите резак для печенья с помощью pip
pip install cookiecutter
2.Используйтеcookiecutter вместе со ссылкой на шаблон пакета. В этом случае мы используем шаблон Oldani и отвечаем на вопросы.
– Передовой опыт использования pytest
– Всегда используйте номер версии
– Укажите название проекта и слаг
(plotly) C:\Users\gaura>cookiecutter https://github.com/oldani/cookiecutter-simple-pypackage full_name [Ordanis Sanchez]: Gaurang Mehra email [[email protected]]: [email protected] github_username [oldani]: gmehra123 project_name [Python Boilerplate]: preprocess project_slug [preprocess]: preprocess project_short_description: pypi_username [gmehra123]: version [0.1.0]: 0.1.0 use_pytest [n]: y use_pypi_deployment_with_travis [y]: n add_pyup_badge [n]: n Select command_line_interface: 1 - Click 2 - No command-line interface Choose from 1, 2 [1]: 1 create_author_file [y]: y Select open_source_license: 1 - MIT license 2 - BSD license 3 - ISC license 4 - Apache Software License 2.0 5 - GNU General Public License v3 6 - Not open source Choose from 1, 2, 3, 4, 5, 6 [1]:5
3. Теперь переходим в папку предварительной обработки. В этой папке есть файл readme, который является шаблоном. Вы можете заполнить этот файл шаблона readme. У него также есть файл лицензии с информацией о лицензии, которую вы предоставили на предыдущем шаге.
4. Теперь мы идем в папку предварительной обработки и переходим к файлу с пометкой preprocess. затем мы копируем наш скрипт с функциями в этот файл
5. Скопируйте и вставьте функции сценария в файл шаблона.
6. Теперь перейдите в папку и установите с помощью pip. Используйте параметр -e, чтобы установить пакет в редактируемом режиме.
(plotly) C:\Users\gaura>cd preprocess (plotly) C:\Users\gaura\preprocess>pip install -e.
Теперь пакет установлен на уровне среды. Проверьте в списке пакетов вашей среды. Вы должны увидеть пакет в списке пакетов вашей среды (см. рис. 1.6 ниже). Вы также можете создать тестовую записную книжку вне папки, импортировать пакет и протестировать (см. рис. 1.7 ниже).