5 пакетов Python, без которых специалист по данным не может жить

Вводный обзор

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

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

Следовательно, в этой статье я остановлюсь на 5 основных пакетах, которые сделают ваш Python чрезвычайно универсальным, а именно:

Итак, начнем!

Numpy

Numpy - это пакет для научных вычислений. Он позволяет выполнять любые математические и статистические операции. В частности (и это причина того, почему это фундаментально в машинном обучении), он позволяет очень быстро и легко выполнять N-мерные вычисления. Каждый раз, когда вас просят манипулировать векторами и матрицами, вы знаете, что для этой цели нужно использовать Numpy.

Давайте теперь посмотрим на несколько примеров.

Главный объект Numpy - это однородный многомерный массив, который может выглядеть либо как вектор (если размеры равны n, 1), либо как матрица (если размеры равны n, m). Давайте создадим первый массив, содержащий 1,2,3:

import numpy as np
a=np.array([1,2,3])
a

Output: array([1, 2, 3])

Мы можем проверить некоторые свойства этого массива следующими методами:

a.shape
Output: (3,)

a.dtype
Output: dtype('int32')

type(a)
Output: numpy.ndarray

Мы также можем инициализировать массивы, указав количество компонентов и форму. А именно, если я хочу создать матрицу 3 × 4 с числом от 0 до 11, я напишу:

b=np.arange(12).reshape(3,4)
b

Output: array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

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

list_1=[1,2,3]
list_2=[4,5,6]
list_2-list_1

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-4c6e19f7626c> in <module>
      1 list_1=[1,2,3]
      2 list_2=[4,5,6]
----> 3 list_2-list_1

TypeError: unsupported operand type(s) for -: 'list' and 'list'

Как видите, возникла ошибка, так как нельзя вычесть два списка. Но если вы воспользуетесь этим трюком:

np.asarray(list_2)-np.asarray(list_1)

Output: array([3, 3, 3])

Проблема обойдена!

Панды

Pandas предоставляет структуры данных и инструменты анализа данных, которые необходимы для очистки ваших данных и их использования для задач машинного обучения.

Основными объектами в пандах являются DataFrames, которые представляют собой не что иное, как структурированные наборы данных, которые можно легко изменить и получить к ним доступ. Вы можете создать или импортировать (из Интернета, файлов CSV, текстовых файлов ...) свой фрейм данных.

Давайте создадим его с нуля:

import pandas as pd 

data = [['alex', 10], ['tom', 15], ['jim', 14]] 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
 
df

Мы можем получить доступ к элементам этого df как к матрице:

df[:1] #showing only the first row

df.iloc[:,1] 
Output: 
0    10
1    15
2    14
Name: Age, dtype: int64

Все столбцы фрейма данных pandas являются объектами Series:

type(df['Age']) 
Output: pandas.core.series.Series

Мы также можем добавлять новые столбцы в наш набор данных, а также устанавливать индексы:

g=['M','M','M']
df['Gender']=g
df.set_index('Name',inplace=True)
df

Pandas имеет фундаментальное значение, когда вы имеете дело с огромным объемом данных, поскольку он также может суммировать соответствующую информацию (например, наличие пропущенных значений, выбросов, среднего значения и частоты и т. Д.).

df.isnull().sum() #for missing values 
Output: 
Age       0
Gender    0
dtype: int64
df.describe()

Матплотлиб

Matplotlib предлагает различные инструменты для визуализации данных. Это не единственный пакет визуализации, доступный в Python, тем не менее, он наиболее интуитивно понятен в использовании и дает очень хорошие результаты.

Давайте посмотрим, как построить разные графики:

import matplotlib.pyplot as plt
import numpy as np


men_means = [20, 34, 30, 35, 27]

x = np.arange(len(labels)) 

fig, ax = plt.subplots()
ax.bar(x - width/2, men_means, width, label='Men')
ax.set_title('Men Means')

Мы также можем показать несколько столбцов на одном графике:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np


men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]

x = np.arange(len(labels)) 

fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men_means, width, label='Men')
rects2 = ax.bar(x + width/2, women_means, width, label='Women')
ax.set_title('Men and Women Means')

Теперь давайте смоделируем нормальную случайную величину с помощью гистограммы и аппроксимации графика нормального распределения:

import matplotlib.pyplot as plt
mu, sigma = 0, 0.1 # mean and standard deviation
s = np.random.normal(mu, sigma, 1000)
count, bins, ignored = plt.hist(s, 30, normed=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r')
plt.show()

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

import matplotlib.pyplot as plt


labels = 'Gnocchi', 'Tortellini', 'Spaghetti', 'Penne'
sizes = [15, 30, 45, 10]
explode=(0,0,0,0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90)
ax1.axis('equal')  

plt.show()

Вы также можете выделить самый популярный ответ с помощью опции взорвать:

explode=(0,0,0.1,0)

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

Scikit-Learn

Это, вероятно, самый важный пакет для машинного обучения, поскольку он предоставляет все алгоритмы, от контролируемых до неконтролируемых, от классификации до регрессии. Кроме того, он включает метрики оценки, такие как ROC, MSE R в квадрате и т. Д., Которые будут автоматически вычисляться после каждой тренировки вашего алгоритма.

Давайте посмотрим на очень простой пример задачи машинного обучения, используя набор данных Boston House Price и пытаясь смоделировать цену только по одной переменной, чтобы мы могли ее визуализировать. Поскольку это задача регрессии (целевая переменная цена непрерывна), мы будем использовать Простую линейную регрессию:

import pandas as pd 
from sklearn.datasets import load_boston

dataset = load_boston()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target

df.head()

Поскольку мы хотим построить простую линейную регрессию (только одну функцию), нам нужно уменьшить размерность с 13 до 1, и чтобы сделать это без потери соответствующей информации, нам нужно запустить Анализ главных компонентов:

from sklearn.decomposition import PCA   
pca = PCA(1)    
projected = pca.fit_transform(dataset.data)  
print(dataset.data.shape)  
print(projected.shape) 

Output:
(506, 13)
(506, 1)

Отлично, теперь давайте импортируем и обучим нашу модель:

from sklearn.model_selection import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(projected, dataset.target, random_state=0)
from sklearn.linear_model import LinearRegression  
lm = LinearRegression()  
lm.fit(X_train,y_train)  
y_pred = lm.predict(X_test)

#let's visualize the results

plt.scatter(X_test, y_test,  color='black')  
plt.plot(X_test, y_pred, color='blue', linewidth=3)  
plt.xticks(())  
plt.yticks(())  
plt.xlabel('First Principal component')  
plt.ylabel('price')   
plt.show()

Мы также можем запросить «обратную связь» о производительности нашего алгоритма:

from sklearn.metrics import mean_squared_error, r2_score  
print("MSE: {:.2f}".format(mean_squared_error(y_test, y_pred)))  
print("R2: {:.2f}".format(r2_score(y_test, y_pred)))

Output:

MSE: 73.04
R2: 0.11

Как видите, с помощью нескольких строк кода (и менее 2 минут) мы обучили модель машинного обучения без каких-либо ручных вычислений.

Сиборн

Как и matplotlib, seaborn - это пакет Python для визуализации данных. Однако он предназначен для использования в статистических представлениях и возвращает более релевантную информацию о ваших данных.

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

import seaborn as sns sns.set(style="ticks") 
df = sns.load_dataset("iris") 
sns.pairplot(df, hue="species")

sns.heatmap(df.corr(),annot=True)

Мы также можем визуализировать совместное распределение данных (скажем, двух функций sepal_length и sepal_width):

sns.jointplot(x='sepal_length',y='sepal_width',data=df,size=5)

Наконец, давайте посмотрим на распределение значений sepal_length для каждого вида:

ax=sns.boxplot(x='species',y='sepal_length',data=df) ax=sns.stripplot(x='species',y='sepal_length',data=df,jitter=True,edgecolor='gray')

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

Излишне говорить, что охватить все возможности этих пакетов было бы практически невозможно. Однако важно знать, какие инструменты вам нужны и как их использовать во время анализа. В качестве хорошей практики помните, что какой бы вид вычислений вам ни понадобился для анализа, python предоставляет самый быстрый и самый умный способ сделать это: обнаружение на практике - очень хорошая стратегия для изучения этих инструментов.

Если вам интересно узнать больше об этих пакетах, вот официальная документация:

Первоначально опубликовано на http://datasciencechalktalk.com 4 сентября 2019 г.