# 基于Times FM模型对稳定币总规模未来5年增长趋势预测(代码) **Published by:** [NingNing](https://paragraph.com/@ningning-2/) **Published on:** 2025-04-20 **URL:** https://paragraph.com/@ningning-2/times-fm-5 ## Content import pandas as pd import numpy as np import matplotlib.pyplot as plt import timesfm from datetime import datetime, timedelta # 导入必要的库 # pandas用于数据处理 # numpy用于数值计算 # matplotlib用于数据可视化 # timesfm用于时间序列预测 # datetime用于日期时间处理 # 读取CSV文件 # 从iMac的下载文件夹读取 file_path = '/Users/ningli/Downloads/rwa-asset-timeseries-export-1744949365800.csv' # 替换"你的用户名"为您的Mac用户名 stablecoin_data = pd.read_csv(file_path) # 将时间戳转换为datetime类型,便于处理 stablecoin_data['Date'] = pd.to_datetime(stablecoin_data['Date']) # 打印数据集的基本信息 print(f"Dataset shape: {stablecoin_data.shape}") # 显示行数和列数 print(f"Date range: {stablecoin_data['Date'].min()} to {stablecoin_data['Date'].max()}") # 显示数据的时间跨度 # 获取所有稳定币列的列表(排除非稳定币列) stablecoin_columns = [col for col in stablecoin_data.columns if col not in ['Timestamp', 'Date', 'Measure']] print(f"Number of stablecoin types: {len(stablecoin_columns)}") print(f"Stablecoin types: {stablecoin_columns}") # 计算每日稳定币市场总规模 # 按日期分组并对所有稳定币值求和 daily_totals = stablecoin_data.groupby('Date')[stablecoin_columns].sum().sum(axis=1).reset_index() daily_totals.columns = ['Date', 'TotalStablecoinSize'] # 重命名列 # 按日期排序 daily_totals = daily_totals.sort_values('Date') # 显示基本统计数据 print("\nDaily Total Stablecoin Market Size Statistics:") print(daily_totals['TotalStablecoinSize'].describe()) # 计算均值、标准差、最小值、最大值等统计量 # 显示前几行和后几行记录 print("\nFirst few days of data:") print(daily_totals.head()) print("\nLast few days of data:") print(daily_totals.tail()) # 创建TimesFM模型实例,遵循示例代码 tfm = timesfm.TimesFm( hparams=timesfm.TimesFmHparams( context_len=32, # 模型的最大上下文长度 horizon_len=1825, # 预测5年(365天 × 5) input_patch_len=32, # 固定值 output_patch_len=128, # 固定值 num_layers=20, # 固定值 model_dims=1280, # 固定值 backend="cpu" # 可以是 "cpu"、"gpu" 或 "tpu" ), checkpoint=timesfm.TimesFmCheckpoint( huggingface_repo_id="google/timesfm-1.0-200m-pytorch"), # 加载预训练检查点 ) # 为模型准备输入数据 forecast_input = daily_totals['TotalStablecoinSize'].values.reshape(1, -1) # 转换为二维数组 frequency_input = [0] # 使用高频率设置 # 生成预测 point_forecast, experimental_quantile_forecast = tfm.forecast( forecast_input, freq=frequency_input, ) # 获取历史数据的最后一个日期 last_date = daily_totals['Date'].iloc[-1] # 为预测创建日期序列(5年) forecast_dates = pd.date_range(start=last_date, periods=len(point_forecast[0]) + 1, inclusive='right') # 创建用于绘图的DataFrame forecast_df = pd.DataFrame({ 'Date': forecast_dates, 'Forecast': point_forecast[0] }) # 绘制历史数据和预测数据 plt.figure(figsize=(16, 8)) # 设置图形大小 plt.plot(daily_totals['Date'], daily_totals['TotalStablecoinSize'], label='Historical Stablecoin Market Size') plt.plot(forecast_df['Date'], forecast_df['Forecast'], label='Forecast (5 Years)') plt.xlabel('Date') # X轴标签 plt.ylabel('Total Stablecoin Market Size (USD)') # Y轴标签 plt.title('Stablecoin Market Size Forecast (5 Years)') # 图表标题 plt.grid(True, alpha=0.3) # 添加网格线 plt.legend() # 显示图例 # 添加关键统计信息的注释 current_size = daily_totals['TotalStablecoinSize'].iloc[-1] # 当前市场规模 future_size = forecast_df['Forecast'].iloc[-1] # 5年后的市场规模 growth_pct = ((future_size - current_size) / current_size) * 100 # 增长百分比 # 为当前市场规模添加注释 plt.annotate(f'Current Size: ${current_size/1e9:.2f}B', xy=(last_date, current_size), xytext=(10, 30), textcoords='offset points', arrowprops=dict(arrowstyle='->')) # 为5年后市场规模添加注释 plt.annotate(f'Projected Size in 5 Years: ${future_size/1e9:.2f}B\nGrowth: {growth_pct:.2f}%', xy=(forecast_dates[-1], future_size), xytext=(-100, 30), textcoords='offset points', arrowprops=dict(arrowstyle='->')) # 优化X轴日期格式,提高可读性 plt.gcf().autofmt_xdate() # 为主要稳定币单独创建一个图表 # 首先检查哪些稳定币确实存在于我们的数据中 available_stablecoins = [coin for coin in stablecoin_columns if coin in ['USDT', 'USDC', 'BUSD', 'FRAX', 'DAI']] print(f"Available major stablecoins: {available_stablecoins}") if available_stablecoins: # 如果有可用的稳定币 # 将数据透视为按日期索引的形式 stablecoin_data_pivoted = stablecoin_data.pivot_table( index='Date', values=available_stablecoins, # 只使用实际存在的稳定币 aggfunc='sum' ).reset_index() # 创建新的图形 plt.figure(figsize=(16, 8)) else: print("No major stablecoins found in data. Skipping individual stablecoin chart.") # 显示所有图表 plt.show() # 打印预测摘要 print("\nForecast Summary:") print(f"Current total stablecoin market size: ${current_size/1e9:.2f} billion") print(f"Projected market size in 5 years: ${future_size/1e9:.2f} billion") print(f"Projected growth: {growth_pct:.2f}%") print(f"Compound Annual Growth Rate (CAGR): {((future_size/current_size)**(1/5) - 1) * 100:.2f}%") ## Publication Information - [NingNing](https://paragraph.com/@ningning-2/): Publication homepage - [All Posts](https://paragraph.com/@ningning-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@ningning-2): Subscribe to updates