数据分析——股票为例
import pandas as pd
import numpy as np
import tushare as ts
其中的tushare为第三方库,专门为了处理股票数据而开发的。
首先导入茅台的股票数据,茅台的股票代码为600519
td=ts.get_k_data(code='600519',start='2000-01-01')
将获得的股票代码存入csv文件
td.to_csv('maotai.csv',index=False)
查看数据:td.head()
查看每一列的信息:
td.info()
将date这一列的类型转换为日期格式:
td['date']=pd.to_datetime(td['date'])
将date设为行名:
td.set_index('date',inplace=True)
求解收盘价比开盘价涨幅超过3%的日期:
sz_date=td.loc[(td['close']-td['open'])/td['open']>0.03].index
sz_date
求解开盘价比上一交易日收盘价下跌超过2%的日期:
td.loc[(td['open']-td['close'].shift(1))/td['close'].shift(1)<-0.02]
xd_date=td.loc[(td['open']-td['close'].shift(1))/td['close'].shift(1)<-0.02].index
xd_date
其中的shift(1)相当于将收盘价整体下移一个交易日。
求解:某段时间内每月第一个交易日买入100首股票,每年最后一个交易日卖出。赚多少钱。
首先确定某段时间是多久(2002-01----2021-12)
new_df=td['2002-01':'2021-12']
new_df
mairu=new_df.resample('M').first()
mairu
resample(‘M’)表示重采样,括号中的‘M’表示按月采样,first()表示取每月的第一个日期。
上图显示错误,date那一列应该是每月的第一个交易日。
maichu=new_df.resample("A").last()
maichu
‘A’表示按年采样,取每年的最后一个交易日。
buy_total=mairu['open'].sum()*100
sale_total=maichu['open'].sum()*1200
total=sale_total-buy_total
total
求解:金叉、死叉日期
首先求解5日、30日均线:
MA5=td['close'].rolling(5).mean()[50:]
MA5
MA30=td['close'].rolling(30).mean()[50:]
MA30
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(MA5[50:180])
plt.plot(MA30[50:180])
先算出如下的公式:
s1=MA5<MA30
s2=MA5>MA30
死叉这样计算:
death_ex=s1 & s2.shift(1)
death_ex_date=td[50:].loc[death_ex].index
death_ex_date
金叉这样计算:
glod_ex=~(s1 | s2.shift(1))
glod_ex_date=td[50:].loc[glod_ex].index
glod_ex_date