目录
-
数据获取 2
1.1. 实验环境搭建 2
1.2. 抓取数据 2
1.2.1. 新浪财经 3
1.2.2. 网易财经 6
1.2.3. 东方财富 12
1.2.4. TuShare (挖地兔) 19
1.2.5. 其他平台 21
1.3. 数据获取总结 22
1.3.1. 股票代码抓取的总结 22
1.3.2. 日线数据抓取总结 22
1.3.3. 反爬虫策略及解决的总结 23 -
数据清洗(数据预处理) 23
2.1. 无效数据处理 24
2.2. 缺失数据处理 25 -
数据分析 27
3.1. 《胡立阳股票投资100招》 由“价量关系”来为个股打分 (一) 28
3.1.1. 介绍 28
3.1.2. 思路分析 28
3.1.3. 实现 29
3.1.4. 运行结果 29
3.1.5. 结果分析 36
3.2. 《胡立阳股票投资100招》 由“价量关系”来为个股打分 (二) 38
3.2.1. 思路分析 38
3.2.2. 实现 38
3.2.3. 分析结果 38
3.3. 主力进出 (ZLJC) (一) 41
3.3.1. 概念 41
3.3.2. 思路分析 41
3.3.3. 实现 42
3.4. 主力进出 (ZLJC) (二) 45
3.4.1. 前提引入 45
3.4.2. 主要问题及分析思路 45
3.4.3. 代码编写 45
3.4.4. 结果分析 46
3.5. 综合应用 48
3.5.1. 数据准备 48
3.5.2. 实现 48
3.5.3. 统计结果分析 50 -
优化方案 53
4.1. 爬虫性能优化 53
4.2. 数据读取效率优化 53
4.3. 编程模式的优化 54 -
总结 54
-
数据获取
1.1. 实验环境搭建
系统及使用的语言:
Windows 10 专业版 1903 操作系统版本: 18362.356
Python 3.7.3 64-bit
需要额外安装的库:
virtualenv-16.6.0: pip install virtualenv
requests-2.22.0: pip install requests
所依赖的模块:URLlib3 在安装 requests 时会自动安装尝试切换页面, 查看地址栏 URL 的变化
BeautifulSoup4-4.8., 未发生改变ip install BeautifulSoup4`
pandas: pip install pandas
所依赖的模块:pytz ,numpy, python-dateutil, six, 在安装 requests 时会自动安装
tqdm-4.36.1: pip install tqdm
1.2. 抓取数据
数据的抓取是构建数据仓库的第一步,首先需要确定数据来源,这个过程通常需要比较各个数据平台,考核数据平台的数据与研究需求的符合程度;具体表现在以下方面:
数据的可靠性
指数据来源是否可靠,有无数据敏感等潜在问题
数据的完整性
指与需求所需的数据相比是否有所缺失
数据是否齐全
获取的难易度
抓取过程的实现难度
在本选题中,对数据的需求主要是成交量, 而成交量又分为分时数据(单位时间为一交易日中的若干分钟)和分日数据(单位时间为一个交易日),分时数据的数据量较为庞大,在这里,主要还是针对分日数据进行研究,由于股市的特殊性, 单一的成交量很难制定出可能有效的策略,所以在研究过程中,依旧需要其他的数据作为辅助,综上所述, 在数据抓取阶段,主要需要抓取的数据是:
股票代码列表
日线数据
本文转载自http://www.biyezuopin.vip/onews.asp?id=15692
import sys
import json
import pandas as pdclass Unity(object):def __init__(self):const_path = sys.path[0].replace("\\analyze_data", "")f = open(const_path + "\\const.json", "r", encoding="utf8")self.consts = json.loads(f.read())def do(self):f1 = open(sys.path[0] + "\\hly_count_res_max_4_group_by_date.json", "r", encoding="utf-8")hly = json.loads(f1.read())f2 = open(sys.path[0] + "\\zljc\\zljc_day_a.json", "r", encoding="utf-8")zljc = json.loads(f2.read())res = {}for code in zljc:for a in zljc[code]:for day in zljc[code][a]:for date in zljc[code][a][day]["dates_yes"]:# 筛选 hly 中该日期的股票有没有当前这只if date in hly.keys() and code in hly[date]:if date not in res.keys(): res[date] = []if code not in res[date]: res[date].append(code)f3 = open(sys.path[0] + "\\hly_and_zljc_res.json", "w", encoding="utf-8")f3.write(json.dumps(res, ensure_ascii=False))f3.close()f2.close()f1.close()def verify(self):f = open(sys.path[0] + "\\hly_and_zljc_res.json", "r", encoding="utf-8")res = json.loads(f.read())transform_dic = {}for date in res:for code in res[date]:if code not in transform_dic:transform_dic[code] = []transform_dic[code].append(date)# f3 = open(sys.path[0] + "\\hly_and_zljc_res_transform.json", "w", encoding="utf-8")# f3.write(json.dumps(transform_dic, ensure_ascii=False))# f3.close()count = {"yes": 0,"no": 0}for code in transform_dic:print(code)try:df = pd.read_csv("%s%s.csv" % (self.consts['path']['result']['hly'], code), encoding="gbk")except:print("ERROR OPENING %s" % code)continuefor index, row in df.iterrows():if row['日期'] in transform_dic[code]:if index - 5 > 0:if df.loc[index-5, "收盘价"] > row["收盘价"]:count["yes"] += 1else:count["no"] += 1print(count)if __name__ == "__main__":u = Unity()# u.do()u.verify()