有了Python的基本功之后,我们得考虑如何实践?由于是银行从业者,自然会考虑从投资的角度出发,以前更多是用EXCEL表从WIND导出数据,这一次计划从天天基金网爬数开始。

感谢如下作者的文章:https://www.jianshu.com/p/1d67cfbfd9bb

一、如何构建投资模型?

马科维茨的投资组合理论让大家理解了收益与风险的数学表达,通过适当的组合可以在一定收益的范围内降低风险。但数学表达依赖于指标量化,所以还是得考虑如何量化方可构建投资模型,大致的思路可以按照如下流程:

  1. 获取公开数据:最大化获取金融产品的数据(历史数据、所有可查询的公开数据)
  2. 构建数据模型:在已有条件下搭建数据模型
  3. 构建评分体系:融入专业知识,构建评分体系

二、获取数据

天天基金网的基金数据应该算比较全面了,我们得充分利用Python爬数的功能。这里必须要用到浏览器的开发者功能。

比如基金的基础信息会用到如下JS文件:

http://fund.eastmoney.com/pingzhongdata/005911.js?v=20200207145643a

你就必须相对应的提供代码:

# 构造一个url
# http://fund.eastmoney.com/pingzhongdata/005911.js?v=20200207145643a
def getUrl(fscode):head = 'http://fund.eastmoney.com/pingzhongdata/'tail = '.js?v=' + time.strftime("%Y%m%d%H%M%S", time.localtime())return head + fscode + tail

二、PyExecJs模块解析js代码

天天基金网提供的数据不是常见的json格式,因此提取会有点麻烦,比如通过字符串查找等,但是由于这个是js文件,因此,可以通过PyExecJs模块来编译解析js代码。

如何安装PyExecJs模块?网络上有的建议在终端运行:pip install PyExecJs。但其实如果用PyCharm的人可以通过之前介绍的方式很快的完成安装。

三、解析数据

对于基金产品而言,会涉及到基金名称、基金代码、单位净值、累计净值(=单位净值+分红)等等。这个阶段就需要去解析数据,看哪些字段代表什么,在这里必须要跟天天基金网的同行打call,注释与命名都相对规范,大家可以直接用。

# 根据基金代码获取净值
def getWorth(fscode):content = requests.get(getUrl(fscode))jsContent = execjs.compile(content.text)#基金名称及代码name = jsContent.eval('fS_name')code = jsContent.eval('fS_code')#收益率 应用时需要加百分比#近一年收益率syl_1n=jsContent.eval('syl_1n')#近6月收益率syl_6y=jsContent.eval('syl_6y')#近三月收益率syl_3y=jsContent.eval('syl_3y')#近一月收益率syl_1y = jsContent.eval('syl_1y')# 单位净值走势(及时的交易价值参考)netWorthTrend = jsContent.eval('Data_netWorthTrend')# 累计净值走势=单位净值+累计分红ACWorthTrend = jsContent.eval('Data_ACWorthTrend')#现任基金经理currentFundManager = jsContent.eval('Data_currentFundManager')netWorth = []ACWorth = []for dayWorth in netWorthTrend[::-1]:netWorth.append(dayWorth['y'])for dayACWorth in ACWorthTrend[::-1]:ACWorth.append(dayACWorth[1])print(name, code)return netWorth, ACWorth

四、存储数据

爬下来的数据可以放在本地的数据库或者excel文件,最终的呈现效果就出来了。

最终的代码如下所示,直接拷贝就可以用。

import requests
import time
import execjs
import matplotlib.pyplot as plt# 构造一个url
# http://fund.eastmoney.com/pingzhongdata/005911.js?v=20200207145643a
def getUrl(fscode):head = 'http://fund.eastmoney.com/pingzhongdata/'tail = '.js?v=' + time.strftime("%Y%m%d%H%M%S", time.localtime())return head + fscode + tail# 根据基金代码获取净值
def getWorth(fscode):content = requests.get(getUrl(fscode))jsContent = execjs.compile(content.text)#基金名称及代码name = jsContent.eval('fS_name')code = jsContent.eval('fS_code')#收益率 应用时需要加百分比#近一年收益率syl_1n=jsContent.eval('syl_1n')#近6月收益率syl_6y=jsContent.eval('syl_6y')#近三月收益率syl_3y=jsContent.eval('syl_3y')#近一月收益率syl_1y = jsContent.eval('syl_1y')# 单位净值走势(及时的交易价值参考)netWorthTrend = jsContent.eval('Data_netWorthTrend')# 累计净值走势=单位净值+累计分红ACWorthTrend = jsContent.eval('Data_ACWorthTrend')#现任基金经理currentFundManager = jsContent.eval('Data_currentFundManager')netWorth = []ACWorth = []for dayWorth in netWorthTrend[::-1]:netWorth.append(dayWorth['y'])for dayACWorth in ACWorthTrend[::-1]:ACWorth.append(dayACWorth[1])print(name, code)return netWorth, ACWorth#获取所有基金数据
def getAllCode():url = 'http://fund.eastmoney.com/js/fundcode_search.js'content = requests.get(url)jsContent = execjs.compile(content.text)rawData = jsContent.eval('r')allCode = []for code in rawData:allCode.append(code[0])return allCodeallCode = getAllCode()netWorthFile = open('./netWorth.csv', 'w')
ACWorthFile = open('./ACWorth.csv', 'w')for code in allCode:try:netWorth, ACWorth = getWorth(code)except:continueif len(netWorth) <= 0 or len(ACWorth) < 0:print(code + "'s' data is empty.")continuenetWorthFile.write("\'" + code + "\',")netWorthFile.write(",".join(list(map(str, netWorth))))netWorthFile.write("\n")ACWorthFile.write("\'" + code + "\',")ACWorthFile.write(",".join(list(map(str, ACWorth))))ACWorthFile.write("\n")print("write " + code + "'s data success.")plt.figure(figsize=(10, 5))plt.plot(netWorth[:60][::-1])plt.show()netWorthFile.close()
ACWorthFile.close()

Python构建投资模型(1)——从天天基金网爬数相关推荐

  1. Python构建lassocv模型并输出Rad-score公式

    Python构建lassocv模型并输出Rad-score公式 'signature = wavelet-HLH_glszm_GrayLevelVariance*-0.0306874009798776 ...

  2. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  3. 如何在验证集加噪声_如何使用Python构建机器学习模型

    如何使用Python构建机器学习模型?在构建机器学习模型时,我们希望将误差保持在尽可能低的水平.对于任何打算学习Python进行大数据分析的人来说,这都是一项关键技能.误差的两个主要来源是偏差和方差. ...

  4. linux tensorflow demo_独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  5. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    大数据文摘授权转载自数据派THU 作者:MOHD SANAD ZAKI RIZVI 本文主要介绍了: TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习 ...

  6. 用python构建机器学习模型分析空气质量

    空气质量(air quality)的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的.空气污染是一个复杂的现象,在特定时间和地点空气污染物浓度受到许多因素影响.来自固定和流动污染源的人为 ...

  7. spark机器学习笔记:(五)用Spark Python构建分类模型(下)

    声明:版权所有,转载请联系作者并注明出处  http://blog.csdn.net/u013719780?viewmode=contents 博主简介:风雪夜归子(英文名:Allen),机器学习算法 ...

  8. 利用Python构建时间序列模型解决实际问题的正确姿势

    要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...

  9. Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测

    Python基于statsmodels包构建多元线性回归模型:模型构建.模型解析.模型推理预测 目录

  10. Python构建基于elkan优化算法的K-Means聚类模型

    Python构建基于elkan优化算法的K-Means聚类模型 目录 Python构建基于elkan优化算法的K-Means聚类模型 #elkan优化算法

最新文章

  1. html5的video怎么把里面的控制器移出来_日产Pro-Pilot的ADAS控制器拆解
  2. OpenCV 双边滤波
  3. 关于YOLO算法的备忘
  4. C# 小工具开发--DeBugHttp
  5. Web服务(Apache、Nginx、Tomcat、Jetty)与应用(LAMP、CMS-WordPressGhost、Jenkins、Gitlab)
  6. 用赫夫曼树进行文件的压缩
  7. QT问题记录之warning: ‘xxx’ will be initialized after [-Wreorder]
  8. Let‘s Fluent:更顺滑的MyBatis
  9. HTML5 2D平台游戏开发#4状态机
  10. #!/usr/bin/env python与#!/usr/bin/python
  11. Quartz的简单使用
  12. windbg使用教程: 具体实例
  13. 各国货币代码表(Currency Code)
  14. 夜深人静写算法(二) - 动态规划
  15. kivy python_另一款带有Kivy,Python的Android蛇
  16. css打印适应纸张_CSS print 样式 css控制打印样式 分页 页面大小
  17. 【算法专题】卡特兰数
  18. echarts修改背景线条及坐标轴颜色样式
  19. “燕云十六将”之陈丽辉(11)
  20. 如何搭建“网络课堂”

热门文章

  1. java支付宝扫码支付,简单生成二维码方法
  2. solidworks电气元件3d库_丨部件库丨西门子3RV6电机保护开关
  3. 如何利用大数据做遗传病智能化诊断?| 硬创公开课
  4. 光明顶短信支付:格式详解
  5. vue静态资源打包中的坑与解决方案
  6. 练习java文档Matcher
  7. 用地图说话:在商业分析与演示中运用Excel数据地图(全彩)
  8. 毕业四年,我当初是如何走上编程这条路的!
  9. 山东理工大学acm非专业程序设计基础答案
  10. word文本框中插入文本框_在Word 2007中快速将文本翻译成另一种语言