股票数据分析案例

需求:股票分析

import tushare as ts
import pandas as pd
from pandas import Series, DataFrame

# 使用tushare包获取某股票的历史行情数据
# df = ts.get_k_data('600519', start='1988-010-01')

# 为避免每次发起网络请求
# 将数据写入到本地持久化
df.to_csv('./maotai.csv')

# 将本地文本文件中的灵气读取加载到dataFrame中
df =pd.read_csv('./maotai.csv')

因为取到的数据中有一列:unnamed:0 为无用数据,我们将它去掉:

df.drop(labels='Unnamed: 0', axis=1, inplace=True) # axis=1 为列

此时date列虽然看起来是时间格式,实则是object

df.dtypes


date       object
open      float64
close     float64
high      float64
low       float64
volume    float64
code        int64
dtype: object

先将它转化成datetime格式,再赋值给它

df['date'] = pd.to_datetime(df['date'])
df.dtypes
date      datetime64[ns]
open             float64
close            float64
high             float64
low              float64
volume           float64
code               int64
dtype: object

将转化成时间格式的值设置为行索引:df.set_index()方法

df.set_index(df['date'], inplace=True)

df.drop(labels='date',axis=1, inplace=True)
df.head()

收盘比开盘上涨3%以上的日期
伪代码 (收盘-开盘)/开盘》0.0.3
is_true = (df['close']-df['open'])/df['open']>0.03

is_true会返回一个True,False的索引,我们通过这个索引来取出对应的日期,即收盘比开盘上涨3%的日期。这里我们取出索引就行,因为索引已经被我设置为了日期

df.loc[is_true].index

输出:

DatetimeIndex(['2001-08-27', '2001-08-28', '2001-09-10', '2001-12-21',
               '2002-01-18', '2002-01-31', '2003-01-14', '2003-10-29',
               '2004-01-05', '2004-01-14',
               ...
               '2019-03-01', '2019-03-18', '2019-04-10', '2019-04-16',
               '2019-05-10', '2019-05-15', '2019-06-11', '2019-06-20',
               '2019-09-12', '2019-09-18'],
              dtype='datetime64[ns]', name='date', length=303, freq=None)
34
# 输出所有开盘比前日收盘跌幅超过2%的日期
# 伪代码 (开盘-前日收盘)/前日收盘 <-0.02

因为是后一天的与前一天的计算,所以将收盘数据这一列向下位置一个位置

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

取出对应的索引 .index

df.loc[(df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02].index
- 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?
- 分析:
    - 买入:
        - 一个完整的年需要买12次股票,一次买入一手(100支),一个完整的年需要买入1200支股票
    - 卖出:
        - 一个完整的年卖一次,一次卖出1200只股票
#将2010-1-1 - 今天对应的交易数据取出
data = df['2010':'2019']

对数据进行重新取样:按月取

data_month = data.resample('M').first()
data_month

这里有个bug,显示的日期是不对的

 

计算一共花了多少本钱

cost_money = (data_month['open']*100).sum()
cost_money
# 3798906.09999999

卖出一共收到了多少钱

data_yeasly = data.resample('A').last()[:-1] # [:-1]切掉2019年
recv_money = (data_yeasly['open']*1200).sum()
recv_money  # 2948584.8

因为2019年还没过完,所以这里需要把2019年的数据切片切掉

再计算手中股票的价值

#19年手里剩余股票的价值也要计算到收益中
last_money = 1200*data['close'][-1]
last_money #1397280.0
last_money + recv_money - cost_money

赚了:

546958.7000000002

上一篇:Pandas简单使用

下一篇:Pandas数据清洗