第二讲:Python基础回顾——环境搭建、Jupyter Notebook与NumPy/Pandas快速入门

各位同学好,我是你们的老朋友。今天咱们正式进入实战前的热身环节。说实话,我见过太多人一上来就急着写策略,结果连数据都读不进来,那叫一个尴尬。所以这一讲,咱们把地基打牢。

Python环境搭建、Jupyter Notebook的使用、还有NumPy和Pandas这两个库的快速入门。嗯,别小看这几样东西,它们是你未来所有量化工作的基石。

1. Python环境搭建:别让工具卡住你

我个人习惯用Anaconda来管理Python环境。为什么?因为它把Python解释器、常用的科学计算库、还有包管理器都打包好了。你下载一个,基本就齐活了。

我的建议: 去官网下载Anaconda,选Python 3.9或3.10版本。别追最新版,稳定第一。

安装完成后,打开终端(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  # 数据源,后面会用到
避坑指南: 我曾经因为pip和conda混用,导致包冲突,花了半天才排查出来。建议优先用conda install,conda没有的再用pip。

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():矩阵乘法,计算投资组合方差时常用
我的经验: 做量化时,尽量用NumPy的向量化操作,别用for循环。数据量一大,性能差距是数量级的。

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. 知识体系总览

下面这张图,是我自己总结的本章知识结构。你把它存下来,以后忘了随时翻看。

Python基础回顾知识体系 量化开发环境 环境搭建 Anaconda + 虚拟环境 Jupyter Notebook 交互式编程 + 快捷键 NumPy ndarray + 向量化计算 Pandas DataFrame + 数据清洗 np.mean / np.std np.corrcoef / np.dot read_csv / info / describe pct_change / dropna 索引对齐机制 条件筛选 / 列操作 核心思想:向量化操作 + 数据对齐 避免for循环,善用Pandas索引

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处理表格数据,索引对齐是精髓

好了,今天就到这儿。这些工具你多用几次就熟了。下次咱们开始讲如何获取真实的股票数据,然后做第一个简单的策略回测。


专注资料整理