Python项目实战 —— 05. 小红书达人大盘分析

Python项目实战

  • Python项目实战--目录
  • Python项目实战 —— 05. 小红书达人大盘分析
    • 一、背景
    • 二、可视化
    • 三、代码

Python项目实战–目录

Python项目实战 —— 05. 小红书达人大盘分析

大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。

一、背景

   一个简单的小练习,大部分图表是Timeline图(时间线轮播多图)。
   点击下载数据集

二、可视化

Python项目实战 —— 05. 小红书达人大盘分析_第1张图片
Python项目实战 —— 05. 小红书达人大盘分析_第2张图片

三、代码

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()

谢谢大家

你可能感兴趣的:(项目实战,python)