2014-09-02 2 views
2

J'ai un champ de données contenant les noms de société, tels queProgrammatically rechercher un symbole dans la R

company <- c("Microsoft", "Apple", "Cloudera", "Ford") 
> company 

    Company 
1 Microsoft 
2 Apple 
3 Cloudera 
4 Ford 

et ainsi de suite. Le paquet tm.plugin.webmining vous permet d'interroger les données de Yahoo! Finance basée sur les symboles boursiers:

require(tm.plugin.webmining) 
results <- WebCorpus(YahooFinanceSource("MSFT")) 

Il me manque l'étape intermédiaire. Comment puis-je interroger les symboles de ticket par programme en fonction des noms de sociétés?

Répondre

5

Je ne parvenais pas à le faire avec le paquet tm.plugin.webmining, mais je suis venu avec une solution grossière - tirant & données d'analyse syntaxique de ce fichier Web: ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt. Je dis rugueux parce que pour une raison quelconque mes appels avec httr::content(httr::GET(...)) ne fonctionnent pas à chaque fois - je pense que cela a à voir avec le type d'adresse Web (ftp://) mais je ne fais pas beaucoup de grattage web donc je ne peux pas vraiment explique ça. Il a semblé fonctionner mieux sur mon Linux que sur mon Mac, mais cela pourrait ne pas être pertinent. Quoiqu'il en soit, voici ce que je suis: Merci au commentaire de @ thelatemail, cela semble fonctionner beaucoup plus lisse:

library(quantmod) ## optional 
symbolData <- read.csv(
    "ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt", 
    sep="|") 
## 
> head(symbolData,10) 
    Symbol             Security.Name Market.Category Test.Issue Financial.Status Round.Lot.Size 
1 AAIT iShares MSCI All Country Asia Information Technology Index Fund    G   N    N   100 
2  AAL     American Airlines Group, Inc. - Common Stock    Q   N    N   100 
3 AAME     Atlantic American Corporation - Common Stock    G   N    N   100 
4 AAOI     Applied Optoelectronics, Inc. - Common Stock    G   N    N   100 
5 AAON          AAON, Inc. - Common Stock    Q   N    N   100 
6 AAPL          Apple Inc. - Common Stock    Q   N    N   100 
7 AAVL     Avalanche Biotechnologies, Inc. - Common Stock    G   N    N   100 
8 AAWW      Atlas Air Worldwide Holdings - Common Stock    Q   N    N   100 
9 AAXJ    iShares MSCI All Country Asia ex Japan Index Fund    G   N    N   100 
10 ABAC      Aoxin Tianli Group, Inc. - Common Shares    S   N    N   100 

Edit: Comme par @ suggestion de GSEE, un (probablement) de façon plus robuste pour obtenir le données source est avec la fonction stockSymbols() dans le package TTR:

> symbolData2 <- stockSymbols(exchange="NASDAQ") 
Fetching NASDAQ symbols... 
> ## 
> head(symbolData2) 
    Symbol               Name LastSale MarketCap IPOyear   Sector 
1 AAIT iShares MSCI All Country Asia Information Technology Index Fun 34.556  6911200  NA   <NA> 
2 AAL         American Airlines Group, Inc. 40.500 29164164453  NA Transportation 
3 AAME         Atlantic American Corporation 4.020  83238028  NA  Finance 
4 AAOI         Applied Optoelectronics, Inc. 20.510 303653114 2013  Technology 
5 AAON              AAON, Inc. 18.420 1013324613  NA Capital Goods 
6 AAPL              Apple Inc. 103.300 618546661100 1980  Technology 
         Industry Exchange 
1       <NA> NASDAQ 
2 Air Freight/Delivery Services NASDAQ 
3     Life Insurance NASDAQ 
4     Semiconductors NASDAQ 
5 Industrial Machinery/Components NASDAQ 
6   Computer Manufacturing NASDAQ 

Je ne sais pas si tu voulais juste obtenir des symboles boursiers de noms, mais si vous êtes à la recherche également des informations de prix de l'action réelle que vous pourriez faire quelque chose comme t son:

namedStock <- function(name="Microsoft", 
         start=Sys.Date()-365, 
         end=Sys.Date()-1){ 
    ticker <- symbolData[agrep(name,symbolData[,2]),1] 
    getSymbols(
    Symbols=ticker, 
    src="yahoo", 
    env=.GlobalEnv, 
    from=start,to=end) 
} 
## 
## an xts object named MSFT will be added to 
## the global environment, no need to assign 
## to an object 
namedStock() 
## 
> str(MSFT) 
An ‘xts’ object on 2013-09-03/2014-08-29 containing: 
    Data: num [1:251, 1:6] 31.8 31.4 31.1 31.3 31.2 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:6] "MSFT.Open" "MSFT.High" "MSFT.Low" "MSFT.Close" ... 
    Indexed by objects of class: [Date] TZ: UTC 
    xts Attributes: 
List of 2 
$ src : chr "yahoo" 
$ updated: POSIXct[1:1], format: "2014-09-02 21:51:22.792" 
> chartSeries(MSFT) 

enter image description here

Donc, comme je l'ai dit, ce n'est pas la solution la plus propre mais nous espérons qu'il vous aide. Notez également que ma source de données attirait les sociétés cotées au NASDAQ (qui est la plupart des grandes entreprises), mais vous pouvez facilement combiner cela avec d'autres sources.

+2

Je ne sais pas pourquoi vous vous embêtez avec tous les paquets 'httr' et étendu' read.csv ("ftp: //path/file.csv", sep = "|") 'l'obtiendra juste bien. 'file =' peut être n'importe quel type de connexion accessible. – thelatemail

+0

@thelatemail Merci d'avoir signalé cela - j'ai mis à jour ma réponse. – nrussell

+2

ou vous pouvez utiliser 'stockSymbols()' – GSee

Questions connexes