热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

做数学建模不得不会的数据特征分析对比分析

对比分析主要用于对两个互相联系的指标进行比较,包括绝对数比较(相减)相对数比较(相除),结构分析,比例分析,空间比较分析,动态对比分析等,这篇博客来一一写一下分析方法首先引入所需模

对比分析主要用于对两个互相联系的指标进行比较,包括绝对数比较(相减)/相对数比较(相除),结构分析,比例分析,空间比较分析,动态对比分析等,这篇博客来一一写一下分析方法

首先引入所需模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

1.绝对数比较(相减)

这种方法相互对比的指标在量级上不能相差过大,不然得不到明显的对比结果。
创建数据,生成30天内的A/B产品的日销售额

data = pd.DataFrame(np.random.rand(30,2)*1000,
columns = ['A_sale','B_sale'],
index = pd.period_range('20170601','20170630'))#pandas中与时间相关的函数
print(data.head())

数据展示
《做数学建模不得不会的数据特征分析---对比分析》
(2)折线图比较

data.plot(kind='line',
style = '--.',
alpha = 0.8,
figsize = (10,3),
title = 'AB产品销量对比-折线图')

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》
(3)多系列柱状图对比


data.plot(kind = 'bar',
width = 0.8,
alpha = 0.8,
figsize = (10,3),
title = 'AB产品销量对比-柱状图')

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》
(4)柱状图,堆叠图对比

创建堆叠图

ax1 = fig3.add_subplot(2,1,1)
x = range(len(data))
y1 = data['A_sale']
y2 = -data['B_sale']
plt.bar(x,y1,width = 1,facecolor = 'yellowgreen')
plt.bar(x,y2,width = 1,facecolor = 'lightskyblue')
plt.title('AB产品销量对比-堆叠图')
plt.grid()
plt.xticks(range(0,30,6))
ax1.set_xticklabels(data.index[::6])

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》
(5)差值折线图对比

ax2 = fig3.add_subplot(2,1,2)
y3 = data['A_sale']-data['B_sale']#产品A与B差值
plt.plot(x,y3,'--go')
plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线
plt.grid()
plt.title('AB产品销量对比-差值折线')
plt.xticks(range(0,30,6))
ax2.set_xticklabels(data.index[::6])

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》

2.相对数比较(相除)

相对数比较主要用于有联系的指标综合计算后的对比,数值为相对数,主要对比方法有结构分析、比例分析、空间比较分析、动态对比分析、计划完成度分析等

(1)结构分析
结构分析是在分组的基础上,对各组总量指标与总体的总量指标进行对比,计算出各组数量在总量中所占的比重,它可以反映总体的内部结构
首先创建数据,生成30天内A/B产品的日销售额
为了对比效果,这里我们设置A与B的数量级是不同的

data = pd.DataFrame({ 'A_sale':np.random.rand(30)*1000,
'B_sale':np.random.rand(30)*200},
index = pd.period_range('20170601','20170630'))
print(data.head())

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》
计算A、B产品每一天的营收占比,并转换为百分数

data['A_per'] = data['A_sale'] / data['A_sale'].sum()
data['B_per'] = data['B_sale'] / data['B_sale'].sum()
data['A_per%'] = data['A_per'].apply(lambda x: '%.2f%%' % (x*100))
data['B_per%'] = data['B_per'].apply(lambda x: '%.2f%%' % (x*100))

数据展示:
《做数学建模不得不会的数据特征分析---对比分析》
看一下销售量情况

data[['A_sale','B_sale']].plot(kind='line',style = '--.',alpha = 0.8,ax=axes[0])
axes[0].legend(loc = 'upper right')

绘制结果:
《做数学建模不得不会的数据特征分析---对比分析》
再通过销售额占比来看一下售卖情况

data[['A_per','B_per']].plot(kind='line',style = '--.',alpha = 0.8,ax=axes[1])
axes[1].legend(loc = 'upper right')

绘制结果:
《做数学建模不得不会的数据特征分析---对比分析》
只看销售量的对比我们难以看出结构性的变化,通过销售额会比较容易看到售卖情况的对比。
(2)比例分析
在分组的基础上将总体不同部分的指标数值进行对比,其相对指标一般称为‘比例相对数’,比例相对数是总体中某一部分数值/总体中另一部分数值。

首先生成数据,生成某人一年内的消费、工资薪水情况,其中消费按照2000-3000/月随机生成,工资按照5000-5500/月随机生成

data = pd.DataFrame({ 'consumption':np.random.rand(12)*1000 + 2000,
'salary':np.random.rand(12)*500 + 5000},
index = pd.period_range('2017/1','2017/12',freq = 'M'))
print(data.head())

数据结果:
《做数学建模不得不会的数据特征分析---对比分析》
计算比例相对数,消费与收入的比值

data['c_s'] = data['consumption'] / data['salary']
print(data.head())

绘制面积图观察结果
《做数学建模不得不会的数据特征分析---对比分析》
(3)空间比较分析
包括横向对比分析和纵向对比分析。
横向对比分析是同类现象在同一时间不同空间的指标数值进行对比,可以反应同类现象在不同空间上的差异程度和现象发展不平衡的状况,空间比较数为 甲空间某一现象的数值/乙空间同类现象的数值,比如从绝对数来看,我国经济总量世界第一,但是从人均水平来看却是另一回事

首先生成数据,30天内A/B/C/D四个产品的销售情况,不同产品我们设置销售量级不同

data = pd.DataFrame({ 'A':np.random.rand(30)*5000,
'B':np.random.rand(30)*2000,
'C':np.random.rand(30)*10000,
'D':np.random.rand(30)*800},
index = pd.period_range('20170601','20170630'))
print(data.head())

数据展示:
《做数学建模不得不会的数据特征分析---对比分析》
通过柱状图做横向比较,比较四个产品销售额

data.sum().plot(kind = 'bar',color = ['r','g','b','k'], alpha = 0.8, grid = True)
for i,j in zip(range(4),data.sum()):
plt.text(i-0.25,j+2000,'%.2f' % j, color = 'k')

输出结果:
《做数学建模不得不会的数据特征分析---对比分析》
再通过柱状图,横向比较前十天4个产品的销售额

data[:10].plot(kind = 'bar',color = ['r','g','b','k'], alpha = 0.8, grid = True, figsize = (12,4),width = 0.8)

绘制结果:
《做数学建模不得不会的数据特征分析---对比分析》
再来一个小tips

# 关于同比与环比
# 同比 → 产品A在2015.3和2016.3的比较(相邻时间段的同一时间点)
# 环比 → 产品A在2015.3和2015.4的比较(相邻时间段的比较)
# 如何界定“相邻时间段”与“时间点”,决定了是同比还是环比

看完以上横向对比,再来看一下纵向对比,也称动态对比分析,它是同一现象在不同时间上的指标数值进行对比,反应现象的数量随着时间推移而发展变动的程度及趋势,最基本分方法是计算动态相对数,反应发展速度
动态相对数(发展速度)=某一现象的报告期数值/同一现象的基期数值
基期是用来比较的基础时期,报告期是所要研究的时期,又称计算期

首先创建数据,生成30天内A产品的销售情况

data = pd.DataFrame({ 'A':np.random.rand(30)*2000+1000},
index = pd.period_range('20170601','20170630'))
print(data.head())

数据展示:
《做数学建模不得不会的数据特征分析---对比分析》
假设基期销售额为1000,计算累积增长量和逐期增长量

data['base'] = 1000 # 假设基期销售额为1000,后面每一天都为计算期
data['l_growth'] = data['A'] - data['base'] # 累计增长量 = 报告期水平 - 固定基期水平
data['z_growth'] = data['A'] - data.shift(1)['A'] # 逐期增长量 = 报告期水平 - 报告期前一期水平
data[data.isnull()] = 0 # 替换缺失值

通过绘制折线图查看增长量情况

data[['l_growth','z_growth']].plot(figsize = (10,4),style = '--.',alpha = 0.8)
plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线
plt.legend(loc = 'lower left')
plt.grid()

绘制结果:
《做数学建模不得不会的数据特征分析---对比分析》
再来看一下发展速度

data['lspeed'] = data['l_growth'] / data['base'] # 定期增长速度
data['zspeed'] = data['z_growth'] / data.shift(1)['A'] # 环比增长速度
data[['lspeed','zspeed']].plot(figsize = (10,4),style = '--.',alpha = 0.8)
plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线
plt.grid()

绘制结果:
《做数学建模不得不会的数据特征分析---对比分析》
好的,就到这里了

关注欢喜,走向成功~


推荐阅读
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • Keras 实战:自编码器入门指南
    本文介绍了使用 Keras 框架实现自编码器的基本方法。自编码器是一种用于无监督学习的神经网络模型,主要功能包括数据降维、特征提取等。通过实际案例,我们将展示如何使用全连接层和卷积层来构建自编码器,并讨论不同维度对重建效果的影响。 ... [详细]
  • 本文介绍了如何在Python中使用多元核密度估计(KDE)并将其结果在3D空间中进行可视化。通过利用`scipy`库中的`gaussian_kde`函数和`matplotlib`或`mayavi`库,可以有效地展示数据的密度分布情况。 ... [详细]
  • 本文深入探讨了CART(分类与回归树)的基本原理及其在随机森林中的应用。重点介绍了CART的分裂准则、防止过拟合的方法、处理样本不平衡的策略以及其在回归问题中的应用。此外,还详细解释了随机森林的构建过程、样本均衡处理、OOB估计及特征重要性的计算。 ... [详细]
  • 本文介绍了如何在MATLAB中实现单变量线性回归,这是基于Coursera上Andrew Ng教授的机器学习课程中的一个实践项目。文章详细讲解了从数据可视化到模型训练的每一个步骤。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 本文介绍了如何利用TensorFlow框架构建一个简单的非线性回归模型。通过生成200个随机数据点进行训练,模型能够学习并预测这些数据点的非线性关系。 ... [详细]
  • ▶书中第四章部分程序,包括在加上自己补充的代码,有边权有向图的邻接矩阵,FloydWarshall算法可能含负环的有边权有向图任意两点之间的最短路径●有边权有向图的邻接矩阵1 ... [详细]
author-avatar
莫小北
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有