La reciente alza del BitCoin, ocurrida en la última semana de octubre 2020 me motivó a desarrollar un estudio de series de tiempo y predicción de valores futuros.

BitCoin Historical Data

Una revisión al sitio Coinmarketcap me permitió comprobar que no existe un botón para descargar la data histórica en un formato amigable, por lo que me puse manos a la obra, y realicé un trabajo de webscraping con Beautiful Soup. Lo primero es importar las librerías a ser utilizadas:

import requests
import bs4
import csv

La técnica consiste en utilizar el parser de XML de Beautiful Soup para tomar ventaja de la estructura de la web y leer directamente las clases que componen la tabla para tomar el contenido deseado, zipearlo y finalmente guardarlo en un archivo.

El siguiente paso en el código es definir los datos a extraer a partir de la URL y parser deseados:

dateList = []
highList = []
lowList = []
closeList = []

r = requests.get("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20130428&end=20201028")
soup = bs4.BeautifulSoup(r.text, "lxml")

El siguiente paso es crear el la instancia del objeto con la data de cada columna que se leerá en la tabla generada en la web:

tr = soup.find_all("tr",{"class":"cmc-table-row"})

for item in tr:
    dateList.append(item.find("td",{"class":"cmc-table__cell cmc-table__cell--sticky cmc-table__cell--left"}).text)
    highList.append(item.find_all("td")[2].text)
    lowList.append(item.find_all("td")[3].text)
    closeList.append(item.find_all("td")[4].text)

El paso final es zippear los datos guardados, de forma que queden estructurados y listos para ser almacenados en un archivo *.CSV externo.

row0 = ["date", "high", "low", "close"]
rows = zip(dateList, highList, lowList, closeList)

with open("CoinMarketCap_BTC.csv", "w", encoding="UTF-8", newline="") as csvfile:
    links_writer = csv.writer(csvfile)
    links_writer.writerow(row0)
    for item in rows:
        links_writer.writerow(item)

Esta data generada, será la base de trabajo para los próximos proyectos de trabajo de series de tiempo. Como resultado se obtuvo un archivo CSV que contiene los valores diarios: Date, High, Low y Close de Bitcoin a partir de abril 2013 hasta fines de octubre 2020. El notebook y el archivo generado pueden ser descargados desde el repositorio respectivo.

Leave a Reply

Your email address will not be published. Required fields are marked *