Супер простые примеры Python для основ инженерии данных

Начиная работать с данными?

Моя любовь к данным зародилась в юном возрасте, когда я слушал разговоры родителей об акциях, но по-настоящему она стала популярной около 9 лет назад, когда я впервые открыл для себя SQL. Чтобы научиться лучше анализировать данные, несколько лет назад я присоединился к учебному лагерю по анализу данных, стал лучше программировать и изменил всю свою жизнь. Я почти два года работаю в группе Data Science аналитиком программного обеспечения и до сих пор люблю данные.

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

  • Определяет переменные и типы данных в данных
  • Оценивает недостающие данные
  • Вычисляет категориальную мощность
  • Рассчитать частоту появления меток категории

Получите данные для примера

Примеры в этой статье сделаны в записной книжке Jupyter и используют набор данных Wine Reviews, найденный на kaggle.com. Я использовал этот набор данных в прошлом для составления рекомендаций по винам.

Скачайте winemag-data-130k-v2.csv, если хотите продолжить.



Установите зависимости

Если они еще не установлены в среде Python 3.x, используйте pip для установки pandas и Plotly.

$ pip install pandas
$ pip install plotly

Что такое переменные и почему мне это нужно?

Данные обычно содержат переменные. Во многих ситуациях переменные в наборе данных представляют собой комбинацию числовых или категориальных. Числовые переменные имеют значения, которые являются числами, например 3,14; они могут быть дискретными или непрерывными. Категориальные переменные бывают разных значений и обычно выбираются из набора меток. Например, гендерные ярлыки могут быть Мужской, Женский или Другой. Категориальные переменные могут быть далее разбиты на порядковые или номинальные переменные.

Изучение и преобразование переменных является важным аспектом проектирования данных для машинного обучения, поскольку такие вещи, как выбросы, пропущенные значения и частота категорий, могут иметь большое влияние на производительность модели. Благодаря лучшему пониманию переменных в данных вам будет легче выбирать, какие модели машинного обучения попробовать. Хорошее знание ваших данных также может упростить отладку.

Загрузка данных

Данные Wine поступают в формате значений, разделенных запятыми (CSV), что означает, что их легко загрузить как pandas DataFrame. Если вы новичок в библиотеке pandas, ознакомьтесь с моим вводным руководством:



Начните с импорта панд как pd. Затем используйте read_csv (), чтобы прочитать данные обзоров вин. После загрузки данных проверьте 5 верхних строк с помощью head ().

#import libraries
import pandas as pd
#read data into dataframe
data = pd.read_csv('winemag-data-130k-v2.csv')
#display top 5 rows
data.head()

Определение переменных в данных

Теперь, когда данные загружены, pandas предоставляет удобный способ увидеть типы данных, которые он определил для каждого столбца. Помните, что дискретные переменные обычно имеют тип int, непрерывные переменные обычно относятся к типу с плавающей запятой, а категориальные переменные обычно относятся к типу объекта в пределах фрейма данных. Хотя мы можем угадывать типы данных, просматривая данные, для правильной идентификации типов переменных используйте pandas dtypes.

data.dtypes

Здесь мы видим, что большая часть данных - это тип данных объекта, намекающий на его категоричность. Хотя панды называют их объектами, на самом деле это просто строки текста. Мы можем видеть имена столбцов, такие как регион, провинция и страна, которые, безусловно, являются категориальными переменными. Также обратите внимание, что points - это int64, а price - это float64. Очки дискретны, а цена непрерывна.

Мы можем создать пару быстрых гистограмм с помощью библиотеки Plotly express для визуализации дискретной переменной точек и непрерывной цены переменная:

import plotly.express as px
#create a plotly express histogram with 20 bins
fig = px.histogram(data, x="points", nbins=20)
fig.show()

Plotly - фантастическая графическая библиотека, которая выводит интерактивные визуализации. Очень рекомендую ознакомиться с библиотекой.

#create a plotly express histogram with 400 bins
fig = px.histogram(data, x="price", nbins=400)
fig.show()

Также можно визуализировать категориальные переменные. Используя ту же технику, визуализируется страна:

#create a plotly express histogram with 400 bins
fig = px.histogram(data, x="country")
fig.show()

Количественная оценка отсутствующих данных

Понимание того, сколько данных отсутствует в столбце, может помочь нам решить, что делать с переменными в нем. Например, если столбец в основном состоит из нулей, возможно, имеет смысл отбросить столбец целиком вместо того, чтобы вводить недостающие данные. Кроме того, некоторые алгоритмы машинного обучения не могут работать, когда данные отсутствуют, поэтому нули необходимо удалить или заполнить.

Давайте посчитаем количество пропущенных значений в каждой переменной:

data.isnull().sum()

Не в каждом столбце отсутствуют данные, а в некоторых столбцах отсутствует много данных. Например, в столбце регион_2 отсутствует 79460 записей.

Использование .mean () вместо .sum () позволяет нам определить процент пропущенных значений для каждой переменной.

data.isnull().mean()*100

Использование isnull () по существу создает вектор для каждой переменной, причем каждый вектор указывает, отсутствовало ли значение (True) или нет (False). Это происходит в каждой строке. Затем sum () и mean () работают с логическими векторами и вычисляют метрики, относящиеся к нулевым переменным.

Визуализируйте данные с помощью гистограммы Plotly Express. Визуализация данных упрощает понимание с первого взгляда.

#store the missing value metrics
data_is_null_percents = data.isnull().mean()*100
#bar plot
fig = px.bar(data_is_null_percents, title="Quantifying Missing    Data")
fig.show()

Категориальные переменные и количество элементов

В машинном обучении используются числа, а не текст, поэтому в конечном итоге необходимо будет кодировать метки категориальных переменных. Более пристальный взгляд на категориальные переменные и количество элементов может помочь определить, какой метод лучше всего подходит для кодирования переменных. Например, порядковое или горячее кодирование.

Кардинальность - это просто подсчет уникальных переменных в наборе переменных. Например, ранее в статье я сказал, что метка для пола может включать «Мужской», «Женский» и «Другой». Это означает, что мощность переменной пола равна 3.

Используя метод nuniques () в пандах, мы можем быстро вычислить количество переменных в фрейме данных:

#display the number of unique values per column
data.nunique()

Визуализируйте количество элементов с помощью гистограммы, как в примере с количественной оценкой отсутствующих данных.

fig = px.bar(dataframe.nunique(), title="Cardinality")
fig.show()

Если вы хотите глубже погрузиться в конкретный столбец, используйте метод panda unique (), чтобы вернуть массив значений для указанного столбца. Начните со столбца страна.

#return the unique values in the country column
data['country'].unique()

Рассчитайте частоту страны, используя метод value_counts () и разделив его на общее количество записей в наборе данных. Затем визуализируйте данные с помощью барной тележки.

#calculate the frequency
country_freq = data['country'].value_counts() / len( data) 
print(country_freq)
#visualize the data
fig = px.bar(country_freq, title="Country Frequency")
fig.show()

Собираем все вместе

Знание того, как определять и анализировать переменные в наборе данных, является ключевой частью подготовки данных для машинного обучения и других аналитических задач. Инжиниринг данных - это сложная область с множеством различных инструментов, но pandas и Plotly великолепны, если вы знакомы с Python. Вместо того, чтобы запускать эти биты кода по одному, я рекомендую объединить их все в функцию, чтобы вы могли распечатать и визуализировать все данные сразу.

Передайте фрейм данных в эту функцию, чтобы отобразить типы данных, количественно оценить отсутствующие значения и вычислить количество элементов:

def variables_info(dataframe):
    
    print('data types:')
    print(dataframe.dtypes)
    print(' ')
  
    print('Total null values per column:')
    print(dataframe.isnull().sum())
    print(' ')
   
    print('Percent of column null:')
    print(dataframe.isnull().mean())
    
    data_is_null_percents = data.isnull().mean()*100
    fig1 = px.bar(data_is_null_percents, title="Quantifying Missing Data (Percentages)")
    fig1.show()
    
    print(' ')
    print('Variable cardinality:')
    print(dataframe.nunique())
    
    fig2 = px.bar(dataframe.nunique(), title="Cardinality")
    fig2.show()

Передайте столбец в эту функцию, чтобы отобразить уникальные значения в столбце и визуализировать частоты:

def unique_values(df_column):
    print(f'Unique values for {df_column}:')
    print(data[df_column].unique())
    print(' ')
    print(f'Frequencies of values in column {df_column}:')
    print(' ')
    
    freq = data[df_column].value_counts() / len(data) 
    print(freq)
    fig = px.bar(freq, title=f"{df_column} Frequency")
    fig.show()

Хотите узнать больше об исследовании данных?



Благодарю вас!

- Эрик Клеппен



Больше контента на plainenglish.io