栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

折线图(运营数据分析)--python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

折线图(运营数据分析)--python

折线图 概念

折线图:用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势。在折线图中,数据是递增还是递减、增减的速率、增减的规律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出来。所以,折线图常用来分析数据随时间的变化趋势,也可用来分析多组数据随时间变化的相互作用和相互影响

数据简介

数来自某程序客户端15日uv数据(处理后数据),同过折线图展示数据的时间变化趋势,和日环比数据。

数据样例

Python实现
  • 导入需要的包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
  • 计算日环比
# 计算环比数据
plot_data['huanbi'] = plot_data.uv.pct_change()*100
# 由于第一天没有环比数据,计算后为空值,使用0来填充空值
plot_data = plot_data.fillna(0)

  • matplotlib 绘图
  • 首先绘制基本图形
plt.figure(figsize=(30,12))
plt.plot(
    plot_data.日期,  # x轴
    plot_data.uv,   # y轴
    "-o",  # 标记点
    mfc='red',  # 标记点颜色
    alpha=0.7,  # 透明度 整体
    ms=6,  # 标记点 大小
    label = 'uv',
    lw = 3
    )

# x轴 字体大小
plt.xticks(size=15)
# Y轴数值范围大小
plt.ylim(top=max(plot_data.uv)*1.05,bottom=min(plot_data.uv)*0.9)

  • 添加网格、数据标签
# 添加数值
for i in range(len(plot_data)):
    plt.text(
        x=i,
        y=plot_data.iloc[:,1][i]+120,
        s=plot_data.iloc[:,1][i],
        fontsize = 15,
        color = 'black',
        alpha = 0.8,
        ha = 'center',   # 左右居中
        # va = 'center',  # 上下居中
        # rotation = 30,   # 旋转字体
        )
plt.legend(
    fontsize = 20,  # 控制  字体大小
    markerscale =1,  # 控制  点大小
    scatterpoints=1   # 控制 点的数量
    )
plt.grid(True)   # 开启网格

  • 添加环比数据,并用颜色区分增长,如绿色表示增加,红色表示降低
# 设定红和绿的颜色
red = (1,0.3,0.3)
green = (0.3,0.8,0.3)
# 添加 环比数据显示
# 通过if 语句来控制颜色
for i in range(len(plot_data)):
    if plot_data.iloc[:,2][i] >=0:
        plt.text(
            x=i,  # x轴的位置
            y=plot_data.iloc[:,1][i]+500,   # 展示的高度
            s='环比:+'+str(round((plot_data.iloc[:,2][i]),2))+'%',
            size = 15,
            alpha = 0.7,
            # rotation = 10,
            ha = 'center',
            # va = 'center',
            bbox = dict(
                boxstyle = 'round',
                ec = (1.,0.5,0.5),
                fc = green
                )
            )
    else:
        plt.text(
            x=i,
            y=plot_data.iloc[:,1][i]+500,
            s='环比:'+str(round((plot_data.iloc[:,2][i]),2))+'%',
            size = 15,
            alpha = 0.7,
            # rotation = 10,
            ha = 'center',
            # va = 'center',
            bbox = dict(
                boxstyle = 'round',
                ec = (1.,0.5,0.5),
                fc = red
                )
            )

  • 添加趋势线
# 添加趋势线

x = [x for x in range(len(plot_data))]
y = plot_data.uv
z = np.polyfit(x,y,1)
p = np.poly1d(z)
plt.plot(x,p(x),':',lw=3,color = (1,0.5,0.5))

plt.show()

  • 能够很直观的看出,绿色表示增长,红色表示下降,幅度是多少,还有每天的实际uv值
  • 通过趋势线还能看出近期的趋势是增长还是下降
完整绘图代码
plt.figure(figsize=(30,12))
plt.plot(
    plot_data.日期,  # x轴
    plot_data.uv,   # y轴
    "-o",  # 标记点
    mfc='red',  # 标记点颜色
    alpha=0.7,  # 透明度 整体
    ms=6,  # 标记点 大小
    label = 'uv',
    lw = 3
    )
# x轴 字体大小
plt.xticks(size=15)
# Y轴数值范围大小
plt.ylim(top=max(plot_data.uv)*1.05,bottom=min(plot_data.uv)*0.9)
# 添加标题
plt.title('近15日uv趋势',fontsize = 30)

# 添加数值
for i in range(len(plot_data)):
    plt.text(
        x=i,
        y=plot_data.iloc[:,1][i]+120,
        s=plot_data.iloc[:,1][i],
        fontsize = 15,
        color = 'black',
        alpha = 0.8,
        ha = 'center',   # 左右居中
        # va = 'center',  # 上下居中
        # rotation = 30,   # 旋转字体
        )
plt.legend(
    fontsize = 20,  # 控制  字体大小
    markerscale =1,  # 控制  点大小
    scatterpoints=1   # 控制 点的数量
    )
plt.grid(True)   # 开启网格
red = (1,0.3,0.3)
green = (0.3,0.8,0.3)
# 添加 环比
for i in range(len(plot_data)):
    if plot_data.iloc[:,2][i] >=0:
        plt.text(
            x=i,
            y=plot_data.iloc[:,1][i]+500,
            s='环比:+'+str(round((plot_data.iloc[:,2][i]),2))+'%',
            size = 15,
            alpha = 0.7,
            # rotation = 10,
            ha = 'center',
            # va = 'center',
            bbox = dict(
                boxstyle = 'round',
                ec = (1.,0.5,0.5),
                fc = green
                )
            )
    else:
        plt.text(
            x=i,
            y=plot_data.iloc[:,1][i]+500,
            s='环比:'+str(round((plot_data.iloc[:,2][i]),2))+'%',
            size = 15,
            alpha = 0.7,
            # rotation = 10,
            ha = 'center',
            # va = 'center',
            bbox = dict(
                boxstyle = 'round',
                ec = (1.,0.5,0.5),
                fc = red
                )
            )
# 添加趋势线
x = [x for x in range(len(plot_data))]
y = plot_data.uv
z = np.polyfit(x,y,1)
p = np.poly1d(z)
plt.plot(x,p(x),':',lw=3,color = (1,0.5,0.5))
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号