(Acest articol a fost publicat pentru prima dată pe Laboratorul software al lui Adamși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Introducere
În ultima postare din această serie, mă voi uita la apelul Python de la R., chiar dacă Excel oferă acum un mijloc de a apela scripturi Python direct, folosind =PY() Formula într -o foaie de lucru, există încă ocazii în care este benefic să apelați Python prin R. De exemplu, se dovedește că importul yfinance produce o eroare „modul nu a fost găsită” folosind funcția Excel. Conform documentației, yfinance nu este una dintre bibliotecile open source pe care le acceptă distribuția SCELN SECUR Excel Python. Pentru a rezolva această problemă, putem folosi pachetul R Reticulează. Acest lucru ne permite să încărcăm și să rulăm scripturi Python de la R. așa cum am văzut în părțile anterioare ale acestei serii, Excelraddin Ne permite să rulăm scripturi R dintr -o foaie de lucru Excel. Și a pune aceste două împreună este destul de simplu.
Cartea de lucru pentru această parte a seriei este: „Partea IV – r în Excel – Calling Python.xlsx”. Ca și înainte, fișele de lucru „Referințe” listează link -uri către referințe externe. Fișa de lucru „Biblioteci” încarcă pachete suplimentare (fără default). În această demonstrație, folosesc reticulate Pachet și acest lucru este încărcat aici. Fișa de lucru „Seturi de date” conține datele la care se face referire în foile de lucru. În plus, există două foi de lucru auxiliare: informații despre sesiune și configurare. Informațiile sesiunii preia informații despre mediul R și versiunea R. Fișa de lucru pentru configurare efectuează o inițializare necesară pentru reticulate pachet. Mai întâi indicăm executabilul Python pe care vrem să -l folosim. În continuare, confirmăm că versiunea Python este de fapt cea solicitată. În cele din urmă, stabilim o secțiune la care putem reveni dacă există erori de la Reticulate și Python în sine. Merită să vă asigurați că aceste celule sunt evaluate corect.
Informații despre ticker
Această foaie de lucru solicită câteva informații de bază pentru căpușe pentru o serie de stocuri. Primul pas este să încărcați script -ul ticker_data.py și să vă asigurați că se compilează.
Scriptul Python
Scriptul este format din două funcții principale: get_ticker_data şi get_ticker_weights.
"""
ticker_data.py
Retrieve ticker data from yfinance
"""
import pandas as pd
import yfinance as yf
def get_value(info: dict, key: str):
"""
Retrieve a value from a ticker info dictionary
or None if the key doesn't exist
"""
if info is not None:
if key in info.keys():
return info(key)
return None
def get_items(symbol: str, fields: list) -> list:
"""
Retrieve data from the corresponding fields for the specified ticker
"""
items: list = (symbol)
try:
tk: dict = yf.Ticker(symbol)
info: dict = tk.info
for field in fields:
items.append(get_value(info, field))
# pylint: disable=broad-exception-caught
except Exception:
# pylint: enable=broad-exception-caught
pass
return items
def get_ticker_data(symbols: list, fields: list) -> pd.DataFrame:
"""
Retrieve the specified fields from the input tickers
"""
headers: list = ("Ticker")
for field in fields:
headers.append(field)
rows: list = ()
try:
for symbol in symbols:
rows.append(get_items(symbol, fields))
# pylint: disable=broad-exception-caught
except Exception:
# pylint: enable=broad-exception-caught
print("An error occured")
df = pd.DataFrame(rows, columns=headers)
return df
def get_ticker_weights(ticker_values: dict) -> pd.DataFrame:
"""
Returns:
ticker_weights
"""
# Set up the structure
rows: list = ()
headers: list = ("ticker", "weight")
# Calculate the portfolio value
total_portfolio_value = sum(ticker_values.values())
for ticker, value in ticker_values.items():
weight = value / total_portfolio_value
rows.append((ticker, weight))
df = pd.DataFrame(rows, columns=headers)
return df
get_ticker_data ia o listă de simboluri de bilet și o listă de câmpuri. Câmpurile sunt elementele pe care dorim să le preluăm din funcția de informare a tickerilor YFINANCE. Folosește funcția de utilitate get_value Pentru a prelua valoarea solicitată sau 0 dacă cheia nu este disponibilă. Fără îndoială, scriptul Python ar putea fi simplificat și făcut mai pitonic.
În fișa de lucru, creăm un vector de tickers și un vector de câmpuri, apoi apelăm la funcția Python.

Rezultatul este un cadru de date cu valorile pentru câmpurile pe care le -am solicitat (dacă este disponibil).
Greutăți de portofoliu
A doua funcție get_ticker_weightscalculează pur și simplu greutățile unei liste de simboluri de ticker. Funcția Python necesită ca intrarea să fie un dicționar de simboluri și valorile corespunzătoare ale acestora. Prin urmare, creăm un ticker_list prin R, din moment ce reticularea convertește listele R în dicționarele Python. Construcția este oarecum mecanică și ar putea fi îmbunătățită cu siguranță doar prin schimbarea intrărilor funcției Python. Cu ticker_list Creat, putem numi funcția Python.


Acest lucru returnează greutățile de portofoliu pe care le putem folosi pentru a le afișa grafic. De aici, am putea extinde codul Python pentru a calcula randamentele de portofoliu pentru căpușe într -o perioadă specificată. Am putea apoi să comparăm randamentele cu un reper și să calculăm raporturile Sharpe pentru componente.
Învelire
În această postare am văzut cum să apelăm scripturi python de la r folosind reticulate pachet. Deși configurația nu este complet banală, merită să țineți cont de avantajele acestei abordări: din interiorul Excel, avem acces atât la ecosistemele extinse ale R și Python, care la rândul lor ne oferă o mare flexibilitate în crearea de soluții. Și asta încheie această serie de postări despre utilizarea R în Excel. Sper că acest lucru a fost util.
