2012-7-20 周五 计划

本文聚焦于资源管理器的开发工作,详细介绍了如何在一天中合理安排时间,重点投入资源管理器的功能优化与资源组织。通过实际操作,提高了工作效率,并分享了在项目资料查找与整理过程中的心得。
   中午,把表重新建一下。查点做项目的资料。今天大部分时间拿来做资源管理器。
<think>我们需要修改代码,将日期范围限定在2024年720日至7月25日(注意:由于720日和21日是周末,实际交易日可能是7月22日至7月25日) 但是,akshare获取数据时,如果指定日期是非交易日,则不会返回数据。因此,我们直接获取2024-07-202024-07-25的数据,实际交易日是22、23、24、25(假设这些天都是交易日)。 然而,我们的目标可能是获取这一周(720日到7月25日)的数据,即使20、21日是周末,我们只需要22-25日的数据,然后按周统计(这一周的数据)。 但是原问题要求直接输出表格,不保存。并且要求日期改为7/20-7/25。 注意:原函数是获取一周的数据,但这里的日期范围是特定的(2024-07-202024-07-25)。我们需要调整函数,使其可以获取指定日期范围内的数据,然后按周统计(如果跨周则按周分割,但这里指定日期范围只有一周?)。 由于720日到25日属于同一周(2024年720日到26日这一周),所以我们可以直接获取这个日期范围内的数据,然后按周统计(实际上就是这一周的数据)。 修改思路: 1. 修改函数,允许传入开始日期和结束日期(字符串格式,如'20240720','20240725') 2. 在函数内部,使用传入的日期范围获取数据 3. 然后按周重采样(注意:这里我们只需要一周的数据,所以重采样后应该只有一行) 但是,如果指定的日期范围不是一周,那么重采样可能会分成多周。所以这里我们假设用户传入的日期范围就是一周(从周一到周五,或者包含周末,但周末无数据)。 因此,我们修改函数如下: 注意:由于720日和21日是周末,所以实际交易日从22日开始,到25日结束(4个交易日)。我们只需要统计这一周(7月22日到7月26日这一周,但结束日期是25日,所以只到25日)的数据。 由于我们按周重采样(W-MON)会将该周的数据聚合到下一周的周一(即7月29日?),这显然不是我们想要的。因此,我们需要调整重采样的方法,确保周区间为7月22日到7月28日(但我们只到25日,所以周结束日应该是28日,但实际数据只到25日)。 但是,原函数中的重采样规则是:以周一为起始日,将一周内的数据聚合。在重采样时,我们会将数据按照自然周(周一到周日)进行分组。因此,我们只需要获取这一周的数据,然后重采样一次。 修改函数,增加start_date和end_date参数,并调整重采样的方法(因为日期范围已经指定,我们不需要自动计算开始日期)。 我们重新设计函数: 函数名:get_stock_weekly_data_by_date 参数: symbol: 股票代码 start_date: 开始日期,格式为'YYYYMMDD' end_date: 结束日期,格式为'YYYYMMDD' 步骤: 1. 使用akshare获取指定日期范围内的日线数据 2. 将日期转换为datetime并设置为索引 3. 按周重采样(W-MON),聚合规则不变(开盘取第一笔,收盘取最后一笔,最高取最大值,最低取最小值) 4. 计算涨跌幅 5. 添加周起始日和周结束日(注意:周结束日应该是该周的周日,即起始日+6天) 但是,由于我们的日期范围可能包含多周,所以重采样后会有多行。但这里我们只关心指定日期范围所在的那一周(或几周?)的数据。 由于问题要求是7/20-7/25,所以我们传入start_date='20240720', end_date='20240725' 注意:akshare的日期格式是'YYYYMMDD' 代码实现如下:</think>以下是根据您的要求修改的代码,将日期范围限定在2024年720日至7月25日: ```python import akshare as ak import pandas as pd from datetime import datetime from tabulate import tabulate def get_stock_data_by_date(symbol="002304", start_date="20240720", end_date="20240725"): """ 获取指定日期范围内股票的开盘收盘价统计数据 :param symbol: 股票代码 (默认002304 洋河股份) :param start_date: 开始日期 (格式: YYYYMMDD) :param end_date: 结束日期 (格式: YYYYMMDD) :return: 格式化的统计表 """ try: # 获取股票历史数据 stock_df = ak.stock_zh_a_hist( symbol=symbol, period="daily", start_date=start_date, end_date=end_date, adjust="qfq" # 前复权 ) if stock_df.empty: print(f"在{start_date}至{end_date}期间没有找到交易数据") return pd.DataFrame() # 数据预处理 stock_df['日期'] = pd.to_datetime(stock_df['日期'], format='%Y-%m-%d') stock_df.set_index('日期', inplace=True) stock_df.sort_index(inplace=True) # 计算每日涨跌幅 stock_df['涨跌幅(%)'] = (stock_df['收盘'] - stock_df['开盘']) / stock_df['开盘'] * 100 # 选择需要的列并重命名 report = stock_df[['开盘', '收盘', '最高', '最低', '涨跌幅(%)']] report.columns = ['开盘价', '收盘价', '最高价', '最低价', '涨跌幅(%)'] # 格式化日期索引 report.index = report.index.strftime('%Y-%m-%d') return report.round(2) except Exception as e: print(f"获取数据时出错: {e}") return pd.DataFrame() # 主程序 if __name__ == "__main__": # 设置日期范围:2024年720日至7月25日 start_date = "20240720" end_date = "20240725" # 获取洋河股份指定日期范围的统计数据 yanghe_report = get_stock_data_by_date("002304", start_date, end_date) if not yanghe_report.empty: print(f"\n洋河股份(002304) {start_date}至{end_date} 开盘收盘统计表:") # 使用tabulate创建美观的表格输出 table = tabulate( yanghe_report, headers='keys', tablefmt='pretty', showindex=True, numalign="right", floatfmt=".2f" ) print(table) else: print("未能获取数据,请检查股票代码或日期范围") ``` ### 代码解释: 1. **日期范围设置**: - 修改了函数参数,增加了 `start_date` 和 `end_date` 参数 - 默认设置为 `start_date="20240720"`, `end_date="20240725"` - 日期格式为 YYYYMMDD(年--日) 2. **数据获取与处理**: - 使用 `ak.stock_zh_a_hist()` 获取指定日期范围内的历史数据 - 添加了空数据检查,避免处理无效数据 - 日期格式化为 `YYYY-MM-DD` 格式,提高可读性 3. **每日数据统计**: - 计算每日涨跌幅百分比 - 选择并重命名需要的列:开盘价、收盘价、最高价、最低价、涨跌幅 - 保留原始日期索引,便于查看每日数据 4. **表格输出优化**: - 使用 `showindex=True` 显示日期索引 - 数值右对齐,保留两位小数 - 表头清晰标明日期范围 ### 输出示例: ``` 洋河股份(002304) 2024072020240725 开盘收盘统计表: +------------+---------+---------+---------+---------+--------------+ | | 开盘价 | 收盘价 | 最高价 | 最低价 | 涨跌幅(%) | +------------+---------+---------+---------+---------+--------------+ | 2024-07-22 | 103.00 | 104.50 | 105.20 | 102.80 | 1.46 | | 2024-07-23 | 104.60 | 105.80 | 106.50 | 104.00 | 1.15 | | 2024-07-24 | 105.90 | 104.20 | 106.20 | 103.50 | -1.61 | | 2024-07-25 | 104.30 | 106.00 | 106.80 | 103.90 | 1.63 | +------------+---------+---------+---------+---------+--------------+ ``` ### 使用说明: 1. 安装必要库: ```bash pip install akshare pandas tabulate ``` 2. 修改日期范围: - 直接在代码中修改 `start_date` 和 `end_date` 变量值 - 日期格式必须为 "YYYYMMDD",例如 "20240720" 表示 2024年720日 3. 修改股票代码: - 修改 `symbol` 参数获取其他股票数据 ### 注意事项: 1. 如果指定日期范围内没有交易日(如周末或节假日),将不会显示数据 2. 涨跌幅计算基于当日开盘价和收盘价 3. 数据来自 akshare 接口,实际数据可能因市场情况而异 4. 2024年720日和21日是周末,实际交易日为7月22日至25日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值