1
resposta

Desafio: extraindo dados

Desafio 1

!pip install fundamentus yfinance

import yfinance as yf
carteira = ['ASAI3.SA', 'EQTL3.SA', 'LREN3.SA', 'PRIO3.SA', 'RAIL3.SA', 'RDOR3.SA', 'SBSP3.SA', 'VIVT3.SA']
df_carteira = yf.download(carteira, start = '2023-01-01', end = '2023-08-01', auto_adjust = True)
df_carteira.head(3)
cotacoes = df_carteira.stack(level = 1, future_stack=True)
cotacoes
cotacoes = cotacoes.reset_index().rename(columns= {'Ticker': 'Ativo'})
cotacoes = cotacoes[["Date", "Open", "High", "Low", "Close", "Ativo"]]
cotacoes.head(10)

Desafio 2

import fundamentus
import pandas as pd
carteira_fund = ['ASAI3', 'EQTL3', 'LREN3', 'PRIO3', 'RAIL3', 'RDOR3', 'SBSP3', 'VIVT3']
ind = fundamentus.get_papel(carteira_fund)[['Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado',
                                            'Nro_Acoes', 'Patrim_Liq','Receita_Liquida_12m','Receita_Liquida_3m',
                                            'Lucro_Liquido_12m', 'Lucro_Liquido_3m']
ind = ind.reset_index()
ind.rename(columns = {'index':'Ativo'}, inplace = True)
ind.head()
colunas = ['Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado',
           'Nro_Acoes', 'Patrim_Liq','Receita_Liquida_12m','Receita_Liquida_3m', 
           'Lucro_Liquido_12m', 'Lucro_Liquido_3m']
ind[colunas] = ind[colunas].apply(pd.to_numeric, errors = 'coerce', axis = 1)
ind
ind_2 = fundamentus.get_resultado_raw().reset_index()
ind_2 = ind_2.query('papel in @carteira_fund')

ind_2 = ind_2[['papel','P/L', 'Div.Yield','P/VP']].reset_index(drop=True)

ind_2.rename(columns={'papel': 'Ativo','Div.Yield':'DY'}, inplace= True)
ind_2.head()
indicadores = pd.merge(ind, ind_2, on = 'Ativo')
indicadores["LPA"] = (indicadores["Lucro_Liquido_12m"] / indicadores["Nro_Acoes"]).round(2)
indicadores["VPA"] = (indicadores["Patrim_Liq"] / indicadores["Nro_Acoes"]).round(2)
indicadores
1 resposta

Oi, Marcia Gabrielle! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você fez um ótimo trabalho ao combinar os dados de cotações históricas com indicadores fundamentalistas. A forma como utilizou o yfinance e o fundamentus mostra domínio da extração de dados e organização com pandas.

Uma dica interessante para o futuro é usar o método dropna() para limpar dados ausentes antes de análises mais profundas. Veja este exemplo:


dados_limpos = indicadores.dropna()
print(dados_limpos.head())

Esse código remove linhas com valores ausentes para evitar distorções nas análises.

Qualquer dúvida que surgir, compartilhe no fórum.

Abraços e bons estudos!

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!