N184_按时间轴轮播折线图分析收支

%%time
# pyecharts绘制时间轮播折线图
#导入模块,需要检查数据源的日期,都有规范成正确的格式
from random import randint
from pyecharts import options as opts
from pyecharts.charts import Line, Timeline
from pyecharts.globals import ThemeType
import pandas as pd
import numpy as np
from datetime import datetime
import warnings
warnings.filterwarnings("ignore")
from pyecharts.charts import Line
data = pd.read_excel('N184_数据源.xlsx',usecols=["交易时间","交易方户名","收付标志","对手户名","交易金额"])
data['日期'] = data['交易时间'].apply(lambda x:datetime.strftime(x,"%Y-%m-%d")) #在表格中也要规范下,消除明显的错误
data['交易金额'] = data['交易金额'].apply(lambda x:int(x/10000))  #将明细金额缩小,横轴就小
def timeline_bar() -> Timeline:
    ben_list = data["交易方户名"].unique() #提取本方所有要素
    tl = Timeline()  #建立动态轴
    for i in ben_list:  #遍历本方
        print(i)  #调试用
        df2=data[(data["交易方户名"]==i)*(data["交易金额"]>= 1)]  #筛选本方 并 金额大于1万
        if df2.empty: #为何要加这句,因为筛选条件太苛刻,造成为空,后面报错
            break
        # 数据统计,先分组后统计,还可以改进
        df_agg = df2.groupby(["日期", "对手户名", "收付标志"]).sum().reset_index() #.rename("合计").reset_index()
        tongji01=pd.pivot_table(df_agg, index=['日期','对手户名'], columns='收付标志', values='交易金额',
                             margins=False, aggfunc=[np.sum],fill_value=0)
        # 最后,要扁平化MultiIndex列,我们可以只连接元组中的值:
        tongji01.columns = ['_'.join(col) for col in tongji01.columns.values]
        # 为了是下面的标题等同上面的
        tongji01 = tongji01.reset_index()
        riqi_list = tongji01['日期'].to_list() #提取画图要的要素,日期列表,下面等同
        shou_list = tongji01['sum_进'].to_list()
        chu_list = tongji01['sum_出'].to_list()
        bar = (
            Line()
            .add_xaxis(riqi_list)
            .add_yaxis('收入',shou_list,areastyle_opts=opts.AreaStyleOpts(opacity=1)) 
            .add_yaxis('支出',chu_list,areastyle_opts=opts.AreaStyleOpts(opacity=1))
            .set_global_opts(title_opts=opts.TitleOpts("{}统计(万)".format(i)), 
                            datazoom_opts=opts.DataZoomOpts(range_start=1,range_end=7) )
        )
        tl.add(bar, "本:{}".format(i))
        tl.add_schema(play_interval=3000,   #播放速度,毫秒级,1秒等于1000毫秒
        is_timeline_show=True,  #是否显示 timeline 组件
        is_auto_play=True)  #不做展示的话,就可以不要自动播放
    return tl
timeline_bar().render("N184_按时间轴轮播折线图分析收支.html")
本01
本02
CPU times: total: 62.5 ms
Wall time: 63.9 ms





'D:\\myjupyter\\自制python 脚本工具库\\N184_按时间轴轮播折线图分析收支.html'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kafeihule

感谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值