使用R分析资产负债表和收入表

时间:2010-04-10 20:02:10

标签: r finance

我有兴趣使用R分析资产负债表和损益表。我看到有R套件从雅虎和谷歌财经中提取信息,但我看到的所有例子都涉及历史股价信息。有没有办法可以使用R?从资产负债表和损益表中提取历史信息?

11 个答案:

答案 0 :(得分:9)

我在网上找到了您的问题的部分解决方案,因为我设法只检索一年的资产负债表信息和财务报表。多年来我不知道怎么做。 R中有一个名为 quantmod 的软件包,您可以从CRAN安装

install.packages('quantmod')

然后您可以执行以下操作:假设您要从纽约证券交易所上市的公司获取财务信息:通用电气。自动收报机:GE

 library(quantmod)
 getFinancials('GE')
 viewFinancials(GE.f)

要获得唯一报告的损益表,作为数据框使用:

viewFinancials(GE.f, "IS", "A")

如果您多年来了解如何执行此操作,请与我们联系。

答案 1 :(得分:4)

您想问的问题,并获得答案!,我在哪里可以获得用于分析公司资产负债表的免费XBRL数据,是否有用于在R中使用此类数据的库?

XBRL(可扩展商业报告语言 - http://en.wikipedia.org/wiki/XBRL)是以XML格式标记会计报表(损益表,资产负债表,利润和损失报表)的标准,以便可以通过计算机轻松解析它们放入电子表格。

据我所知,许多公司监管机构(例如美国证券交易委员会,澳大利亚的ASIC)都在鼓励其管辖范围内的公司报告使用这种格式或运行飞行员,但我不相信它已被强制执行。如果您限制您的投资范围(我假设您希望将这些数据用于投资目的的电子格式)给那些以XBRL形式免费提供季度报告的公司,我预计您将有一个很短的公司投资名单!

彭博社,路透社等都为获取企业基础数据提供了大量资金。可能还有人在运行整洁的商业出版XBRL格式的资产负债表。更便宜但仍然付费的是XIgnite的xFundamentalsxGlobalFundamentals网络服务,但您没有从中获得完整的资产负债表数据。

答案 2 :(得分:3)

读入财务信息试试这个功能(几个月前我选了它并做了一些小调整)

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) 

试过了。还在工作。

更新雅虎改变了它的网站布局:

上述功能不再适用,因为雅虎再次更改了其网站布局。幸运的是,由于获取基本数据的标签没有改变,因此仍然很容易获得财务信息。 下载具有eps和P / E比率的文件的示例,MSFT,AAPL和福特将以下内容插入您的浏览器:

http://finance.yahoo.com/d/quotes.csv?s=MSFT+AAPL+F&f=ser

并将以上网址输入浏览器的地址栏并点击返回/输入。 CSV将自动下载到您的计算机,您应该获得如下所示的cvs文件(数据为2016年7月22日):

enter image description here

基础数据的一些雅虎标签:

enter image description here

答案 3 :(得分:2)

你犯了一个常见的错误,就是把“访问雅虎或谷歌数据”与“我在雅虎或谷歌财经上看到的所有东西都可以下载”混为一谈。

当R函数下载历史股票价格数据时,它们几乎总是访问为此目的明确设计的界面,例如:一个cgi处理程序,提供csv文件,给出一个股票代码和开始和结束日期。所以这个 easy 因为我们需要做的就是形成适当的查询,点击网络服务器,获取csv文件并对其进行dparse。

现在资产负债表信息(据我所知)在这样的界面中不可用。所以你需要'屏幕刮'并直接解析html。

目前尚不清楚R是最好的工具。我知道一些Perl模块,目的是从Yahoo Finance获取非时间序列数据,但没有使用它们。

答案 4 :(得分:1)

考虑到最后两条评论,您可以使用EdgardOnline经济地获得公司财务报表。它不是免费的,但比彭博和路透社便宜。另一件需要考虑的事情是财务报告正常化/标准化。仅仅因为两家公司属于同一行业并销售类似产品并不一定意味着如果您将两家公司的损益表或资产负债表并排放置,那报告项目必然会排成一行。 Compustat具有标准化/标准化的财务报告。

答案 5 :(得分:1)

我对R一无所知,但假设它可以调用REST API并使用XML格式的数据,您可以在http://www.mergent.com/servius/尝试Mergent Company Fundamentals API - 这里有很多非常详细的财务报表数据(资产负债表/损益表/现金流量表/比率),跨公司标准化,可追溯到20多年

答案 6 :(得分:1)

我已经编写了一个C#程序,我认为它可以做你想要的。它从nasdaq.com页面解析html。它解析html并为每个股票创建1个csv文件,其中包括损益表,现金流量和资产负债表值,可以追溯到5 - 10年,具体取决于股票的年龄。我现在正在努力添加一些分析计算(此时主要是历史比率)。我有兴趣了解R及其在基础分析中的应用。也许我们可以互相帮助。

答案 7 :(得分:1)

我最近在CRAN上找到了这个R包。这正是你所要求的我相信的。

XBRL: Extraction of business financial information from XBRL documents

答案 8 :(得分:1)

您可以免费从R中的Intrinio获取所有三种类型的财务报表。此外,您可以获得报告的语句和标准化语句。从美国证券交易委员会提取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)

The resulting data frame

我编写了这个脚本,可以很容易地更改股票代码,日期和报表类型,这样您就可以获得任何期间任何美国公司的财务报表。

答案 9 :(得分:0)

我实际上是在Google表格中这样做的。我认为这也是最简单的方法,因为它可以提取真实的实时数据是另一个奖励点。最后,它不会占用我的任何空间来保存这些语句。

= importhtml(“http://investing.money.msn.com/investments/stock-income-statement/?symbol=US%3A”&amp; B1&amp;“&amp; stmtView = Ann”,“table”,0)

其中B1单元格包含股票代码。

您可以为资产负债表和现金流量做同样的事情。

答案 10 :(得分:0)

1-从Rapid Api here

订阅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个请求的免费版本