失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > DataFrame基础操作巩固——股票分析(一)

DataFrame基础操作巩固——股票分析(一)

时间:2019-07-30 10:19:47

相关推荐

DataFrame基础操作巩固——股票分析(一)

以下案例分析全部在jupyter notebook里面完成

股票日期从到2月截至,虽然是8月做的数据分析案例,但是是按所述日期进行分析的

需求一:股票分析

使用tushare包获取某股票的历史行情数据输出该股票的所有收盘比开盘上涨3%以上日期输出该股票所有开盘比前日收盘跌幅超过2%的日期假如我从1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天位止,我们的收益如何?

#tushare财经数据接口pip install tushare

tushare财经数据接口

1、获取某只股票的历史行情数据

import tushare as tsimport pandas as pdfrom pandas import DataFrame,Seriesimport numpy as np

#字符串形式的历史行情数据#code:字符串形式股票代码df=ts.get_k_data(code="600519",start="2000-01-01")print(df)

1.1存储、读取数据

##将互联网上获取的股票数据存储到本地df.to_csv('./maotai.csv')###运用to_xxx的方式将df中数据写入到本地进行存储##将本地存储的数据读入到dfdf=pd.read_csv('./maotai.csv')df.head()

1.2处理数据

删除某列、查看数据类型、转换成时间序列类型、转换行索引

#需要对读取出来的数据进行相关处理#删除df中指定一列df.drop(labels="Unnamed: 0",axis=1,inplace=True)#查看每一列的数据类型df['date'].dtypedf.info()###将time列由字符串转化成时间序列类型df['date']=pd.to_datetime(df['date'])###将date列作为源数据的行索引df.set_index('date',inplace=True)df.head()###输出前5行

2、输出该股票所有收盘比开盘上涨3%以上的日期

伪代码:(收盘-开盘)/开盘>0.03

(df['open']-df['close'])/df['open']>0.03

###在分析过程中如果产生了boolen值则下一步立刻将布尔值作为源数据的行索引##如果布尔值作为df的行索引,则可以取出true对应的行数据,忽略false对应的行数据df.loc[(df['open']-df['close'])/df['open']>0.03].index##获取true对应的行数据(满足需求的行数据)

回顾:df.loc()函数

主要依赖于行列的index字符名,去索引指定行列位置的值。loc[]括号里还可以加条件,如df.loc[df['shield']>6]

因为日期就是行数据的行索引,所以在df.loc[判断条件]后面加个.index

DatetimeIndex(['-05-29', '-11-14', '-11-30', '-12-11','-12-14', '-12-18', '-12-29', '-01-09','-01-11', '-01-12',...'-07-26', '-07-27', '-07-29', '-08-17','-08-26', '-10-18', '-12-29', '-01-13','-01-28', '-03-07'],dtype='datetime64[ns]', name='date', length=815, freq=None)

3、输出该股票所有开盘比前日收盘跌幅超过2%的日期

伪代码:(开盘-前日收盘)/前日收盘<-0.02

df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02

###将date列作为源数据的行索引df.set_index('date',inplace=True)##将布尔值作为源数据的行索引取出TRUE对应的数据df.loc[(df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02].index

细节1:跌幅超过2%,则是<-0.02,不是>。因为是跌,不是涨细节2:列表里是当日收盘价格,如果前日收盘而且需要整个列相减(这样比较方便)则需要close price那一列整体下移,用shift()。shift(1)表示整体下移一行,shift(-1)表示整体上移一行。细节3:这个是互联网数据,股票价格随时会发生波动

Index(['-04-17', '-04-18', '-04-19', '-04-20', '-05-25','-05-30', '-01-04', '-02-16', '-03-01', '-03-07',...'-03-23', '-10-26', '-02-26', '-03-04', '-04-28','-08-20', '-11-01', '-03-14', '-03-15', '-03-28'],dtype='object', name='date', length=449)

4、假如我从1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天位止,我们的收益如何?

4.1 分析

时间节点:-一手股票:100只股票买:一个完整的年需要买入1200只股票卖:一个完整年需要卖出1200只股票买卖股票的单价:开盘价

new_df=df["-01":"-02"]new_df

4.2 提取数据

4.2.1 买入股票的金额

##买股票:找每个月第一个交易日对应的行数据(捕捉到开盘价)每月的第一行数据##根据月份从原始数据中提取指定的数据##每月第一个交易日所对应的行数据df_monthly=new_df.resample('M').first()###数据重新取样df_monthly##买入股票花费的总金额cost=df_monthly['open'].sum()*100cost

4.2.2 卖出股票到手的钱(分两部分)

第一部分:以前,按照每年12月31日的开盘价计算

### 卖出股票到手的钱#特殊情况:买入的股票卖不出去new_df.resample('A').last()##将最后一行切出去df_yearly=new_df.resample('A').last()[:-1]##卖出股票到手的钱resv=df_yearly['open'].sum()*1200resv

第二部分:因为只到2月,收益按照每年的算,所以只能用收盘价算这两个月的

###最后手中剩余股票需要估量其价值计算到总收益中last_money=200*new_df['close'][-1]+resv

5、复习

如果觉得《DataFrame基础操作巩固——股票分析(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。