1
resposta

[Projeto] Desafio 1 e 2

Atividade 1

!pip install fundamentus yfinance

# Importando a biblioteca
import yfinance as yf

# Definindo a carteira de ações
carteira_yf = ['ASAI3.SA', 'EQTL3.SA', 'LREN3.SA', 'PRIO3.SA', 'RAIL3.SA', 'RDOR3.SA', 'SBSP3.SA', 'VIVT3.SA']

# Carregando os dados da carteira
df = yf.download(carteira_yf, start="2023-01-01", end="2023-08-31")

df.head()

# Passando os ativos para o multindex do df
cotacoes = df.stack(level=1)
cotacoes

# Resetando os índices e renomenado a coluna dos ativos
cotacoes = cotacoes.reset_index().rename(columns={"Ticker": "Ativo"})

# Organizando o df
cotacoes = cotacoes[["Date", "Open", "High", "Low", "Close", 'Ativo']]
cotacoes.head(10)

Atividade 2

# Importando as bibliotecas
import fundamentus
import pandas as pd

# Definindo a carteira de ações
carteira_fund = ['ASAI3', 'EQTL3', 'LREN3', 'PRIO3', 'RAIL3', 'RDOR3', 'SBSP3', 'VIVT3']

# Criando um df com algumas infos da carteira
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.head(3)

# Passando o ticker para uma coluna
ind = ind.reset_index()
ind.rename(columns = {'index':'Ativo'}, inplace=True)
ind.head(3)

# Alterando colunas object para numeric
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.head()

ind.info()

# Criando um novo df com alguns indicadores da carteira
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','ROE']].reset_index(drop=True)

ind_2.rename(columns={'papel': 'Ativo','Div.Yield':'DY'}, inplace= True)
ind_2.head()

# Concatenando os dfs em um só com as infos e indicadores
indicadores = pd.merge(ind, ind_2, on='Ativo')

# Criando uma coluna para LPA (Lucro por Ação) e VPA (Valor Patrimonial por ação)
# para calcular a fórmula de Graham  Valor intrínseco de uma ação (VI = √22,5 x LPA x VPA)
indicadores['LPA'] = (indicadores['Lucro_Liquido_12m'] / indicadores['Nro_Acoes']).round(2)
indicadores['VPA'] = (indicadores['Patrim_Liq'] / indicadores['Nro_Acoes']).round(2)
indicadores
1 resposta

Ei, Mateus! Como vai?

Gostei de como você estruturou as atividades, organizando bem os dataframes e mostrando clareza no processo de extração e transformação dos dados, parabéns! A forma como você usou o merge para consolidar informações financeiras foi um ponto positivo.

Uma dica para aplicar em outras análises financeiras é usar o método round() diretamente em colunas ao lidar com cálculos de indicadores. Veja este exemplo:


import pandas as pd

valores = pd.Series([10.456, 20.789, 30.123])
valores_arredondados = valores.round(2)

print(valores_arredondados)

Esse código cria uma série de números e arredonda para 2 casas decimais e pode ser útil em análises financeiras.

Continue se dedicando aos estudos e qualquer dúvida, compartilhe.

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