首页 > 其他分享 >akshare库实现股票自动分析(一)

akshare库实现股票自动分析(一)

时间:2024-07-28 16:40:48浏览次数:7  
标签:分析 code name cursor 自动 akshare table conn stock

**一、背景和目的**

背景:自己实现的网络爬虫接口,经常会因为限流或者被爬网站的保护而实现,需要自己不断的维护,才能获取股票的原始数据

目的:通过完善的第三方库获取股票信息,因此股票分析的系统后续工作重点就可以放在股票的筛选上,而不用本末倒置

 

**二、主要思路**

 

 

  **三、实现方式**

 股票获取【爬取及入库】:

 1 # -*- coding:utf-8 -*-
 2 
 3 import akshare as ak
 4 import pandas as pd
 5 from datetime import datetime, timedelta
 6 import sqlite3
 7 import time
 8 
 9 # 获取A股实时行情数据
10 stock_list = ak.stock_zh_a_spot_em()
11 # 提取股票代码和名称
12 stock_codes = stock_list['代码'].tolist()
13 stock_names = stock_list['名称'].tolist()
14 
15 #print(f"A股股票数量 is {len(stock_codes)}")
16 #print(f"A股股票有 :{stock_codes}")
17 
18 #测试单股票的时候
19 stock_codes = ['300531', '301117']
20 
21 end_date = datetime.now().strftime("%Y%m%d")
22 #start_date = (datetime.now() - timedelta(days=3 * 365)).strftime("%Y%m%d")
23 start_date = (datetime.now() - timedelta(days=30)).strftime("%Y%m%d")
24 
25 # 字典用于存储每个股票的历史数据DataFrame
26 stock_dataframes = {}
27 for i, code in enumerate(stock_codes):
28     try:
29         # 获取历史数据
30         hist_data = ak.stock_zh_a_hist(symbol=code, period="daily", start_date=start_date, end_date=end_date, adjust="")
31         hist_data['股票编号'] = code  # 添加股票代码列
32         hist_data['股票名称'] = stock_names[i]  # 添加股票名称
33         hist_data = hist_data[['股票编号', '日期', '收盘', '股票名称', '开盘', '最高', '最低', '成交量']]
34         stock_dataframes[code] = hist_data
35     except Exception as e:
36         print(f"Error fetching data for {code}: {e}")
37         time.sleep(15)  # 暂停 15 秒
38 
39 print(stock_dataframes)
40 
41 
42 
43 
44 # 创建或连接到SQLite数据库
45 conn = sqlite3.connect('stock_prices.db')
46 
47 # 创建表
48 def create_stock_table(code):
49     cursor = conn.cursor()
50     table_name = f'stock_{code}'
51     
52     # 删除已存在的表
53     cursor.execute(f'DROP TABLE IF EXISTS {table_name};')
54     
55     # 创建新表
56     cursor.execute(f'''
57     CREATE TABLE IF NOT EXISTS {table_name} (
58         日期 TEXT,
59         收盘 REAL,
60         开盘 REAL,
61         最高 REAL,
62         最低 REAL,
63         成交量 INTEGER
64     );
65     ''')
66 
67 # 插入数据
68 def insert_stock_data(code, df):
69     cursor = conn.cursor()
70     table_name = f'stock_{code}'
71     df.to_sql(table_name, conn, if_exists='replace', index=False)
72 
73 # 遍历股票数据字典,创建表并插入数据
74 for code, df in stock_dataframes.items():
75     create_stock_table(code)
76     insert_stock_data(code, df)
77 
78 # 提交更改
79 conn.commit()
80 
81 # 关闭连接
82 conn.close()
View Code

 

股票解析【】:

 1 import sqlite3
 2 import pandas as pd
 3 
 4 def analyze_stock_prices(database_path):
 5     # 连接到SQLite数据库
 6     conn = sqlite3.connect(database_path)
 7     
 8     # 获取所有股票表的名称
 9     cursor = conn.cursor()
10     cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
11     tables = cursor.fetchall()
12     
13     # 创建一个空的DataFrame来存储结果
14     results = pd.DataFrame(columns=['股票编号', '股票名称', '最新日期', '最新价格', '历史最高价', '历史最低价'])
15     
16     # 遍历所有股票表
17     for table_name in tables:
18         table_name = table_name[0]
19         
20         # 如果表名以'stock_'开头,则处理该表
21         if table_name.startswith('stock_'):
22             # 查询最新日期和最新价格
23             cursor.execute(f"SELECT MAX(日期) AS 最新日期, 收盘 AS 最新价格 FROM {table_name};")
24             latest_price = cursor.fetchone()
25             
26             # 查询历史最高价
27             cursor.execute(f"SELECT MAX(最高) AS 历史最高价 FROM {table_name};")
28             highest_price = cursor.fetchone()
29             
30             # 查询历史最低价
31             cursor.execute(f"SELECT MIN(最低) AS 历史最低价 FROM {table_name};")
32             lowest_price = cursor.fetchone()
33             
34             # 提取股票编号和名称
35             stock_number = table_name.split('_')[1]
36             cursor.execute(f"SELECT 股票名称 FROM {table_name} LIMIT 1;")
37             stock_name = cursor.fetchone()[0]
38             
39             # 将结果添加到DataFrame
40             results = pd.concat([results, pd.DataFrame({
41                 '股票编号': [stock_number],
42                 '股票名称': [stock_name],
43                 '最新日期': [latest_price[0]],
44                 '最新价格': [latest_price[1]],
45                 '历史最高价': [highest_price[0]],
46                 '历史最低价': [lowest_price[0]]
47             })], ignore_index=True)
48     
49     # 关闭数据库连接
50     conn.close()
51     
52     return results
53 
54 # 使用函数分析股票价格
55 database_path = 'stock_prices.db'
56 analysis_results = analyze_stock_prices(database_path)
57 print(analysis_results)
View Code

 

 

 

**四、参考链接** **

 

五、总结**

 

                                    写代码的小熊猫,开开心心每一天~

标签:分析,code,name,cursor,自动,akshare,table,conn,stock
From: https://www.cnblogs.com/effortscodepanda/p/18328385

相关文章

  • 0401-403组合逻辑电路的分析设计&竞争冒险
    组合逻辑电路的分析设计&竞争冒险4.组合逻辑电路1.目录2.教学基本要求3.序关于组合逻辑电路4.1组合逻辑电路分析与设计一、组合逻辑电路分析二、组合逻辑电路的分析步骤:三、组合逻辑电路的分析举例例1奇校验电路例2.对输入的二进制求反码例3.一个工厂发电的实际问题例......
  • 自闭症摘帽学校指数分析:选择最佳教育环境
    在自闭症儿童的康复之路上,选择一所合适的康复中心至关重要。这不仅关乎孩子的治疗效果,更直接影响到他们的未来生活品质。在众多机构中,星贝育园康复中心以其卓越的教学成果、独特的承诺以及完善的设施,成为了众多家长心中的理想之选。自闭症儿童的康复是一个漫长而复杂的过程,需......
  • 基于Hive的大数据分析系统
    1.概述在构建大数据分析系统的过程中,我们面对着海量、多源的数据挑战,如何有效地解决这些零散数据的分析问题一直是大数据领域研究的核心关注点。大数据分析处理平台作为应对这一挑战的利器,致力于整合当前主流的各种大数据处理分析框架和工具,以实现对数据的全面挖掘和深入分析。本......
  • 数字资产自动化交易之DEX与CEX套利
    监控去中心化交易所(DEX)和中心化交易所(CEX)之间的套利机会涉及实时数据监控、分析和交易执行。以下是一个监控和执行套利机会的综合步骤指南:1.数据收集实时价格数据DEX:使用DEX的API获取交易对的实时价格数据。常见的DEX包括Uniswap、SushiSwap、PancakeSwap等。这些......
  • 群体遗传结构的分析并绘图
    群体遗传结构的分析并绘图文章目录群体遗传结构的分析并绘图前言一、群体遗传结构分析1.1.获得输入文件:plink的bed文件1.2.运行脚本adm.sh1.3.最佳K值确定1.4.查看.Q文件(以149toTZC_output.3.Q为例)二、绘制堆积柱状图2.1.用*.Q文件画图2.2.使用pophelper包2......
  • 自动驾驶三维车道线检测系列—OpenLane数据集介绍
    文章目录1.背景介绍2.OpenLane数据集详细描述2.1数据集特点2.2坐标系定义3.使用方法4.结论1.背景介绍自动驾驶技术的发展日新月异,而3D车道感知是其核心之一。本文将深入介绍OpenLane数据集——迄今为止规模最大、最接近真实世界的3D车道数据集。我们将一起探......
  • 【C++软件调试技术】使用 Windbg 分析软件异常时的诸多细节与技巧总结
    目录1、dump文件1.1、dump文件的生成方式1.2、dump文件的大小2、pdb符号文件2.1、pdb文件的路径设置2.2、pdb文件的时间戳与名称问题2.3、如何确定要找哪些pdb文件?3、使用Windbg静态分析dump文件以及动态调试程序的一般步骤4、确定发生异常或崩溃的业务模块,到业务模块......
  • 2024最新一元云购源码.完美运营版.机器人自动下单.可指定中奖.一元购源码.一元夺宝源
    2024年最新云购源码一元云购H5新版本新UI 完美运行版•带易支付接口机器人自动购买•可指定中奖云购演示站:yun.6323g.com/ 源码下载链接:https://pan.baidu.com/s/1UsSE3IX_um_eAEcMIBLpHA?pwd=akjd 提取码:akjd  免责声明:该资源仅供学习和研究使用,一切关于该资源......
  • rsync+inotify自动备份
    一、rsync简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步,rsync监听端口:873,rsync运行模式:C/S。1、rsync特性rsync支持很多特性:1、可以镜像保存整个目录树和文件系统2、可以很容易......
  • pythonasm库分析,看看你和自学编程小学生的差距
    下面是pythonasm.asm库的源代码fromkeystoneimport*fromcapstoneimport*assembly_instructions=[]#储存汇编指令的列表#汇编指令写入列表defmov(reg1,reg2):assembly_instructions.append(f"mov{reg1},{reg2}")defdb(value):assembly_instructio......