总结:数据分析简介:建立自己的库存分析系统(前端不寻求帮助)

前言

数据分析中非常重要的一步是结果表示和报告。无论是客户还是上级。您可以选择PPT显示,也可以给Word文档显示,但是,如果有交互式网站(应用程序)显示,无疑会更具吸引力。

说到网站,许多人想到了PHP和JS,但是大多数“数据分析师”都没有这些技术。主要原因是:这完全是两个领域,精力有限的人很少花很多时间来掌握。

在python中有许多优秀的开源Web设计框架。 Django和Flask是“巨人”中的两个,在企业中广泛使用。但是Django和Flask都很出色,但毕竟它们只是框架。有关页面设计的大多数细节都是JS,有时您几天设计的页面仍然很普通(我的脸很丑)。

但是,如果数据分析师希望通过Web快速显示其结果,他们必须学习JS吗?必须有“重量级”框架吗?必须忍受丑陋吗?

不!没有!不!

今天,我们可以使用纯python来开始股票分析系统,而无需使用JS,而无需深入研究框架,该条目一样酷,简单而不是简单。

主角出现

股票k线图分析及技术指标分析_分析分析股票动态谨慎投资_股票分析师入门

作为入门教程,我们需要实现以下功能:

下面我们逐个解释每个链接的实现。我估计此实现的难度为2星(只要您了解python)。

网站如何设计

这是网站的轻量版本。自然,我们不需要使用Django和(本机)Flask的重量级框架,但是即使它是一个简单的演示,我仍然希望网站保持扩展的能力。例如,在实际应用中,我们可能还有其他功能:

以上所有内容都可以扩展实现,并且仍然不需要前端,有兴趣的人可以进行进一步的交流。

今天的网站设计采用了Plotly Dash。我相信很多人都听说过Plolty软件包,并用它来绘制简单的图形(相当于matplotlib的交互式版本),但是许多人没有使用破折号的功能。

网站链接如下:/ dash /。您可以看到许多交互式仪表板设计,例如制造中使用的那些。

股票分析师入门

关于Plotly dash在线配资平台,以下优点和缺点纯粹是个人测试(实际项目)的感觉,可以帮助您确定它是否适合您:

缺点:如何获取库存信息

不建议使用搜寻器方法来获取它,因为时间成本太高并且获取质量不稳定。作为网站,我们需要选择一个稳定的信号源。

有许多开源软件包可供您选择股票信息。我亲自测试了两个接口程序包,一个是akshare,另一个是Tushare。

在此演示中,我们俩都进行了测试,但是akshare的访问速度和稳定性都不好(这可能是我的个人网络问题),最后我选择了Tushare。

关于Tushare,采用了注册系统,您可以获得足够的积分来获得有关股票的稳定信息。为了稳定,我最终选择了Tushare,它的确没有让人失望。

由于我的积分目前不足以获取股票的每周,每月和市场信息,因此无法包含在演示中。如果您是新手,最好点击我的邀请链接股票分析师入门,并在注册时帮助我获得积分:

所以您也可以尝试输入文本代码。

开始实战

首先导入我们需要的“主角”和“辅助角色”。在这里,我们仍然将每个必需的包函数放在注释中。

import tushare as ts  # 获取股票信息
import dash # 设计网站
from datetime import datetime, timedelta
import dash_core_components as dcc #设计网站采用的核心插件库
import dash_bootstrap_components as dbc #设计网站采用的美化页面
import dash_html_components as html  #设计网站采用的核心插件库
from dash.dependencies import Input, Output, State # 完成用户点击响应
import plotly.graph_objects as go # 画出趋势图
from dash.exceptions import PreventUpdate
import pandas as pd

我们需要为网站中的每个元素定义一个ID,以方便回调并响应用户操作。

股票分析师入门

# ID definitions
id_button_update_a_share_list = 'id-button-update-a-share-list'
id_dpl_share_code = 'id-dpl-share-code'
id_date_picker_range = 'id-date-picker-range'
id_button_query_trend = 'id-button-query-trend'
id_graph_hist_trend_graphic = 'id-graph-hist-trend-graphic'

此处的主要控件是:

下拉列表,用于选择股票。右侧有一个更新库存清单按钮,用于更新库存清单。由于库存清单会长时间更新一次,因此我们不必每次打开网页都实时获取。它可以从本地数据库或本地文件中获取。选择时间控件以查看库存信息按钮并在绘图区域中定义多个功能

为了方便调用,我们将一些常用功能转换为功能:

update_a_share_list用于从csv读取股票代码和名称。 get_A_stock_list用于从Internet下载最新的库存清单信息。 write_A_stock_list_to_csv从Internet下载的信息将同步到本地share_dict_to_option。本地文件中的信息被合并到一个控制选项中,因为有些人知道股票代码,有些人知道股票名称,所以有必要支持两种检索get_trend_df:用于通过股票代码获取每日行和时间段plot_candlestick:用于绘制股票的烛台,因为国内外的颜色代码不同(需要定义颜色股票分析师入门,红色表示向上)

def update_a_share_list():
    # display a stock share list from csv
    a_share_list_df = pd.read_csv(A_STOCK_FILE, index_col='ts_code')
    share_dict = a_share_list_df.to_dict()['name']
    return share_dict_to_option(share_dict)
def get_A_stock_list():
    # fetch list from internet
    share_df = ts_pro.stock_basic(
        exchange='',
        list_status='L',
        fields='ts_code,name')
    share_df.set_index('ts_code', inplace=True)
    return share_df
def write_A_stock_list_to_csv(file):
    # sync to csv
    share_df = get_A_stock_list()
    share_df.to_csv(file)
def share_dict_to_option(share_dict):
    # convert name and code to options
    name_list = [str(key) + '-' + str(value)
                 for key, value in share_dict.items()]
    return list_to_option_list(name_list)
def split_share_to_code(share):
    # split options to get code
    code = share.split('-')[0]
    return code
def list_to_option_list(list):
    # quick create dropdown options from list
    return [{"label": i, "value": i} for i in list]
def get_trend_df(code, start_date, end_date):
    # get history tend by ts_code,start_date,end_datess
    df = ts_pro.daily(ts_code=code, start_date=start_date, end_date=end_date)
    df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')
    df.set_index('trade_date', inplace=True)
    df.sort_index(inplace=True)  # sort result by date (datetime)
    return df
def plot_candlestick(df):
    # plot candlestick
    # customize the color to China Stock
    fig = go.Figure(
        data=[
            go.Candlestick(
                x=df.index,
                open=df['open'],
                high=df['high'],
                low=df['low'],
                close=df['close'],
                increasing=dict(
                    line=dict(
                        color="#FF0000")),
                decreasing=dict(
                    line=dict(
                        color="#00FF00")),
            )])
    fig.update_layout(
        margin=dict(l=2, r=10, t=20, b=20),
        paper_bgcolor="LightSteelBlue",
    )  # change the layout of figure
    return fig

设计网页

网站框架的建立仅需要一行代码:dash.Dash(__ name__)。这样会自动为您创建所有框架,其余的就是添加按钮,控件等。

在这里,我们通过按钮的设计来查看解决方案的简单性和快速性:

update_a_share_button = dbc.Button(
    id=id_button_update_a_share_list,
    color='light',
    children='更新列表', outline=True)

这是一个python函数,这意味着您需要的主要配置位于函数参数中。 id是上面提到的元素id,主要用于回调函数。不用说,颜色是颜色的定义。由于不常使用此按钮更新库存清单,因此配色方案为“浅色”,并且轮廓设置为“真”以使其看起来像是隐藏的。它只会在鼠标悬停时显示。

设计了这样的静态网页。

# create dash app
app = dash.Dash(__name__)
# layout design
header = html.H2("股票查询", className='text-center')
# update list button
update_a_share_button = dbc.Button(
    id=id_button_update_a_share_list,
    color='light',
    children='更新列表', outline=True)
# share select dropdown list
select_share = dcc.Dropdown(
    id=id_dpl_share_code,
    options=update_a_share_list()
)
# datetime picker
date_pick = dcc.DatePickerRange(
    id='id-date-picker-range',
    max_date_allowed=datetime.today(),
    start_date=datetime.today().date() - timedelta(days=60),
    end_date=datetime.today().date()
)
# query button
query_button = dbc.Button(
    "查询",
    color="warning",
    className="mr-1",
    id=id_button_query_trend,
    outline=False)
# make a better row/col layout
select_share_row = dbc.Container(
    [
        dbc.Row(
            [
                dbc.Col(
                    [select_share],
                    className='col-5'),
                dbc.Col(
                    [update_a_share_button],
                    className='col-2')]),
        html.Br(),
        dbc.Row(
            [
                dbc.Col(
                    [date_pick],
                    className='col-5'),
                dbc.Col(
                    [query_button],
                    className='col-1')])])
# get default figure
default_fig = plot_candlestick(
    get_trend_df(
        '000001.SZ',
        start_date='20200101',
        end_date='20200707'))
# graphic div
graphic_div = dbc.Container(
    [dcc.Graph(figure=default_fig, id=id_graph_hist_trend_graphic)])
# fully layout
app.layout = html.Div([
    header,
    select_share_row,
    html.Br(),
    graphic_div,
])

响应用户操作

Dash使用回调函数来响应用户操作,并且有三种主要状态:

股票分析师入门_分析分析股票动态谨慎投资_股票k线图分析及技术指标分析

因此,结合上面的基本信息,我们可以编写一个图形回调,

输出和输入状态函数将具有两个参数,第一个是id,它是指定的元素。第二个是原色的属性,例如按钮的n_clicks属性,下拉列表的值以及日期选择控件的开始日期和结束日期。

输出(id_graph_hist_trend_graphic,’figure’),输入(id_button_query_trend,’n_clicks’),状态(id_dpl_share_code,’value’),状态(id_date_picker_range,’开始日期’),状态(id_date_picker_range,’结束日期’)​​]

@app.callback(
    Output(id_graph_hist_trend_graphic, 'figure'),
    [Input(id_button_query_trend, 'n_clicks')],
    [State(id_dpl_share_code, 'value'),
     State(id_date_picker_range, 'start_date'),
     State(id_date_picker_range, 'end_date')]
)
def update_output_div(query, share, start, end):
    if query is not None:
        share_code = split_share_to_code(share)
        start_str = start.replace("-", "")
        end_str = end.replace("-", "")
        return plot_candlestick(
            get_trend_df(
                share_code,
                start_date=start_str,
                end_date=end_str))
    else:
        raise PreventUpdate

运行程序

只有一行代码,但是在这里您可以指定IP,端口等,以便其他人可以访问网站。默认网址127.0.0.1:8050 /

if __name__ == '__main__':
    app.run_server(debug=True)

摘要

作为适合数据分析师的入门级网站设计示例配资网站,该示例演示了如何设计库存历史查询网站。 Plotly和Dash无疑是强大的数据分析工具。您可以在没有其他前端语言的情况下完成出色的界面设计。 Tushare可以稳定地获取各种股票/金融相关信息。

最重要的是,尽管入门非常简单,但是该程序具有强大的可伸缩性,适合于快速向客户交付结果。

本文来自网络,不代表7号配资在线立场,转载请注明出处:http://www.dg-mg.com/5107.html

作者: 股票配资

发表评论

邮箱地址不会被公开。 必填项已用*标注