2010-04-10 14 views
9

Estoy interesado en analizar balances y estados de resultados usando R. He visto que hay paquetes R que extraen información de Yahoo y Google Finance, pero todos los ejemplos que he visto conciernen información histórica del precio de las acciones. ¿Hay alguna manera de extraer información histórica de balances y estados de resultados usando R?Uso de R para analizar balances y declaraciones de ingresos

+0

Considere la posibilidad de votar por la idea del sitio de intercambio cuantitativo de finanzas aquí: http://meta.stackexchange.com/questions/5786/proposal-for-quantitative-finance-stackexchange-site. – Shane

Respuesta

3

Está cometiendo el error común de confundir el 'acceso a los datos de Yahoo o Google' con 'todo lo que veo en Yahoo o Google Finance se puede descargar'.

Cuando las funciones R descargan datos históricos de precios de acciones, casi siempre acceden a una interfaz explícitamente diseñada para este fin, como p. un gestor de cgi que proporciona archivos csv con un símbolo de stock y fecha de inicio y finalización. Entonces, easy, ya que todo lo que tenemos que hacer es crear la consulta adecuada, presionar el servidor web, buscar el archivo csv y analizarlo.

Ahora, la información del balance (por lo que yo sé) no está disponible en dicha interfaz. Por lo tanto, tendrá que 'screen scrape' y analizar el html directamente.

No está claro que R sea la mejor herramienta para esto. Conozco algunos módulos de Perl con el propósito de obtener datos que no sean series temporales de Yahoo Finance, pero no los he usado.

+0

Gracias por una respuesta muy rápida Dirk. Al seguir comprobando, encontré que el paquete 'quantmod' tiene una función llamada 'getFinancials' y el manual de quantmod especifica su función como: 'Descargar declaración de ingresos, balance y estados de flujo de efectivo de Google Finance'. Ahora lo probé, pero devolvió un error críptico (subíndice fuera de límites). ¿Significa esto que Quantmod puede eliminar los datos financieros de las finanzas de Google, pero solo estoy cometiendo un error, o tal funcionalidad no puede existir? Cualquier aclaración sería bienvenida. ¡Gracias de nuevo! – Ramnath

+1

Ok, entonces parece que el paquete quantmod intenta escanear la pantalla y puede haber fallado. Un informe reproducible de lo que ha intentado y del error que ha cometido es algo que podría enviar a r-sig-finance para que el desarrollador del paquete lo vea. –

+0

Haré eso Dirk. ¡Gracias! – Ramnath

4

La pregunta que desea formular y obtener una respuesta es ¿dónde puedo obtener datos XBRL gratuitos para analizar los balances corporativos, y hay una biblioteca para consumir esos datos en R?

XBRL (Extensible Business Reporting Language - http://en.wikipedia.org/wiki/XBRL) es un estándar para el marcado de statments contables (cuentas de resultados, balances, beneficios & estados de pérdidas) en formato XML de tal manera que fácilmente se pueden analizar por ordenador y se ponen en una hoja de cálculo .

Por lo que sé, muchos reguladores corporativos (por ejemplo, la SEC en los EE. UU., ASIC en Australia) están alentando a las compañías bajo su jurisdicción a informar usando dicho formato, o ejecutando pilotos, pero yo no Creo que ha sido ordenado en este punto. Si usted limita su universo de inversión (supongo que desea que estos datos en formato electrónico para fines de inversión) a las empresas que han puesto sus informes trimestrales disponibles libremente en formato XBRL, ¡espero que tenga una lista bastante corta de empresas en las que invertir!

Bloomberg, Reuters y otros tienen precios elevados para obtener datos fundamentales corporativos. También puede haber alguien por ahí ejecutando balances de publicación de empresas ordenadas en formato XBRL. Más barato, pero aún así pagado, son los servicios web de XIgnite xFundamentals y xGlobalFundamentals, pero no está obteniendo los datos completos del balance general de ellos.

+0

Gracias Jim. Estoy interesado en las declaraciones de Investigación y no de Inversiones. Tengo acceso a Compustat, por lo que el acceso a los datos no es un problema. Pero, que yo sepa, Compustat no tiene una API web que pueda usar para extraer datos directamente a R, y por lo tanto, mi interés en fuentes públicas. – Ramnath

1

Teniendo en cuenta los dos últimos comentarios, es posible que pueda adquirir estados financieros corporativos económicamente utilizando EdgardOnline. No es gratis, pero es menos costoso que Bloomberg y Reuters. Otra cosa a considerar es la normalización de informes financieros/estandarizados. El hecho de que dos empresas pertenezcan a la misma industria y vendan productos similares no significa necesariamente que si coloca las declaraciones de ingresos o las hojas de balance de las dos empresas una al lado de la otra, los artículos de informes necesariamente se alinearán. Compustat tiene informes financieros normalizados/estandarizados.

1

No sé nada sobre R, pero suponiendo que pueda llamar a una API REST y consumir datos en formato XML, puede probar la API de Fundamentos de la compañía Mergent al http://www.mergent.com/servius/ - hay muchos datos de estados financieros detallados (saldo hojas/estados de resultados/estados de flujo de caja/razones), estandarizado en todas las empresas, desde hace más de 20 años

1

He escrito un programa C# que creo que hace lo que usted quiere. Analiza el html de las páginas de nasdaq.com. Analiza html y crea 1 archivo csv por acción que incluye el estado de resultados, el flujo de caja y los valores del balance que se remontan a 5-10 años, según la antigüedad del stock. Ahora estoy trabajando para agregar algunos cálculos de análisis (principalmente razones históricas en este punto). Estoy interesado en aprender sobre R y sus aplicaciones para el análisis fundamental. Tal vez nos podamos ayudar.

8

He encontrado en la red solo una solución parcial a su problema, ya que logré recuperar solo la información del balance y el estado financiero por un año. No sé cómo hacerlo por más años. Hay un paquete en R, llamada quantmod, que se puede instalar desde CRAN

install.packages('quantmod') 

A continuación, puede hacer lo siguiente: Supongamos que desea obtener la información financiera de una empresa que cotiza en NYSE: General Electric . ticker: GE

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

Para obtener únicamente la cuenta de resultados, informó anualmente, como un uso trama de datos siguiente:

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

Por favor, hágamelo saber si usted encuentra la manera de hacer esto durante varios años.

+1

¡Trabajó para mí! Para más información: http://www.quantmod.com/documentation/getFinancials.html –

+1

@moldovean, gracias! :) ¡esto era exactamente lo que estaba buscando! – alcor

3

para leer en la información financiera probar esta función (lo recogí hace varios meses e hice algunos pequeños ajustes)

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 
    } 
} 

Para usarlo, comparar, por ejemplo, 3 compañías y escribe los datos en una CSV-archivo haga lo siguiente:

tickers <- c("AAPL","GOOG","F") 
stats <- ldply(tickers, getKeyStats_xpath) 
rownames(stats) <- tickers 
write.csv(t(stats), "FinancialStats_updated.csv",row.names=TRUE) 

Justo lo intentaron. Aún trabajando.

ACTUALIZACIÓN como Yahoo cambió su diseño del sitio web:

La función anterior ya no funciona como Yahoo nuevamente cambió su diseño del sitio web. Afortunadamente, todavía es fácil obtener información financiera, ya que las etiquetas para obtener datos fundamentales no se han modificado. ejemplo para la descarga de un archivo con EPS y relación P/E para MSFT, AAPL y Ford insertar el siguiente en tu navegador:

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

y después de entrar en la URL anterior en la barra de direcciones del navegador y pulsar Intro/Enter. El CSV se descargará automáticamente a su computadora y usted debe obtener el archivo cvs como se muestra a continuación (datos a 07/22/2016):

enter image description here

algunas etiquetas para yahoo datos fundamentales:

enter image description here

+0

No funcionó para mí .. Estoy pensando que yahoo cambió algo –

+0

@Canadian_Republican ver actualización. – hvollmeier

+0

¿Cómo obtengo todo el Balance de yahoo? ¿Hay una lista completa de etiquetas en alguna parte? –

0

De hecho, hago esto en Hojas de cálculo de Google.Pensé que también era la forma más fácil de hacerlo y porque puede extraer datos reales en vivo era otro punto extra. Por último, no consume nada de mi espacio para guardar estas declaraciones.

= ImportHtml ("http://investing.money.msn.com/investments/stock-income-statement/?symbol=US%3A "& B1 &" & stmtView = Ann", "tabla", 0)

donde la celda B1 contiene el ticker.

Puede hacer lo mismo para el balance y el flujo de caja también.

0

Usted puede obtener los tres tipos de estados financieros de Intrinio en I gratis. Además, puede obtener como declaraciones informadas y declaraciones estandarizadas. El problema con extraer archivos XBRL de la SEC es que no hay una opción estandarizada, lo que significa que debe mapear manualmente los elementos de los estados financieros si desea realizar comparaciones de capital cruzadas. Aquí está un ejemplo:

#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

escribí este guión para hacer más fácil para cambiar la clave de pizarra, las fechas y el tipo de declaración para que pueda obtener el estado financiero de cualquier empresa de EE.UU. para cualquier período .

Cuestiones relacionadas