Парсинг данных:
Для парсинга данных нам понадобятся четыре библиотеки:
Пожалуйста, используйте 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()
3–2) Преобразование объекта в формат даты и времени в pandas с помощью:
mydata['Date1'] = pd.DatetimeIndex(mydata['Date1'])# Преобразование объекта в формат времени в dataframe
mydata.head()
mydata.info()
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.
Завершено.