机器学习-数据科学库 08 股票数据分析案例

数据准备

需求:使用 tushare 包获取某股票的历史行情数据

# tushare财经数据接口包
import tushare as ts
import pandas as pd
from pandas import DataFrame, Series
import numpy as np

# 获取某只股票的历史行情数据
# code:字符串形式的股票代码
# 默认结束时间是前一天
df = ts.get_k_data(code='600519', start='2000-01-01')

# 将互联网上获取的股票数据存储到本地
df.to_csv('./maotai.csv')

# 将本地存储的数据读入到df
df = pd.read_csv('./maotai.csv')

# 删除 df 中指定的一列
# 备注:Unnamed 这里是原始数据中行号,后续处理不消费故洗掉
df.drop(labels='Unnamed: 0', axis=1, inplace=True)
 
# 查看每一列的数据类型
df.info()
 
# 将time列转化为时间序列类型
df['date'] = pd.to_datetime(df['date'])
 
# 将 date 列作为源数据的行索引
# 备注:此处只需要单键索引即可
df.set_index('date', inplace=True)

df:

PyDev console: starting.
           date      open     close      high       low     volume    code
0    2001-08-27  -113.034  -112.849  -112.453  -113.329  406318.00  600519
1    2001-08-28  -112.949  -112.616  -112.591  -113.016  129647.79  600519
2    2001-08-29  -112.595  -112.702  -112.591  -112.751   53252.75  600519
3    2001-08-30  -112.719  -112.574  -112.501  -112.769   48013.06  600519
4    2001-08-31  -112.565  -112.590  -112.481  -112.627   23231.48  600519
...         ...       ...       ...       ...       ...        ...     ...
5039 2022-09-21  1876.670  1848.000  1883.000  1848.000   20995.00  600519
5040 2022-09-22  1840.000  1820.810  1841.020  1816.850   22704.00  600519
5041 2022-09-23  1820.810  1834.430  1855.000  1820.810   28288.00  600519
5042 2022-09-26  1820.000  1863.000  1888.000  1819.980   35135.00  600519
5043 2022-09-27  1868.860  1888.000  1897.000  1851.110   28820.00  600519
[5044 rows x 7 columns]

捕获股市上涨日期

需求:输出该股票所有收盘比开盘上涨 3% 以上的日期

# 伪代码:(收盘-开票)/开盘>0.03
# 广播形式:(df['close'] - df['open']) / df['open'] > 0.03

# 看涨对应的布尔坐标
rise_df_index_series = (df['close'] - df['open']) / df['open'] > 0.03

# 日期正好是 index 直接返回即可
rise_date_time_index = df.loc[rise_df_index].index

捕获股票看空的日期

需求:输出该股票所有开盘比前日收盘跌超过2%的日期

# 伪代码:(开盘-前日收盘)/前日收盘 < -0.02
# 广播形式:df['open'] - df['close'].shift(1)) / df['close'].shift(1) < -0.02
# 备注:df['close'].shift(1) 的目的是为了和前一日比较

# 看跌对应的布尔坐标
decline_df_index_series = (df['open'] - df['close'].shift(1)) / df['close'].shift(1) < -0.02

# 日期正好是 index 直接返回即可
decline_date_time_index = df.loc[decline_df_index].index

股票买卖收益分析

需求:指定一直股票,假如我从 2010 年 1 月 1 日开始,每月第一个交易日买入 1 手(= 100 股)股票,每年最后一个交易日卖出所有股票,到今天为止(2020-02),我的收益如何?

分析:

  • 时间节点:2010-2021
  • 买:一个完整的年需要买入1200股股票
  • 卖:一个完整的年需要卖出1200股股票
  • 买卖股票的单价:使用开盘价
# 买股票:找到每个月的第一个交易日对应的行数据(捕获到开盘价)==每月的第一行数据
# 根据月份从原始数据中提取指定的数据
# 数据的重新取样'M'是月(数据没有问题,索引有问题)
target_df = df['2010-01':'2021-02']
df_monthly = target_df.resample('M').first()
 
# 买入股票花费的总金额
cost = df_monthly['open'].sum() * 100

# 取年底 'A' 是年
# 将2021年就是最后一行去掉,不考虑来年
# 提示:-1 坐标代表最后序列最后一个, [:-1] 则相当于去掉最后一个元素
yearly_df = target_df.resample('A').last()[:-1]
 
# 卖出股票到手的钱
resv = yearly_df['open'].sum() * 1200
 
# 最后手中剩余的股票需要估值其价值计算到总收益中
# 使用昨天的收盘价作为剩余股票的单价
last_money = 200 * target_df['close'][-1]
 
# 计算总收益
profit = resv + last_money - cost

你可能感兴趣的:(机器学习,数据分析,python)