Напишите пакет 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. Написание пакета на уровне среды

В этом случае мы используем формочку для печенья и ссылку на шаблон пакета. Затем резак для печенья задает ряд вопросов и создает папку шаблона пакета. В этой папке у вас будет набор файлов шаблонов и папка с кодом.

  1. Установите резак для печенья с помощью 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 ниже).