大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。
一个简单的小练习,大部分图表是Timeline图(时间线轮播多图)。
点击下载数据集
import pandas as pd
from pyecharts.charts import *
import pyecharts.options as opts
f1 = pd.read_csv('/xxxxx/数据概览.csv')
f3 = pd.read_csv('/xxxxx/达人发文趋势.csv')
f3.日期 = f3.日期.astype('str')
f1_1 = f1.query(" 粉丝区间=='全部' ").sort_values('发文达人数',ascending=True)
f3_1 = f3.query(" 粉丝区间=='全部' ").groupby(['日期','行业']).sum().reset_index('行业')
f3_2 = f3.query(" 粉丝区间!='全部' ").groupby(['日期','行业']).sum().reset_index('行业')
p = Page(layout=Page.DraggablePageLayout)
### 各行业每日互动量
t1 = Timeline()
for i in f3_1.index.unique():
data = f3_1.loc[i,['行业','互动量']].sort_values('互动量',ascending=False)
b = (Bar()
.add_xaxis(list(data.行业))
.add_yaxis('',list(data.互动量),label_opts=opts.LabelOpts(position='right'))
.reversal_axis()
.set_global_opts(title_opts=opts.TitleOpts('各行业每日互动量'),
xaxis_opts=opts.AxisOpts(is_show=False),
yaxis_opts=opts.AxisOpts(is_inverse=True))
)
t1.add(b,time_point=i)
t1.add_schema(play_interval=800) #表示播放的速度(跳动的间隔),单位毫秒
### 各行业累计互动量
t2 = Timeline()
for i in f3_1.index.unique():
data = f3_1.query(" 日期<=@i ").groupby('行业').互动量.sum().sort_values(ascending=False)
b = (Bar()
.add_xaxis(list(data.index))
.add_yaxis('',list(data),label_opts=opts.LabelOpts(position='right'))
.reversal_axis()
.set_global_opts(title_opts=opts.TitleOpts('各行业累计互动量'),
xaxis_opts=opts.AxisOpts(is_show=False),
yaxis_opts=opts.AxisOpts(is_inverse=True))
)
t2.add(b,time_point=i)
t2.add_schema(play_interval=800) #表示播放的速度(跳动的间隔),单位毫秒
### 某行业每日数据变化
t3 = Timeline()
for i in f3_2.行业.unique():
data = f3_2[f3_2.行业 == i ]
### 思路:将坐标轴分成两部分, 达人数&笔记数的最大值, 互动量的最小值
m = data.describe().loc['max'][1:].max()*1.5
n = data.describe().loc['max'][0].max()*(-1)
b = (Bar()
.add_xaxis(list(data.index))
.add_yaxis('达人数',list(data.达人数),label_opts=opts.LabelOpts(is_show=False))
.add_yaxis('笔记数',list(data.笔记数),label_opts=opts.LabelOpts(is_show=False))
.extend_axis(yaxis=opts.AxisOpts(is_show=False,position='right',min_=n,
axisline_opts=opts.AxisLineOpts(is_show=False),
axistick_opts=opts.AxisTickOpts(is_show=False))))
l = (Line()
.add_xaxis(list(data.index))
.add_yaxis('互动量',list(data.互动量),label_opts=opts.LabelOpts(is_show=False),yaxis_index=1,z=2,
is_smooth=True,linestyle_opts=opts.LineStyleOpts(width=5)))
b.set_global_opts(title_opts=opts.TitleOpts('每日数据变化-'+i),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=60)),
yaxis_opts=opts.AxisOpts(is_show=False,max_=m),
tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='shadow') #提示框
)
b.overlap(l)
t3.add(b,time_point=i)
t3.add_schema(height=30,pos_top='5%',pos_left='1%')
b = Bar()
b.add_xaxis(list(f1_1.行业))
b.add_yaxis('发文达人数',list(f1_1.发文达人数),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('笔记篇数',list(f1_1.笔记篇数),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('笔记爆文数',list(f1_1.笔记爆文数),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('笔记平均互动量',list(f1_1.笔记平均互动量),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('种草达人数',list(f1_1.种草达人数),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('种草笔记',list(f1_1.种草笔记),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('种草笔记平均互动量',list(f1_1.种草笔记平均互动量),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('商业合作笔记',list(f1_1.商业合作笔记),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('商业合作达人数',list(f1_1.商业合作达人数),label_opts=opts.LabelOpts(position='insideRight'))
b.add_yaxis('商业笔记平均互动量',list(f1_1.商业笔记平均互动量),label_opts=opts.LabelOpts(position='insideRight'))
b.set_global_opts(legend_opts=opts.LegendOpts(selected_mode='single'),
xaxis_opts=opts.AxisOpts(is_show=False))
b.reversal_axis()
p.add(t1,t2,t3,b)
p.render()
谢谢大家