CoderCastrov logo
CoderCastrov
Парсинг данных:
просмотров
3 мин чтение
#Прогнозирование временных рядов

Для парсинга данных нам понадобятся четыре библиотеки:

Пожалуйста, используйте pip install, чтобы установить неподключенный пакет. Затем следуйте этим шагам один за другим. Я хотел бы получить цены на золото с иранского веб-сайта. Конечно, вы можете повторить то, что я делаю в своем проекте, заменив мою ссылку.

1–1) Импорт библиотек:

from bs4 import BeautifulSoup
import requests
import pandas as pd

1–2) Получение данных:

Если запрос был успешным (код ответа 200), то сервер позволяет нам получить данные. Чтобы узнать ответ сервера, полезна будет эта ссылка.

# Определение URL
url = 'https://www.tgju.org/profile/geram18/history'
# Проверка ответа сервера
requests.get(url)

1–3) Попробуем показать то, что мы получили, с другой стороны исходного кода веб-страницы:

pages = requests.get(url)
pages.text

1–4) Преобразуем полученный текст страницы в формат lxml с помощью BeautifulSoup. Фактически, после этого шага новый файл полезен для поиска наших требований.

# parser-lxml = Изменение html в формат, удобный для Python
soup = BeautifulSoup(pages.text, 'lxml')
soup

1–5) В полученном файле мы хотим найти наши данные, и они представлены в виде таблицы или с помощью таблицы. Нам нужно проанализировать веб-страницы с помощью Google Chrome или других браузеров, а затем найти точный тег. Например, в этом проекте данные сохранены в теге таблицы.

table1 = soup.find('table')
table1

1–6) Важная часть: мы должны быть точными относительно индекса _<td>, _например, в этом проекте конечная цена находится в индексе 3, а дата - в _индексе 6. _Кроме того, каждый <tr> содержит одну запись наших ожидаемых данных, которые мы должны извлечь из упомянутых <td>.

С помощью **find_all(), **мы можем перебирать теги переменной soup.

# Получение каждого значения td в определенном списке
final_price = []
final_date=[]
for i in table1.find_all('tr'):
  valid_td=0
  valid_date_td=0
  for j in i.find_all('td'):
    if valid_td==3:
      final_price.append(j.text)
    if valid_date_td==6:
      final_date.append(j.text)
    valid_td+=1
    valid_date_td+=1
final_price
final_date

2–1) Теперь у нас есть полученные данные, поэтому сейчас нам нужно создать DataFrame и внести в него эти значения. Столбец Date1 предназначен для final_date, а End1 - для final_price в предыдущем разделе.

mydata = pd.DataFrame(columns = ['Date1','End1'])
mydata['Date1']=final_date
mydata['End1']=final_price
mydata.head()

3–1) Для подготовки данных для модели Prophet нам нужно два столбца: первый столбец - это дата, а второй столбец - это целое число. Поэтому нам нужно выполнить следующие шаги по очереди.

3–1–1) Удалите "," из столбца End1 с помощью:

for i in range(len(mydata)):
  mydata['End1'][i]=mydata['End1'][i].replace(',','')
mydata.head()

3–1–2) Преобразование строки в числовой формат в pandas DataFrame с помощью:

pd.to_numeric(mydata['End1'])
mydata['End1']=mydata['End1'].astype(int)
mydata.info()
Преобразование строки в целое число в DataFrame

3–2) Преобразование объекта в формат даты и времени в pandas с помощью:

mydata['Date1'] = pd.DatetimeIndex(mydata['Date1'])# Преобразование объекта в формат времени в dataframe
mydata.head()
mydata.info()
Преобразование объекта в формат даты и времени в Pandas:

3–3) Поскольку модель Prophet является моделью временных рядов, нам нужно установить дату в качестве индекса с помощью:

mydata.set_index('Date1')

4–1) Создание модели Prophet с помощью:

from prophet import Prophet
p = Prophet()

4–2) Переименование столбцов "Date1" и "End1" в "ds" и "y" соответственно для обработки в модели Prophet с помощью:

newdata_pre = mydata.rename(columns={# В Prophet столбец с признаками - ds, а столбец с целевыми значениями - y
    'Date1': 'ds',
    'End1': 'y'
})
newdata_pre.head()

5–1) Обучение модели с помощью:

p.fit(newdata_pre)

5–2) Создание новых функций на основе наших требований, например, мы хотим предсказать через 20 дней. Нижеприведенный код создаст новые функции.

Если мы хотим предсказать ежемесячно **ferq=’MS’. **Для этого нам нужно проверять наши данные ежедневно.

future_new = p.make_future_dataframe(periods=20, freq='D')
future_new

5–3) Иллюстрация предсказанных данных: 20 предсказанных данных были добавлены в основной фрейм данных, который был "mydata", поэтому нам нужен некоторый код для их извлечения с помощью следующего кода: столбец ‘yhat’ показывает предсказанные значения.

forecast_new = p.predict(future_new)
pred_new=forecast_new.iloc[len(mydata):len(forecast_new),:]
pred_new[['ds','yhat']]

Для получения более подробной информации, пожалуйста, обратитесь к некоторым ссылкам, связанным с моделью Prophet.

Завершено.