2. 环境搭建与工具链:Python环境配置、Jupyter Notebook、Pandas、Numpy、Web3.py、Requests库安装与基础使用
说实话,做链上数据分析,最怕什么?
不是策略亏钱,而是环境没搭好,代码跑不起来。
我见过太多人,策略逻辑写得挺好,结果卡在「pip install」这一步,一卡就是半天。嗯,咱们今天就把这事彻底搞定。
2.1 Python环境配置:别小看这一步
我个人习惯用 Python 3.9 或 3.10。为什么?因为 Web3.py 对这两个版本支持最稳。3.11 以上有些依赖库还没完全跟上,容易踩坑。
安装步骤其实就三步:
- 下载 Python:去 python.org 下载对应版本,安装时记得勾选「Add Python to PATH」。
- 验证安装:打开终端,输入
python --version,看到版本号就对了。 - 配置虚拟环境:我强烈建议每个项目用独立的虚拟环境,避免包冲突。
# 创建虚拟环境
python -m venv onchain_env
# 激活(Windows)
onchain_env\Scripts\activate
# 激活(Mac/Linux)
source onchain_env/bin/activate
你想想看,要是把所有库都装到全局,哪天两个项目需要不同版本的 Pandas,那画面太美我不敢看。
2.2 Jupyter Notebook:交互式分析的利器
做量化回测,Jupyter Notebook 几乎是标配。为什么?因为你可以边写代码边看结果,数据可视化直接嵌在下面,非常直观。
安装很简单:
pip install jupyter notebook
启动:
jupyter notebook
浏览器会自动打开一个页面,点「New」→「Python 3」就能新建一个 notebook。
Shift + Enter 执行当前单元格,按 Tab 自动补全代码。这两个快捷键用熟了,效率翻倍。
我个人习惯把数据加载、清洗、回测、可视化分别放在不同的单元格里。这样调试起来特别方便——哪一步出问题,直接定位到那个单元格改就行。
2.3 Pandas 与 Numpy:数据处理的双引擎
做链上数据分析,说白了就是跟表格数据打交道。Pandas 就是用来处理表格的,Numpy 则是底层做数值计算的。
安装:
pip install pandas numpy
Pandas 的核心概念就两个:
- Series:一维数据,类似 Excel 里的一列。
- DataFrame:二维表格,类似整个 Excel 工作表。
举个例子,假设我们有一份链上交易数据:
import pandas as pd
import numpy as np
# 模拟链上交易数据
data = {
'tx_hash': ['0xabc', '0xdef', '0xghi'],
'block_number': [15000000, 15000001, 15000002],
'value_eth': [1.5, 2.3, 0.8],
'gas_used': [21000, 25000, 21000]
}
df = pd.DataFrame(data)
print(df.head())
输出:
tx_hash block_number value_eth gas_used
0 0xabc 15000000 1.5 21000
1 0xdef 15000001 2.3 25000
2 0xghi 15000002 0.8 21000
你看,数据一目了然。Pandas 最常用的操作我列一下:
| 操作 | 代码 | 说明 |
|---|---|---|
| 读取 CSV | pd.read_csv('data.csv') |
从文件加载数据 |
| 筛选行 | df[df['value_eth'] > 1] |
只保留价值大于1 ETH的交易 |
| 分组统计 | df.groupby('block_number').sum() |
按区块号汇总 |
| 新增列 | df['fee'] = df['gas_used'] * 0.0001 |
计算手续费 |
Numpy 呢?它主要用来做数组运算。比如计算收益率、标准差这些:
prices = np.array([100, 102, 101, 105, 110])
returns = np.diff(prices) / prices[:-1] # 计算每日收益率
print(returns)
# 输出: [0.02 -0.0098 0.0396 0.0476]
我在项目中遇到过一个问题:用 Pandas 处理 100 万行以上的链上数据时,直接循环会慢到怀疑人生。后来改用 Numpy 的向量化操作,速度提升了上百倍。所以记住——能向量化就别用循环。
2.4 Web3.py:连接区块链的桥梁
Web3.py 是 Python 与以太坊交互的核心库。说白了,它就是让你能用 Python 读取链上数据、发送交易、调用智能合约。
安装:
pip install web3
基础用法:连接节点并读取区块数据。
from web3 import Web3
# 连接以太坊节点(这里用公共节点举例)
w3 = Web3(Web3.HTTPProvider('https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY'))
# 检查是否连接成功
print(w3.is_connected()) # 返回 True 就对了
# 获取最新区块号
latest_block = w3.eth.block_number
print(f"当前区块: {latest_block}")
# 获取指定区块的详细信息
block = w3.eth.get_block(latest_block)
print(f"区块时间戳: {block['timestamp']}")
print(f"交易数量: {len(block['transactions'])}")
我曾经踩过一个坑:用公共节点批量拉取历史数据时,因为请求太频繁被限流了。后来加了个 time.sleep(0.1),问题就解决了。
2.5 Requests 库:链下数据的补充
链上数据不是万能的。有时候你需要链下数据来辅助分析,比如交易所的行情数据、链上指标网站的 API 数据。这时候 Requests 库就派上用场了。
安装:
pip install requests
举个例子,从 CoinGecko 获取 ETH 的历史价格:
import requests
import json
url = "https://api.coingecko.com/api/v3/coins/ethereum/history"
params = {
"date": "15-01-2024",
"localization": "false"
}
response = requests.get(url, params=params)
data = response.json()
# 提取价格
price = data['market_data']['current_price']['usd']
print(f"2024年1月15日 ETH 价格: ${price}")
Requests 的常用方法就几个:
requests.get():获取数据requests.post():提交数据response.json():把返回结果转成 Python 字典response.status_code:检查请求是否成功(200 表示成功)
2.6 知识体系总览
下面这张图,把本章的核心逻辑串起来了:
从底层到顶层,一层层搭起来。别想着一步到位,先把基础环境搞稳了,后面写策略才顺手。
2.7 快速验证:你的环境搭好了吗?
最后,我习惯跑一个「全家桶」脚本,验证所有库是否正常工作:
import sys
import pandas as pd
import numpy as np
import web3
import requests
print(f"Python 版本: {sys.version}")
print(f"Pandas 版本: {pd.__version__}")
print(f"Numpy 版本: {np.__version__}")
print(f"Web3.py 版本: {web3.__version__}")
print(f"Requests 版本: {requests.__version__}")
# 简单测试
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
print("\nPandas 测试通过:")
print(df)
arr = np.array([1,2,3]) * 2
print(f"\nNumpy 测试通过:{arr}")
print("\n✅ 所有环境配置完成!")
如果所有版本号都正常显示,恭喜你,环境搭建成功了。
嗯,这一步虽然基础,但真别跳过。我见过太多人后面跑策略时发现某个库没装,回头再补,反而更浪费时间。一次搞定,后面就顺畅了。
公众号:蓝海资料掘金营,微信deep3321