实现自己的小功能(方案二)

第一套方案废弃的原因是数据不准确,大家可以使用Tushare试试,多测试一些。

方案二的整体流程:

  1. 先随机检测数据(50条)
  2. 处理后数据的精度问题(第一套方案也遇到了这个问题)

1、下载数据

使用通达信下载数据
在这里插入图片描述

再使用pytdx读取下载到磁盘的数据
D:\software\tongdaxing\vipdoc\sh\lday
在这里插入图片描述

2、解析或者直接读取

https://blog.csdn.net/wowocpp/article/details/133707148?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170666852116777224453888%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170666852116777224453888&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-133707148-null-null.142^v99^pc_search_result_base8&utm_term=pytdx.reader&spm=1018.2226.3001.4187
接下来就是读取文件,这个可以借鉴其他博主,为降低风险的可能,我使用直接读取的方式。
想要解析,看这个博主

1、不直接联网获取的原因很简单,数据的准确的,谁知道有没有维护。
2、下载好还可以用于离线分析

注意:

尽可能的使用pydtx直接读取,不要使用其他方式解析,你运行下面的代码你就知道它效率有多高

from pytdx.reader import TdxDailyBarReader, TdxFileNotFoundException
from pytdx.reader import BlockReader

reader = TdxDailyBarReader()
df = reader.get_df("D:/software/tongdaxing/vipdoc/sh/lday/sh000001.day")
print(df)

接下里如何实现【中转】

1、将所有文件全部读取,然后写入到csv文件中,当使用到某个数据时从上200万条数据遍历
2、根据要获取的股票代码,先在5000多条文件(也就5000多个股票)筛选,再到400多个数据中筛选(我保存了两年的)【使用这个】

3、元数据的处理

我通过问财下载了我需要的数据,并做了数据的检测,保证文件名中有的日期和文件内容的日期保存相同,并缓存为csv格式

import os
import pandas as pd
import re

def extract_date_from_filename(filename):
    # 从文件名中提取日期
    
    match = re.search(r'(\d{4}年\d{1,2}月\d{1,2}日)', filename)
    if match:
        date_str = match.group(1)
        # 将中文日期转换为标准日期格式
        date_obj = pd.to_datetime(date_str, format='%Y年%m月%d日', errors='coerce')
        if not pd.isnull(date_obj):
            return date_obj.strftime('%Y-%m-%d')
    return None


def excel_csv(resource, goal):
    # resource 元数据存放的路径
    # goal 处理后元数据存放的路径
    for root, dirs, files in os.walk(resource):
        for file in files:
            file_path = os.path.join(root, file)
            file_path = file_path.replace('//', '/')

            # 提取文件名中的日期
            file_date = extract_date_from_filename(file)
            if file_date is None:
                print(f"无法从文件名中提取日期,文件名:{file}")
                continue

            # 读取Excel文件
            df = pd.read_excel(file_path)
            # 去除列名中的换行符
            df.columns = df.columns.str.replace('/n', '')
            # 删除最后一行
            df = df.iloc[:-1]
            # 获取日期列名
            date_column = [col for col in df.columns if '连续涨停天数(天)' in col][0]

            # 提取日期数据
            df['日期'] = date_column.split('连续涨停天数(天)')[1]

            # 将日期格式转换为'YYYY-MM-DD'
            df['日期'] = pd.to_datetime(df['日期'], format='%Y.%m.%d').dt.strftime('%Y-%m-%d')

            # 提取并重命名需要的列
            df = df[['股票代码', '股票简称', date_column, '日期']]

            # 判断文件名日期和DataFrame中的日期是否相同
            if file_date != df['日期'].iloc[0]:
                print(f"文件名日期与DataFrame中的日期不匹配,文件名日期:{file_date},DataFrame日期:{df['日期'].iloc[0]}")
                continue

            # 保存为CSV文件
            df.to_csv(goal, index=False, mode='a', header=False)


# 调用
excel_csv('', '')

4、元数据使用个人逻辑

002315.SZ,焦点科技,2,2023-05-04
002351.SZ,漫步者,2,2023-05-04
002555.SZ,三七互娱,2,2023-05-04
600757.SH,长江传媒,4,2023-05-05
002315.SZ,焦点科技,3,2023-05-05

  1. 先对csv文件根据日期进行排序,保证顺序是递增的
  2. 假设当读取到第一行元数据,发现日期为2023-05-04,读取所有日期为2023-05-04的代码(002315,002351,002555)然后再往下读取一行,发现日期为2023-05-05,将05-05设置为结束日期,05-04设置为开始日期。

通过上述我们获取了,需要的开始日期05-04,开始期日的代码(002315,002351,002555),结束日期05-05,这里面需要用到索引,才能达到这样的效果

with open(file_path, 'r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)

    # 将文件内容读入列表
    all_rows = list(csv_reader)

    # 循环处理每一行数据
    i = 0
    while i < len(all_rows):
        # 获取起始日期,并转换为指定格式
        start_datetime = datetime.strptime(all_rows[i][3], '%Y-%m-%d')
        yesterday = start_datetime.strftime('%Y%m%d')

        # 初始化结束日期变量
        today = None

        # 读取所有时间为起始日期的数据,提取股票代码
        stock_codes = []
        for row in all_rows[i:]:
            if row[3] == all_rows[i][3]:
                stock_codes.append(row[0])
            else:
                # 读取下一行日期,并转换为指定格式
                end_datetime = datetime.strptime(row[3], '%Y-%m-%d')
                today = end_datetime.strftime('%Y%m%d')
                break

        # 输出结果
        print(f"股票代码列表:{stock_codes}")
        print(f"起始日期:{yesterday}")
        print(f"结束日期:{today}")

        # 移动循环索引到下一个日期的开始
        i += len(stock_codes)


5、根据股票代码,起始日期获取数据

6、数据逻辑处理

这个就不可能放出来了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

马哈鱼SQLFlow Lite的python版本

Gudu SQLFlow 是一款用来分析各种数据库的 SQL 语句和存储过程来获取复杂的数据血缘关系并进行可视化的工具。 Gudu SQLFlow Lite version for python 可以让 python 开发者把数据血缘分析和可视化能力快速集成到他们自己的 python 应用中。 Gudu SQLFlow Lite version for p…

【JAVA】Semaphore 有什么作用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. 二进制信号量&#xff1a; 2. 计数信号量&#xff1a; 结语 我的其他博客 前言 Semaphore&#xff08;信号量&#xff09;作为…

图扑 HT UI 5.0 全新升级,开箱即用!

为顺应数字时代的不断发展&#xff0c;图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级&#xff0c;融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化&#xff0c;并在性能、稳定性和安全性等方面达到新的高度。…

品牌时代:应对非对称性风险的战略与实践

市场环境中&#xff0c;非对称性风险成为企业必须直面的挑战。非对称性风险指的是企业在经营过程中面临的不确定性因素&#xff0c;这些因素可能导致企业遭受重大损失或获得巨大收益。为了应对这种风险&#xff0c;企业需要从产品导向转向品牌导向&#xff0c;通过品牌建设来提…

组件如何组织以提升维护性、扩展性

文章目录 一、提升组件的维护性和扩展性1.1、单一职责原则&#xff08;Single Responsibility Principle&#xff09;1.2、松耦合&#xff08;Loose Coupling&#xff09;1.3、高内聚&#xff08;High Cohesion&#xff09;1.4、模块化设计&#xff08;Modular Design&#xff…

C语言第十四弹---函数递归

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数递归 1、递归是什么&#xff1f; 1.1、递归的思想&#xff1a; 1.2、递归的限制条件 2、递归举例 2.1、举例1&#xff1a;求n的阶乘 2.1.1、分析和代码…

使用vue脚手架构建项目

一、前言 * 创建好vue-cli的环境&#xff0c;下载好vue包依赖* 本文使用环境&#xff1a;vue/cli 5.0.8二、步骤 创建vueTest文件夹&#xff0c;管理员身份运行cmd , 进入到vueTest文件夹 执行命令vue create 你的项目名 &#xff0c;这里我定义的项目名为: my-project 基于…

Django实例_后台管理及分页器

原理步骤参考: Django开发_14_后台管理及分页器-CSDN博客 一、创建Django项目 二、创建page_app python manage.py startapp page_app三、修改settings.py文件 (一)添加app (二)设置每页显示数据个数 (三)设置中文显示 四、总路由添加子路由路径 from django.contrib impo…

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…

Hutool导入导出用法

整理了下Hutool导入导出的简单使用。 导入maven或jar包&#xff08;注意这里导入的poi只是为了优化样式&#xff09; <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId&g…

用低版本python的时候pip无法联网

如图所示&#xff0c;我用较低版本pip&#xff08;3.7&#xff0c;3.8&#xff09;的时候pip无法使用代理联网 看报错是代理问题&#xff0c; 那么直接在pip的时候直接加上自己科学上网的代理就ok了 当然也可以换源解决&#xff0c;这个网上教程挺多的就自己搜搜好了hhh

在 Linux 中挂载新硬盘动态使用

目录 一&#xff1a;添加硬盘并且格式化 二&#xff1a;创建逻辑卷 三&#xff1a;挂载卷到目录 在 Linux 中挂载新硬盘并进行格式化的操作可以按照以下步骤进行&#xff1a; 一&#xff1a;添加硬盘并且格式化 查看现有分区状态和服务器安装的硬盘状态&#xff1a; df -…

SpringBoot---创建项目

介绍 此项目SpringBoot使用的是2.6.1版本&#xff0c;由于这个项目使用的是maven聚合方式创建的&#xff0c;所以第二步是我在聚合方式下需要添加的依赖&#xff0c;完整的pom.xml内容放到了最下面。 第一步&#xff1a;创建Maven项目 这个里什么也不勾选&#xff0c;直接点…

Java面向对象详解

面向对象和面向过程的区别&#xff1a; 面向对象和面向过程都是对软件分析、设计和开发的一种思想&#xff0c;它指导着人们以不同的方式去分析、设计和开发软件。C语言是一种典型的面向过程语言&#xff0c;Java是一种典型的面向对象语言。 面向过程适合简单、不需要协作的事务…

时序预测 | PyTorch基于改进Informer模型的时间序列预测(锂电池SOC估计)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时序预测 | PyTorch基于改进Informer模型的时间序列预测&#xff0c;锂电池SOC估计 时间序列预测&#xff1a;informer改进模型[new][new][new]&#xff08;Fourier-Mixed Window Informer 采用傅里叶混合窗口注意力机…

用React给XXL-JOB开发一个新皮肤(四):实现用户管理模块

目录 一. 简述二. 模块规划 2.1. 页面规划2.2. 模型实体定义 三. 模块实现 3.1. 用户分页搜索3.2. Modal 配置3.3. 创建用户表单3.4. 修改用户表单3.5. 删除 四. 结束语 一. 简述 上一篇文章我们实现登录页面和管理页面的 Layout 骨架&#xff0c;并对接登录和登出接口。这篇…

cpu到达100%问题排查

0、背景 首先定位到mysql 的cpu使用率较高 原因是任务域的作业实例补偿定时任务相关sql查询问题&#xff0c;该sql 2min执行一次&#xff0c;一次查询两次&#xff0c;导致cpu飙升&#xff0c;可考虑优化sql&#xff0c;添加以下索引 ALTER TABLE scheduler.tbl_simba_os_sc…

Linux编辑器之vim的使用

文章目录 一、vim简介二、vim的基本概念三、vim的基本操作四、vim正常模式命令集移动光标删除文字复制替换撤销上一次操作更改跳至指定的行vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件离开vim 五、进阶vim玩法打开文件批量注释代码执行shell命令指定注释窗口…

Excel中将16进制数转化成10进制(有/无符号)

Excel中将16进制数转化成10进制&#xff08;有/无符号&#xff09; Excel或者matlab中常用XXX2XXX进行不同进制的转换 16进制转10进制&#xff08;无符号数&#xff09;&#xff1a;HEX2DEC 16进制转10进制&#xff08;有符号数&#xff09;&#xff1a; FA46为例&#xff0c…

AWS 专题学习 P16 (Disaster Recovery Migrations)

文章目录 专题总览Disaster Recovery Overview1. RPO and RTO2. Disaster Recovery Strategies3. Backup & Restore&#xff08;High RPO&#xff09;4. Disaster Recovery – Pilot Light (试点灯)5. Warm Standby&#xff08;暖待命&#xff09;6. Multi Site / Hot Site…