- •Об авторе
- •О научном редакторе
- •От издательства
- •Введение
- •Использование Python для data science
- •Для кого эта книга?
- •О чем эта книга?
- •Глава 1. Базовые знания о данных
- •Категории данных
- •Неструктурированные данные
- •Структурированные данные
- •Слабоструктурированные данные
- •Данные временных рядов
- •Источники данных
- •Веб-страницы
- •Базы данных
- •Файлы
- •Получение
- •Очистка
- •Преобразование
- •Анализ
- •Хранение
- •Питонический стиль
- •Выводы
- •Глава 2. Структуры данных Python
- •Списки
- •Создание списка
- •Использование общих методов списков
- •Использование срезов
- •Использование списка в качестве очереди
- •Использование списка в качестве стека
- •Использование списков и стеков для обработки естественного языка
- •Расширение функциональности с помощью списковых включений
- •Кортежи
- •Список кортежей
- •Неизменяемость
- •Словари
- •Список словарей
- •Добавление элементов в словарь с помощью setdefault()
- •Преобразование JSON в словарь
- •Множества
- •Удаление дубликатов из последовательности
- •Общие операции с множеством
- •Упражнение № 1: продвинутый анализ тегов фотографий
- •Выводы
- •NumPy
- •Установка NumPy
- •Создание массива NumPy
- •Выполнение поэлементных операций
- •Использование статистических функций NumPy
- •Упражнение № 2: использование статистических функций numpy
- •pandas
- •Установка pandas
- •pandas Series
- •Упражнение № 3: объединение трех серий
- •pandas DataFrame
- •Упражнение № 4: использование разных типов join
- •scikit-learn
- •Установка scikit-learn
- •Получение набора образцов
- •Преобразование загруженного датасета в pandas DataFrame
- •Разделение набора данных на обучающий и тестовый
- •Преобразование текста в числовые векторы признаков
- •Обучение и оценка модели
- •Создание прогнозов на новых данных
- •Выводы
- •Глава 4. Доступ к данным из файлов и API
- •Импортирование данных с помощью функции open()
- •Текстовые файлы
- •Файлы с табличными данными
- •Упражнение № 5: открытие json-файлов
- •Двоичные файлы
- •Экспортирование данных в файл
- •Доступ к удаленным файлам и API
- •Как работают HTTP-запросы
- •Библиотека urllib3
- •Библиотека Requests
- •Упражнение № 6: доступ к api с помощью requests
- •Перемещение данных в DataFrame и из него
- •Импортирование вложенных структур JSON
- •Конвертирование DataFrame в JSON
- •Выводы
- •Глава 5. Работа с базами данных
- •Реляционные базы данных
- •Понимание инструкций SQL
- •Начало работы с MySQL
- •Определение структуры базы данных
- •Вставка данных в БД
- •Запрос к базе данных
- •Упражнение № 8: объединение «один-ко-многим»
- •Использование инструментов аналитики баз данных
- •Базы данных NoSQL
- •Документоориентированные базы данных
- •Упражнение № 9: вставка и запрос нескольких документов
- •Выводы
- •Глава 6. Агрегирование данных
- •Данные для агрегирования
- •Объединение датафреймов
- •Группировка и агрегирование данных
- •Просмотр конкретных агрегированных показателей по MultiIndex
- •Срез диапазона агрегированных значений
- •Срезы на разных уровнях агрегирования
- •Добавление общего итога
- •Добавление промежуточных итогов
- •Выбор всех строк в группе
- •Выводы
- •Глава 7. Объединение датасетов
- •Объединение встроенных структур данных
- •Объединение списков и кортежей с помощью оператора +
- •Объединение словарей с помощью оператора **
- •Объединение строк из двух структур
- •Реализация join-объединений списков
- •Конкатенация массивов NumPy
- •Объединение структур данных pandas
- •Конкатенация датафреймов
- •Удаление столбцов/строк из датафрейма
- •Join-объединение двух датафреймов
- •Выводы
- •Глава 8. Визуализация
- •Распространенные способы визуализации
- •Линейные диаграммы
- •Столбчатые диаграммы
- •Круговые диаграммы
- •Гистограммы
- •Построение графиков с помощью Matplotlib
- •Установка Matplotlib
- •Использование matplotlib.pyplot
- •Работа с объектами Figure и Axes
- •Создание гистограммы с помощью subplots()
- •Совместимость Matplotlib с другими библиотеками
- •Построение графиков для данных pandas
- •Отображение данных геолокации с помощью Cartopy
- •Выводы
- •Глава 9. Анализ данных о местоположении
- •Получение данных о местоположении
- •Преобразование стандартного вида адреса в геокоординаты
- •Получение геокоординат движущегося объекта
- •Анализ пространственных данных с помощью geopy и Shapely
- •Поиск ближайшего объекта
- •Поиск объектов в определенной области
- •Объединение двух подходов
- •Упражнение № 15: совершенствование алгоритма подбора машины
- •Получение непространственных характеристик
- •Объединение датасетов с пространственными и непространственными данными
- •Выводы
- •Глава 10. Анализ данных временных рядов
- •Регулярные и нерегулярные временные ряды
- •Общие методы анализа временных рядов
- •Вычисление процентных изменений
- •Вычисление скользящего окна
- •Вычисление процентного изменения скользящего среднего
- •Многомерные временные ряды
- •Обработка многомерных временных рядов
- •Анализ зависимости между переменными
- •Выводы
- •Глава 11. Получение инсайтов из данных
- •Ассоциативные правила
- •Поддержка
- •Доверие
- •Лифт
- •Алгоритм Apriori
- •Создание датасета с транзакциями
- •Определение часто встречающихся наборов
- •Генерирование ассоциативных правил
- •Визуализация ассоциативных правил
- •Получение полезных инсайтов из ассоциативных правил
- •Генерирование рекомендаций
- •Планирование скидок на основе ассоциативных правил
- •Выводы
- •Глава 12. Машинное обучение для анализа данных
- •Почему машинное обучение?
- •Типы машинного обучения
- •Обучение с учителем
- •Обучение без учителя
- •Как работает машинное обучение
- •Данные для обучения
- •Статистическая модель
- •Неизвестные данные
- •Пример анализа тональности: классификация отзывов о товарах
- •Получение отзывов о товарах
- •Очистка данных
- •Разделение и преобразование данных
- •Обучение модели
- •Оценка модели
- •Упражнение № 19: расширение набора примеров
- •Прогнозирование тенденций фондового рынка
- •Получение данных
- •Извлечение признаков из непрерывных данных
- •Генерирование выходной переменной
- •Обучение и оценка модели
- •Выводы
3
Библиотеки Python
для data science
Python предоставляет доступ к надежной экосисте-
ме сторонних библиотек, которые будут полезны при
анализе данных и выполнении операций с данными.
Это глава познакомит вас с тремя самыми популярны- ми библиотеками для работы с данными: NumPy, pandas и scikit-learn. Вы убедитесь, что многие приложения для
анализа данных прямо или косвенно используют эти библиотеки.
NumPy
Библиотека NumPy (сокращение от Numeric Python) полезна для работы с массивами — структурами данных, хранящими значения одного типа. Многие другие библиотеки Python, выполняющие операции с числами, опираются на NumPy.
Массив NumPy представляет собой сетку элементов одного типа. Эта структура данных является ключевым компонентом библиотеки NumPy. Элементы массива NumPy индексируются кортежем целых неотрицательных чисел. Массивы NumPy похожи на списки Python, за исключением того, что они требуют меньше памяти и обычно быстрее, поскольку используют оптимизированный, прекомпилированный код на языке C.
64 Глава 3. Библиотеки Python для data science
Массивы NumPy поддерживают поэлементные операции, что позволяет выполнять основные арифметические вычисления сразу над всем массивом в компактном и удобочитаемом коде. Поэлементная операция — это операция над двумя массивами одинаковой размерности, в результате которой получается другой массив той же размерности, где каждый элемент i, j является результатом вычисления, выполненного над элементами i, j двух исходных массивов. На рис. 3.1 показана поэлементная операция, выполняемая над двумя массивами NumPy.
0 |
1 |
+ |
3 |
2 |
= |
3 |
3 |
|
|
|
|
|
|
|
|||
2 |
3 |
1 |
0 |
3 |
3 |
|||
|
|
|||||||
|
|
|
|
|
|
|
|
Рис. 3.1. Сложение двух массивов NumPy
Как видите, массив, полученный в результате, имеет те же размеры, что и исходные массивы, а каждый новый элемент является суммой их соответствующих элементов.
Установка NumPy
NumPy — сторонняя библиотека, то есть она не является частью стандартной библиотеки Python. Проще всего установить ее с помощью следующей команды:
$ pip install NumPy
Python воспринимает NumPy как модуль, поэтому перед использованием библиотеку необходимо импортировать в свой скрипт.
Создание массива NumPy
Массив NumPy можно создать из данных одного или нескольких списков Python. Предположим, для каждого сотрудника компании существует список выплат базового оклада за последние три месяца. Чтобы собрать всю информацию о зарплате в одну структуру данных, можно использовать следующий код:
import numpy as np
jeff_salary = [2700,3000,3000] nick_salary = [2600,2800,2800] tom_salary = [2300,2500,2500]
base_salary = np.array([jeff_salary, nick_salary, tom_salary]) print(base_salary)
NumPy 65
Начинаем с импортирования библиотеки NumPy . Затем определяем несколько списков, каждый из которых содержит данные о базовом окладе сотрудника за последние три месяца . Наконец, объединяем списки в массив NumPy . Вот как он выглядит:
[[2700 3000 3000] [2600 2800 2800] [2300 2500 2500]]
Это двумерный массив. У него две оси, которые имеют целочисленные индексы, начиная с 0. Ось 0 проходит вертикально вниз по строкам массива, а ось 1 — горизонтально по столбцам.
Точно так же можно создать массив, содержащий ежемесячные премии сотрудников:
jeff_bonus = [500,400,400] nick_bonus = [600,300,400] tom_bonus = [200,500,400]
bonus = np.array([jeff_bonus, nick_bonus, tom_bonus])
Выполнение поэлементных операций
Выполнять поэлементные операции сразу над несколькими массивами NumPy одинаковой размерности очень просто. Например, можно сложить массивы base_salary и bonus, чтобы определить общую сумму, выплачиваемую ежемесячно каждому сотруднику:
salary_bonus = base_salary + bonus print(type(salary_bonus)) print(salary_bonus)
Как видим, операция сложения реализуется в одной строке . Полученный набор данных представляет собой массив NumPy, в котором каждый элемент является суммой соответствующих элементов массивов base_salary
и bonus:
<class 'NumPy.ndarray'>
[[3200 3400 3400] [3200 3100 3200] [2500 3000 2900]]
66 Глава 3. Библиотеки Python для data science
Использование статистических функций NumPy
Статистические функции NumPy позволяют анализировать содержимое массива. Например, можно найти наибольшее значение по всему массиву или на заданной оси.
Допустим, требуется найти наибольшее значение в массиве salary_bonus, созданном в предыдущем разделе. Это можно сделать с помощью функции max() массива NumPy:
print(salary_bonus.max())
Функция возвращает максимальную сумму, выплаченную за последние три месяца сотрудникам, добавленным в датасет:
3400
NumPy также может найти максимальное значение массива на заданной оси. Если требуется определить максимальную сумму, выплаченную за последние три месяца каждому из сотрудников, можно использовать функцию NumPy amax(), как показано ниже:
print(np.amax(salary_bonus, axis = 1))
Указав axis = 1, мы сообщаем функции amax(), что искать максимум в массиве salary_bonusнужно горизонтально (по столбцам); таким образом, функция применяется к каждой строке. В результате рассчитывается максимальная ежемесячная сумма, выплаченная за последние три месяца, отдельно по каждому сотруднику:
[3400 3200 3000]
Аналогичным образом можно рассчитать максимальную сумму, выплаченную за каждый из последних трех месяцев, среди всех сотрудников, изменив параметр axis на 0:
print(np.amax(salary_bonus, axis = 0))
Результат:
[3200 3400 3400]