版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页共19页第4页,共19页通过Python语言的Scrapy框架股票投资规划的分析系统第一章引言 11.1研究背景 11.2研究意义 11.3系统概述 11.4论文的主要内容及章节安排 2第二章计算机技术与金融知识 22.1计算机相关技术 22.1.1Python语言 22.1.2Scrapy框架 32.2金融知识 52.2.1投资流派的介绍 52.2.2入场时机的判断 52.2.3白马股的特征和筛选过程 6第三章系统需求与设计 83.1系统的需求 83.2系统的设计 83.2.1数据收集模块的设计 93.2.2数据处理模块的设计 9第四章系统的实现 94.1数据收集模块的实现 94.2数据处理模块的实现 11第五章系统测试 125.1测试思路 125.2测试过程 125.3本章总结 15第六章结论 156.1论文总结 156.2改进方向 16摘要:本毕设是一个通过Python语言的Scrapy框架收集数据,并依据一定的金融知识对数据进行筛选,最终给出股票投资规划的分析系统。通过在股票行情网站的数据的收集和分析,本系统最终可以帮助人在投资股票时做出合理的规划。本毕设基本完成了预定的计划,能够从股票网站中合理的搜集数据,并依照所学金融知识做出分析,逐步筛选数据,基本能够给出一份依照金融学知识的投资名单。关键词:股票,Python,Scrapy框架第一章引言1.1研究背景二十一世纪以来,我们的生活随着计算机技术的发展开始了日新月异的变化,计算机技术的应用逐步的改变我们原本的生活,乃至于成为了不可替代的一部分。随着“互联网+”战略的提出[1],传统行业与计算机技术的结合已经成为一种必然的趋势,尤其是与金融产业的结合已经被广泛的认可和执行。金融产业需要及时的信息交流以及大量的数据处理,而不管是大量数据的搜集,还是对大量的数据进行比较筛选,这些都离不开计算机技术的帮助。同样的,作为个人,也可应通过应用计算机技术,初步的参与金融行业,其中最常见的行为就是投资股票。一方面,投资股票市场有利于国家经济的发展,第一,股市是国家经济支撑的重要部分;第二,股市是融资市场,也是投资市场;第三,炒股是需要交手续费的,每交易一次都会交相对应的手续费[2]。另一方面,投资股票市场可以帮助自己抵御风险。比如2020年突发的新冠疫情导致经济下行,如果有相应的副业以作支撑就可以比较成功的抵御风险,其中投资股市由于分散精力少是很适合成为副业的。 综上,投资股票市场既有利于国家经济发展,又有能帮助个人进行风险规避,最重要的是在计算机技术的发展和支持下,个人有能力对自己的投资做出合理规划,所以可以预计,未来会有越来越多的人投身股市。1.2研究意义根据Mob研究院的数据,2020年股民规模已经破亿,95后的股民已经进入股市,其中约有一半人的月收入在5000元以下,一半人的学历不足本科[3]。有相当多的人不能轻松承担炒股可能的风险,或是缺乏一定的金融知识难以对自己的投资做出合理规划。所以如果能依据一定的金融学知识,帮助他们做出合理的股票投资规划或是给出一些参考意见,不仅有利于他们自身的经济状况的改善,更进一步说,能够更好的帮助整体金融产业的发展,使得投资更加集中于优质的公司,对整体经济起到促进作用。1.3系统概述 本系统主要是基于Python的Scrapy框架进行开发和设计的。本系统基本步骤为从雪球网[5]合理的获取足够的股票信息,然后对这些数据逐步的筛选,最后得出可供选择的投资名单。其中,收集信息步骤分为用Scrapy框架构建爬虫,调整爬虫参数以获取数据,然后对数据做初步处理以方便后续筛选。在具体的数据处理阶段,主要分为四个步骤:根于ROE(净资产收益率)筛选,剔除周期股票,剔除业绩下滑的股票,最后检验数据的真伪,剔除数据造假的股票。最终的结果是得出一个股票的建议投资名单。以上步骤的依照原理和具体操作,会在后续论文中详细写明。1.4论文的主要内容及章节安排论文章节安排如下:第1章:介绍我国金融展业与计算机技术紧密结合的时代背景,以及毕设意义所在,并介绍本论文的章节安排。第2章:介绍系统开发过程中用到的计算机技术和金融知识。第3章:介绍了系统的需求和基本设计。第4章:详细介绍了系统的实现过程。第5章:对系统的数据收集功能和数据分析功能进行测试。第6章:对于研究过程做出总结,分析本系统进一步发展的可能和方向。第二章计算机技术与金融知识2.1计算机相关技术2.1.1Python语言Python是由GuidovanRossum从八十年代末开始,最终在荷兰国家数学和计算机科学研究所设计出来。它是一种面向编程逻辑,并使用第三方库来完成程序运行的语言,尤其善于解决各种问题的计算部分的实现,适用面十分广泛[6]。Python语言特点:(1)通用性:可以用于普世的计算问的求解,不局限于某一特定领域的应用,故此python语言的通用性是它最显著的特点。(2)可读性:通过缩进实现的强制可读性,使得编写的代码干净整洁,逻辑清晰。由于编程思维几乎与人类日常生活中的思维习惯一致,所以非常适合人类阅读。(3)易于编写:Python语言有较少的底层语法元素,并且不去操作内容,所以非常易于编写。(4)面对对象:Python既支持面向过程的函数编程也支持面向对象的抽象编程。(5)跨平台性:大多数的Python程序即使不做任何改变,也可以可在主流计算机平台上运行。这无疑简化了我们的开发流程。(6)第三方库:Python拥有大量的第三方库,这些库是由全世界的Python使用者在自己的工作中逐渐形成的,并且第三方库的数量依然在逐年快速的增长。这些库开源开放,任何人只需要很简单的操作,就可以安装并使用这些库。使用第三方库可以减免很多重复的操作,提高工作效率,有利于整个python生态长期向好[6]。2.1.2Scrapy框架Scrapy框架是一个功能强大并且运行快速的网络爬虫框架,是基于Python实现网络爬虫的重要技术路线[7]。Scrapy框架一共包含7个部分,其中5个部分为框架的主体部分,另外两个为中间件。5个主体部分为Engine模块,Scheduler模块,Downloader模块,Spider模块和ItemPipeline模块。在Engine模块和Spider模块之间,以及Engine模块和Downloader模块之间,有两个中间件模块,分别是DownloaderMiddlewares和SpiderMiddlewares。这些模块行程的结构一般称为“5+2”结构,他们共同构成了Scrapy框架[7]。其中Engine模块,Scheduler模块,Downloader模块在建立框架是就已经实现,他们分别实现以下功能:Engine模块:负责Spider模块、ItemPipeline模块、DownLoader模块、Scheduler模块中间的数据传递。Scheduler模块:负责接受Engine模块发送过来的Request请求,并按照既定的方式对Request请求进行调度,然后交还给Engine模块。Downloader模块:负责处理Engine模块发送过来的Request,真实地连接互联网并爬取数据,将获取的数据封装为Response返还给Engine模块。而Spider模块和ItemPipeline模块则需要用户进行配置。他们分别实现以下功能:Spider模块:负责解析Downloader模块返回的Response,产生Item(爬取项)和新的Request(爬取请求)。(2)ItemPipeline模块:负责以流水线方式处理Spider模块产生的Item。用户提交的网络爬虫请求以及从网络上获取的相关信息等一系列数据,在这些模块之间流动,形成数据流,其中有三条数据流为主要的数据流路径。从Spider模块开始,经过Engine模块到达Scheduler模块。在这条路径中,Engine模块从Spider模块中获得用户的请求,然后转发给Scheduler模块。Scheduler模块对爬取请求进行调度。从Scheduler模块开始,经过Engine模块到达Downloader模块。然后再从Downloader模块传回Engine模块,最终到达Spider模块。在这条路径中,Engine模块从Scheduler模块获得即将要爬取的网络请求,通过DownloaderMiddlewares中间件发动给Downloader模块。Downloader模块真实的链接互联网,并爬取相关的网页。爬取结束后,Downloader模块将所爬取的内容封装为Response 传给Engine模块,最后再通过SpiderMiddlewares中间件发送给Spider模块。从Spider模块开始,经过Engine模块到达ItemPipeline模块以及Scheduler模块。Spider模块首先处理从Downloader模块获得的Response ,产生两个数据类型,分别为爬取项Item和新的爬取请求Request。Engine模块收到从Spider模块发送的爬取项Item和新的爬取请求Request之后,将Item发送给ItemPipeline模块,将Request发送给Scheduler模块,从而为后续的数据处理,以及新的网络爬虫请求做好准备[7]。由以上三条主要路径可以得出,Engine模块中枢控制各个模块的数据流,整个框架的执行是从向Engine模块发送请求开始,到ItemPipeline模块获得数据为止[7]。所以在正式使用Scrapy框架时,只需先编写Spider模块和ItemPipeline模块,就可以顺利进行工作。2.2金融知识2.2.1投资流派的介绍股票投资有很多不同的流派,其中自主要的有五个,分别是技术投资派,宏观投资派,有效市场派,成长投资派和价值投资派。他们的基本介绍如下:技术投资派:以某只股票的价格当前走势为依据,预测此股票未来的涨跌。宏观投资派:认为市场向好,则股市向好,故研究经济就可以指导投资规划。有效市场派:认为市场绝大多数情况下对股票的定价是正确的。成长投资派:关注公司的未来是否会有足够高的增长。价值投资派:关注公司的现在是否有足够低的价格[8]。其中技术投资派需要猜测市场情绪,宏观投资派需要研究国家经济,有效市场派则需要从各种渠道获得消息,这三种投资流派对于普通个体来说很难进行实际操作。而另外两种流派都是关注与公司本身的,一个侧重于公司未来的发展,寻找资质优秀的公司与他共同成长;另一个侧重于寻找当前价格被低估的公司,低价买入,等市场发现他们的价格是再以高价卖出。由于数据需求量小,具体数据内容基本公开,所以这两种方法都适合一般个体进行实际操作,在有足有的数据支撑的前提下,成长投资派的收益一般会高于价值投资派,而且操作过程更为简便。所以,系统依照成长投资派的操作原理和处理方式进行开发。2.2.2入场时机的判断我们投资股票的获益机制为在于在股票便宜时买入,在价格升高后视情况卖出,所以判断一个只股票当前的价格高低是投资的基础。判断的主要依据是市盈率PE和市净率PB。其中:市盈率PE=市值净利润 市净率PB=市值净资产市值为购买本公司所需财产,净利润为公司一年的盈利,净资产为公司当前财产。[8]所以从公式可以的得出,市盈率是回本的时间,市盈率越低,则越能快速的赚回本金并开始盈利;市净率相当于购买本公司的价格与公司当前资产的比值,数值越低,说前公司当前市场价格越低,越有投资价值。综上,当PB或者PE处于较低的价格时,则这只股票有投资价值。既然单个股票可以通过的PE和PB来判断,那么把股市看做一个整体,计算整体的PB和PE,有:市盈率(全体)=市值总和净利润总和 市净率(全体)=就可以对当前的股市的大环境有一个初步的判断。 由于股市的中重要的主体为沪深300和中证500,这800只股票基本决定了当前的大环境,随意只需要判断这800只股票的总市盈率和市净率,就可以进而判断整个股市是否应该入场。最后,由于PB和PE是反映某个股票当前的状态,所以不同股票互相之间比较没有意义,应该把一只股票的不同时期的PB的PE进行对比,将最高点和最低点作为基准,判断当前的数值在一段时间以来所处的位置,用百分比来表示。同样的,这个思路一样可以拓广到整体股市以及决定性的800只股票。最终就得到了我们判断当前是否应该进行投资的依据。即沪深300和中证500这两个整体的任意一个整体满足PE处于近十年数值的0-50%区间内并且PB处于近十年数值的0-20%区间内,当前市场适合投资。2.2.3白马股的特征和筛选过程我们选取的投资流派是成长投资流派,这种流派的核心是找“白马股”并对白马股进行长期跟踪和投资。所以我们需要先明确什么才是“白马股”。“白马股”的特点有以下三个:投资回报率高长期业绩优秀信息相对可靠[9]以上三点必须同时满足才可以认定为“白马股”,一旦不再同时满足上述三个特点,则不再是“白马股”,需要果断出手。依照这些特点,我们就可以从众多股票中筛选出“白马股”,并对他们进行长期投资了,下面介绍详细的筛选步骤。首先,白马的第一个特点为投资回报率高,回报率的公式如下:投资回报率=卖入价格卖出价格而如果是长期投资,则年化复合收益率如下:年化复合收益率=卖入价格卖出价格^以长期投资为前提,一只股票的回报率与净资产收益率密切相关净资产收益率(ROE)=净利润净资产(2.5由于成长投资流派是长期投资,而在长期投资时,ROE近似等于年化符合收益率,是故选择ROE长期高的股票,就能够实现长期的获益。所以筛选“白马股”的第一个步骤为筛选ROE连续7年≥15%的股票。其次,“白马股”第二个特点为长期业绩优秀,所以我们之后的步骤为剔除周期股和业绩下滑的公司。首先是剔除周期股。周期股是指业绩紧随着经济周期而起伏的公司的股票。这种公司目前来看,甚至一段时间来看业绩优秀,单会随着经济周期不可逆转的下滑,而判断经济周期是何时上升何时下降极为困难,而且需要时时密切关注,在判断出周期性下行到来时及时抛售。这种做法不符合我们成长投资流派的操作理念,所以删除全部的周期股票。由于一只股票是否是周期股基本由公司本身所处行业决定,所以只需要判断公司行业就可以快速高效的删除周期股。一般认为,以下四类行业的股票为周期股:(1)作为工业基础原材料的大宗商品相关行业,比如采掘服务、钢铁、化工合成材料、化工新材料、石油矿业开采、有色冶炼加工和化学制品等。(2)航运业,比如远洋运输、港口航运、机场航运、交运设备服务等。(3)非生活必需品行业及与之相关的行业,比如国防军工、汽车整车、汽车零部件、建筑材料、建筑装饰、房地产等。(4)非银行的金融行,比如证券,保险等。[8]依据股票所属行业,直接删除属于上述四类的股票即可。然后是剔除业绩下滑的公司,这些公司虽然不是周期股票,净资产收益率也常年大于15%,但是目前已经有了业绩下滑的现状,需要尽早剔除。判断公司业绩下滑的依据有以下方面:年度营收增长率=本年的营业收入−去年的营业收入去年的营业收入(2.6年度净利润增长率=本年的净利润−去年的净利润去年的净利润(2.7季度营收增长率=本季度的营业收入−去年同季度的营业收入去年同季度的营业收入(2.8季度净利润增长率=本季度的净利润−去年同季度的净利润去年同季度的净利润(2.9以上四个指标,只要有一个为负数,明该公司业绩已经下滑,应该及时剔除。最后,由于“白马股”的第三个特点为信息相对可靠,我们需要检验当前股票列表中股票的数据真实性,最后一个步骤即为用小熊定理检验。一般来说,股票的数据造假有一下几种可能:公司真货假卖,虽然营业收入很高,但实际货物并没有卖出。公司存货造假。公司有破产可能。对于以上三种造假方式,我们可以用以下三条定理来一一检验。小熊定理一:连续两年应收账款上升幅度大于营业收入上升幅度,则有真货假卖风险。其中应收账款为企业卖产品给客户,但还未收的钱,也就是客户签的白条。营业收入为企业卖产品获得的收入。小熊定理二:连续2年存货增长大于营业收入增长有可能存货造假。小熊定理三:流动负债大于流动资产,则有可能破产。其中流动负债为一年内必须要还的钱,如应付账款、短期借款等。流动资产为一年内可变现的资产,如货币资金、存货、预付款项[8]。第三章系统需求与设计3.1系统的需求由于最后的输出结果为一份可供参考的股票投资名单,所以从结果倒退需求,我们的系统首先需要大量的股票数据以从中选取“白马股”,然后需要能对于大量股票的数据进行分析以得出列表。所以系统主要由两个模块,分别为数据收集模块和数据分析模块。数据收集模块方面,我们要有能力对于网上公开的数据进行收集和整理,所以需要一个Scrapy爬虫来爬取数据,并对数据做初步整理。至于数据的分析方面,由于我们的操作过程其实是根据股票的数据,决定是否从股票的列表中将其剔除,所以事实上我们需要编写一个程序以遍历一个二维数据并对每一行做操作,这个需求可以用Python语言调用csv库来实现。3.2系统的设计3.2.1数据收集模块的设计本模块需要构建Scrapy爬虫以爬取股票相关网站,并最终输出csv文件以便于后续数据处理。基本过程为安装Python环境并下载和安装Scrapy框架相关第三方库。然后建议一个Scrapy爬虫框架,配置Spider模块和ItemPipeline模块,使其可以对相应网站进行数据的爬取和输出爬取项目,最终输出csv文件。3.2.2数据处理模块的设计首先是对于上述得出的csv文件进行补充,由于本人能力代码有限,加之股票网站以当前数据为主,而很少显示往年数据,所以需要通过爱问财网站[4]进行数据的填补。由于数据处理的过程依照筛选白马股的四个步骤,所以通过Python语言调用csv库实现处理二维数组即可实现,编写工具为Pycharm。为了保证最后得出数据的可信度,每次做数据筛选时,都需要生成并保留当前筛选文件,以便后续查阅。第四章系统的实现4.1数据收集模块的实现首先从Python官网下载安装包并安装,本次开发使用的是Python3.7版本。然后安装Scrapy框架,直接通过pip命令操作,输入pipinstallscrapy,安装结束后然输入scrapy-h,对Scrapy框架的安装进行测试,正常输出操作说明则安装成功,前期准备工作完成。之后,则是新建Scrapy工程文件,首先用cd命令进入选定地址开始创建,输入scrapystartprojectwork,work为工程名。之后在工程文件下创建爬虫,输入scrapygenspiderstockquote,Stock为爬虫名称。进入先前选定文件夹,发现基本的框架已经生成,接下来只需要配置stock.py,piplines.py,settings.py这三个文件,确保可以正确的从网站爬取数据即可,对这三个文件的配置是本模块设计的关键,下面对三个文件的配置思路和细节进行详细解释:(1)stock.py文件:stock文件关联Spider模块,我们需要让他可以正确的向Engine模块发送Request,由于个人代码能力有限以及部分股票网站的存在反爬设计,所以最后选择雪球网进行爬取,雪球网额的网址基本格式为股票代码(例如SZ300783),所以我们将股票代码依次输入到S/之后,即可访问雪球网全部股票的具体数据。股票的具体代码可以通过爱问财网站[4]直接搜索并下载。然后查看网页源代码,发现我们所需要的具体信息在源代码之中,如图。3.1网页源代码中的具体信息首先用response函数获取网页代码,然后新建字典变量以存储关键信息。已知网页中的具体信息是以表格形式存储的,所以为从图中代码获取关键信息,我们可以用BeautifulSoup库对这段代码进行解析并提取数据。然后利用循环遍历表格,并将关键数据写入字典保存,关键代码如下:获取网页代码:name=re.search(r'<divclass="stock-name">(.*?)</div>',response.text).group(1)获取表格信息:tableHtml=re.search(r'"tableHtml":"(.*?)",',response.text).group(1)用BeautifulSoup库对表格解析:soup=BeautifulSoup(tableHtml,"html.parser")table=soup.table最后循环遍历表格,写入字典:infoDict.update({l[0].__str__():l[1].__str__()})至此,stock文件配置完毕。(2)piplines.py文件:此文件关联ItemPipeline模块,配置的重点在于正确处理接受的数据。主要操作有在使用爬虫时,打开文件;关闭爬虫时,关闭文件;使用爬虫时,处理文件。第三点为编写重点,并且为后续数据处理方便,同时输出csv文件:3.2在打开文件时的具体操作,输出csv文件(3)最后对setting.py文件做处理,使得能够正常访问网站并爬取数据,文件中已经写好大量的配置方案,对其修改即可,修改内容如下:ITEM_PIPELINES={'work.pipelines.stockPipeline':300,}至此,Scrapy的配置结束,可以进行网页的访问与内容的获取。数据搜集模块的功能实现。4.2数据处理模块的实现首先安装Pycharm,然后建立select.py文件对数据进行处理。调用csv库,方便后续对csv文件进行操作:importcsv然后我们每次的操作均为根据特定数据符合情况与否,判断整个一行数据的去去留,所以每次操作的代码基本按照下方模式编写:(1)明确两个文件,a为进行数据筛选的文件,b为将相应数据写入的文件old_path='./a.csv'new_path='./b.csv'(2)打开两个文件进行操作:withopen(old_path,'r',encoding='utf-8')asold_f,\open(new_path,'w',encoding='utf-8')asnew_f:f_csv_old=csv.reader(old_f)f_csv_new=csv.writer(new_f,lineterminator='\n')(3)进入循环,对二维函数的每一行进行遍历:fori,old_rowinenumerate(f_csv_old):判断条件是否符合:(a)如果是对数据判断:iffloat(old_row[a])>=x特定数据是否满足条件,注意使用float函数使得表格中的数据可以进行操作。(b)如果是对文字判断,如剔除周期股:周期股相关参数有三个词语,使用“-”相连接,定义flag=1。提取参数list=old_row[2]剔除间隔符号content_list=list.split("-")然后用循环判定是否存在带有周期股特征的词语,如果不存在,则flag+1。最后当且仅当flag=4,即3个词语均与周期股无关时,写入新文件。将符合条件的数据写入新文件:f_csv_new.writerow(old_row)按照上述格式,依次完成筛选ROE大于等于15%,剔除白马股,剔除业绩下滑股票,检验数据安全四步操作,则数据分析系统实现完毕。第五章系统测试5.1测试思路 运行Scrapy爬虫框架,从雪球网(/S/)获取数据,并对数据进行初步处理,输出csv文件。 运行sclect.py,对数据进行筛选,逐步剔除ROE不足15%,周期股,业绩下滑的股票,以及最终用小熊三定理检测出数据不真实的股票。最终获得一份值得投资的股票列表。5.2测试过程运行爬虫,输入scrapycrawlstock图4.1爬虫部分运行过程得出数据,以待进一步处理。图4.2stock爬虫得到的txt文件和csv文件由于后续分析需要很多往年数据,而爬取往年数据难度过大,所以手动搜索对数据进行填充,可以直接在爱问财网站输入需要的数据进行下载。图4.3通过爱问财网站进行数据补充图4.4处理后的数据在整合数据之后,运行select.py,对数据进行处理,结果如下图4.4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025钢厂钢材销售合同
- 2025个人公寓房产抵押借款合同
- 挤出成型课程设计
- 幼儿园藏族特色课程设计
- 柱下交叉基础课程设计
- 无线电课程设计天线
- 硝酸导入课程设计
- 研学课程设计动植物
- 折现统计图课程设计
- 2024年大型汽车买卖合同含汽车改装及个性化服务3篇
- 施工项目农民工工资支付无欠薪承诺书
- 设计中的重点、难点及关键技术问题的把握控制及相应措施
- 幼儿园教学活动 幼儿园教学活动概述 幼儿园教学活动的特点
- 6.2.1向量的加法运算 课件(共14张PPT)
- YY/T 1866-2023一次性使用无菌肛肠套扎器胶圈或弹力线式
- 海蒂(世界文学名著经典)
- 中国马克思主义与当代知到章节答案智慧树2023年西安交通大学
- 变电站检修规程完整
- 海南文昌2x460MW级燃气-蒸汽联合循环电厂
- 形式逻辑学全套课件
- 姜安《政治学概论》(第2版)笔记和典型题(含考研真题)详解
评论
0/150
提交评论