7.3 股票分析(project)

news2025/4/28 4:56:52

目录

第1关:涨幅和成交量

 第2关 涨幅与最高价

 第3关 跌幅与最低价


本关任务:完成涨幅和成交量股票分析。

相关知识

1.sorted()函数 2.集合运算

sorted()函数

sorted() 函数对所有可迭代的对象进行排序操作。

  1. sorted(iterable, key=None, reverse=False)

参数说明

  • iterable 可迭代对象。
  • key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse 排序规则,reverse=True 降序, reverse=False 升序(默认)。

编程 在右侧编辑器中补充代码,根据用户输入,利用集合运算和这些文件数据输出以下内容:

  1. 涨幅和成交量均在前10名的股票
  2. 涨幅或成交量在前10名的股票
  3. 涨幅前10名,但成交量未进前10名的股票
  4. 涨幅和成交量不同时在前10名的股票 交易数据文件数据内容格

第1关:涨幅和成交量

import numpy as np
# 设置常量,对应各列数据的语义,方便索引  
HIGH = 0
LOW = 1
CLOSE = 3
VOLUME = 4

def statistics_of_all(code_list):
    """  
    @参数 code_list:股票代码列表,列表类型  
    接收股票数据文件名列表,逐个统计各股票数据文件涨跌幅、总成交量、最高价和最低价。  
    涨跌幅计算公式为:(最新记录收盘价-最早记录收盘价) / 最早记录收盘价 * 100  
    为方便处理,读入数据时,略过日期列。  
    """
    statistics_of_stock = []
    for code in code_list:
        data_of_code = np.genfromtxt('datas/' + code, dtype=None,
                                     usecols=[1, 2, 3, 4, 5, 6], delimiter=',',
                                     skip_header=1)
        # 计算当前股票涨跌幅、总成交量、最高价和最低价  
        uplift_or_fall = round((data_of_code[:, CLOSE][-1] - data_of_code[:, CLOSE][0]) / data_of_code[:, CLOSE][0] * 100, 2)
        volumes = round(sum(data_of_code[:, VOLUME]), 2)
        statistics_of_stock.append([code[:6], uplift_or_fall, volumes])
    return statistics_of_stock  # 每支股票涨跌幅、总成交量、最高价和最低价

def top_10_uplift(statistics_of_stock):
    """  
    @参数 statistics_of_stock:每支股票涨跌幅、总成交量、最高价和最低价统计信息,列表类型  
    按涨幅降序排序,涨幅相同时按股票代码降序排序,取排名前10的股票,  
    返回排名前10的股票代码,返回值为列表类型。  
    """
    # 补充你的代码
    statistics_of_stock1 = sorted(statistics_of_stock, key=lambda x : (x[1],x[0]), reverse=True)
    list1 = []
    for i in range(10): 
        list1.append(statistics_of_stock1[i][0])
    return list1


def top_10_volumes(statistics_of_stock):
    """  
    @参数 statistics_of_stock:每支股票涨跌幅、总成交量、最高价和最低价统计信息,列表类型  
    按成交量降序排序,成交量相同时,按股票代码降序排序,取成交量前10的股票代码,返回成交量  
    最大的10支股票代码列表。  
    """
    # 补充你的代码
    statistics_of_stock2 = sorted(statistics_of_stock, key=lambda x : (x[2],x[0]), reverse=True)
    list2 = []
    for i in range(10): 
        list2.append(statistics_of_stock2[i][0])
    return list2


def uplift_and_volumes(top_uplift, top_volumes):
    """
    @参数 top_high,最高价在前10名的股票代码,字符串
    @参数 top_volumes,成交量在前10名的股票代码,字符串
    返回一个列表,其元素依序为以下4个:
    涨幅和成交量均在前10名的股票,按股票代码升序,列表
    涨幅或成交量在前10名的股票,按股票代码升序,列表
    涨幅前10名,但成交量未进前10名的股票,按股票代码升序,列表
    涨幅和成交量不同时在前10名的股票,按股票代码升序,列表
    """
    # 补充你的代码
    u_and_v = []
    u_and_v0 = sorted([x for x in top_uplift if x in top_volumes])
    u_and_v.append(u_and_v0)
    u_and_v1 =sorted(top_volumes + [x for x in top_uplift if x not in top_volumes])
    u_and_v.append(u_and_v1)
    u_and_v2 = sorted([x for x in top_uplift if x not in top_volumes])
    u_and_v.append(u_and_v2)
    u_and_v3 = sorted([x for x in u_and_v1 if x not in u_and_v0])
    u_and_v.append(u_and_v3)
    return u_and_v

def operation():
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    statistics_of_list = statistics_of_all(stock_lst)  # 对获取的股票数据进行统计  
    uplift_set = top_10_uplift(statistics_of_list)  # 涨幅前10名集合
    volumes_set = top_10_volumes(statistics_of_list)  # 成交量前10名集合
    u_and_v = uplift_and_volumes(uplift_set, volumes_set)
    opt = input()
    if opt == '涨幅与成交量':
        print('涨幅和成交量均在前10名的股票:')
        print(u_and_v[0])  # 涨幅和成交量均在前10名的股票
        print('涨幅或成交量在前10名的股票:')
        print(u_and_v[1])  # 涨幅或成交量在前10名的股票
        print('涨幅前10名,但成交量未进前10名的股票:')
        print(u_and_v[2])  # 涨幅前10名,但成交量未进前10名的股票
        print('涨幅和成交量不同时在前10名的股票:')
        print(u_and_v[3])  # 涨幅和成交量均在前10名的股票
    else:
        print('输入错误')
if __name__ == '__main__':
    filename = 'datas/沪市股票top300.csv'              # 股票名称与代码文件
    stock_lst = ['600000.csv', '600004.csv', '600006.csv',
                 '600007.csv', '600008.csv', '600009.csv',
                 '600010.csv', '600011.csv', '600012.csv',
                 '600015.csv', '600016.csv', '600018.csv',
                 '600019.csv', '600020.csv', '600026.csv',
                 '600028.csv', '600029.csv', '600030.csv',
                 '600031.csv', '600033.csv', '600036.csv']
    operation()

 第2关 涨幅与最高价

import numpy as np
# 设置常量,对应各列数据的语义,方便索引
HIGH = 0
CLOSE = 3
VOLUME = 4


def statistics_of_all(code_list):
    """
    @参数 code_list:股票代码列表,列表类型
    接收股票数据文件名列表,逐个统计各股票数据文件涨幅、总成交量、最高价和最低价。
    涨幅计算公式为:(最新记录收盘价-最早记录收盘价) / 最早记录收盘价 * 100
    为方便处理,读入数据时,略过日期列。
    """
    statistics_of_stock = []
    for code in code_list:
        data_of_code = np.genfromtxt('datas/' + code, dtype=None,
                                     usecols=[1, 2, 3, 4, 5, 6], delimiter=',',
                                     skip_header=1)
        # 计算当前股票涨幅、总成交量、最高价和最低价
        uplift_or_fall = round((data_of_code[:, CLOSE][-1] - data_of_code[:, CLOSE][0]) / data_of_code[:, CLOSE][0] * 100, 2)
        volumes = round(sum(data_of_code[:, VOLUME]), 2)
        high = round(max(data_of_code[:, HIGH]), 2)
        statistics_of_stock.append([code[:6], uplift_or_fall, volumes, high])
    return statistics_of_stock  # 每支股票涨幅、总成交量、最高价和最低价

def top_10_uplift(statistics_of_stock):
    """
    @参数 statistics_of_stock:每支股票涨幅、总成交量、最高价和最低价统计信息,列表类型
    按涨幅降序排序,涨幅相同时按股票代码降序排序,取排名前10的股票,
    返回排名前10的股票代码,返回值为列表类型。
    """
    # 补充你的代码
    statistics_of_stock1 = sorted(statistics_of_stock, key=lambda x : x[1], reverse=True)
    list1 = []
    for i in range(10): 
        list1.append(statistics_of_stock1[i][0])
    return list1


def top_10_high(statistics_of_stock):
    """
    @参数 statistics_of_stock:每支股票涨幅、总成交量、最高价和最低价统计信息,列表类型
    按最高价降序排序,最高价相同时,按股票代码降序排序返回,取排名前10的股票,返回最高价最
    高的10支股票代码的列表。
    """
    # 补充你的代码
    statistics_of_stock2 = sorted(statistics_of_stock, key=lambda x : x[3], reverse=True)
    list2 = []
    for i in range(10): 
        list2.append(statistics_of_stock2[i][0])
    return list2


def high_and_uplift(top_uplift, top_high):
    """
    @参数 top_high,最高价在前10名的股票代码,字符串
    @参数 top_uplift,涨幅在前10名的股票代码,字符串
    返回一个列表,其元素依序为以下4个:
    涨幅和最高价均在前10名的股票代码,按股票代码升序,列表
    涨幅或最高价在前10名的股票代码,按股票代码升序,列表
    涨幅前10名,但最高价未进前10名的股票代码,按股票代码升序,列表
    涨幅和最高价不同时在前10名的股票,按股票代码升序,列表
    票代码。
    """
    # 补充你的代码
    u_and_v = []
    u_and_v0 = sorted([x for x in top_uplift if x in top_high])
    u_and_v.append(u_and_v0)
    u_and_v1 =sorted(top_high + [x for x in top_uplift if x not in top_high])
    u_and_v.append(u_and_v1)
    u_and_v2 = sorted([x for x in top_uplift if x not in top_high])
    u_and_v.append(u_and_v2)
    u_and_v3 = sorted([x for x in u_and_v1 if x not in u_and_v0])
    u_and_v.append(u_and_v3)
    return u_and_v

def operation():
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    statistics_of_list = statistics_of_all(stock_lst)  # 对获取的股票数据进行统计
    uplift_set = top_10_uplift(statistics_of_list)  # 涨幅前10名集合
    high_set = top_10_high(statistics_of_list)  # 最高价前10名集合
    u_and_v = high_and_uplift(uplift_set, high_set)
    opt = input()

    if opt == '涨幅与最高价':
        # 补充你的代码
        print('涨幅和最高价均在前10名的股票:')
        print(u_and_v[0])  # 涨幅和最高价均在前10名的股票
        print('涨幅或最高价在前10名的股票:')
        print(u_and_v[1])  # 涨幅或最高价在前10名的股票
        print('涨幅前10名,但最高价未进前10名的股票:')
        print(u_and_v[2])  # 涨幅前10名,但最高价未进前10名的股票
        print('涨幅和最高价不同时在前10名的股票:')
        print(u_and_v[3])  # 涨幅和最高价均在前10名的股票    
    else:
        print('输入错误')
if __name__ == '__main__':
    filename = 'datas/沪市股票top300.csv'              # 股票名称与代码文件
    stock_lst = ['600000.csv', '600004.csv', '600006.csv',
                 '600007.csv', '600008.csv', '600009.csv',
                 '600010.csv', '600011.csv', '600012.csv',
                 '600015.csv', '600016.csv', '600018.csv',
                 '600019.csv', '600020.csv', '600026.csv',
                 '600028.csv', '600029.csv', '600030.csv',
                 '600031.csv', '600033.csv', '600036.csv']
    operation()

 第3关 跌幅与最低价

import numpy as np

# 设置常量,对应各列数据的语义,方便索引
HIGH = 0
LOW = 1
CLOSE = 3
VOLUME = 4

def statistics_of_all(code_list):
    """
    @参数 code_list:股票代码列表,列表类型
    接收股票数据文件名列表,逐个统计各股票数据文件涨跌幅、总成交量、最高价和最低价。
    涨跌幅计算公式为:(最新记录收盘价-最早记录收盘价) / 最早记录收盘价 * 100
    为方便处理,读入数据时,略过日期列。
    """
    statistics_of_stock = []
    for code in code_list:
        data_of_code = np.genfromtxt('datas/' + code, dtype=None,
                                     usecols=[1, 2, 3, 4, 5, 6], delimiter=',',
                                     skip_header=1)
        # 计算当前股票跌幅、总成交量、最高价和最低价
        uplift_or_fall = round((data_of_code[:, CLOSE][-1] - data_of_code[:, CLOSE][0]) / data_of_code[:, CLOSE][0] * 100, 2)
        volumes = round(sum(data_of_code[:, VOLUME]), 2)
        high = round(max(data_of_code[:, HIGH]), 2)
        low = round(min(data_of_code[:, LOW]), 2)
        statistics_of_stock.append([code[:6], uplift_or_fall, volumes, high, low])
    return statistics_of_stock  # 每支股票涨跌幅、总成交量、最高价和最低价


def top_10_uplift(statistics_of_stock):
    """
    @参数 statistics_of_stock:每支股票涨跌幅、总成交量、最高价和最低价统计信息,列表类型
    按涨幅降序排序,涨幅相同时按股票代码降序排序,取排名前10的股票,
    返回排名前10的股票代码,返回值为列表类型。
    """
    # 补充你的代码
    statistics_of_stock1 = sorted(statistics_of_stock, key=lambda x : x[1], reverse=True)
    list1 = []
    for i in range(10): 
        list1.append(statistics_of_stock1[i][0])
    return list1

def top_10_fall(statistics_of_stock):
    """
    @参数 statistics_of_stock:每支股票涨跌幅、总成交量、最高价和最低价统计信息,列表类型
    按跌幅升序排序,跌幅相同时,按股票代码升序排序,取排名前10的股票,返回跌幅最大的10支股
    票代码的集合。
    """
    # 补充你的代码
    statistics_of_stock2 = sorted(statistics_of_stock, key=lambda x : x[1], reverse=False)
    list2 = []
    for i in range(10): 
        list2.append(statistics_of_stock2[i][0])
    return list2


def top_10_low(statistics_of_stock):
    """
    @参数 statistics_of_stock:每支股票涨跌幅、总成交量、最高价和最低价统计信息,列表类型
    按最低价升序排序,最低价相同时,按股票代码升序排序,取排名前10的股票,返回最低价最低的
    10支股票代码集合。
    """
    # 补充你的代码
    statistics_of_stock3 = sorted(statistics_of_stock, key=lambda x : x[4], reverse=False)
    list3 = []
    for i in range(10): 
        list3.append(statistics_of_stock3[i][0])
    return list3


def low_and_fall(top_fall, top_low):
    """
    @参数 top_low,最低价在前10名的股票代码,字符串
    @参数 top_fall,跌幅在前10名的股票代码,字符串
    返回一个列表,其元素依序为以下4个
    跌幅和最低价均在前10名的股票代码,按股票代码升序,列表
    跌幅或最低价在前10名的股票代码,按股票代码升序,列表
    跌幅前10名,但最低价未进前10名的股票代码,按股票代码升序,列表
    跌幅和最高价不同时在前10名的股票,按股票代码升序,列表
    """
    # 补充你的代码
    u_and_v = []
    u_and_v0 = sorted([x for x in top_fall if x in top_low])
    u_and_v.append(u_and_v0)
    u_and_v1 =sorted(top_low + [x for x in top_fall if x not in top_low])
    u_and_v.append(u_and_v1)
    u_and_v2 = sorted([x for x in top_fall if x not in top_low])
    u_and_v.append(u_and_v2)
    u_and_v3 = sorted([x for x in u_and_v1 if x not in u_and_v0])
    u_and_v.append(u_and_v3)
    return u_and_v


def operation():
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    statistics_of_list = statistics_of_all(stock_lst)  # 对获取的股票数据进行统计
    fall_set = top_10_fall(statistics_of_list)  # 跌幅前10名集合
    low_set = top_10_low(statistics_of_list)  # 最低价前10名集合
    u_and_v = low_and_fall(fall_set, low_set)
    opt = input()
    if opt == '跌幅与最低价':
        # 补充你的代码
        print('跌幅和最低价均在前10名的股票:')
        print(u_and_v[0])  # 涨幅和最高价均在前10名的股票
        print('跌幅或最低价在前10名的股票:')
        print(u_and_v[1])  # 涨幅或最高价在前10名的股票
        print('跌幅前10名,但最低价未进前10名的股票:')
        print(u_and_v[2])  # 涨幅前10名,但最高价未进前10名的股票
        print('跌幅和最低价不同时在前10名的股票:')
        print(u_and_v[3])  # 涨幅和最高价均在前10名的股票  
    else:
        print('输入错误')


if __name__ == '__main__':
    filename = 'datas/沪市股票top300.csv'              # 股票名称与代码文件
    stock_lst = ['600000.csv', '600004.csv', '600006.csv',
                 '600007.csv', '600008.csv', '600009.csv',
                 '600010.csv', '600011.csv', '600012.csv',
                 '600015.csv', '600016.csv', '600018.csv',
                 '600019.csv', '600020.csv', '600026.csv',
                 '600028.csv', '600029.csv', '600030.csv',
                 '600031.csv', '600033.csv', '600036.csv']
    operation()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linxu下性能指标采集工具之nmon工具的使用

前言 近期在测试JefLogTail,由于JefLogTail使用的是轮询的方式来监听文件夹,所以对cpu的消耗可能会高一些,所以在测试的时候着重关注CPU,Linux下查看CPU信息一般采用top命令来实时观察,但是这种对于只是通过观察数据的变化来评估…

跟着我学习 AI丨初识 AI

人工智能(AI)是一种模拟人类思维和行为的计算机技术,通过学习、推理和自我修正等方式,使机器能够模拟人类智能,并具有一定的自主决策能力。AI 可以被用于解决各种难题,如自动化、机器人、自动驾驶、语音识别…

【LeetCode】53. 最大子数组和

53. 最大子数组和(中等) 思路 这道题的状态设计和状态转移和 300. 最长递增子序列 类似。但是这里要求的是连续子数组,和子序列不同。 状态定义 首先定义 dp[i]:以 nums[i] 结尾的具有最大和的连续子数组。 状态转移方程 根据…

idea项目打成war包,出现路径问题(已解决)

参考文档: https://www.cnblogs.com/huaixiaonian/p/10521460.html 解释说明: 什么路径问题呢,就比如你们合作开发了一个项目,然后打成了一个war包,然后路径以前的是这种的 http://localhost:8080 就可以直接运行&…

《计算机网络——自顶向下方法》精炼

“An investment in knowledge pays the best interest.” - Benjamin 文章目录 分布式散列表(键-值)对散列函数逻辑上的实现环形DHT对等方扰动对等方离开对等方加入 UDP套接字编程客户端代码服务器端代码 分布式散列表 分布式散列表是一种数据库。集中…

锁相环的工作原理

锁相环是一个能够比较输入与输出信号相位差的反馈系统,利用外部输入的参考信号控制环路内部的振荡信号的频率和相位,使振荡信号同步至参考信号。 问题:既然是利用外部的参考时钟控制内部的振荡信号频率和相位使内部信号同步至外部参考,那为什么不直接用导线将外部参考信号…

微服务监控系统选型:Zabbix、Open-Falcon、Prometheus

监控系统的 7 大作用 实时采集监控数据:包括硬件、操作系统、中间件、应用程序等各个维度的数据。实时反馈监控状态:通过对采集的数据进行多维度统计和可视化展示,能实时体现监控对象的状态是正常还是异常。预知故障和告警:能够提…

08 【Sass语法介绍-混合指令】

1.前言 混合指令在 Sass 中也是一个比较常用的指令,在前面我们讲解的内容中有编写过混合指令 mixin ,本节我们将详细讲解混合指令 mixin 的语法包括定义混合指令和引用混合指令等等,混合指令同样非常好用,我们一起来学习它吧。 …

python 离线安装pyinstaller

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载各类anaconda Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)https://www.lfd.uci.edu/~g…

OpenGL(二)—— Hello World

目录 一、前言 二、渲染 三、GLSL 3.1 数据类型 3.2 编程步骤 四、渲染窗口 五、渲染三角形 5.1 顶点输入 5.2 顶点着色器 5.3 片段着色器 5.4 着色器链接 5.5 顶点属性 5.6 VAO管理顶点属性 5.7 画图 六、渲染四边形 6.1 元素缓冲对象EBO 6.2 运行 一、前言 G…

hbuilder打包IOS上线APP流程

iOS 系统打包流程 1. 创建唯一标识符 (1) 首先,申请苹果开发者账号。没有苹果开发者账号是无法进行 ios 打包上线的。 (2) 进入链接: https://developer.apple.com 这个网址,点击“account”并输入苹果开…

计算机含金量最高的赛事大全,考研和工作都能加持,这才是该参加的比赛

现在计算机相关的赛事数不胜数,但含金量较高的比赛却只有那么几项,做好了你现场就能找到工作,就算是考研也是益处很大,今天给大家总结出来。 就别再折腾一些费时费力但又不讨好的比赛了。 文章目录 一、ACM国际大学生程序设计竞赛…

【0基础学爬虫】爬虫基础之自动化工具 Playwright 的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

autosar软件分层架构组成--汽车电子

介绍 autosar是汽车软件协会制定的一套软件标准 本文章所有图片来源于网络 一、分层架构 分层:3层 1.上层应用层(Application Layer) 2.中间件RTE(Runtime Environment) 3.下层的基础软件(Basic Software) 中间件R…

电脑截图快捷键有哪些?5大截图方法总结!(2023版)

案例:电脑截图快捷键 【朋友们,最近我总是需要用到电脑截图,有什么比较好用的电脑截图快捷键可以帮助我提高效率的吗?感谢感谢!】 电脑截图是我们日常工作、学习中不可或缺的一项功能。在Windows系统中,快…

python图像处理之形态学梯度、礼帽、黑帽

文章目录 简介实战 简介 腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。 由于这几种函数均基于腐蚀和膨胀,所以其参数均与开…

zynq基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证9、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

Linux进程通信:信号相关函数

1. kill函数 #include<sys/types.h> #include<signal.h>int kill(pid_t pid, int sig); /* 功能&#xff1a;给进程pid发送信号sig 参数&#xff1a;pid&#xff1a;取值有4种情况&#xff1a;> 0&#xff1a;将sig信号发送给进程号为pid的进程&#xff1b; 0&…

加密解密学习笔记

加密种类 对称加密&#xff0c;分组对称加密算法 加密算法 AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准 DES&#xff08;Data Encryption Standard&#xff09;数据加密标准 3DES/Triple DEA (Triple Data Encryption Algorithm) 三重数据加密算…

如何分别在macOSWindowsLinux上对OpenSSL源码进行编译

问题描述 如何分别在macOS、Windows、Linux系统上对OpenSSL源码进行编译&#xff1f; 问题解答 编译版本&#xff1a;openssl-1.1.1t 官方源码地址&#xff1a;https://www.openssl.org/source/ 下面流程在三种系统上均进行实际验证&#xff0c;可放心食用。 Windows(MSVC…