ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4115|回复: 1

[求助] 预测下月的销售量,请高手转换成能在excel里运行的

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-14 14:49 | 显示全部楼层 |阅读模式
下面是在网上搜索的来的
实现“下个月销售排行榜”,这样可以增加用户体验和使用户购书的时候更具有针对性.  
   废话就不多说了。要完美的完成上述功能,需要大家实现以下2个功能点.
   1.对用户分类。即根据用户在网站上的行为特征对用户进行用户特征和喜好的分类。分类的数学模型很多。这些我使用神经网络。(不是本文重点,暂不详述)。
   2.根据用户分类。在“下月销售榜”中根据分类展现该分类中图书预测排名.  
  由于本文主要讲预测。针对于第一点就不描述了。  
  开门见山,进行做这个功能的准备活动.   
   1.首先要进行采样,把各个图书的历年或者历月的销售量记录在数据表中.  
    2.画个坐标图。x轴代表时间 y轴代表销量.我们可以看到一段时间内的数据点可以体现为直线     3.初中时我们就学过直线方程 y=ax+b (不要告诉我你没学过)  
    4.各个数据点的连接关系并不都是直线,而是形成一个散点图.  
    5.各个散点其实形成各个数据间的曲线关系。为了表现各个曲线所表示坐标之间的函数关系。我们使用了一个很牛的概念叫作曲线拟合.
    6.由于是曲线因此我们不能简单使用y=ax+b直线方程来搞定。原因在第4点.  
    7.根据我们所学的知识。我们认为各个曲线成线性关系,即数据与数据之间按比例、成直线的关系。在数学上可以理解为一阶导数为常数的函数。
    8.由于我们只要根据图书的销售时间和销售量来预测下月的销售量。我们把时间当作自变量X,销售量当作因量Y 结果就是x={2005, 2006, 2007, 2008}, y={222,223,224,225} 这里代表2005年某本书的销量是222本。。。。 我们要预测2009年这本书的销量是多少.
  9.于是方程式变形.依旧还是y=ax+b.只不过这里我们使用线性回归来近似估计值.注意这里使用了近似两个字.
   10.到这里思路清晰。由于是1元方程。于是我们使用一元线性回归来计算a和b的值。

     接下来是发放代码  java代码 拷贝到c#中一样用
  public class OneDimLinear {

  private double[][] datax;

public void setDatax(double[][] datax) {
this.datax = datax;
}

public double[][] getDatax() {
return datax;
}
public int getLength(){
return this.datax.length;
}
public double getAValue()  //获得自变量A的值
{
   if(!Validate())
    return 0;
  double szA1=(this.getLength()*this.getSumXY()-this.getSumX()*this.getSumY());
  double szA2=this.getSumSquareX()-Math.pow(this.getSumX(), 2);
  if(szA2>0)
  {
   return szA1/szA2;
  }
  else
  {
   return 0;
  }
   
}
public double getBValue(double AValue) //获得自变量B的值
{
if(!Validate())
    return 0;
return this.getSumY()/this.getLength()-(AValue*this.getSumX())/this.getLength();
}
public double getLinearValue(double x) //根据自变量X 求因变量Y
{
if(!Validate())
    return 0;
double szA=this.getAValue();
double szB=this.getBValue(szA);
return szA*x+szB;
}
public double getSumX()  //获得X值的和
{
  double szRes=0;
    if(Validate())
    {
     for(int i=0;i<=this.datax.length-1;i++){
       szRes+=this.datax[0];
     }
     return szRes;
    }
    else
       return 0;
}
public double getSumY()//获得Y值的和
{
  double szRes=0;
    if(Validate())
    {
     for(int i=0;i<=this.datax.length-1;i++){
       szRes+=this.datax[1];
     }
     return szRes;
    }
    else
       return 0;
}
public double getSumXY() //获得x*y的和
{
  double szRes=0;
     if(Validate())
     {
      for(int i=0;i<=this.datax.length-1;i++){
        szRes+=this.datax[0]*this.datax[1];
      }
      return szRes;
     }
     else
        return 0;
}
public double getSumSquareX() //获取X的平方和
{
  double szRes=0;
  if(Validate())
  {
   for(int i=0;i<=this.datax.length-1;i++){
       szRes+=java.lang.Math.pow(this.datax[0], 2);
     }
     return szRes;
  }
  else
   return 0;
}
private boolean Validate() //验证数据是否合法
{
  if(this.datax.length<=0)
   return false;
  if(this.datax[0].length!=2)
  {
   return false;
  }
  return true;
}

  
  

}


   根据上面2个类 ,我们可以把系数a和b都计算出来了。 于是根据y=ax+b 把x=2009放进去吧 y已经出来了.
   接下来要干的事情是把各个数据循环一遍 把每本书的下一个月的销量算出来。
   于是接下来的 这个“下个月销售量” 这个功能就做好了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-14 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
就是根据前几个月的销量预测这个月的销量,在excel里还有其他方式能实现吗
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 09:49 , Processed in 0.029707 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表