Data science - это область, которая занимается изучением и анализом больших объемов данных, чтобы находить в них полезные закономерности, делать прогнозы или принимать решения на основе фактов. В основе data science лежат методы и инструменты математики, статистики и программирования. Они позволяют извлекать ценную информацию из данных и применять её в различных областях – от бизнеса и медицины до наукоемких исследований.
Почему используют python?
Простота и удобство
Большое количество библиотек: В Python существует множество специализированных библиотек для работы с данными, таких как NumPy, Pandas, SciPy, Matplotlib, Seaborn, scikit-learn и др. Эти библиотеки предоставляют инструменты для анализа данных, визуализации и машинного обучения.
Широкие возможности: С помощью Python можно решить широкий спектр задач, начиная от обработки и очистки данных, статистического анализа и визуализации, заканчивая созданием сложных моделей машинного обучения и глубокого обучения.
Сообщество и экосистема: Python имеет огромное сообщество разработчиков, которые активно создают новые инструменты, библиотеки и пакеты для анализа данных. Это обеспечивает непрерывное развитие и поддержку соответствующих ресурсов для разработчиков и специалистов в области data science.
В данной статье рассмотрим python стек для работы в Data Science
NumPy
Одна из самых популярных библиотек для языка программирования Python, которая предоставляет мощные инструменты для работы с многомерными массивами и выполнения различных математических операций. Она является основной библиотекой для научных вычислений в Python и широко используется в областях, таких как анализ данных, машинное обучение, инженерные и научные расчёты.
Массивы в numpy можно хранить только в одном типе.
Это позволяет эффективно использовать память и выполнять операции с большой скоростью, так как для каждого элемента массива выделено фиксированное количество памяти.
Получение характеристик массива:
import numpy as np
row = np.array([1, 2, 3])
matrix = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(f'Строка(1d) размерность: {row.ndim}')
print(f'Матрица(2d) размерность: {matrix.ndim}')
print(f'Строка(1d) форма: {row.shape}')
print(f'Матрица(2d) форма: {matrix.shape}')
В numpy можно проводить арифметические операции над массивами одинаковых размерностей:
def multi_numpy(array_1: np.ndarray, array_2: np.ndarray):
print(array_1 * array_2)
multi_numpy(np.array([1, 2, 3]), np.array([2, 2, 2]))
NumPy позволяет генерировать массивы:
array_with_7 = np.full((3, 3), 7)
print(f'Генерация массива со значением 7 (3х3):\n {array_with_7}')
array_like_matrix = np.full_like(matrix, 7)
print(f'енерация массива со значением 7 (генерируем на подобие другого массива (2х5)):\n {array_like_matrix}')
rand_array = np.random.randint(1, 25, (3,5))
print(f'Генерация массива с заполнением значением в диапазоне (1 - 25), длинна - 15 (3 row, 5 column):\n {rand_array}')
Возвращаемый тип после фильтрации или слайсинга - представление, а не копия.
Меняя значение в представлении массива, меняется значение и в исходном массиве, поэтому следует копировать массив через команду copy:
original = np.array([0, 1, 2])
copy = original
copy[1] = -7
print(f'Исходный массив после изменения: {original} = копируемый массив = {copy}')
copy_right = np.copy(original)
copy_right[1] = -7
print(f'Исходный массив после изменения: {original} != копируемый массив = {copy_right}')
SciPy
Это библиотека для языка программирования Python, которая предоставляет удобные инструменты для выполнения научных и инженерных расчётов. Она содержит множество функций для работы с линейной алгеброй, оптимизацией, обработкой сигналов, обработкой изображений, статистикой и многим другим.
Популярные подмодули: special, stats
Special предоставляет функции для работы с специальными функциями, такими как функции Бесселя, функции Эйри, функции Эрмита и многие другие. Эти функции используются в различных областях науки и инженерии, включая физику, астрономию, статистику и теорию вероятностей:
from scipy import special
#Вычисление факториала 7
print(special.factorial(7))
#Вычисление сочетания
print(special.comb(10,2))
#Вычисление перестановок
print(special.perm(10,2))
Stats предоставляет широкий спектр статистических функций, распределений вероятностей, генераторов случайных чисел и статистических тестов.
Можно использовать биноминальное распределение, то есть некоторое кол-во проб, результат каждой успешен либо нет.
Пример: биноминальное распределение, которая состоит из 100 испытаний и успех 33%:
from scipy import stats
binom = stats.binom(100,0.33)
#Вероятность выборки что меньше 7
binom.cdf(7)
# Получение 17 случайных выборок
binom.rvr(17)
Можно использовать распределение Пуассона, то есть моделирование вероятности определенного числа отдельных событий за некоторый временной промежуток.
Пример: распределение Пуассона со средним значением 4, размерность 10000 элементов
from scipy import stats
poisson = stats.poisson(mu = 4)
poisson = poisson.rvs(size = 10000)
Самый популярное подмодуле scipy.stats - непрерывное распределение. Параметры, которые могут использоваться - местоположение(loc) и масштаб(scale). По умолчанию, используется масштаб 1.0 и расположение 0.
К непрерывным распределениям относят нормальное распределение, экспоненциально изменяющееся непрерывное распределение, равномерное и другие.
Нормальное распределение:
from scipy import stats
normal = stats.norm()
normal = normal.rvs(size = 20000)
Экспоненциально изменяющееся непрерывное распределение:
from scipy import stats
expon = stats.expon()
expon = expon.rvs(size = 20000)
Равномерное распределение:
from scipy import stats
uniform = stats.uniform()
uniform = uniform.rvs(size = 20000)
Pandas
Используется для обработки и анализа данных. Предоставляет удобные структуры данных и инструменты для работы с таблицами, временными рядами и другими типами данных. Основан pandas на NumPy и Matplotlib.
Структуры хранения данных в pandas делятся на два типа: Series(одномерный массив) и DataFrame(многомерный массив):
import pandas as pd
sql = pd.Series(['MS SQL', 'PostgreSQL', 'Oracle', 'MySQL'], name = 'sql vendor')
product = pd.DataFrame({'PL':['C#', 'Java', 'Go'],'Popular Product':['Stack Overflow', 'Jira', 'Docker']})
Pandas позволяет импортировать данные из различных источников(json, csv, xml, sql, excel):
csv = pd.read_csv('GOOG.csv', parse_dates=['Date'], index_col='Date', delimiter=',')
print(csv)
При необходимости чтения нескольких определенных колонок используется перечисление в квадратных скобках:
print(csv[['High','Low']])
Иногда случается, что данные сохраняются частично. Для такого случая в pandas есть функция fillna, которая позволяет заменять пустоту на конкретное значение. Можно использовать для нескольких полей:
test = pd.read_csv('test.csv', delimiter=',')
test = test.fillna({'quantity': 0})
print(test)
Pandas позволяет агрегировать данные. Неполный список агрегатных функций:
среднее значение.
сумму значений.
количество не пропущенных значений.
медиану значений.
экстремумы(мин/макс значения).
стандартное отклонение.
дисперсию
Объединение таблиц в pandas происходит по принципу SQL. Имеются виды объединения: inner, left, right, outer(full join). Для выбора объединения используется параметр how:
table1 = pd.DataFrame({"PL":["C#", "Java", "Python"],"Year":[2000, 1995, 1991]})
table2 = pd.DataFrame({"PL":["C#", "Java", "Go"],"Company":['Microsoft', 'Oracle', 'Google']})
inner = pd.merge(table1, table2, on="PL")
print(inner,"\n")
left = pd.merge(table1, table2, on="PL", how="left")
print(left,"\n")
outer = pd.merge(table1, table2, on="PL", how="outer")
print(outer,"\n")
В pandas существует два метода сортировки данных:
sort_index
sort_values
Для использования сортировки по значению основной параметр - по каким полям сортируем (by). Дополнительно можно использовать параметр ascending, позволяющий как сортируем.
Для группировки значений используется метод groupby. Основной параметр - by. Означает, как и в фильтрации, по каким полям группируем.
Дополнительно для группировки можно использовать для агрегации:
resample - метод группировки временных рядов. Для того, чтобы использовать индекс должен быть - datetime. В скобках указывается интервал.
pivot_table - метод для создания свободных таблиц. Возможность применения нескольких агрегаций.
Часто для анализа нужно отсекать данные по критериям, чтобы получить результат:
table[table[’column1’] > 10]
Для сложной фильтрации используется & - если И, | - если ИЛИ.Для каждого логического блока использовать надо скобки, чтобы pandas понимал, что сравниваются разные типы:
table[(table[’column1’] > 10) & (table[’column12] == ’Text’)]
Для аналога в sql NULL используется у поля метод isna.
Если необходимо вывести определенные колонки, то после квадратных скобок, где была фильтрация, идет перечисление колонок, которые нужно вывести.
Вывод определенного количества строк в pandas служит два метода.
head - вывод определенного количества данных сначала.
tail - вывод определенного количества данных с конца.
Matplotlib
Библиотека для создания графиков и визуализации данных в языке программирования Python.Может быть использована для визуализации данных в научных и инженерных приложениях, в анализе данных, статистике, машинном обучении и визуализации результатов
Популярные методы:
plot - построение линейного графика
pie - построение круговой диаграммы
scatter - построение диаграммы рассеяния
bar - построение столбчатую диаграмму
title - добавление заголовка графику
xlabel/ylabel - добавление меток на ось x/y
axis - установление пределов осей и получение текущих пределов
show - демонстрирование графика
Построение простого графика:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('Время')
plt.ylabel('Значение')
plt.title('Пример графика синуса')
plt.show()
Построение диаграммы:
import matplotlib.pyplot as plt
labels = ['Яблоки', 'Апельсины', 'Персики', 'Бананы']
sizes = [25, 30, 20, 25]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.title('Процентное соотношение фруктов')
plt.show()
Построение 3d фигуры:
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
plt.show()
Вывод
Подводя итоги к данной статье, были выделены и рассмотрены незаменимые инструменты для data science инженера, которые могут помочь извлекать информацию из данных, чтобы принимать обоснованные решения, предсказывать тренды, оптимизировать процессы и достигать бизнес-целей. Эти инструменты:
Библиотеки NumPy и SciPy, которые позволяют решать сложные математические задачи
Библиотека для визуализации данных - matplotlib
Многофункциональный инструмент для обработки и анализа данных - Pandas.
Для изучения данной темы рекомендуем прочитать книгу Кеннеди Бермана «Основы Python для data science».