ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从numpy到pandas:量化项目实战的完整学习路径

从numpy到pandas:量化项目实战的完整学习路径 想学数据分析numpy 和 pandas 是绕不开的两座山。很多人卡住不是 Python 语法没学会而是不知道这两个库到底怎么配合用更不知道学完之后能做什么。这套标题为【全34集】的教程给的是一条从 numpy 到 pandas 再到量化项目的完整路径先解决数组计算和切片性能再进入 DataFrame 处理表格最后用量化项目把前面所有知识串起来。从实用角度看这套教程有几个特征值得记录第一内容是按完整学习曲线设计的而不是零散的知识点拼接第二案例最终落到量化项目能把数据分析能力和真实业务场景连接起来第三numpy 和 pandas 是可以直接安装、在本地运行的 Python 库不需要特殊硬件普通电脑就能完成全部练习。无论你是刚看完 Python 基础、在处理 Excel 时觉得吃力还是准备做金融行情数据处理这条路线都值得完整跟一遍。这篇文章不打算给你复述课程视频而是把这条学习路径拆成可执行的落地方案环境怎么搭、numpy 要掌握到什么程度、pandas 的重点功能怎么练、量化项目里哪些知识点最常见、遇到报错和性能问题怎么排查。读完之后你至少能判断这套教程适不适合你以及从哪里开始投入效率最高。1. 教程核心内容速览这套教程不是单个功能点演示而是一套结构化的数据分析课程。下面这张表先把整体情况列出来方便快速判断是否匹配自己的需求。项目说明课程主线numpy - pandas - 数据清洗/时间序列 - 量化项目实战总集数34 集目标场景数据分析入门、表格数据处理、金融行情数据处理、量化基础前置基础Python 基础语法即可最好知道变量、循环、函数工具栈Python numpy pandas Jupyter Notebook是否含项目从标题看包含量化项目收尾硬件要求普通电脑可运行不依赖 GPU适合读者想系统学数据分析、希望用 Python 替代 Excel 处理数据的人不适合读者想学 Spark、R、Excel 宏、商业报表设计的人从课程路径看典型的学习分段大概是这样的前几集会重点解决 numpy 的数组创建、索引、切片和广播机制中间最重的部分在 pandas包括 Series、DataFrame、分组聚合、合并、排序、缺失值处理后面还会涉及时间序列最后是量化项目把收益率计算、移动平均、信号生成和简单回测串起来。这里要说明一个边界这套教程的核心是“用 Python 做数据分析”不是“量化投资全攻略”。它会帮你解决行情数据怎么读、收益率怎么算、策略信号怎么写这一类工程问题但它不等于完整的投资策略研发体系也不会替你判断哪只股票值得买。把这一点想清楚学习目标就不会跑偏。2. 适用人群与使用边界先判断你到底适不适合这套教程。如果你是下面几类人匹配度很高。第一类Python 基础语法已经过完一遍但一看到 DataFrame 就发蒙。这类问题通常不是代码不会写而是不清楚 pandas 里的表格对象和 Python 原生的列表、字典怎么互相转换以及为什么用 pandas 操作几十万行数据比纯 Python 循环快。第二类工作中经常需要处理 Excel 表格但公式和数据透视表已经不够用想用脚本自动完成多表合并、字段筛选、指标计算。第三类对量化交易感兴趣想先搞清楚行情数据在代码里长什么样以及“回测”这两个字落到 pandas 上到底是怎么实现的。反过来这套教程不适合想快速学可视化大屏、想学 Spark 处理海量数据、或者完全没写过 Python 代码的人。如果你连for循环、列表和字典都不熟悉建议先花几天补 Python 基础再看否则很容易被“为什么这里要转成 numpy 数组”这类问题卡住。数据分析和量化项目的学习还有一个重要前提数据来源要合法使用行情数据、财报数据时要注意数据版权和授权范围不要拿未经授权的接口数据做商用。教程里如果用到免费数据源也建议你先确认数据获取条款再继续。量化相关的练习更要建立正确预期用历史数据回测出来的收益率不能直接等同于未来收益回测结果不能作为投资依据。学习重点应该是 pandas 操作能力而不是跟着一个例子就觉得自己能做交易系统。3. 环境准备装好 Python、numpy、pandas教程到手之前先把本地环境弄干净。推荐直接用 Anaconda 或者 Miniconda 管理 Python 环境这样做的好处是 numpy、pandas、Jupyter 可以一次性装好而且不同项目之间不会互相污染依赖版本。安装 Anaconda 后打开终端或者 Anaconda Prompt创建一个独立环境。这里以 Python 3.10 为例这个版本和当前主流的 pandas、numpy 版本兼容问题最少# 创建环境 conda create -n data_analysis python3.10 -y # 激活环境 conda activate data_analysis # 安装核心组件 pip install numpy pandas jupyter # 验证版本 python -c import numpy; print(numpy.__version__) python -c import pandas; print(pandas.__version__)如果你不想用 Anaconda直接用系统 Python 也可以但建议创建虚拟环境避免把全局 Python 环境搞乱python -m venv data_env # Windows data_env\Scripts\activate # macOS / Linux source data_env/bin/activate pip install numpy pandas jupyter安装完成后启动 Jupyter Notebookjupyter notebook浏览器打开后新建一个 Python 3 的 notebook输入下面代码能正常输出版本号就说明环境已经可用import numpy as np import pandas as pd print(numpy:, np.__version__) print(pandas:, pd.__version__)学习过程中最容易踩的第一个坑就是版本问题。比如某天写df.groupby(city)[sales].mean()结果city列因为历史数据带空格导致KeyError或者 pandas 版本太老很多新方法用不了。建议一开始就固定一个主流版本组合比如 Python 3.10 pandas 1.5.x 或 2.x numpy 1.24 或更新版不要频繁升级更不要在一个环境里同时装两个版本。4. 从 numpy 到 pandas核心知识路径“看不懂 pandas”这个问题的根源往往不是 pandas 本身难而是没有先把 numpy 的数据结构吃透。pandas 的底层大量依赖 numpySeries 和 DataFrame 的很多操作理解成“带标签的 numpy 数组”最合适。4.1 先把 numpy 的“切片思维”练熟numpy 的 ndarray 是理解 pandas 的钥匙。尤其是多维数组的切片后面的数据筛选、前置回测、批量计算全都绕不开。下面这个例子几乎覆盖了最常用的 numpy 能力创建数组、查看形状、按行切片、按列切片、条件筛选import numpy as np # 生成 3 行 4 列的数组 arr np.arange(12).reshape(3, 4) print(arr) # 取第 2 行 print(arr[1]) # 取第 3 列 print(arr[:, 2]) # 条件筛选只保留大于 5 的元素 print(arr[arr 5]) # 求和、均值、按行求和 print(arr.sum()) print(arr.mean(axis0)) print(arr.sum(axis1))学习 numpy 时不建议死记方法名重点掌握三件事索引从 0 开始切片是左闭右开axis0是跨行计算axis1是跨列计算。这三件事没搞清楚后面看 pandas 的分组聚合结果会非常痛苦。另外要理解“向量化”。numpy 的优势不是它比 Python 循环快了多少而是它直接在数组上做元素级运算免去了显式的 for 循环。数据分析的很多性能问题本质都是“用 Python 循环去处理本该向量化计算的数据”。教程里大量演示np.where、广播、布尔索引等操作目标就是帮你建立这种向量化思维。4.2 pandas 的核心对象Series 和 DataFramepandas 里两个核心对象一个是 Series相当于一列带索引的数据另一个是 DataFrame相当于一张带列名和索引的表格。很多“看不懂 pandas”的瞬间其实是没分清“Series 上的操作”和“DataFrame 上的操作”有什么区别。从零创建一个 DataFrame 是最简单的上手方式import pandas as pd df pd.DataFrame({ date: [2024-01-01, 2024-01-02, 2024-01-03], city: [Shanghai, Beijing, Shanghai], sales: [100, 90, 130] }) print(df) print(df.dtypes)创建之后优先把几个基础操作练熟读取行和列、筛选行、新增列、删除列、修改列名、按类型转换。这一步是后面所有数据处理的基础能力一定要做到不用查文档也能写出来的程度。# 筛选一列返回 Series print(df[sales]) # 多列筛选返回 DataFrame print(df[[date, city]]) # 按条件筛选行 print(df[df[sales] 100]) # 新增一列 df[sales_2] df[sales] * 2 # 修改列名 df df.rename(columns{sales_2: double_sales}) # 重置索引 df df.reset_index(dropTrue)学习 pandas 最容易犯的错就是下意识把 DataFrame 当成 Excel 来手动改。你要做的是把“选中区域”的思维方式改成“声明条件和列名”的思维方式。比如我要筛选销售额大于 100 的城市Excel 是筛选按钮pandas 是df[df[sales] 100]我要新增一列翻倍销售额Excel 是输入公式向下拖pandas 是一次性对整列做运算。能把这两种思路切换过来pandas 就算入门了。4.3 分组、聚合、合并、透视真正让 pandas 在数据分析里替代 Excel 的是分组聚合和表间合并。教程在这一块会花不少篇幅因为后面量化项目里的按股票分组计算收益率本质上就是groupby。一个常见的业务场景销售数据里有多个城市、多个日期想按城市求平均销售额、按日期求总和、或者同时看每个城市每天的销售额。这类需求用groupby就能解决sales pd.DataFrame({ date: [2024-01-01, 2024-01-02, 2024-01-01, 2024-01-02], city: [Shanghai, Shanghai, Beijing, Beijing], amount: [100, 120, 90, 110], quantity: [5, 6, 4, 5] }) # 按城市分组求销售金额均值 print(sales.groupby(city)[amount].mean()) # 按日期分组求数量总和 print(sales.groupby(date)[quantity].sum()) # 分组后多个聚合函数 print(sales.groupby(city).agg({amount: [sum, mean], quantity: sum}))这里最容易搞混的是“分组的列”和“被聚合的列”是不是同一种东西。分组键负责把行分类被聚合的列负责参与计算。如果你经常把groupby写错先确认你要的到底是“对每个组单独算一行”还是“整体算一个汇总指标”。除了分组数据合并也一定要练。类 Excel 的VLOOKUP功能在 pandas 里对应merge或者map。比如你有订单表里面有城市名但详细的城市区域信息在另一个表里这时就需要合并orders pd.DataFrame({ order_id: [1, 2, 3], city: [Shanghai, Beijing, Shanghai] }) city_info pd.DataFrame({ city: [Shanghai, Beijing], region: [East, North] }) merged orders.merge(city_info, oncity, howleft) print(merged)给新手的建议是merge只要先跑通on和how的组合。howinner是取交集howleft是保留左表全部行howouter是取并集。日常数据分析用得最多的是left量化项目里做行情数据和交易信号的合并也经常用left因为你要保留的是主表时间序列。4.4 缺失值与数据清洗真实数据里几乎没有“干干净净”的表格。漏填的数值、带空格的字符串、错误的时间格式、重复的记录这些都是数据分析家常便饭。教程里会出现不少数据清洗内容这也是从 numpy 走向 pandas 时最重要的能力关卡之一。缺失值处理的基本套路是先查缺失量再决定是删除还是填充。经常一起出现的是isna()、dropna()、fillna()这几个函数df pd.DataFrame({ name: [A, None, C, D], score: [90, None, 70, 60] }) # 查看缺失情况 print(df.isna().sum()) # 删除有缺失值的行 print(df.dropna()) # 用 0 填充缺失值 print(df.fillna(0)) # 用前一个有效值填充 print(df.ffill())这里要注意缺失值填充本身没有绝对的对错关键是符合业务逻辑。比如市值数据缺失用0填充会严重扭曲后续计算用前一天的数据填充在行情数据里经常更合理。教程里给到的操作是工具真正决定用哪种方案的是你对数据和业务的理解。初学阶段建议每次处理前先看一眼df.isna().sum()的输出形成“先诊断再处理”的习惯。4.5 时间序列做量化绕不开的部分量化项目里最常打交道的日期字段在 pandas 里会用datetime64类型处理。如果你读取 CSV 后直接打印发现日期列是字符串那么很多排序、切片、重采样操作都会出问题。正确做法是先把字符串转成 pandas 的时间类型df pd.DataFrame({ date: [2024-01-01, 2024-01-02, 2024-01-03], close: [100, 102, 101] }) df[date] pd.to_datetime(df[date]) df df.set_index(date) print(df.index) print(df.index.dtype)时间序列最常见的操作包括按时间范围筛选、按日/周/月重新采样、计算滚动窗口统计量。以滚动窗口为例5 日均线就是rolling(5).mean()的实现。这个函数在后面的量化项目里几乎必用建议在学时间序列时单独练透。# 计算 5 日滚动均值 df[close_ma5] df[close].rolling(5).mean() print(df)学习时间序列时不要只背函数名重点理解“索引”和“普通列”的差别。一旦日期变成了索引切片、对齐、合并的语义都会发生变化。如果你发现df[df[date] 2024-01-02]报错或者结果不对优先检查df[date]是不是真的被转成了时间类型。5. 量化项目pandas 的数据分析应用教程的最后一站是量化项目。很多人一听到“量化”就觉得门槛很高实际上一个最小可运行的量化练习并不需要多高深的金融知识它其实是把前面所有 pandas 能力集中用一遍。5.1 行情数据的读取与整理最典型的行情数据是 OHLCV 数据也就是开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Volume)。拿到一份 CSV 或数据库导出的表格后第一件事不是写策略而是先确认数据格式日期是否解析、列名是否统一、是否有缺失值、是否按时间升序排列。import pandas as pd price_df pd.read_csv(stock_daily.csv, parse_dates[date]) price_df price_df.sort_values(date).reset_index(dropTrue) print(price_df.head()) print(price_df.info())这里用parse_dates[date]比手动pd.to_datetime更省事但两者本质相同。排序也相当重要除非数据源明确保证顺序否则必须先按日期排序否则后面的收益率计算会错序。5.2 收益率的计算与观察收益率是量化项目里最基础的衍生指标。在 pandas 里计算日收益率只需要一个函数pct_change()。它表示当前值相对前一个值的变化百分比正好适合看每日收益率price_df[ret] price_df[close].pct_change() print(price_df[[date, close, ret]])计算出来之后可以顺手做两件事一是用dropna()去掉第一行没有收益率的日期二是看一下收益率的分布比如均值、标准差、最大回撤。这些统计指标都是前面学过的 pandas 聚合操作print(price_df[ret].dropna().mean()) print(price_df[ret].dropna().std())遇到收益率结果不正常的情况优先检查数据是否乱序其次检查列名拼写最后检查是不是把pct_change()用在了已经累积计算的列上。如果是累计净值收益率不能直接用pct_change()去算。5.3 一个最简信号回测框架最简单的双均线策略核心就是“当收盘价上穿 5 日均线时买入下穿时卖出”。在 pandas 里这个策略可以完全向量化地表达先算滚动均线再生成信号列最后把持仓和每日收益率相乘得到策略净值变化df pd.DataFrame({ date: pd.date_range(2024-01-01, periods20, freqD), close: [100, 102, 101, 105, 108, 107, 110, 112, 115, 114, 116, 118, 120, 119, 121, 123, 125, 124, 126, 128] }) df[ma5] df[close].rolling(5).mean() # 信号收盘价大于均线时持有 df[signal] (df[close] df[ma5]).astype(int) # 重要用 shift(1) 避免用到当天收盘价信息防止前视偏差 df[position] df[signal].shift(1) df[daily_ret] df[close].pct_change() df[strategy_ret] df[position] * df[daily_ret] df[strategy_nav] (1 df[strategy_ret]).cumprod() print(df[[date, close, ma5, signal, position, daily_ret, strategy_ret, strategy_nav]])这个例子里最重要的一行是df[position] df[signal].shift(1)。真实回测中你不能在当天收盘时根据当天收盘价立刻买入因为执行会有延迟。shift(1)把信号延迟一天让持仓在第二天才生效。很多新手写的回测收益率虚高都是因为忘了这一步用到了未来数据。如果你跟着教程推进到这里务必把shift的意义想明白。5.4 批量处理多只标的量化项目里不会只有一只股票。多标的数据通常放在长表里所有股票的数据堆在一张表中用symbol或code列区分。这时可以用groupby批量处理每只股票results [] for code, group in all_price.groupby(code): group group.sort_values(date) group[ret] group[close].pct_change() group[ma5] group[close].rolling(5).mean() results.append(group) all_result pd.concat(results, ignore_indexTrue)如果你的股票数量不多groupby加循环是可读性最高的写法。如果标的很多、数据量很大再考虑groupby().apply()或者向量化分组操作。初学阶段先用可读性好的写法跑通再想优化。需要提醒的是教程里的量化项目更多是做工程练习不要把它当成实盘信号的来源。真实量化交易还涉及数据源服务、撮合模型、交易成本、滑点、风控、品种差异等大量问题这些已经远远超出单一 pandas 教程的范畴。学习时把重心放在“如何用 DataFrame 表达一个策略逻辑”上而不是急着把策略投入资金。6. 功能测试与学习验证看完教程不等于学会。判断自己是否掌握有一个很直接的标准关掉视频只靠自己把下面这套小任务写完并且每一步都能解释为什么这样写。建议用一套“三层验证法”第一层复现教程代码。不要复制要手敲遇到报错就自己排查。这个阶段的目标是熟悉函数名和常见报错。第二层改参数和场景。比如教程里算的是 5 日均线你改成 10 日均线教程里用的是 100 行模拟数据你导入一份真实 CSV 试试。这个阶段的目标是理解参数变化对结果的影响。第三层独立完成一个小任务。比如给你一份销售明细表要求按城市和月份计算销售额汇总并输出到新的 CSV 文件。下面是一个可以直接用来验证的练习题。假设你有一份销售明细表请完成读取数据、清洗日期、删除缺失值、按城市分组计算月度销售额、按销售额降序排序、导出结果。import pandas as pd # 模拟数据 sales pd.DataFrame({ date: [2024-01-05, 2024-01-15, 2024-02-01, 2024-02-10], city: [Shanghai, Beijing, Shanghai, Beijing], amount: [100, 90, 130, 80] }) # 第一步日期解析 sales[date] pd.to_datetime(sales[date]) # 第二步提取月份 sales[month] sales[date].dt.to_period(M) # 第三步分组聚合 summary sales.groupby([city, month])[amount].sum().reset_index() # 第四步排序 summary summary.sort_values(amount, ascendingFalse) # 第五步导出 summary.to_csv(sales_summary.csv, indexFalse) print(summary)判断标准很简单如果上面每步都能不查文档写出来pandas 的核心操作已经过关。如果中途卡住说明对应的知识点还没建立肌肉记忆需要回到教程对应段落重新看一遍。量化项目部分也有对应的验证目标给定一份行情 CSV能独立完成日期解析、排序、计算日收益率、计算移动平均、生成持仓信号、统计策略累计净值。这一步能把时间序列、pct_change、rolling、shift、cumprod五个关键点全部覆盖。7. 数据量变大时的性能观察教程里的小数据集跑起来很顺但一旦换成几万行、几十万行的数据性能问题就会出现。 pandas 不是性能极限工具但对大部分数据分析场景已经足够好用。关键是不要用错误的姿势使用它。7.1 不要用 for 循环去碰每一行初学者最常见的性能问题是用for循环一行一行处理数据。比如想新增一列如果写成“循环所有行、根据条件给每行赋值”速度会慢到难以接受。正确做法是用向量化操作让 pandas 在底层一次性处理import numpy as np # 不推荐循环逐行判断 for i in range(len(df)): if df[close][i] df[ma5][i]: df[signal_loop][i] 1 else: df[signal_loop][i] 0 # 推荐np.where 向量化 df[signal_vec] np.where(df[close] df[ma5], 1, 0)如果你发现代码慢到无法运行先检查是不是多层循环嵌套。能写np.where、df[col].apply()或者直接向量化计算的地方就不要写for。7.2 内存占用怎么查处理较大文件之前先看一眼内存占用能避免很多崩溃问题。pandas 提供了快速查内存的方法# 查看每一列的内存占用 print(df.memory_usage(deepTrue)) # 查看整体内存占用摘要 print(df.info(memory_usagedeep))如果df.info()显示内存占用很高通常是字符串列太多、或者数据类型变成了object。可以考虑把object列转成category、把需要计算的数值列转成更小的 dtype。但刚开始学习时不必过度优化先确认能正常读入和处理再说。7.3 大文件分块读取当 CSV 文件大到无法一次性读入内存可以用chunksize分块读取chunk_iter pd.read_csv(large_file.csv, chunksize10000) chunks [] for chunk in chunk_iter: # 对每个 chunk 做必要处理 chunks.append(chunk) df_all pd.concat(chunks, ignore_indexTrue)分块读取适合做初步清洗、筛选、汇总但不适合每一步都需要全局数据的操作比如计算全表收益率的分位数、做全表merge。如果必须做全局操作要么扩大内存要么换用数据库或 Dask 等工具。这套教程主要聚焦 pandas 本身不会深入大数据框架你只要知道 pandas 的边界在哪里就行。8. 常见问题与排查方法跟着教程学习时最容易踩的坑主要集中在安装、数据类型、中文编码、时间序列这几个方向。下表整理了典型问题的现象、原因和处理方式。问题现象可能原因排查方式解决方案安装 numpy/pandas 失败网络源慢或依赖冲突查看 pip 报错信息换国内镜像源重试例如 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas打开 CSV 中文乱码文件编码不是 UTF-8查看文件编码读取时指定 encoding例如 encodinggbk 或 encodingutf-8日期列排序不对日期是字符串类型打印 df.dtypes用 pd.to_datetime 转 datetime64筛选行报 KeyError列名拼写或有空格打印 df.columns先清洗列名例如 df.columns df.columns.str.strip()groupby 结果不是想要的分组键和被聚合列混淆检查 groupby 后的结果 index用 reset_index 把分组键转回普通列回测收益率虚高信号没有 shift 延迟检查 position 列是否用了当天信号用 df[signal].shift(1)代码跑得很慢用 for 循环逐行处理检查代码里是否有循环改成向量化写法内存不够、崩溃数据文件过大查看 df.info(memory_usagedeep)分块读取、减少列数、优化 dtype遇到报错时最有效的排查顺序是先看完整报错信息不要只看第一行再打印df.dtypes和df.columns确认数据类型和列名最后才去搜索解决方案。很多问题本质都是“列名写错”或者“类型没转对”这两个原因占了 pandas 报错的多半。还有一个很容易被忽略的问题Jupyter Notebook 里重复执行同一段代码会导致 DataFrame 状态叠加。比如你执行过一次fillna(0)再执行一次同样的代码结果可能和预期不同。建议把整个流程做成脚本analysis.py每次从头执行或者手动清空输出后重启 kernel。9. 最佳实践与学习建议这套教程的优点是从 numpy 到 pandas 再到量化项目方向很明确。但如果只是看视频、不做练习效果会很差。数据分析是“动手技能”一定要保证每一集都有对应的代码练习。工程层面有几个好习惯建议从一开始就养成。第一给项目建清晰的目录结构data/放原始数据code/放脚本和 notebookoutput/放结果文件。不要把所有文件堆在桌面上否则后面处理多只股票、多个版本代码时会混乱。第二写代码时先打印中间结果比如df.head()、df.dtypes、df.isna().sum()确认数据状态之后再做下一步。第三保留一份最小可运行配置记录安装的 numpy、pandas 版本方便换电脑时快速恢复。数据合规和隐私问题也要重视。教程里如果使用免费行情数据源要先确认数据使用条款避免把有版权的数据批量下载后用于商用。涉及真实用户数据、交易数据的练习要脱敏处理后才能放在博客或公开笔记中。用公开数据做教学练习没问题但不要碰未经授权的接口和爬取行为。量化相关的练习还要加上一层特殊注意事项回测结果不等于未来表现历史数据的统计规律可能失效任何自动交易策略都需要在充分了解风险的前提下投入真实资金。甚至更保守一点只把量化项目当成 pandas 的综合练习题不要让一个数据练习直接变成投资决策依据。学习节奏上建议不要贪快。numpy 部分如果练习不熟后面 pandas 的很多操作会理解得很吃力。可以给自己定一个小目标numpy 切片和广播练熟再进 pandaspandas 分组和合并练熟再做时间序列时间序列练熟再进入量化项目。每一步都留出“独立完成任务”的时间。还有一个被低估的练习方式是“改数据不改方法”。教程里用某一只股票或某一份销售表你可以换自己的数据集但代码方法完全不变。这样能快速检测自己到底是真会了还是只是背下来了某一个特定数据流程里的代码。10. 总结与下一步这套教程的价值在于它把“学 numpy”和“学 pandas”以及“做量化项目”三个阶段串联起来了。很多初学者单独看 numpy 觉得抽象单独看 pandas 觉得方法太多记不住只有到量化项目那一层才会真正理解“为什么groupby有用”“为什么时间序列要先转 datetime”“为什么shift那么关键”。最先要验证的功能是 numpy 切片和 pandas 的分组聚合。这两项是后续所有数据操作的地基。最容易踩的坑有两个一个是日期列类型没有转换导致排序和重采样结果错误另一个是回测里信号没有shift(1)造成未来数据泄漏。这两个坑如果能在学习阶段踩一遍并解决掉你对 pandas 的理解会比只看视频深刻很多。下一步的方向可以是把教程里的量化项目扩展成多股票版本加入交易成本把数据清洗流程整理成可复用的函数或者尝试把处理好的结果用 matplotlib 画出净值曲线。教程的终点只是数据分析的起点真正能让你提升的是持续用真实数据去练习、去解决新的数据处理问题。如果你现在正准备开始学这套教程建议先把环境搭好然后从 numpy 切片练起至少完成一次“从零创建 DataFrame - 清洗数据 - 计算指标 -导出结果”的完整流程再进入量化项目章节。学完之后你会发现以前那些“看不懂 pandas”的困惑大多只是缺了一条从底层数组到表格处理的完整链路。
返回列表