def get_top_volume_coins():
    """Scrapes top coins by trading volume "https://www.coingecko.com/en/coins/high_volume"

    Returns
    -------
    pandas.DataFrame
        rank, name, symbol, price, change_1h, change_24h, change_7d, volume_24h, market_cap
    """
    columns = [
        COLUMNS["rank"],
        COLUMNS["name"],
        COLUMNS["symbol"],
        COLUMNS["price"],
        COLUMNS["change_1h"],
        COLUMNS["change_24h"],
        COLUMNS["change_7d"],
        COLUMNS["volume_24h"],
        COLUMNS["market_cap"],
    ]
    url = "https://www.coingecko.com/en/coins/high_volume"
    rows = scrape_gecko_data(url).find("tbody").find_all("tr")
    results = []
    for row in rows:
        row_cleaned = clean_row(row)
        if len(row_cleaned) == 9:
            row_cleaned.insert(0, "?")
        row_cleaned.pop(3)
        results.append(row_cleaned)
    df = replace_qm(pd.DataFrame(results, columns=columns))
    df.drop("rank", axis=1, inplace=True)
    create_df_index(df, "rank")
    return df
def get_indexes():
    """Get list of crypto indexes from CoinGecko API

    Returns
    -------
    pandas.DataFrame
        name, id, market, last, is_multi_asset_composite
    """
    df = pd.DataFrame(client.get_indexes(per_page=250))
    create_df_index(df, "rank")
    return df
def get_stable_coins():
    """Scrapes stable coins data from "https://www.coingecko.com/en/stablecoins"

    Returns
    -------
    pandas.DataFrame
        rank, name, symbol, price, change_24h, exchanges, market_cap, change_30, url
    """
    columns = [
        COLUMNS["rank"],
        COLUMNS["name"],
        COLUMNS["symbol"],
        COLUMNS["price"],
        COLUMNS["change_24h"],
        COLUMNS["exchanges"],
        COLUMNS["market_cap"],
        COLUMNS["change_30d"],
        COLUMNS["url"],
    ]
    url = "https://www.coingecko.com/en/stablecoins"
    rows = scrape_gecko_data(url).find("tbody").find_all("tr")
    results = []
    for row in rows:
        link = GECKO_BASE_URL + row.find("a")["href"]
        row_cleaned = clean_row(row)
        if len(row_cleaned) == 8:
            row_cleaned.append(None)

        (
            rank,
            name,
            *symbols,
            price,
            volume_24h,
            exchanges,
            market_cap,
            change_30d,
        ) = row_cleaned
        symbol = symbols[0] if symbols else symbols
        results.append([
            rank,
            name,
            symbol,
            price,
            volume_24h,
            exchanges,
            market_cap,
            change_30d,
            link,
        ])
    df = replace_qm(pd.DataFrame(results, columns=columns))
    df.drop("rank", axis=1, inplace=True)
    create_df_index(df, "rank")
    return df
def get_exchange_rates():
    """Get list of crypto, fiats, commodity exchange rates from CoinGecko API

    Returns
    -------
    pandas.DataFrame
        index, name, unit, value, type
    """
    df = pd.DataFrame(client.get_exchange_rates()["rates"]).T.reset_index()
    df.drop("index", axis=1, inplace=True)
    create_df_index(df, "index")
    return df
def get_financial_platforms():
    """Get list of financial platforms from CoinGecko API

    Returns
    -------
    pandas.DataFrame
        rank, name, category, centralized, website_url
    """
    df = pd.DataFrame(client.get_finance_platforms())
    df.drop("facts", axis=1, inplace=True)
    create_df_index(df, "rank")
    return df
def get_derivatives():
    """Get list of crypto derivatives from CoinGecko API

    Returns
    -------
    pandas.DataFrame
        market, symbol, price, pct_change_24h, contract_type, basis, spread, funding_rate, volume_24h
    """
    df = pd.DataFrame(client.get_derivatives(include_tickers="unexpired"))
    df.drop(
        ["index", "last_traded_at", "expired_at", "index_id", "open_interest"],
        axis=1,
        inplace=True,
    )

    df.rename(columns={"price_percentage_change_24h": "pct_change_24h"},
              inplace=True)
    create_df_index(df, "rank")
    return df
def get_finance_products():
    """Get list of financial products from CoinGecko API

    Returns
    -------
    pandas.DataFrame
       rank,  platform, identifier, supply_rate_percentage, borrow_rate_percentage
    """
    df = pd.DataFrame(
        client.get_finance_products(per_page=250),
        columns=[
            "platform",
            "identifier",
            "supply_rate_percentage",
            "borrow_rate_percentage",
        ],
    )
    create_df_index(df, "rank")
    return df
def get_exchanges():
    """Get list of top exchanges from CoinGecko API

    Returns
    -------
    pandas.DataFrame
        trust_score, id, name, country, year_established, trade_volume_24h_btc, url
    """
    df = pd.DataFrame(client.get_exchanges_list(per_page=250))
    df.replace({float(np.NaN): None}, inplace=True)
    df = df[[
        "trust_score",
        COLUMNS["id"],
        COLUMNS["name"],
        COLUMNS["country"],
        "year_established",
        "trade_volume_24h_btc",
        COLUMNS["url"],
    ]]
    create_df_index(df, "rank")
    return df