你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。
如果我的分享对你有帮助,请关注我,一起向上进击。
利用 Python 和 Power BI 分析股票投资组合,结合 Python 的强大数据处理能力和 Power BI 的强大可视化功能,为股票投资提供全面的见解。
首先,我们需要导入一些必要的库,如 os、pandas 和 yfinance。这些库分别用于文件操作、数据处理和获取财务数据。接着,我们从股票数据接口提供的 CSV 文件中读取交易数据,并将其合并成一个便于分析的 DataFrame。
为了确保分析的准确性,数据清理是必不可少的。我们删除了多余的列,转换了数据类型,并标准化了股票代码以符合金融数据库的格式。这个步骤确保了我们的数据一致性并为后续处理做好了准备。
# Remove columns that are not useful for the analysis
carteira = carteira.drop(["Conta", "Preço"], axis=1)
# Converting columns to numeric type
carteira['Financeiro Compra'] = pd.to_numeric(carteira['Financeiro Compra'].str.replace('.', '').str.replace(',', '.'))
carteira['Financeiro Venda'] = pd.to_numeric(carteira['Financeiro Venda'].str.replace('.', '').str.replace(',', '.'))
# Convert the 'Dt. Negociação' column to datetime format
carteira['Dt. Negociação'] = pd.to_datetime(carteira['Dt. Negociação'], format='%d/%m/%Y')
display(carteira)
为了减少冗余并准备数据进行分析,我们按日期和库存汇总交易记录,然后计算采购和销售的累计总数。此步骤简化了数据,使其更易于分析和解释。
我们通过将股票数量乘以从雅虎财经获取的各自当前价格来计算投资组合的价值。这使我们能够跟踪投资的每日价值,并了解我们的投资组合在一段时间内的表现。
为了评估我们的投资组合相对于市场的表现,我们将投资组合价值标准化,并将其与IBOVESPA指数的表现进行比较。该基准清楚地表明了我们的投资相对于大盘的表现。
#A quick analysis between Ibovespa and the portfolio + dividends
total_norm['Lucro_div_norm'].plot(label='Carteira', figsize=(15,5))
df_ibov['ibov norm'].plot(label='IBOV')
plt.legend()
plt.show()
print(f"O ibov subiu {(df_ibov['ibov norm'][-1] - 1):.2%}")
print(f"A carteira com dividendos subiu {(total_norm[r'Lucro_div_norm'][-1] - 1):.2%}")
股息是投资回报的重要组成部分。我们创建函数来获取、计算和显示投资组合中每只股票收到的股息。此步骤有助于了解总投资回报,包括资本收益和股息收入。
# Function to calculate and display dividends for a given stock
def Dividendos(ativo):
div = get_dividends(ativo, start_date=data_inicial)
div['quantidade'] = 0
div['total'] = 0
valortotal = 0
for indice, linha in div.iterrows():
valor = div.at[indice, 'dividend'] * df_carteira.at[indice,ativo]
div.at[indice,'quantidade'] = df_carteira.at[indice,ativo]
div.at[indice,'total'] = valor
valortotal += valor
display(div.loc[div['total'] > 0])
print(f'Você recebeu no total R${valortotal:.2f} de dividendos')
# Function to analyze a specific stock in the portfolio
def AnalizarAtivo():
ativo = str(input('Escolha um Ativo:'))
if ativo in carteira_por_acao['Ativo'].values:
quant = carteira_por_acao.loc[carteira_por_acao['Ativo']==ativo,'Quantidade'].values[0]
preço_medio = carteira_por_acao.loc[carteira_por_acao['Ativo']==ativo,'Preço'].values[0]
preço_atual = tabela_cotacoes.loc[data_final,ativo]
porce_carteira = (df_carteira_valor_atual.loc[data_final,ativo] * 100) / df_carteira_valor_atual.loc[data_final,'Total atual']
print(f'Você possui {quant} ações')
print(f'O seu preço médio é de R${preço_medio:.2f}')
print(f'Valor da ação no dia {data_final} é de R${preço_atual:.2f}')
print(f'Lucro/prejuizo de {((preço_atual/preço_medio) -1):.2%}')
print(f"Porcentagem na carteira é de {porce_carteira:.2f}%")
tabela_cotacoes[ativo].plot(label=ativo, figsize=(15,5))
plt.legend()
plt.show()
Dividendos(ativo)
else:
print('Você não possui esse ativo na carteira')
最后,我们将清理和处理的数据导出为 CSV 文件,以便轻松导入 Power BI 以进行进一步的可视化和报告。这允许通过交互式仪表板和报告增强对投资组合绩效的跟踪和分析。
下面是使用导出的数据创建的 Power BI 仪表板的一些屏幕截图:在这里,可以看到每种资产在您的投资组合中的分布情况及其报价。
- EOF -
文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~
推荐阅读 点击标题可跳转
最近我开了一家淘宝店,名字叫【打破壁垒】,主打程序开发相关付费素材、工具的共享类商品,帮助大家降低试错和使用成本。欢迎大家关注。
![0ceaa223849d71d140b94db22c01da3a.jpeg](https://img-blog.csdnimg.cn/img_convert/0ceaa223849d71d140b94db22c01da3a.jpeg)
长按扫描下方二维码,然后点击页面中的【打开淘宝】,即可进入店铺:
![95ca2cf7f6a377d14b35b2617f1f9be7.png](https://img-blog.csdnimg.cn/img_convert/95ca2cf7f6a377d14b35b2617f1f9be7.png)
回复下方「关键词」,获取优质资源
回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版
👇关注我的公众号👇
告诉你更多细节干货
欢迎围观我的朋友圈
👆每天更新所想所悟