Краткое руководство о том, как извлекать, преобразовывать и загружать данные из википедии с помощью веб-скрейпинга и панд.
Мотивация
Мотивом для написания этой статьи послужил документальный фильм, который я посмотрел некоторое время назад, о том, как строились первые станции метро и что в первую очередь побудило города создать систему подземного транспорта. В то время (в 1870 году) многие считали идею создания железнодорожного метро безумной. Для них это предложение было равносильно нарушению земли мертвых, и они верили, что злые духи поднимутся снизу и поселятся там.
На самом деле человек с этой так называемой сумасшедшей идеей подземного транспортного вагона был провидцем своего времени. Его звали Альфред Эли Бич, и он был издателем, редактором и изобретателем, запатентовавшим идею системы подземного транспорта в Нью-Йорке в 1869 году.
К тому времени, когда был спроектирован и введен в эксплуатацию первый поезд метро, работающий на мазуте, начали производить новые подземные системы (на этот раз работающие на угле). В любом случае, это была не лучшая ситуация для легких первых пассажиров метро!
В 1894 году будет утверждена система нью-йоркского метро, ее строительство начнется всего через шесть лет. Крупные города по всему миру быстро последовали этому примеру, и сегодня вам будет трудно найти крупный город без него.
Данные
Полный набор данных, который дает нам эту информацию, доступен в Википедии. Несмотря на то, что Википедия является широко используемым источником, она не всегда организует информацию так, как нам хотелось бы, и иногда ей не хватает уровня детализации, который нам может потребоваться.
В этом уроке я покажу читателям относительно простой способ извлечения данных из Википедии с помощью Python в Jupyter Notebook. Затем я покажу, как сохранить эти данные в CSV-файлах на диске Google и визуализировать эти данные в Tableau для дальнейшего анализа.
Эта статья будет разделена на две части. Здесь, в первой части, я расскажу об этапах извлечения и преобразования процесса ETL, а во второй части я расскажу, как загрузить эти данные для дальнейшего анализа в Tableau.
Веб-скрейпинг данных из Википедии
Сначала нам нужно будет импортировать пакеты и библиотеки, которые позволяют нам очищать данные. Обычно я работаю с requests
для очистки данных и beautifulSoup
для анализа извлеченных данных в файл json
. Я также буду использовать всегда полезные библиотеки pandas
и numpy
для работы с данными. В этом случае мы также будем использовать объекты даты и времени, поэтому я также импортировал модуль datetime
.
Стадия экстракции
Сначала мы начинаем этап Извлечение процесса ETL. Здесь нам нужно запросить данные в виде HTML-документа из Википедии, а затем проанализировать эти данные, чтобы преобразовать их в табличный формат:
Статья из Википедии, которую мы собираем, содержит 3 разные таблицы, идентифицированные в HTML-документе с помощью объекта class="wikitable sortable jquery-tablesorter"
. Мы также можем определить эту таблицу, просмотрев заголовки, которые она содержит в HTML-документе.
Во второй таблице в статье перечислены все системы по странам:
В третьей таблице в статье системы метрополитена сгруппированы по строящимся в данный момент:
В коде, написанном для поддержки этого руководства, вы заметите, что после вызова метода beautifulSoup
html.parser
мы ищем все объекты в документе HTML, идентифицированные 'class': "wikitable"
.
Как объяснялось ранее, страница Википедии содержит три таблицы. Итак, каждой таблице, которую мы храним внутри переменной tables
, будет присвоен индекс, начинающийся с 0
.
Мы используем parse_tables
, функцию, специально предназначенную для анализа данных HTML в записной книжке, передавая в качестве аргументов объект, который мы хотели бы проанализировать, tables
, за которым следует индекс таблицы, к которой мы хотели бы получить доступ (в данном случае первая таблица ).
Как видите, в этой таблице есть некоторые данные, которые нам не понадобятся для нашего анализа. Мы рассмотрим это на следующем этапе нашего конвейера ETL: преобразование.
Стандартизировать управление моделями может быть сложно, но есть решение. Узнайте больше об управлении экспериментами от Николаса Ласкариса, представителя Comet.
Стадия трансформации
Данные во второй и третьей извлеченных таблицах нам не понадобятся, поэтому сосредоточим внимание исключительно на первой таблице:
Далее мы переименуем столбцы и извлечем только числовые символы из столбцов, содержащих Length
и Year
. Для получения более подробной информации о коде, пожалуйста, не стесняйтесь клонировать этот Блокнот в моем репозитории Github.
Как только столбцы переименованы и информация в них извлечена, мы проверяем наш DataFrame:
Как видите, все столбцы в настоящее время имеют object
типов данных. Это имеет смысл для некоторых столбцов, но нам нужно изменить это для всех числовых столбцов. Давайте сначала заменим значения NaN в столбцах Year_of_Last_Expansion
и Annual_Ridership
на 0, а затем мы преобразуем столбцы Year_Opened
, Year_of_Last_Expansion
, Stations
, System_Length
и Annual_Ridership
в числовые типы данных (целые и плавающие):
Теперь мы преобразовали числовые столбцы в целочисленные типы данных и типы данных с плавающей запятой, чтобы они могли быть прочитаны Tableau для дальнейшего анализа!
Я надеюсь, что вы нашли этот урок полезным.
Обязательно ознакомьтесь с моей второй инсталляцией Конвейер Subway Data ETL: Part II, где я рассказываю об этапе загрузки ETL, а также немного о дальнейшей визуализации данных!
Ваше здоровье!
Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.
Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.