python 和vba在财务上_Excel,VBA太烦!PowerBI太贵!可以用Python处理公司财务数据并实现可视化吗?...

内容首发

乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech

用代码理解分析解决金融问题

0.想法:本地架设服务汇总

不少小伙伴非常感兴趣,这次我们继续以我们之前推送的知识点与相关技术为基础,架设一个本地服务。

只要利用这个原理,甚至可以展示足够多的自定义数据,构建免费的类似Power BI的“总裁仪表盘”,将所有数据汇总实时监控,运筹帷幄~

Let's Rock!

1.技术选取

本地架设服务的方式非常多,我们这里跟大家介绍一个非常漂亮的库:plotly的dash,这个库文档非常详细,大家如果有兴趣可以专门钻研深挖,有很多可玩的地方:https://dash.plotly.com/installation

比如可以与Flask网站App开发结合起来:

做NLP自然语言分析与处理的App与可视化展示:

做机器学习的可视化调参与展示:

做在线图像识别服务的App:

做金融、财务等时间序列数据分析的展示:

做音波分析的,语言识别服务:

不错,咱们就选这个!

2.项目设计

我们先从一个最简单的小项目开始,App非常简单——建立一个非常基本的仪表盘,我们输入一个公司的股票 ,App会自动获取这个股票的关键金融与财务数据(比如收入与净利润),然后本地以条形图的方式显示公司收入和净利润。

3.兵分两路之一:1.实现前端展示

我们首先来搞定前端的页面展示,我们可以充分利用Dash中的各种功能:

import dash

import dash_core_components as dcc

import dash_html_components as html

from dash.dependencies import Input, Output

这个库的逻辑非常简单,就是一个是Input,一个是Output,

Input是用户在前端输入的内容,我们把这些数据传到Python后端的函数处理。

Output是返回的以HTML形式展示的前端输出。

4.兵分两路之一:2.构建App

接下来我们就可以构建App了:

import requests

import plotly.graph_objects as go

导入必要库,并创建HTML前端展示的“模板”

app.layout = html.Div([

html.H1('Financial Dashboard'),

html.Div([

dcc.Input(id='company_selection',value='AAPL'),

html.H3(id='text'),

dcc.Graph(id ='revenue'),

dcc.Graph(id ='netincome'),

],style= {'padding':10})

])

5.兵分两路之二:实现后端功能

接下来我们就开始实现获取数据,数据处理与传给前端的功能方面。

注意到我们在下面代码中使用了app.callback()装饰器,以将输入和输出链接到我们的Dash布局组件。

我们先绘制一段时间内的公司收入:

@app.callback(Output('revenue','figure'),

[Input('company_selection','value')])

def retrieve_revenue(company):

demo = 'your api key'

stock = company

print(stock)

IS = requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{company}?apikey={demo}')

IS = IS.json()

IS = IS['financials']

Revenues = []

Dates = []

count = 0

for item in IS:

Revenues.append(float(IS[count]['Revenue']))

Dates.append(IS[count]['date'])

count += 1

print(Revenues)

datapoints = {'data': [go.Bar(x=Dates, y=Revenues)],'layout': dict(xaxis={'title':'Date'},

yaxis={'title':'Revenue'},

)}

return datapoints

以上代码稍作修改,我们就可以获得净利润(或者你感兴趣的任意公司财务数据)

@app.callback(Output('netincome','figure'),

[Input('company_selection','value')])

def retrieve_revenue(company):

demo = 'your api key'

stock = company

IS = requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{company}?apikey={demo}')

IS = IS.json()

IS = IS['financials']

Revenues = []

Dates = []

count = 0

for item in IS:

Revenues.append(float(IS[count]['Net Income']))

Dates.append(IS[count]['date'])

count += 1

datapoints = {'data': [go.Bar(x=Dates, y=Revenues,marker_color='lightsalmon',name='Net Income')],

'layout': dict(xaxis={'title':'Date'},

yaxis={'title':'Net Income'},

)}

return datapoints

6.两军汇总,前后端连接

我们接下来只需要将前后的Input与Output连接在一起就可以了

@app.callback(

Output(component_id='text', component_property='children'),

[Input(component_id='company_selection', component_property='value')]

)

def update_output_div(input_value):

return 'Displaying Data for "{}"'.format(input_value)

7.启动!大功告成!

我们只需要加一个小尾巴,这个程序就可以作为本地服务跑起来咯~

if __name__ == '__main__':

app.run_server(debug=True)

打开浏览器,访问~

输入任意上市公司代号,就可以在本地将感兴趣的数据可视化展示咯~

首发

乐学偶得 公众号: 乐学Fintech

用代码理解分析解决金融问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值