第二讲:Python基础回顾——环境搭建、Jupyter Notebook与NumPy/Pandas快速入门
各位同学好,我是你们的老朋友。今天咱们正式进入实战前的热身环节。说实话,我见过太多人一上来就急着写策略,结果连数据都读不进来,那叫一个尴尬。所以这一讲,咱们把地基打牢。
Python环境搭建、Jupyter Notebook的使用、还有NumPy和Pandas这两个库的快速入门。嗯,别小看这几样东西,它们是你未来所有量化工作的基石。
1. Python环境搭建:别让工具卡住你
我个人习惯用Anaconda来管理Python环境。为什么?因为它把Python解释器、常用的科学计算库、还有包管理器都打包好了。你下载一个,基本就齐活了。
安装完成后,打开终端(Windows用户用Anaconda Prompt),输入:
python --version
conda --version
如果能看到版本号,恭喜你,环境搭好了。
接下来,创建一个专门用于量化分析的虚拟环境。我在项目中遇到过好几次,不同项目依赖的库版本打架,搞得头大。虚拟环境就是用来隔离这些依赖的。
conda create -n quant_env python=3.9
conda activate quant_env
然后安装我们需要的核心库:
conda install numpy pandas jupyter matplotlib
pip install tushare akshare # 数据源,后面会用到
2. Jupyter Notebook:量化研究的利器
Jupyter Notebook是什么?说白了,它是一个交互式的编程环境。你可以一边写代码,一边看结果,还能写注释、画图表。做量化研究,这玩意儿比IDE顺手多了。
启动方式很简单:
jupyter notebook
浏览器会自动打开一个页面。你点「New」→「Python 3」,就新建了一个笔记本。
我个人习惯把笔记本分成几个区域:
- 数据加载区:读取CSV、数据库、API数据
- 数据清洗区:处理缺失值、异常值
- 策略逻辑区:写买卖信号
- 回测区:计算收益、风险指标
- 可视化区:画K线、净值曲线
你想想看,每个区域独立运行,调试起来多方便。改一个区域的代码,其他区域不受影响。
Shift + Enter:运行当前单元格并跳到下一个Ctrl + Enter:运行当前单元格但不跳转Esc + A:在当前单元格上方插入新单元格Esc + B:在当前单元格下方插入新单元格
3. NumPy:数值计算的瑞士军刀
NumPy的核心是ndarray,也就是N维数组。它比Python原生的列表快得多,因为底层是C语言实现的。
先导入:
import numpy as np
创建数组:
# 从列表创建
arr = np.array([1, 2, 3, 4, 5])
# 创建全0数组
zeros = np.zeros((3, 4))
# 创建等差数列
seq = np.linspace(0, 1, 10) # 从0到1,均匀取10个数
我在项目中遇到过最常用的操作是向量化计算。比如计算股票的日收益率:
prices = np.array([100, 102, 101, 105, 108])
returns = (prices[1:] - prices[:-1]) / prices[:-1]
print(returns) # [0.02, -0.0098, 0.0396, 0.0286]
你看,一行代码搞定,不用写循环。这就是NumPy的魅力。
其他常用操作:
np.mean()、np.std():计算均值和标准差np.corrcoef():计算相关系数矩阵np.dot():矩阵乘法,计算投资组合方差时常用
4. Pandas:数据分析的标配
Pandas建立在NumPy之上,提供了DataFrame和Series两种数据结构。说白了,DataFrame就是一张表格,有行有列,跟Excel很像。
导入:
import pandas as pd
读取股票数据:
df = pd.read_csv('stock_data.csv')
print(df.head()) # 查看前5行
DataFrame的常用操作:
# 查看基本信息
df.info()
df.describe()
# 选择列
close = df['close']
# 条件筛选
high_volume = df[df['volume'] > 1000000]
# 添加新列
df['return'] = df['close'].pct_change()
# 处理缺失值
df.dropna(inplace=True) # 删除缺失行
df.fillna(method='ffill', inplace=True) # 向前填充
我刚开始做量化时,最头疼的就是数据对齐。不同股票的交易日期可能不一样,Pandas的索引对齐机制完美解决了这个问题。
# 假设有两个股票的收盘价
stock_a = pd.Series([100, 102, 101], index=['2024-01-01', '2024-01-02', '2024-01-03'])
stock_b = pd.Series([50, 51], index=['2024-01-01', '2024-01-03'])
# 自动对齐
combined = pd.DataFrame({'A': stock_a, 'B': stock_b})
print(combined)
# 输出:
# A B
# 2024-01-01 100 50.0
# 2024-01-02 102 NaN
# 2024-01-03 101 51.0
你看,缺失值自动补NaN,这就是Pandas的智能之处。
5. 知识体系总览
下面这张图,是我自己总结的本章知识结构。你把它存下来,以后忘了随时翻看。
6. 实战小练习:快速上手
光看不练假把式。咱们来个小练习,把今天学的串起来。
任务:读取某只股票的历史数据,计算20日均线,并找出收盘价高于均线的日期。
import numpy as np
import pandas as pd
# 模拟数据(实际中从CSV或API读取)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
prices = np.random.randn(100).cumsum() + 100 # 随机游走模拟股价
df = pd.DataFrame({'date': dates, 'close': prices})
df.set_index('date', inplace=True)
# 计算20日均线
df['ma20'] = df['close'].rolling(window=20).mean()
# 找出收盘价高于均线的日期
above_ma = df[df['close'] > df['ma20']]
print(f"收盘价高于20日均线的天数:{len(above_ma)}")
# 可视化(简单示意)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['close'], label='收盘价')
plt.plot(df.index, df['ma20'], label='20日均线', linestyle='--')
plt.legend()
plt.show()
这段代码虽然简单,但包含了数据生成、滚动计算、条件筛选、可视化这几个核心步骤。你把它跑通了,后面写策略就顺了。
- 用Anaconda管理环境,虚拟环境隔离依赖
- Jupyter Notebook做交互式研究,分区域组织代码
- NumPy做向量化计算,告别for循环
- Pandas处理表格数据,索引对齐是精髓
好了,今天就到这儿。这些工具你多用几次就熟了。下次咱们开始讲如何获取真实的股票数据,然后做第一个简单的策略回测。