- •Об авторе
- •О научном редакторе
- •От издательства
- •Введение
- •Использование 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: расширение набора примеров
- •Прогнозирование тенденций фондового рынка
- •Получение данных
- •Извлечение признаков из непрерывных данных
- •Генерирование выходной переменной
- •Обучение и оценка модели
- •Выводы
Понимание инструкций SQL 109
Понимание инструкций SQL
SQL, или язык структурированных запросов (Structured Query Language), — основной инструмент взаимодействия с реляционной базой данных. Хотя наша цель — изучить принципы работы с БД при помощи Python, сам код Python должен содержать инструкции SQL. В этой книге мы не будем подробно рассматривать SQL, но краткое введение в этот язык запросов все же необходимо.
Инструкции SQL — это текстовые команды, распознаваемые и выполняемые ядром базы данных, например MySQL. Так, следующая инструкция SQL сообщает БД, что нужно извлечь все строки из таблицы orders, в поле status которых установлено значение Shipped:
SELECT * FROM orders WHERE status = 'Shipped';
Инструкции SQL обычно состоят из трех основных компонентов: операции, которая должна быть выполнена, цели этой операции и условия, которое сужает область действия операции. В предыдущем примере SELECT — это операция SQL, то есть мы получаем доступ к строкам из базы данных. Таблица orders является целью операции, которая определяется с помощью оператора FROM, а условие следует за оператором WHERE. Все SQL-инструкции должны иметь операцию и цель, но условие не обязательно. Следующая инструкция, например, не содержит условия, поэтому она извлекает все строки из таблицы orders:
SELECT * FROM orders;
Можно уточнить инструкцию так, чтобы она касалась только определенных столбцов таблицы. Например, получить только столбцы pono и date для всех строк таблицы orders можно так:
SELECT pono, date FROM orders;
По соглашению зарезервированные в SQL слова, такие как SELECT и FROM, пишутся прописными буквами. Однако язык SQL нечувствителен к регистру, поэтому заглавные буквы — не строгая необходимость. В конце каждой инструкции должна стоять точка с запятой.
Операции SELECT, подобные тем, что описаны выше, являются примерами инструкций языка манипулирования данными (DML, Data Manipulation Languagе). Этот тип инструкций используется для доступа к данным базы и манипулирования ими. К инструкциям DML также относятся: INSERT, UPDATEи DELETE, которые,
110 Глава 5. Работа с базами данных
соответственно, добавляют, изменяют и удаляют записи из базы данных. Также существуют инструкции языка определения данных (DDL, Data Definition Language). Это еще одна распространенная категория инструкций SQL. Они предназначены для определения структуры базы данных. Стандартные операции DDL, CREATE, ALTER и DROP, используются для создания, изменения и удаления контейнеров данных соответственно, будь то столбцы, таблицы или целые базы данных.
Начало работы с MySQL
MySQL доступен на большинстве современных операционных систем, включая Linux, Unix, Windows и macOS. Существуют как бесплатные, так и коммерческие версии. Для целей данной главы достаточно MySQL Community Edition1, бесплатной версии MySQL, которая доступна по лицензии GPL. Подробную инструкцию по установке MySQL для вашей операционной системы см. в справочном руководстве для последней версии MySQL2.
Чтобы запустить сервер MySQL после установки, необходимо использовать команду, указанную в руководстве по установке для вашей операционной системы. Затем можно подключиться к серверу MySQL через терминал/консоль, используя клиент mysql:
$ mysql -uroot
ПРИМЕЧАНИЕ
На macOS может понадобиться использовать весь путь до MySQL, например:
/usr/local/mysql/bin/mysql -uroot -p.
Вам будет предложено ввести пароль, который вы задали в процессе установки сервера MySQL. После этого вы увидите командную строку MySQL:
mysql>
Можно задать новый пароль для пользователя root с помощью следующей команды SQL:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_pswd';
1 https://www.mysql.com/products/community
2 https://dev.mysql.com/doc
Понимание инструкций SQL 111
Теперь можно создавать базу данных для приложения.
Введите следующую команду в командной строке mysql>:
mysql> CREATE DATABASE sampledb;
Query OK, 1 row affected (0.01 sec)
Эта команда создает базу данных под названием sampledb. Далее необходимо выбрать БД:
mysql> USE sampledb;
Database changed
Все последующие команды будут применяться к базе данных sampledb.
Определение структуры базы данных
Структура реляционной базы данных формируется на основе входящих в нее таблиц и из связей между ними. Поля, которые связывают таблицы, называются ключами. Существует два типа ключей: первичный ключ (primary key) и внешний ключ (foreign key). Первичный ключ служит для уникальной идентификации записи в таблице. Внешний ключ — это поле в другой таблице, которое соответствует первичному ключу в первой таблице. Как правило, первичный ключ и соответствующий ему внешний ключ имеют одинаковое имя в обеих таблицах.
ПРИМЕЧАНИЕ
Термины«поле»и«столбец»частоиспользуютсякаквзаимозаменяемые.Строго говоря,столбецстановитсяполем,когдавыссылаетесьнанеговконтекстеодной строки.
Теперь, когда мы создали базу данных sampledb, можно создать несколько таб лиц и определить их структуру. Для наглядности создадим таблицы с той же структурой, что и датафреймы pandas, с которыми мы работали в главе 3. Вот три табличные структуры данных для реализации в нашей БД:
emps |
|
empno empname |
job |
-----------------------------
9001 |
Jeff |
Russell |
sales |
9002 |
Jane |
Boorman |
sales |
112 Глава 5. Работа с базами данных
9003 |
Tom Heints |
sales |
|
salary |
|
|
|
empno |
salary |
|
|
---------------- |
|
||
9001 |
3000 |
|
|
9002 |
2800 |
|
|
9003 |
2500 |
|
|
orders |
|
|
|
pono |
empno |
total |
|
-------------------- |
|
||
2608 |
9001 |
35 |
|
2617 |
9001 |
35 |
|
2620 |
9001 |
139 |
|
2621 |
9002 |
95 |
|
2626 |
9002 |
218 |
|
|
|
|
|
Чтобы проанализировать, какие отношения можно установить между этими структурами, вернитесь к рис. 3.4 и 3.6. Как видно на рис. 3.4, строки в таблицах emps и salary связаны отношением «один-к-одному». Связь устанавливается через поле empno. Таблицы emps и orders тоже связаны через поле empno. Это связь типа «один-ко-многим», как видно на рис. 3.6.
Можно добавить эти структуры данных в реляционную БД, введя следующие SQL-команды в командной строке mysql>. Начнем с создания таблицы сотрудников emps:
mysql> CREATE TABLE emps ( empno INT NOT NULL, empname VARCHAR(50), job VARCHAR(30), PRIMARY KEY (empno) );
С помощью команды CREATE TABLEсоздаем таблицу, определяя каждый столбец, его тип и, по желанию, размер данных, которые будем в нем хранить. Например, в столбце empno должны храниться целые числа (тип INT), и примененное к этой колонке ограничение NOT NULL гарантирует, что не получится вставить строку с пустым значением в поле empno. В свою очередь, столбец empname может хранить строки (тип VARCHAR) длиной до 50 символов, а job — строки длиной до 30 символов. Также указываем, что empno — столбец первичного ключа таблицы. Это означает, что он не должен содержать повторяющихся значений.
Понимание инструкций SQL 113
При успешном выполнении этой команды вы увидите следующее сообщение:
Query OK, 0 rows affected (0.03 sec)
Аналогично создадим таблицу с размерами оклада (salary):
mysql> CREATE TABLE salary ( empno INT NOT NULL, salary INT,
PRIMARY KEY (empno) );
Query OK, 0 rows affected (0.05 sec)
Далее добавляем ограничение внешнего ключа по столбцу empno таблицы salary, ссылающегося на столбец empno таблицы emps:
mysql> ALTER TABLE salary ADD FOREIGN KEY (empno) REFERENCES emps (empno);
Эта команда создает связь между таблицами salary и empno, то есть номер сотрудника в таблице salary должен соответствовать номеру сотрудника в таблице emps. Это ограничение гарантирует, что не получится вставить строку в таблицу salary, если она не имеет соответствующей строки в таблице emps.
Поскольку в таблице salary пока нет строк, операция ALTER TABLEне затрагивает ни одной строки, что видно из полученного сообщения:
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
Наконец, создаем таблицу с заказами (orders):
mysql> CREATE TABLE orders ( pono INT NOT NULL, empno INT NOT NULL, total INT,
PRIMARY KEY (pono),
FOREIGN KEY (empno) REFERENCES emps (empno) );
Query OK, 0 rows affected (0.13 sec)