Краткое руководство о том, как извлекать, преобразовывать и загружать данные из википедии с помощью веб-скрейпинга и панд.

Мотивация

Мотивом для написания этой статьи послужил документальный фильм, который я посмотрел некоторое время назад, о том, как строились первые станции метро и что в первую очередь побудило города создать систему подземного транспорта. В то время (в 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, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.