Чтение данных с веб-страниц HTML с помощью Pandas

анализ данных

Автор: Эрик Марсия

Перевод: Лао Ци

Рекомендация книги, связанной с этой статьей: "Подготовка данных и разработка признаков", эта книга опубликована в [Электронная промышленность Пресс Флагманский магазин Tmall】в продаже

电子工业出版社天猫旗舰店有售


В этой статье мы за несколько шагов продемонстрируем, как использовать Pandas.read_htmlФункция захватывает данные со страницы HTML. Сначала, в качестве простого примера, мы будем использовать Pandas для чтения HTML из строки, затем мы будем использовать несколько примеров того, как читать данные со страницы Википедии.

Загрузить данные с помощью Python

Для анализа и визуализации данных нам обычно приходится загружать данные, как правило, из существующих файлов, таких как обычные файлы CSV или файлы Excel. Прочитайте данные из файла CSV, вы можете использовать Pandasread_csvметод. Например:

import pandas as pd

df = pd.read_csv('CSVFILE.csv')

Описанный выше метод обычно используется для импорта структурированных данных, таких как CSV или JSON.

Обычно мы используем больше информации из Википедии, которая обычно существует в виде таблиц HTML.

Чтобы получить данные из этих таблиц, мы можем скопировать и вставить их в электронную таблицу и использовать Pandas.read_excelчитать. Это, конечно, возможно, но теперь мы используем технологию поискового робота для автоматического завершения чтения данных.

Предварительные знания

Чтобы читать данные таблицы HTML с помощью Pandas, конечно, вы должны сначала установить Pandas. Используйте pip для установки здесь (вы также можете использовать другие методы, такие как Anaconda, ActivePython и т. д.), метод установкиpip install pandas.

Обратите внимание, что если эта команда будет выполнена, она автоматически проверит, нужно ли обновлять pip, и при необходимости обновит. Кроме того, мы также будем использовать такие пакеты, как lxml или BeautifulSoup4, а способ установки по-прежнему pip:pip install lxml.

read_htmlфункция

Использование пандread_htmlЧтение данных из таблицы HTML, синтаксис очень прост:

pd.read_html('URL_ADDRESS_or_HTML_FILE')

Вышеупомянутоеread_htmlПолное использование функции, следующий пример демонстрирует:

Пример 1

Первый пример, который демонстрирует, как использовать Pandasread_htmlмы хотим прочитать данные из HTML-таблицы в виде строки.

import pandas as pd

html = '''<table>
  <tr>
    <th>a</th>
    <th>b</th>
    <th>c</th>
    <th>d</th>
  </tr>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
  </tr>
  <tr>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
  </tr>
</table>'''


df = pd.read_html(html)

Теперь мы получаем не объект Pandas DataFrame, а объект списка Python, доступ к которому можно получить с помощьюtupe()Проверьте функцию:

type(df)

Пример 2

Во втором примере мы хотим извлечь данные из Википедии. Мы собираемся получить табличные данные о питонах.

import pandas as pd

dfs = pd.read_html('https://en.wikipedia.org/wiki/Pythonidae')

Теперь мы получаем список из 7 таблиц (len(df)), если мы откроем страницу Википедии, то увидим, что первая таблица находится в правой части страницы, в данном случае нас больше интересует вторая таблица:

dfs[1]

Пример 3

В третьем примере мы хотим прочитать данные о новом коронавирусе (covid-19) в Швеции. Здесь необходимоread_htmlДобавьте параметр в метод, затем выполните очистку данных и, наконец, визуализируйте данные.

посвятить данные

Откройте веб-страницу, и вы увидите таблицу на странице с надписью «Новые случаи COVID-19 в Швеции по округам», теперь давайте используем параметр соответствия и эту строку:

dfs = pd.read_html('https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Sweden',
                  match='New COVID-19 cases in Sweden by county')
dfs[0].tail()

Этим методом мы получаем только таблицу на веб-странице, но, как показано на картинке, последние три строки бесполезны и их нужно удалить.

Использование пандilocудалить последние несколько строк

Ниже используйте iloc Pandas, чтобы удалить последние три строки. Обратите внимание, что мы используем -3 в качестве второго параметра (если вы этого не понимаете, обратитесь к руководствам, связанным с Pandas, например «Изучение Python с помощью Old Qi: анализ данных»), и, наконец, сделайте копию данных.

df = dfs[0].iloc[:-3, :].copy()

Далее узнайте, как изменить многоуровневый индекс столбца на одноуровневый.

Измените многоуровневый указатель на один уровень и удалите ненужные символы.

Теперь нам нужно разобраться с проблемой многоуровневого индекса столбца, готового к использованию.DataFrame.columnsиDataFrame.columns,get_level_values():

df.columns = df.columns.get_level_values(1)

Наконец, как видите, в столбце «Дата» мы используемread_htmlПолучив данные из таблицы на странице Википедии и некоторые инструкции, далее используйтеstr.replaceфункция и регулярное выражение, чтобы пересмотреть его:

df['Date'] = df['Date'].str.replace(r"\[.*?\]","")

использоватьset_indexизменить индекс

Мы продолжаем использовать Пандыset_indexМетод устанавливает столбец даты в качестве индекса, который предоставляет объект Series типа времени для последующего построения графика.

df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

Для последующих нужд построения графика нам нужно заполнить недостающие значения 0, а затем изменить тип данных соответствующего столбца на числовой тип. Для этого используйтеapplyметод. Наконец, используйтеcumsum()метод для получения суммированного значения по элементам для каждого столбца.

df.fillna(0, inplace=True)
df = df.iloc[:,0:21].apply(pd.to_numeric)

df = df.cumsum()

График с временными рядами

Последняя часть, используйтеread_htmlИз полученных данных создайте временной ряд изображений. Во-первых, чтобы импортировать matplotlib, используйте функцию легенды, чтобы определить местоположение легенды.

%matplotlib inline
import matplotlib.pyplot as plt
f = plt.figure()

plt.title('Covid cases Sweden', color='black')
df.iloc[:,0:21].plot(ax=f.gca())

plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5)))

Вывод: как читать данные из HTML и преобразовывать их в тип DataFrame

В этой статье вы узнаете, как использовать Pandas.read_htmlФункция считывает данные из HTML, и мы создаем изображение с временным рядом, используя данные из Википедии. Не только это, но и установите столбец «Дата» в качестве индекса DataFrame в конце.

Оригинальная ссылка:Woohoo.Mars JA.Цвет/как использовать-…

Найдите общедоступный номер технических вопросов и ответов: класс Лао Ци

Ответ в публичном аккаунте:Лао Ципросматривать все статьи, книги, курсы.

Если вы думаете, что это выглядит хорошо, пожалуйста, поставьте лайк и ретвитните