
- •Об авторе
- •О научном редакторе
- •От издательства
- •Введение
- •Использование 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: расширение набора примеров
- •Прогнозирование тенденций фондового рынка
- •Получение данных
- •Извлечение признаков из непрерывных данных
- •Генерирование выходной переменной
- •Обучение и оценка модели
- •Выводы

174 Глава 8. Визуализация
гистограмма на рис. 8.5 показывает частотность диапазонов окладов сотрудников отдела продаж.
На гистограмме оклады сгруппированы в диапазоны по $50, а каждый столбик представляет собой количество сотрудников с определенным размером оклада. Визуализация наглядно демонстрирует, насколько отличается количество сотрудников, зарабатывающих от $1200 до $1250, от количества сотрудников с окладом в других диапазонах, например от $1250 до $1300.
Е а а а |
|||
10 |
|
|
|
8 |
|
|
|
6 |
|
|
|
Ча а |
|
|
|
4 |
|
|
|
2 |
|
|
|
0 |
|
|
|
$1100 |
$1200 |
$1300 $1400 $1500 $1600 |
$1700 $1800 |
|
|
О а ( а — $50) |
|
Рис. 8.5. Гистограмма распределения окладов
Построение графиков с помощью Matplotlib
Теперь, когда вы познакомились с наиболее распространенными типами диаграмм, рассмотрим, как их создавать с помощью Matplotlib, одной из самых популярных библиотек Python для визуализации данных. Вы научитесь строить линейные, круговые, столбчатые диаграммы и гистограммы.
Каждая визуализация Matplotlib, или figure, строится из иерархии вложенных объектов. Можно работать с этими объектами напрямую, чтобы создавать визуализации с широкими возможностями настроек, или управлять объектами опосредованно — через функции модуля matplotlib.pyplot. Последний подход проще, и часто его вполне достаточно для создания базовых графиков и диаграмм.

Построение графиков с помощью Matplotlib 175
Установка Matplotlib
Проверьте, установлен ли уже Matplotlib, импортировав его в текущую сессию интерпретатора Python:
> import matplotlib
Если вы получите ModuleNotFoundError, установите Matplotlib с помощью pip следующим образом:
$ python -m pip install -U matplotlib
Использование matplotlib.pyplot
Модуль matplotlib.pyplot, называемый обычно в коде plt, представляет собой набор функций для построения привлекательных графиков. Модуль позволяет легко задавать различные характеристики фигуры, такие как ее название, метки осей и т. д. Например, код ниже строит линейный график, отображающий цену акций Tesla на момент закрытия торгов в течение пяти дней подряд:
from matplotlib import pyplot as plt
days = ['2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08'] prices = [729.77, 735.11, 755.98, 816.04, 880.02]
plt.plot(days,prices) plt.title('NASDAQ: TSLA') plt.xlabel('Дата') plt.ylabel('USD') plt.show()
Сначала мы определяем набор данных в виде двух списков: days, содержащий даты, которые будут отображаться по оси x, и prices с ценами, которые будут располагаться по оси y. Затем мы создаем объект plot, часть графика, которая собственно содержит данные, с помощью функции plt.plot(), передавая ей данные для осей x и y. В следующих трех строках кода мы настраиваем график: добавляем заголовок с помощью plt.title()и метки для осей x и y с помощью plt.xlabel() и plt.ylabel(). Наконец, выводим рисунок на экран с помощью plt.show(). На рис. 8.6 показан результат.
По умолчанию plt.plot() строит визуализацию в виде набора линий, соединяющих точки данных, которые наносятся на оси x и y. Для оси y Matplotlib

176 Глава 8. Визуализация
автоматически выбрал диапазон от 720 до 880 с интервалами по $20, чтобы легко видеть цену акций в каждый из дней.
USD
NASDAQ: TSLA
880
860
840
820
800
780
760
740
2021-01-04 |
2021-01-05 |
2021-01-06 |
2021-01-07 |
2021-01-08 |
Да а
Рис. 8.6. Простой линейный график, созданный с помощью модуля matplotlib.pyplot
Построить базовую круговую диаграмму так же просто, как и линейный график. Например, следующий код генерирует круговую диаграмму с рис. 8.4:
import matplotlib.pyplot as plt
regions = ['Новая Англия', 'Северо-восток', 'Средний Запад'] sales = [882703, 532648, 714406]
plt.pie(sales, labels=regions, autopct='%1.1f%%') plt.title('Продажи по регионам')
plt.show()
Скрипт следует той же базовой схеме, которую мы использовали для создания линейного графика: определяем данные для построения графика, создаем его, настраиваем характеристики и выводим на экран. На этот раз данные включают список регионов, которые будут служить метками для каждого среза круговой диаграммы, а также итоговые продажи для каждого региона. Значения списка

Построение графиков с помощью Matplotlib 177
определяют размер каждого среза. Чтобы составить круговой график, а не линейный, вызываем функцию plt.pie(), передав sales в качестве данных для построения графика и regions в качестве меток для данных. Мы также используем параметр autopct, чтобы значения в частях круга выражались в процентах. Используем форматирование строк Python для отображения значений с точностью до десятых долей процента.
Теперь визуализируем те же входные данные в виде столбчатой диаграммы, как показано на рис. 8.3:
import matplotlib.pyplot as plt
regions = ['Новая Англия', 'Северо-восток', 'Средний Запад'] sales = [882703, 532648, 714406]
plt.bar(regions, sales) plt.xlabel("Регионы") plt.ylabel("Продажи")
plt.title("Годовой объем продаж по регионам")
plt.show()
Мы передаем список regions в функцию plt.bar() в качестве меток оси x для столбцов. Второй аргумент, который мы передаем в plt.bar(), — это список со значениями продаж, соответствующих товарам в списке regions. И здесь, и в примере с круговой диаграммой можно использовать отдельные списки для меток и объема продаж, поскольку порядок элементов в списке Python является постоянным.
Работа с объектами Figure и Axes
По своей сути визуализация Matplotlib строится из двух основных типов объектов: объекта Figure и одного или нескольких объектов Axes. В предыдущих примерах matplotlib.pyplot служил интерфейсом для непрямого взаимодействия с этими объектами, позволяя настраивать некоторые элементы визуализации. Однако можно получить больше контроля над процессом визуализации, работая непосредственно с самими объектами Figure и Axes.
Объект Figure является внешним верхнеуровневым контейнером визуализации Matplotlib. Он может включать один или несколько графиков. Объект Figure полезен, когда необходимо совершить операции с отображаемым рисунком в целом, например изменить размер или сохранить в файл. Между тем каждый объект Axesпредставляет один график на рисунке. Объект Axesиспользуется для настройки графика и определения его расположения на изображении. Например, можно задать его систему координат и отметить позиции на оси.