我对使用 R 分析资产负债表和损益表很感兴趣。我看到有 R 包可以从 Yahoo 和 Google Finance 中提取信息,但我看到的所有示例都涉及历史股价信息。有没有办法可以使用 R 从资产负债表和损益表中提取历史信息?
11 回答
我在网上只找到了您问题的部分解决方案,因为我设法只检索了一年的资产负债表信息和财务报表。我不知道该怎么做更多年。R 中有一个名为quantmod的包,您可以从 CRAN 安装它
install.packages('quantmod')
然后您可以执行以下操作:假设您想从纽约证券交易所上市的公司获取财务信息:通用电气。代码:通用电气
library(quantmod)
getFinancials('GE')
viewFinancials(GE.f)
要仅获取每年报告的损益表,作为数据框使用:
viewFinancials(GE.f, "IS", "A")
请让我知道,如果你发现如何做到这一点多年。
你想问并得到答案的问题是,我在哪里可以获得免费的 XBRL 数据来分析公司资产负债表,是否有一个库可以在 R 中使用这些数据?
XBRL(Extensible Business Reporting Language - http://en.wikipedia.org/wiki/XBRL)是一种以 XML 格式标记会计报表(损益表、资产负债表、损益表)的标准,这样它们就可以很容易地被由计算机解析并放入电子表格。
据我所知,很多公司监管机构(例如美国的 SEC、澳大利亚的 ASIC)都在鼓励其管辖范围内的公司使用这种格式进行报告,或者进行试点,但我不认为它已经此时强制执行。如果您将您的投资范围(我假设您希望这些电子格式的数据用于投资目的)限制在以 XBRL 形式免费提供其季度报告的公司,我希望您将有一个相当短的公司名单可供投资!
彭博、路透社等都拥有获取企业基本数据的昂贵资源。也可能有人在经营着以 XBRL 格式发布资产负债表的整洁业务。XIgnite 的xFundamentals和xGlobalFundamentals网络服务更便宜,但仍然需要付费,但您无法从它们那里获得完整的资产负债表数据。
读入财务信息试试这个功能(我几个月前拿起它并做了一些小调整)
require(XML)
require(plyr)
getKeyStats_xpath <- function(symbol) {
yahoo.URL <- "http://finance.yahoo.com/q/ks?s="
html_text <- htmlParse(paste(yahoo.URL, symbol, sep = ""), encoding="UTF-8")
#search for <td> nodes anywhere that have class 'yfnc_tablehead1'
nodes <- getNodeSet(html_text, "/*//td[@class='yfnc_tablehead1']")
if(length(nodes) > 0 ) {
measures <- sapply(nodes, xmlValue)
#Clean up the column name
measures <- gsub(" *[0-9]*:", "", gsub(" \\(.*?\\)[0-9]*:","", measures))
#Remove dups
dups <- which(duplicated(measures))
#print(dups)
for(i in 1:length(dups))
measures[dups[i]] = paste(measures[dups[i]], i, sep=" ")
#use siblings function to get value
values <- sapply(nodes, function(x) xmlValue(getSibling(x)))
df <- data.frame(t(values))
colnames(df) <- measures
return(df)
} else {
break
}
}
要使用它,例如比较 3 家公司并将数据写入 csv 文件,请执行以下操作:
tickers <- c("AAPL","GOOG","F")
stats <- ldply(tickers, getKeyStats_xpath)
rownames(stats) <- tickers
write.csv(t(stats), "FinancialStats_updated.csv",row.names=TRUE)
刚试了一下。还在工作。
更新为雅虎改变它的网站布局:
由于雅虎再次更改其网站布局,上述功能不再起作用。幸运的是,获取财务信息仍然很容易,因为获取基本数据的标签没有更改。下载 MSFT、AAPL 和福特的 eps 和市盈率文件的示例,在浏览器中插入以下内容:
http://finance.yahoo.com/d/quotes.csv?s=MSFT+AAPL+F&f=ser
在浏览器的地址栏中输入上述 URL 并按回车键后。CSV 将自动下载到您的计算机,您应该得到如下所示的 cvs 文件(数据为 2016 年 7 月 22 日):
一些基本数据的雅虎标签:
你犯了一个常见的错误,将“访问雅虎或谷歌数据”与“我在雅虎或谷歌财经上看到的所有内容都可以下载”相混淆。
当 R 函数下载历史股票价格数据时,它们几乎总是访问为此目的明确设计的接口,例如 cgi 处理程序,提供给定股票代码和开始和结束日期的 csv 文件。所以这很简单,因为我们需要做的就是形成适当的查询,点击网络服务器,获取 csv 文件并对其进行 dparse。
现在资产负债表信息(据我所知)在这样的界面中不可用。因此,您需要“屏幕抓取”并直接解析 html。
目前尚不清楚 R 是否是最好的工具。我知道一些 Perl 模块用于从 Yahoo Finance 获取非时间序列数据,但没有使用它们。
考虑到最后两条评论,您可以使用 EdgardOnline 经济地获取公司财务报表。它不是免费的,但比彭博社和路透社便宜。要考虑的另一件事是财务报告规范化/标准化。仅仅因为两家公司处于同一行业并销售相似的产品并不一定意味着如果您将两家公司的损益表或资产负债表并排放置,则报告项目一定会对齐。Compustat 具有标准化/标准化的财务报告。
我对 R 一无所知,但假设它可以调用 REST API 并以 XML 形式使用数据,您可以在http://www.mergent.com/servius/尝试 Mergent Company Fundamentals API - 有很多非常详细的财务报表数据(资产负债表/损益表/现金流量表/比率),跨公司标准化,可追溯到 20 多年前
我编写了一个 C# 程序,我认为它可以满足您的需求。它解析来自 nasdaq.com 页面的 html。它解析 html 并为每只股票创建 1 个 csv 文件,其中包括 5 到 10 年的损益表、现金流和资产负债表值,具体取决于股票的年龄。我现在正在努力添加一些分析计算(此时主要是历史比率)。我有兴趣了解 R 及其在基本分析中的应用。也许我们可以互相帮助。
我最近在 CRAN 上发现了这个 R 包。我相信这正是你所要求的。
您可以从Intrinio in R 免费获取所有三种类型的财务报表。此外,您可以获得报告报表和标准化报表。从 SEC 提取 XBRL 文件的问题在于没有标准化选项,这意味着如果您想进行交叉股权比较,您必须手动映射财务报表项目。这是一个例子:
#Install httr, which you need to request data via API
install.packages("httr")
require("httr")
#Install jsonlite which parses JSON
install.packages("jsonlite")
require("jsonlite")
#Create variables for your usename and password, get those at intrinio.com/login
username <- "Your_API_Username"
password <- "Your_API_Password"
#Making an api call for roic. This puts together the different parts of the API call
base <- "https://api.intrinio.com/"
endpoint <- "financials/"
type <- "standardized"
stock <- "YUM"
statement <- "income_statement"
fiscal_period <- "Q2"
fiscal_year <- "2015"
#Pasting them together to make the API call
call1 <- paste(base,endpoint,type,"?","identifier","=", stock, "&","statement","=",statement,"&","fiscal_period",
"=", fiscal_period, "&", "fiscal_year", "=", fiscal_year, sep="")
# call1 Looks like this "https://api.intrinio.com/financials/standardized?identifier=YUM&statement=income_statement&fiscal_period=Q2&fiscal_year=2015"
#Now we use the API call to request the data from Intrinio's database
YUM_Income <- GET(call1, authenticate(username,password, type = "basic"))
#That gives us the ROIC value, but it isn't in a good format so we parse it
test1 <- unlist(content(YUM_Income, "text"))
#Convert from JSON to flattened list
parsed_statement <- fromJSON(test1)
#Then make your data frame:
df1 <- data.frame(parsed_statement)
我编写此脚本是为了方便更改代码、日期和报表类型,以便您可以获取任何美国公司在任何时期的财务报表。
我实际上是在 Google 表格中执行此操作的。我认为这也是最简单的方法,因为它可以提取真实的实时数据是另一个奖励点。最后,它不会占用我的任何空间来保存这些语句。
=importhtml(" http://investing.money.msn.com/investments/stock-income-statement/?symbol=US%3A "&B1&"&stmtView=Ann", "table",0)
其中 B1 单元格包含股票代码。
你可以对资产负债表和现金流做同样的事情。
1-在此处从 Rapid Api 订阅 yahoo Finance api
2- 拿到你的钥匙
3-在代码中插入您的密钥:
name="AAPL"
{raw=httr::GET(paste("https://yahoo-finance15.p.rapidapi.com//api/yahoo/qu/quote/",name,"/financial-data", sep = ""),
httr::add_headers("x-rapidapi-host"= "yahoo-finance15.p.rapidapi.com",
"x-rapidapi-key"="insert your Key here")
)
raw=jsonlite::fromJSON(rawToChar(raw$content))
values=sapply(1:length(raw$financialData),function(x){sapply(raw, "[", x)[[1]][1]})
names(values)=names(raw$financialData)
values=as.data.frame(t(values))
row.names(values)=name
}
values
优点:获取数据的简单方法
缺点:免费版本限制为每月 500 个请求