机器学习-数据科学库 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你在学习Python数据分析的时候,是否遇到过在这些问题? 别慌!这些都是数据科学入门常见问题。从入门到上手再到解决实际问题,数据科学看似复杂,但如果你掌握了正确的学习方法,完全可以极速入门。 【职场人进阶必备  数据分析/挖掘一点通】 如今的职场上,90%以上的岗位都会涉及数据问题。 以产品文案岗位为例,在一个新产品推向市场之前,文案需要考虑: 此时,可以关注一下市场上已有的相关产品推广数据,如:哪些文案打开率更高?哪些文案转化更好?目标用户的购买习惯如何? 以此作为下一步工作开展的依据,对产品文案工作者来说,可以少走很多弯路。 学会数据分析/挖掘,等于站巨人的肩膀上工作,轻松且高效。 【爬虫、数据分析数据挖掘知识点三合一】数据问题一网打尽 本课程将知识点悉数融入实战项目,不空谈语法,帮助学员在实践中获取知识,目标是:让学员能自主完成数据采集、数据分析数据挖掘。 学习完本课程,你可以熟练掌握: 【实战案例超实用,轻松拥有“睡后收入”!】 本课程以股票案例为主线,串联爬虫、数据分析以及数据挖掘多个知识点。 通过实战案例演练,你可以全面掌握股票收益的分析和预判方法,在收获新技能的同时,也有机会获得“睡后收入”! 四大优势: 三重权益:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值