Python抓取股票数据,如何用python编程赚取第一桶金?

Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

qq进群:156846986获取Python各类学习资料!**

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧,就叫它:小刮刮吧。

Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下

image
  • 爬虫(Spiders)

    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

    下面用python用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系最后使用移动平均线方法初探投资策略。

  • 数据导入

  • 这里将股票数据存储在stockData.txt文本文件中,我们使用pandas.read_table()函数将文件数据读入成DataFrame格式。

  • 其中参数usecols=range(15)限制只读取前15列数据,parse_dates=[0]表示将第一列数据解析成时间格式,index_col=0则将第一列数据指定为索引。

其中参数usecols=range(15)限制只读取前15列数据,parse_dates=[0]表示将第一列数据解析成时间格式,index_col=0则将第一列数据指定为索引。

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

|

import pandas aspd

import numpy asnp

import matplotlib.pyplot asplt

%matplotlibinline

%configInlineBackend.figure_format='retina'

%pylabinline

pylab.rcParams['figure.figsize']=(10,6)#设置绘图尺寸

读取数据

stock=pd.read_table('stockData.txt',usecols=range(15),parse_dates=[0],index_col=0)

stock=stock[::-1]#逆序排列

stock.head()

|

image

以上显示了前5行数据,要得到数据的更多信息,可以使用.info()方法。它告诉我们该数据一共有20行,索引是时间格式,日期从2015年1月5日到2015年1月30日。总共有14列,并列出了每一列的名称和数据格式,并且没有缺失值。

|

1

|

stock.info()

|

Python

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

|

<class'pandas.core.frame.DataFrame'>

DatetimeIndex:20entries,2015-01-05to2015-01-30

Data columns(total14columns):

open20non-null float64

high20non-null float64

close20non-null float64

low20non-null float64

volume20non-null float64

price_change20non-null float64

p_change20non-null float64

ma520non-null float64

ma1020non-null float64

ma2020non-null float64

v_ma520non-null float64

v_ma1020non-null float64

v_ma2020non-null float64

turnover20non-null float64

dtypes:float64(14)

memory usage:2.3KB

|

在观察每一列的名称时,我们发现’open’的列名前面似乎与其它列名不太一样,为了更清楚地查看,使用.columns得到该数据所有的列名如下:

|

1

|

stock.columns

|

|

1

2

3

4

|

Index([' open','high','close','low','volume','price_change',

'p_change','ma5','ma10','ma20','v_ma5','v_ma10','v_ma20',

'turnover'],

dtype='object')

|

于是发现’open’列名前存在多余的空格,我们使用如下方法修正列名。

|

1

|

stock.rename(columns={' open':'open'},inplace=True)

|

至此,我们完成了股票数据的导入和清洗工作,接下来将使用可视化的方法来观察这些数据。

数据观察

首先,我们观察数据的列名,其含义对应如下:

open high colse low volume price_change p_change
开盘价 最高价 收盘价 最低价 成交量 价格变动 涨跌幅
ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
5日均价 10日均价 20日均价 5日均量 10日均量 20日均量 换手率

这些指标总体可分为两类:

  • 价格相关指标
  • 当日价格:开盘、收盘价,最高、最低价

  • 价格变化:价格变动和涨跌幅

  • 均价:5、10、20日均价

  • 成交量相关指标
  • 成交量

  • 换手率:成交量/发行总股数×100%

  • 成交量均量:5、10、20日均量

由于这些指标都是随时间变化的,所以让我们先来观察它们的时间序列图。

相对变化量

股票中关注的不是价格的绝对值,而是相对变化量。有多种方式可以衡量股价的相对值,最简单的方法就是将股价除以初始时的价格。

image

|

1

2

|

stock['return']=stock['close']/stock.close.iloc[0]

stock['return'].plot(grid=True)

|

image

第二种方法是计算每天的涨跌幅,但计算方式有两种:

image

这两者可能导致不同的分析结果,样例数据中的涨跌幅使用的是第一个公式,并乘上了100%。

image

|

1

|

stock['p_change'].plot(grid=True).axhline(y=0,color='black',lw=2)

|

image

为了解决第二种方法中的两难选择,我们引入第三种方法,就是计算价格的对数之差,公式如下:

image

|

1

2

3

|

close_price=stock['close']

log_change=np.log(close_price)-np.log(close_price.shift(1))

log_change.plot(grid=True).axhline(y=0,color='black',lw=2)

|

image

K线图

相传K线图起源于日本德川幕府时代,当时的商人用此图来记录米市的行情和价格波动,后来K线图被引入到股票市场。每天的四项指标数据用如下蜡烛形状的图形来记录,不同的颜色代表涨跌情况。

image

图片来源:http://wiki.mbalib.com/wiki/K线理论

Matplotlib.finance模块提供了绘制K线图的函数candlestick_ohlc(),但如果要绘制比较美观的K线图还是要下点功夫的。下面定义了pandas_candlestick_ohlc()函数来绘制适用于本文数据的K线图,其中大部分代码都是在设置坐标轴的格式。

Python

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

|

frommatplotlib.finance importcandlestick_ohlc

frommatplotlib.dates importDateFormatter,WeekdayLocator,DayLocator,MONDAY

defpandas_candlestick_ohlc(stock_data,otherseries=None):

设置绘图参数,主要是坐标轴

mondays=WeekdayLocator(MONDAY)

alldays=DayLocator()

dayFormatter=DateFormatter('%d')

fig,ax=plt.subplots()

fig.subplots_adjust(bottom=0.2)

ifstock_data.index[-1]-stock_data.index[0]<pd.Timedelta('730 days'):

weekFormatter=DateFormatter('%b %d')

ax.xaxis.set_major_locator(mondays)

ax.xaxis.set_minor_locator(alldays)

else:

weekFormatter=DateFormatter('%b %d, %Y')

ax.xaxis.set_major_formatter(weekFormatter)

ax.grid(True)

创建K线图

stock_array=np.array(stock_data.reset_index()[['date','open','high','low','close']])

stock_array[:,0]=date2num(stock_array[:,0])

candlestick_ohlc(ax,stock_array,colorup="red",colordown="green",width=0.4)

可同时绘制其他折线图

ifotherseries isnotNone:

foreach inotherseries:

plt.plot(stock_data[each],label=each)

plt.legend()

ax.xaxis_date()

ax.autoscale_view()

plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')

plt.show()

|

|

1

|

pandas_candlestick_ohlc(stock)

|

image

这里红色代表上涨,绿色代表下跌。

相关关系

在观察了价格的走势之后,我们来看看各指标之间的关系。下面挑选了部分代表性的指标,并使用pandas.scatter_matrix()函数,将各项指标数据两两关联做散点图,对角线是每个指标数据的直方图。

|

1

2

|

small=stock[['close','price_change','ma20','volume','v_ma20','turnover']]

_=pd.scatter_matrix(small)

|

image

图中可以明显发现成交量(volume)和换手率(turnover)有非常明显的线性关系,其实换手率的定义就是:成交量除以发行总股数,再乘以100%。所以下面的分析中我们将换手率指标去除,这里使用了相关性关系来实现数据降维。

上面的散点图看着有些眼花缭乱,我们可以使用numpy.corrcof()来直接计算各指标数据间的相关系数。

|

1

2

3

|

small=stock[['close','price_change','ma20','volume','v_ma20']]

cov=np.corrcoef(small.T)

cov

|

|

1

2

3

4

5

|

array([[1.,0.30308764,0.10785519,0.91078009,-0.37602193],

[0.30308764,1.,-0.45849273,0.3721832,-0.25950305],

[0.10785519,-0.45849273,1.,-0.06002202,0.51793654],

[0.91078009,0.3721832,-0.06002202,1.,-0.37617624],

[-0.37602193,-0.25950305,0.51793654,-0.37617624,1.]])

|

如果觉得看数字还是不够方便,我们继续将上述相关性矩阵转换成图形,如下图所示,其中用颜色来代表相关系数。我们发现位于(0,3)位置的相关系数非常大,查看数值达到0.91。这两个强烈正相关的指标是收盘价和成交量。

|

1

2

3

|

img=plt.matshow(cov,cmap=plt.cm.winter)

plt.colorbar(img,ticks=[-1,0,1])

plt.show()

|

image

以上我们用矩阵图表的方式在多个指标中迅速找到了强相关的指标。接着做出收盘价和成交量的折线图,因为它们的数值差异很大,所以我们采用两套纵坐标体系来做图。

|

1

|

stock[['close','volume']].plot(secondary_y='volume',grid=True)

|

image

观察这两个指标的走势,在大部分时候股价上涨,成交量也上涨,反之亦然。但个别情况下则不成立,可能是成交量受到前期的惯性影响,或者还有其他因素。

image

区块链】中国区块链研究全球领先 有待龙头技术企业崛起

近日,IPRdaily中文网与incoPat创新指数研究中心联合发布“2017全球区块链企业专利排行榜(前100名)”显示,中国在区块链研究方面全球领先。

“区块链技术要大规模发展,在底层技术上还要进一步发展,就像移动互联网一样,它就有IOS和安卓两套强大的基础系统。虽然区块链的基础技术研究投入很多,但目前许多研发团队都是各自为战,还未有真正的龙头技术企业崛起。”

未来发展或是局部突破

基于政策鼓励,区块链行业如今迎来了快速发展的风口,各类区块链公司如雨后春笋般纷纷借力生长。同时,区块链概念股开始集体大涨。暴风集团、美图、迅雷等上市公司趁机搭上区块链的风口,其中大多数公司连业务还未落地,股价就已“起飞”。

不久前,真格基金掌舵者徐小平在其内部微信群中表示,“区块链革命已经到来,这是一场顺之者昌、逆之者亡的伟大技术革命。要主动拥抱区块链技术,不要临渊羡鱼,也不要隔岸观火,要冲到这个行业里面去,赶紧研究赶紧行动。”

image

不过,在众多业内人士看来,目前区块链技术的发展仍然处于初期阶段,它的去中心化特点涉及对传统商业逻辑的颠覆,并非朝夕之间就能实现。余林民向记者表示,“我觉得,区块链要像互联网一样改变人类的生活,需要比较长的时间。未来区块链应用最可能的发展,还是先在局部获得突破。”

2月6日,一份名为《2017全球区块链企业专利排行榜》,让国内BAT的区块链势能浮出水面。前100名中,中国入榜的企业占比49%,其次才是美国,占比33%;其中国内阿里巴巴以49件的总量排名第一,腾讯科技为11件。

这份报告,让阿里在区块链上的占位一时风头无两。阿里巴巴集团学术委员会主席曾鸣此前谈及阿里巴巴的区块链之路时称,早在2015年蚂蚁金服内部便形成一个区块链兴趣小组,2016年开始在公益项目上做尝试。截至目前,阿里的区块链围绕着其电商和新零售业务的优势,布局已经涉及公益、商品溯源、租房场景等领域。

小礼物走一走,来简书关注我

作者:浪里小白龙q
链接:https://www.jianshu.com/p/b7cea7dfafc4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 今天是这个学期上班的最后一日! 起床:7点 就寝:11点 天气:晴 心情:开心,感恩! 一月目标:一篇书评,一篇阅...
    KeLLy_7824阅读 90评论 0 1
  • 饭后来一份蓝莓山药吧 今天分享一道我特别喜欢的甜品,蓝莓山药。 第一步,准备食材 铁杆山药,一到两根就够了 蜂蜜一...
    明起0阅读 368评论 0 2