• 中秋味的可视化大屏 【以python pyecharts为工具】


    中秋味的可视化大屏 【以python+pyecharts为工具】 分析月饼龙头股价数据

    1.啾言啾语

    今年的中秋节又要到啦,小啾在次祝大家

           中秋快乐阖家团圆生活幸福美满未来一片坦途!

    月饼,作为中秋节的灵魂元素之一,我们多数人都是从消费者的视角尽享其美味。
    本期Blog中,小啾将围绕中秋主题,使用python的pyecharts库,从月饼生产者的视角,为大家呈现出月饼龙头企业——广州酒家 近一个月的股价行情。



    首先我们准备以下图片(pic1.jpg),作为网页背景。
    ABCD


    2. 获取数据

    做可视化,第一步要解决的就是数据问题。
    这里使用tushare接口获取广东酒家的股价数据。并保存为csv数据文件。广州酒家的股票代码为’603043.SH’。
    代码如下:

    import pandas as pd
    import tushare as ts
    from pyecharts import options as opts
    from pyecharts.charts import Page
    from pyecharts.charts import Line
    from pyecharts.charts import Kline
    
    # 输入您的turshare接口
    token = 'Your token'
    pro = ts.pro_api(token)
    
    
    # 定义获取数据函数
    def get_data(tscode):
        df = pro.daily(ts_code=tscode)
        df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]
        df.rename(columns={
            'trade_date': 'Date',
            'open': 'Open',
            'high': 'High',
            'low': 'Low',
            'close': 'Close',
            'vol': 'Volume'
        },
            inplace=True)
        df['Date'] = pd.to_datetime(df['Date'])
        df.set_index(['Date'], inplace=True)
        df = df.sort_index()
        return df
     
    get_data('603043.SH').to_csv("广州酒家日线数据.csv")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    保存的数据如下图所示:
       在这里插入图片描述


    3. 绘制图线

    拿到数据后,就可以进行绘图了。我们要绘制的是一幅折线图和一幅蜡烛图。其中折线图包含8月份交易日的收盘价数据,以及5日移动平均线和10日移动平均线。蜡烛图也采用刚刚过去的八月份的数据进行绘制。
                              在这里插入图片描述

    # 读取数据
    df = pd.read_csv("广州酒家日线数据.csv")
    
    # 设置索引,将字符串格式的日期转化为时间序列的形式,这样可以很大程度上方便我们索引
    df.index = pd.to_datetime(df.Date)
    
    # 提取收盘价
    Close = df.Close
    
    # 求取5日简单移动平均数
    Sma5 = pd.Series(0.0, index=Close.index)
    for i in range(4, len(Close)):
        Sma5[i] = round(sum(Close[i-4:(i+1)])/5,2)
    # 求取10日简单移动平均数
    Sma10 = pd.Series(0.0, index=Close.index)
    for i in range(9, len(Close)):
        Sma10[i] = round(sum(Close[i-9:(i+1)])/10,2)
    
    
    # 绘制折线图,即5日移动平均,和10日移动平均
    line = (
        Line(init_opts=opts.InitOpts(width='1000px',
                                            height='800px',
                                            chart_id='1'
                                            )
        )
        .add_xaxis(df.Date['2022-8'].values.tolist())
        .add_yaxis("收盘价", Close['2022-8'].values.tolist())
        .add_yaxis("五日移动平均线", Sma5['2022-8'].values.tolist())
        .add_yaxis("十日移动平均线", Sma10['2022-8'].values.tolist())
        # 全局配置项内容
        .set_global_opts(title_opts=opts.TitleOpts(title="广州酒家2022年8月收盘数据折线图", subtitle="附5&10日MAV图"),
                         yaxis_opts=opts.AxisOpts(min_='dataMin')
                         )
        .set_series_opts(
            linestyle_opts=opts.LineStyleOpts(
                width=8,
                opacity=1,)
    )
    )
    
    
    # 绘制蜡烛图
    # 这里需要把数据转化为[[],[],...,[]]的形式 而且,一定要注意,pyecharts要求的数据顺序是:开 收 低 高。
    data = [list(i) for i in df.loc['2022-8', ['Open', 'Close', 'Low', 'High']].values]
    
    kline = (
        Kline(init_opts=opts.InitOpts(width='1000px',
                                        height='800px',
                                        chart_id='2',
                                        page_title="广州酒家"))
        .add_xaxis(df.Date['2022-8'].values.tolist())
        .add_yaxis("广州酒家", data)
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")],
            title_opts=opts.TitleOpts(title="广州酒家蜡烛图"),
        )
    )
    
    
    # 顺序多图
    page = Page(layout=Page.DraggablePageLayout)
    page.add(
        line,
        kline
    )
    
    page.render('render.html')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    程序会输出一个html文件,我们将其打开后里边的图表是按顺序从上向下排列的。然后我们可以对其中的图片位置进行拖拽,拖拽到预期的位置,如图所示为例。然后点击左上角的Save Config,即可得到一个名为chart_config.json的json文件,在左下角位置处。具体如图所示:
    请添加图片描述


    4. 添加中秋主题

    接下来我们的pic1.jpg图像文件就派上用场啦。文件chart_config.json包含了我们需要的图像的位置信息。将pic1.jpgchart_config.json,以及刚刚生成的render.html文件,都放在当前目录下,再创建一个py文件,并在里边编辑代码:

    from bs4 import BeautifulSoup
    from pyecharts.charts import Page
    
    Page.save_resize_html("render.html", cfg_file="chart_config.json", dest="mycharts_demo.html")
    
    
    with open("mycharts_demo.html", "r+", encoding='utf-8') as html:
        html_bf = BeautifulSoup(html, 'lxml')
        body = html_bf.find("body")
        body["style"] = "background-image: url(pic1.jpg)"  # 背景颜色
        html_new = str(html_bf)
        html.seek(0, 0)
        html.truncate()
        html.write(html_new)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行代码,即得到了最终的"mycharts_demo.html"文件。
    界面效果如下,动态的效果可以从上边视频中查看。
    在这里插入图片描述
    可以看到,中秋节前夕,因订单激增,月饼龙头的股价有一定的拉升趋势,但是受当前多方面因素所致的不利市场环境影响,广州酒家的股价出现大幅波动,呈现出一种恐慌的情绪。

    但根据均线策略,十日移动平均线短暂超过五日均线后,又被五日移动平均线快速突破,这在一定程度上,释放出了利好信号。

    哈哈哈,股市有风险,投资需谨慎,还是代码香。


    5. 中秋快乐!

    本次分享到这里就结束啦,在今后的博客中,小啾还会努力呈现出更多精彩内容,感谢大家的支持!

    祝 大 家

                 中秋快乐!

                请添加图片描述


    🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ

  • 相关阅读:
    【附源码】计算机毕业设计SSM汽车交易平台
    dubbo漫谈(一)
    46、TCP的“三次握手”
    携手华为使能全场景创新,夯实算力底座,麒麟信安受邀参加华为全联接大会2023
    笔记-疑问理解7种join
    stm32F103RCT6使用FFT运算分析波形详解(非常新手)
    MySQL基础篇【第五篇】| union、limit、DDL、DML、约束
    iOS- flutter flavor 多环境Configurations配置
    抓包整理外篇——————autoResponder、composer 、statistics [ 三]
    【python入门专项练习】-N01.输入输出&&类型转换
  • 原文地址:https://blog.csdn.net/weixin_48964486/article/details/126640629