沪深股市的数据挖掘(5)课题总结

今天是月底,所以要回顾本月的课题:数据挖掘。

数据挖掘是一门新兴学科,目前正大行其道。从微软的excel中的数据挖掘插件到具体公司要求的BI,都离不开这个课题。而我本月的主要目的是进行数据挖掘的一些回顾与练习,并以实际的沪深股市为例,从中获取一些经验。

无论是分类还是聚类,无论是差异点分析还是神经网络的,它们大致的过程都是一样的,而且这里涉及到的东西还有模式的识别问题(如图像、声音等)。可以说,数据挖掘的技术已经深入到计算机的各个角落。

然而,万变不离其宗,主线是清晰的:数据的收集--数据的处理--数据的分析--结果的展示与验证。 本次挖掘想利用SAP的BW整套工具,最终没有采用,而仅仅是在SQLserver上进行了数据的处理和分析,真有点小儿科的意味。不过,至少从几个方面得到了收获:1,数据的处理预估时间问题。我在前20个关联关系处理需要1个小时左右进行了线性的预估,得出了整个数据处理大致需要3天左右的时间,实际时间基本上吻合。2,采用interger处理与float处理相比,竟然要慢一些。难以理解。原来以为数字都采用float的计算,会涉及到位数和计算周期较长的问题,实际的情况却是采用interger处理比float处理需要时间多了40%。3,熟悉了一些基本sqlserver操作:如需要用到的临时表,游标等。还有就是sql语句的特殊写法等问题。

回到沪深股市上来,我采用了提前一天(数据前面有)和提前两天的关系来对比,发现提前一天的值要高些,这点很奇怪。可惜没有时间分析。

24225 SH601988   SH600580   2 2008年      391798 245 7.99587755102041
24227 SH601988   SH600784   2 2008年      391470 245 7.98918367346939
24229 SH601988   SZ000011   2 2008年      391415 245 7.9880612244898
24222 SH601988   SH600227   2 2008年      390995 245 7.97948979591837
20005 SH600519   SH600580   2 2008年      390227 245 7.96381632653061
24224 SH601988   SH600467   2 2008年      389923 245 7.95761224489796
24359 SZ000011   SZ000011   2 2008年      354725 223 7.95347533632287
24221 SH601988   SH600114   2 2008年      389592 245 7.95085714285714
20009 SH600519   SZ000011   2 2008年      389519 245 7.94936734693878
15819 SH600006   SH600122   2 2008年      387602 244 7.94266393442623
24035 SH601398   SH600580   2 2008年      387525 244 7.94108606557377
24209 SH601939   SZ000011   2 2008年      389102 245 7.94085714285714
28815 SZ002007   SH600580   2 2008年      385391 243 7.92985596707819
24319 SZ000007   SZ000011   2 2008年      331458 209 7.92961722488038
24135 SH601857   SH600580   2 2008年      385318 243 7.92835390946502
27755 SZ000869   SH600580   2 2008年      385085 243 7.92355967078189
21629 SH600697   SZ000011   2 2008年      388142 245 7.92126530612245
24037 SH601398   SH600784   2 2008年      386493 244 7.91993852459016
18099 SH600276   SZ000011   2 2008年      388033 245 7.91904081632653
24205 SH601939   SH600580   2 2008年      387979 245 7.9179387755102

有关的sql语句如下:

存储过程:计算所有股票关系值。

ALTER PROCEDURE [dbo].[BUILDRESULT]
 
AS
BEGIN
 declare   @stocka   nchar(10) 
 declare   Type_Cursor_StockA   CURSOR   FOR  
   select   stockname   from  tbstocknum
 open   Type_Cursor_StockA  
   fetch   next   from   Type_Cursor_StockA   into   @stocka
   while   @@FETCH_STATUS=0  
   begin  

   exec insertstocka @stockname = @stocka

   exec calcallstock

   exec SAVETEMPRESULTANDDELETE

     fetch   next  from   Type_Cursor_StockA into @stocka
   end  
   close   Type_Cursor_StockA  
deallocate   Type_Cursor_StockA  
END

存储过程:计算AB股票的关系值

ALTER PROCEDURE [dbo].[CalcABStock]
 -- Add the parameters for the stored procedure here
 @stockb nchar(10)
AS
BEGIN
  declare @sumtotal float
  declare @stock1  char(10)
  declare @stock2  char(10)

  set @stock1 = ( select top 1 stockname from tempa)
  set @stock2 =@stockb
  
  select a.datenum as datenum, 2000-abs((a.updown-b.updown))  as tempscore into #temp_table2
       from tempa a,tempb b
    where a.datenum = b.datenum-2 and b.stockname = @stock2

  UPDATE [stockdb].[dbo].[TEMPA]
     SET [TEMPSCORE] = 1000

  upDATE c
     SET c.[TEMPSCORE] = d.tempscore
  from tempa c, #temp_table2 d
  where c.datenum = d.datenum

  drop table #temp_table2

  UPDATE [stockdb].[dbo].[TEMPA]
     SET [TEMPSCORE] = 1000
  where [TEMPSCORE] is null

  set @sumtotal = (select sum(tempscore)  from tempa)
  INSERT INTO [stockdb].[dbo].[TEMPRESULT]
       ([A]
       ,[B]
       ,[LIMITDATE]
       ,[PERIOD]
       ,[SCORE])
    VALUES
       (@stock1,
     @stock2,
     2,
     '2008年',
     @sumtotal)
END

存储过程:计算A股票与所有股票的关系值

ALTER PROCEDURE [dbo].[CALCALLSTOCK]
 
AS
BEGIN
 declare   @stockname   nchar(10) 
 declare   Type_Cursor   CURSOR   FOR  
   select   stockname   from  tbstocknum
 open   Type_Cursor  
   fetch   next   from   Type_Cursor   into   @stockname
   while   @@FETCH_STATUS=0  
   begin  
     exec calcabstock @stockb = @stockname
     fetch   next     from   Type_Cursor into @stockname
   end  
   close   Type_Cursor  
 deallocate   Type_Cursor  
END

存储过程:初始化处理

ALTER PROCEDURE [dbo].[INSERTSTOCKA]
 -- Add the parameters for the stored procedure here
 @stockname nchar(10)
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
    delete from tempa

    INSERT INTO [stockdb].[dbo].[TEMPA]
           ([STOCKNAME]
           ,[DATENUM]
           ,[UPDOWN]
           )
     select [STOCKNAME]
           ,[DATENUM]
           ,[UPDOWN]
          
     from tempb
     where tempb.stockname = @stockname
   
END

存储过程:保存结果

ALTER PROCEDURE [dbo].[SAVETEMPRESULTANDDELETE]
AS
BEGIN
 --保存结果到结果表中,并删除不需要的临时表
 declare @rownum int
 set @rownum = (select count(*) from tempa)

 INSERT INTO [stockdb].[dbo].[RESULT]
      ([A]
      ,[B]
      ,[LIMITDATE]
      ,[PERIOD]
      ,[SCORE],prddate)
  select top 10 a,b,limitdate,period,score,@rownum  from tempresult

 --update result
 --set result.prddate = @rownum
 --where result.prddate is null

 delete  from tempresult

 delete from tempa
END

原文地址:https://www.cnblogs.com/Beewolf/p/1446798.html