python——标准普尔500预测

题目描述
标准普尔500指数是一种股市指数,包含500家大公司的股票信息。标准普尔500指数是股市的重要指标之一,代表了整体市场的表现。“StandardPoors500-week-20141018.csv” 文件给出了2014年10月18日之前标准普尔500指数的统计数据。下表给出了该表的前几行。
Date Open High Low Close Volume Adj Close
2014/10/13 1905.65 1912.09 1820.66 1886.76 4962132000 1886.76
2014/10/6 1970.01 1977.84 1906.05 1906.13 4072602000 1906.13
2014/9/29 1978.96 1985.17 1926.03 1967.9 3761592000 1967.9
2014/9/22 2009.08 2009.08 1965.99 1982.85 3229072000 1982.85
2014/9/15 1986.04 2019.26 1978.48 2010.4 3452364000 2010.4
2014/9/8 2007.17 2007.17 1980.26 1985.54 2946522000 1985.54

第一行是标题行,后面每一行表示一周的股票信息。“Date”表示日期,“Open”、“Close”、“High”和“Low”分别表示一周中股票的开盘价、收盘价、最高价和最低价,“Adj Close”则表示修正后的价格。
下面请以每个季度(连续13周)中的“Adj Close”为考察对象,对“StandardPoors500-week-20141018.csv”中的数据进行处理,要求用python编程求解以下问题:

  1. Adj Close指数在每一个季度(13周)中都存在一个最大值和最小值,最大值减最小值得到该季度的差值。找出差值最大的那个季度,输出该季度起始日期和结束日期、以及最大差值。(最前面的连续13周表示第1季度、其后的连续13周表示第2季度,后面依次类推,最后不够13周的数据可以忽略)
  2. 类似问题1,找出差值最小的那个季度,输出该季度起始日期和结束日期、以及最小差值。
  3. 每一个季度中第一周的open值减去第13周的Close值,得到该季度的变化值。输出变化值的绝对值最小的10个季度起始日期和结束日期、以及变化值(非绝对值)。
  4. 输出变化值的绝对值最大的10个季度,输出这10个季度的起始日期和结束日期、以及变化值(非绝对值)。
import csv
def quarter(x):  # 划分季度
    q = []
    try:
        for i in range(len(x) - 1, 0, -13):#将数组逆序每个十三个划分
            temp = []
            for j in range(i, i - 13, -1):#将划分出来的十三个作为一个季度存入数组
                x[j][1] = float(x[j][1])#将open值转换成浮点数
                x[j][4] = float(x[j][4])#将close值转换成浮点型
                x[j][6] = float(x[j][6])#将每个星期的Adj Cloase指数变成浮点型
                temp.append(x[j])
            q.append(temp)
        return q
    except IndexError:
        pass
def Difference (x):#求差值
    a = []
    for i in x:
        k = sorted(i , key = lambda x : x[6])#将每个季度机型排序
        a.append(k[-1][6] - k[0][6])#将每个季度最大值减去每个季度最小值,然后存入数组
    maxadj = max(a)#差值最大
    minadj = min(a)#差值最小
    maxindex = a.index(maxadj)#差值最大的季度
    minindex = a.index(minadj)#差值最小的季度
    print("差值最大的季度:")
    print( x[maxindex][0][0] ,  x[maxindex][-1][0] ,  maxadj)
    print("差值最小的季度:")
    print(x[minindex][0][0] ,  x[minindex][-1][0] ,  minadj)
def change(x):#变化值
    a = {}
    k = 0
    for i in x:
        a[k] =i[0][1] - i[-1][4]#将变化值按季度存入字典
        k += 1
    b = sorted(a.items() , key = lambda x:abs(x[1]))#将变化值的绝对值进行排序
    c = b[0:10]#取出变化值的绝对值最小的10个数
    d = sorted(a.items() , key = lambda x:abs(x[1]) , reverse = True)#将变化值的绝对值进行逆序排序
    e = d[0:10]#取出变化值的绝对值最大的10个数
    print("变化值的绝对值最小:")
    for i in c:
        print(x[i[0]][0][0] , x[i[0]][-1][0] , a[i[0]])
    print('变化值的绝对值最大:')
    for i in e:
        print(x[i[0]][0][0], x[i[0]][-1][0], a[i[0]])
path = 'StandardPoors500-week-20141018.csv'
with open(path) as name:
    con = [row for row in csv.reader(name)]
    x = quarter(con[1:])
    Difference(x)
    change(x)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值