Python în Excel prin Reticulate

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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ă:

Valori și indicatori de portofoliu

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.

  1. încărcați biblioteca reticulate și
  2. spune reticulate unde să găsească versiunea Python. Al doilea parametru determină dacă copia solicitată a Python este necesară sau nu.

Încărcare reticulatÎncărcare reticulat

Dacă facem acest lucru în mod obișnuit, este util să adăugați Reticulate la bibliotecile care sunt încărcate la pornire.

Mediu reticulatMediu reticulat

  1. î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")

  2. Creați un vector R de tickere pentru indicatorii pe care îi dorim.

Creați vectorul RCreați vectorul R

  1. În cele din urmă, apelați funcția ‘get_all_indicators’, trecându-i vectorii ticker-urilor.

Preluați indicatoriiPreluați indicatorii

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.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.