Obtive o seguinte erro ao tentar carregar a tabela de indicadores da fundamentus:
Obtive o seguinte erro ao tentar carregar a tabela de indicadores da fundamentus:
Olá Emiliano, tudo bem com você?
O erro ImportError: lxml not found, please install it
indica que a biblioteca lxml
não está instalada no ambiente Python.
Para resolver esse problema, abra o prompt de comandos e execute:
pip install lxml
Após a instalação da biblioteca, tente carregar a tabela de indicadores novamente no Power BI.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Obrigado pela resposta Rafael, porém fiz a importação da biblioteca e infelizmente não deu certo. O erro abaixo persiste...
Olá Emiliano!
Simulei novamente o seu erro em minha máquina e tive sucesso ao instalar a dependência do lxml.
Vou te pedir para seguir os seguintes passos:
Abra o prompt de comando do Windows:
Na tela que se abrir, desinstale o lxml:
pip uninstall lxml
Instale novamente o lxml e a versão utilizada do Pandas utilizada no curso:
pip install lxml
pip install pandas==1.3.5
Agora, volte ao Power BI, abra a tela de Script do Python e cole o seguinte código:
# Importando as bibliotecas
import fundamentus
import pandas as pd
# Definindo a carteira de ações
carteira_fund = ["ABEV3", "B3SA3", "ELET3", "GGBR4", "ITSA4",
"PETR4", "RENT3", "SUZB3", "VALE3", "WEGE3"]
# 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']]
# Passando o ticker para uma coluna
ind = ind.reset_index()
ind.rename(columns = {'index':'Ativo'}, inplace=True)
# 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)
# 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)
# 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)
del ind, ind_2, carteira_fund, colunas
Clique em ok
e aguarde os dados serem carregados.
Tente seguir esse passo a passo e veja se obterá sucesso. Em caso de ainda sim o erro persistir, me diga qual versão do Python você está utilizando. Você descobre a versão digitando no prompt de comandos o seguinte python –-version
.
Fico à disposição.
Fiz os passos sugeridos e obtive o mesmo erro de antes. Estou utilizando a versão do Python solicitada pelo treinamento 3.7.7.
Fico no aguardo de novas instruções.
Olá Emiliano!
Esses erros de ambiente nem sempre são corrigidos de primeira, isso é normal no dia a dia que tem trabalha com tecnologia, peço sua paciência para continuarmos tentando até chegar em uma solução.
Você possui o Anaconda em seu computador? Se sim, tem chances do Python que está sendo executado no Power BI ser o do Anaconda e não o geral da máquina e por isso o erro de reconhecimento do lxml
ocorre.
Quando abrimos a tela do Power BI para inserir o Script, mostra qual Python está sendo executado, como mostro abaixo:
Você consegue me mandar um print dessa tela onde mostra qual python está sendo executado no Power BI? Será uma tela similar a que mostrei acima.
Fico no aguardo e à disposição.
Opa, entendo o processo... faz parte. Abaixo segue o print.
Boa noite Emiliano!
Com a imagem deu para perceber que aparentemente você está utilizando um ambiente virtual para executar seu código e o Power BI está procurando o Python neste caminho.
Vamos fazer assim:
Abra o prompt de comando do Windows
Navegue até a pasta do projeto bulltrend digitando:
cd "C:\Users\emili\OneDrive\Alura\Python e PowerBI Analisando dados mercado financeiro\bulltrend"
Ative o ambiente virtual:
bt_dash\Scripts\activate
Se tudo ocorrer bem, aparecerá entre parênteses (bt_dash) no canto esquerdo do prompt.
Agora, é instalar a biblioteca:
pip install lxml
Tente novamente importar a tabela de indicadores no Power BI.
Se der erro em algum passo, me mande imagens por favor.
Opa, Já havia feito este processo, porém tentei novamente. Segue print abaixo. Seguimos com o mesmo erro de sempre...
Olá Emiliano!
Seguiremos tentando. Vou te mostrar dois caminhos e se o erro ainda persistir, faremos o terceiro caminho, que é reinstalar o Python.
Embora a biblioteca esteja instalada no ambiente bt_dash
, vamos tentar reinstalá-la para garantir sua integridade:
Ative o ambiente bt_dash
Faça:
pip uninstall lxml
Depois:
pip install lxml
Tente carregar a tabela no Power BI.
Se o erro persistir, vamos para o próximo caminho.
Na tela inicial do Power BI, clique em Opções e Configurações e em seguida em Opções:
Em Scripts do Python, na opção Diretórios base do Python detectados, selecione Outro e cole o caminho do Python Global do do seu computador, que geralmente fica em:
C:\Users\SEUSUARIO\AppData\Local\Programs\Python\Python310
Clique em Ok
Abra o prompt de comando do Windows
Navegue até a pasta que está o Python. A mesma que colocamos no caminho do Power BI. Exemplo:
cd "C:\Users\SEUSUARIO\AppData\Local\Programs\Python\Python310"
Agora, instale o lxml:
python -m pip install lxml
Tente carregar a tabela no Power BI usando o código abaixo:
# Importando as bibliotecas
import fundamentus
import pandas as pd
# Definindo a carteira de ações
carteira_fund = ["ABEV3", "B3SA3", "ELET3", "GGBR4", "ITSA4",
"PETR4", "RENT3", "SUZB3", "VALE3", "WEGE3"]
# 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']]
# Passando o ticker para uma coluna
ind = ind.reset_index()
ind.rename(columns = {'index':'Ativo'}, inplace=True)
# 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)
# 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)
# 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)
del ind, ind_2, carteira_fund, colunas
Se o erro persistir, vamos para o próximo caminho.
Este caminho é mais severo, mas, importante para resolver o problema se nada do que tentamos acima funcionar. Neste caso, recomendo que você desinstale o Python e comece todas as configurações do zero novamente. Recomendo utilizar a versão 3.10, o qual é uma versão estável e mais recente da ferramenta e funcional para o curso. Os arquivos Python e Power BI que você já tem no seu computador serão preservados e poderão ser acessados normalmente após a reinstalação.
Fico no aguardo e à disposição.