(Acest articol a fost publicat pentru prima dată pe Laboratorul de software al lui Adamși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Introducere
Această postare descrie un anumit caz de utilizare pentru Python în Excel și cum a fost rezolvat folosind pachetul R Reticulate 1.39.0 (https://cran.r-project.org/web/packages/reticulate/index.html) împreună cu ExcelRAddIn (https://github.com/Adam-Gladstone/Office365AddIns).
- PE final < 25
- PE înainte < 15
- Creștere EPS > 15%
- Raportul PEG < 1,2
- Capitalizare de piață < 5 miliarde USD
Criteriile au fost sugerate dintr-un articol despre Peter Lynch (https://www.linkedin.com/pulse/title-timeless-wisdom-peter-lynch-invest-what-you-know-pushkar-raj-c5zlc/).
Așa că m-am gândit că ar fi o idee bună să obținem acești indicatori pentru un portofoliu mic de acțiuni gigantice tehnologice și să afișez rezultatele în Excel folosind formatarea condiționată pentru a determina dacă selecția acțiunilor este în concordanță cu criteriile dorite. Rezultatul final pentru acest portofoliu arată după cum urmează:
Script Python
Cu excepția „Market Cap”, indicatorii nu sunt disponibili ca parte a tipului de date „Stock” din Excel. A durat ceva timp pentru a ne da seama de unde ar putea fi obținute datele și apoi câteva experimente suplimentare despre cum să obțineți cel mai bine datele. S-a dovedit că cea mai ușoară abordare a fost utilizarea bibliotecii Python yfinante pentru a prelua informațiile ticker și din aceasta selectați indicatorii de interes. Am scris un scurt script Python pentru a face asta.
""" equity_financials_alt.py """ import pandas as pd import yfinance as yf def get_value(info: dict, key: str) -> float: """Retrieve a value from the dictionary or 0 if it doesn't exist""" if key in info.keys(): return info(key) return float(0.0) def get_key_indicators(ticker: str) -> list: """Retrieve key indicators for ticker""" tk: dict = yf.Ticker(ticker) info: dict = tk.info indicators: list = ( ticker, get_value(info, "trailingPE"), get_value(info, "forwardPE"), get_value(info, "earningsGrowth"), get_value(info, "pegRatio"), get_value(info, "marketCap"), ) return indicators def get_all_indicators(tickers: list) -> pd.DataFrame: """Retrieve all indicators as a data frame""" rows: list = () headers: list = ( "ticker", "trailingPE", "forwardPE", "earningsGrowth", "pegRatio", "marketCap", ) for ticker in tickers: rows.append(get_key_indicators(ticker)) df = pd.DataFrame(rows, columns=headers) return df
Scriptul constă din două funcții: get_key_indicators
ia un singur ticker și solicită toate informațiile ticker. Apoi selectează indicatorii de interes și returnează o listă. Utilizează funcția de utilitate get_value
pentru a prelua valoarea cerută sau 0 dacă cheia nu este disponibilă. A doua funcție get_all_indicators
apelează funcția de mai sus pentru fiecare dintre tickerele de intrare și returnează un cadru de date. Fără îndoială, scriptul Python ar putea fi simplificat și mai mult pitonic.
De fapt, versiunea inițială a scriptului a salvat cadrul de date într-un csv
fişier. Apoi, pe partea Excel, a folosit un import PowerQuery pentru a obține datele din csv
fișier într-un tabel. Mi s-a părut neîndemânatic și îmi doream o soluție mai simplă, mai directă .
Aici a venit în ajutor pachetul R Reticulate. Oferă funcționalitate pentru a încărca și rula scripturi Python prin R. ExcelRAddIn vă permite să rulați scripturi R dintr-o foaie de lucru Excel. Punerea celor două împreună a fost simplă.
Utilizarea Reticulate în Excel
Utilizarea Reticulate în Excel prin ExcelRAddIn a fost simplă și constă din următorii pași.
- încărcați biblioteca reticulate și
- spune reticulate unde să găsească versiunea Python. Al doilea parametru determină dacă copia solicitată a Python este necesară sau nu.
Dacă facem acest lucru în mod obișnuit, este util să adăugați Reticulate la bibliotecile care sunt încărcate la pornire.
-
încărcați scriptul Python și verificați că este compilat ok. Pentru aceasta, doar evaluăm următorul script R în Excel:
source_python("D:/Development/Projects/Python/FinancialData/equity_financials_alt.py")
-
Creați un vector R de tickere pentru indicatorii pe care îi dorim.
- În cele din urmă, apelați funcția ‘get_all_indicators’, trecându-i vectorii ticker-urilor.
Rezultatul este un cadru de date cu valorile pe care le dorim. Apoi putem aplica formatarea condiționată pentru a evidenția valorile care sunt în concordanță cu criteriile. Folosind aceste criterii, putem observa că stocurile selectate nu sunt în concordanță cu criteriile dorite (în special PE trasant și PE forward). Cantitatea de roșu indicând, dintr-o privire, că aproape niciunul dintre stocuri nu îndeplinește criteriile cerute.
Învelire
Această postare a descris cum să utilizați pachetul R Reticulate pentru a executa un script Python din Excel și pentru a prelua rezultatele. Caietul de lucru Excel poate fi descărcat de aici:
Apelați Python din R în Excel.xlsx.
Scriptul Python poate fi descărcat de aici: equity_financials_alt.py.
Acest caz de utilizare este destul de particular (obținerea de date financiare specifice de la yfinante). Cu toate acestea, abordarea este mai utilă. Pe de altă parte, există o serie de abordări alternative (web-scraping, utilizarea diferitelor biblioteci financiare și chiar utilizarea Python în Excel) care pot fi mai potrivite.