如何用R语言Quandl批量下载印度NSE所有股票历史数据?
批量下载NSE股票历史数据解决方案
Hey Akash, 这里有个高效的方案,帮你自动处理Excel里的所有NSE股票代码,不用再手动为每只股票写重复代码啦:
步骤说明
- 先安装并加载所需的R包:除了
Quandl,我们还需要readxl读取Excel文件,purrr做批量迭代,dplyr辅助数据处理。 - 读取Excel中的股票代码列表。
- 编写一个自定义函数,处理单只股票的下载、添加股票名称列的逻辑。
- 用批量迭代工具自动遍历所有股票代码,合并成最终的主数据集。
- 加入错误处理,避免某只股票数据获取失败导致整个流程中断。
完整代码示例
# 安装所需包(首次运行时执行) install.packages(c("Quandl", "readxl", "purrr", "dplyr")) # 加载包 library(Quandl) library(readxl) library(purrr) library(dplyr) # 设置Quandl API密钥 Quandl.api_key("你的API密钥") # 读取Excel文件中的股票代码列表 # 假设Excel文件名为"nse_stocks.xlsx",股票代码列名为"Stock_Code" stock_codes <- read_excel("nse_stocks.xlsx") %>% pull(Stock_Code) # 定义单只股票的数据下载函数 get_stock_data <- function(code) { # 提取股票名称(比如从"NSE/ICICIBANK"中取出"ICICIBANK") stock_name <- strsplit(code, "/")[[1]][2] # 下载数据 stock_data <- Quandl(code, collapse="daily", start_date="2018-01-01", type="raw") # 添加Stock列并填充股票名称 stock_data %>% mutate(Stock = stock_name) } # 加入错误处理:如果某只股票下载失败,返回空数据框,不中断整个流程 safe_get_stock_data <- possibly(get_stock_data, otherwise = tibble()) # 批量下载并合并所有数据 Master_Data <- map_df(stock_codes, safe_get_stock_data) # 查看结果 head(Master_Data)
关键部分解释
read_excel+pull:从Excel中提取出股票代码的向量,方便后续遍历。- 自定义函数
get_stock_data:把你原来手动做的下载、加Stock列的逻辑封装起来,输入股票代码就能返回处理好的数据框。这里用strsplit自动提取股票名称,不用手动输入啦。 possibly函数:这是purrr包的错误处理工具,如果某只股票没有数据或者下载出错,它会返回一个空的数据框,不会让整个批量流程崩溃。map_df:自动遍历所有股票代码,把每只股票的结果合并成一个大的数据框,相当于自动帮你完成了多次rbind的操作。
注意事项
- 请确保Excel文件路径正确,如果文件在当前工作目录里,直接写文件名就行;如果不在,要写完整路径(比如
"C:/data/nse_stocks.xlsx")。 - 如果你的Excel里股票代码列的列名不是
Stock_Code,记得修改pull(Stock_Code)里的列名。 - 批量下载可能需要一些时间,取决于你股票的数量,耐心等待就好~
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

