a-share-demo / app.py
ellendan's picture
(feat) read last update date
b0da1ed
import gradio as gr
import pandas as pd
import plotly.express as px
from a_share.demo import load_stock_data, serie_high_limit, read_last_update_date
source_data_frame = load_stock_data()
last_update_date = read_last_update_date()
def process_and_plot(last_n_days):
serie_high_limit_data = serie_high_limit(source_data_frame, int(last_n_days))
ge_2_data = serie_high_limit_data[serie_high_limit_data['max_high_limit_days'] >= 2]
scatter_data = pd.DataFrame({
'连板日期': ge_2_data['date'],
'连板天数': ge_2_data['max_high_limit_days']
}).reset_index(drop=True)
fig = px.scatter(
scatter_data,
x='连板日期',
y='连板天数',
title=f'最近{last_n_days}天连板分布统计',
)
fig.update_layout(
xaxis=dict(
tickformat="%Y-%m",
hoverformat="%Y-%m-%d"
)
)
count_by_high_limit_days = ge_2_data.groupby(by='max_high_limit_days').agg(count=('date', 'count'))
plot_data = pd.DataFrame({
'连板天数': count_by_high_limit_days.index,
'股票数量': count_by_high_limit_days['count']
}).reset_index(drop=True)
fig2 = px.bar(
plot_data,
x='连板天数',
y='股票数量',
title=f'最近{last_n_days}天连板股票统计'
)
fig2.update_traces(text=plot_data['股票数量'], textposition='outside')
return [fig, fig2]
# 创建Gradio界面
demo = gr.Interface(
fn=process_and_plot,
inputs=[
gr.Number(label="输入需要统计的最近N天的天数", value=400, minimum=1, maximum=1000)
],
outputs=[gr.Plot(), gr.Plot()],
title="A股连板统计分析",
description=f"输入要统计的天数,查看不同连板天数的股票数量分布(最新数据到{last_update_date})",
flagging_mode='never'
)
if __name__ == "__main__":
demo.launch(debug=True)