六、股票市场分析实战项目一

本文通过Python的pandas库和可视化工具对阿里巴巴、亚马逊等公司的股价数据进行分析,包括数据获取、历史趋势分析、每日收益率统计及风险评估等内容。

数据获取

import pandas_datareader as pdr
alibaba = pdr.get_data_yahoo('BABA')
alibaba.head()

  结果:

 OpenHighLowCloseAdj CloseVolume
Date      
2014-09-1992.69999799.69999789.94999793.88999993.889999271879400
2014-09-2292.69999792.94999789.50000089.88999989.88999966657800
2014-09-2388.94000290.48000386.62000387.16999887.16999839009800
2014-09-2488.47000190.57000087.22000190.57000090.57000032088000
2014-09-2591.08999691.50000088.50000088.91999888.91999828598000
alibaba.shape#(789, 6)
alibaba.tail()

  结果:

 OpenHighLowCloseAdj CloseVolume
Date      
2017-10-30178.429993181.899994177.589996181.580002181.58000220219700
2017-10-31183.570007185.119995181.811005184.889999184.88999921256700
2017-11-01187.880005188.880005183.580002186.080002186.08000228594700
2017-11-02190.990005191.220001183.309998184.809998184.80999841239900
2017-11-03186.509995186.929993182.059998183.210007183.21000719621400
alibaba.describe()#汇总信息,基本信息

  结果:

 OpenHighLowCloseAdj CloseVolume
count789.000000789.000000789.000000789.000000789.0000007.890000e+02
mean98.87900499.97787997.62268198.80043198.8004311.681925e+07
std29.07625429.24003728.74354729.00796129.0079611.427472e+07
min57.29999958.65000257.20000157.38999957.3899993.775300e+06
25%79.84999880.98999879.15000279.88999979.8899991.003060e+07
50%89.09999890.45999988.05999888.90000288.9000021.340540e+07
75%106.500000107.550003105.129997105.980003105.9800031.915080e+07
max190.990005191.220001183.580002186.080002186.0800022.718794e+08
alibaba.info()#也是基本信息

  结果:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 789 entries, 2014-09-19 to 2017-11-03
Data columns (total 6 columns):
Open         789 non-null float64
High         789 non-null float64
Low          789 non-null float64
Close        789 non-null float64
Adj Close    789 non-null float64
Volume       789 non-null int64
dtypes: float64(5), int64(1)
memory usage: 43.1 KB
View Code

 历史趋势分析

# 基本信息
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

# 股票数据的读取
import pandas_datareader as pdr

# 可视化
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# time
from datetime import datetime

  

start = datetime(2015,9,20)
alibaba = pdr.get_data_yahoo('BABA', start=start)
amazon = pdr.get_data_yahoo('AMZN', start=start)

  

alibaba.to_csv('../homework/BABA.csv')
amazon.to_csv('../homework/AMZN.csv')

  

alibaba.head()

  结果:

 OpenHighLowCloseAdj CloseVolume
Date      
2015-09-2165.37999766.40000262.95999963.90000263.90000222355100
2015-09-2262.93999963.27000061.58000261.90000261.90000214897900
2015-09-2361.95999962.29999959.68000060.00000060.00000022684600
2015-09-2459.41999860.34000058.20999959.91999859.91999820645700
2015-09-2560.63000160.84000058.91999859.24000259.24000217009100
alibaba['Adj Close'].plot(legend=True)

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x11d910588>

 
alibaba['Volume'].plot(legend=True)

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x120ebcda0>

alibaba['Adj Close'].plot()
amazon['Adj Close'].plot()

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x120ee9a90>

alibaba.head()

  结果:

 OpenHighLowCloseAdj CloseVolume
Date      
2015-09-2165.37999766.40000262.95999963.90000263.90000222355100
2015-09-2262.93999963.27000061.58000261.90000261.90000214897900
2015-09-2361.95999962.29999959.68000060.00000060.00000022684600
2015-09-2459.41999860.34000058.20999959.91999859.91999820645700
2015-09-2560.63000160.84000058.91999859.24000259.24000217009100
alibaba['high-low'] = alibaba['High'] - alibaba['Low']
alibaba.head()

  结果:

 OpenHighLowCloseAdj CloseVolumehigh-low
Date       
2015-09-2165.37999766.40000262.95999963.90000263.900002223551003.440003
2015-09-2262.93999963.27000061.58000261.90000261.900002148979001.689998
2015-09-2361.95999962.29999959.68000060.00000060.000000226846002.619999
2015-09-2459.41999860.34000058.20999959.91999859.919998206457002.130001
2015-09-2560.63000160.84000058.91999859.24000259.240002170091001.920002
alibaba['high-low'].plot()

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x120fdcf98>

# daily return  每天变化情况
alibaba['daily-return'] = alibaba['Adj Close'].pct_change() #.pct_change() 实现每天每天变化情况
alibaba['daily-return'].plot(figsize=(10,4),linestyle='--',marker='o')#figsize图大小,marker每个数据点类型

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x121504d68>

alibaba['daily-return'].plot(kind='hist')#可以看出,基本上在-0.025到.025之间,所以股票价格稳定

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x12169c630>

sns.distplot(alibaba['daily-return'].dropna(),bins=100,color='purple')

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x121b15f98>

 风险分析

# 基本信息
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

# 股票数据的读取
import pandas_datareader as pdr

# 可视化
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# time
from datetime import datetime

  

start = datetime(2015,1,1)
company = ['AAPL','GOOG','MSFT','AMZN','FB']#5家公司
top_tech_df = pdr.get_data_yahoo(company, start=start)['Adj Close']

  

top_tech_df.to_csv('../homework/top5.csv')

  

top_tech_df.head()

  结果:

 AAPLAMZNFBGOOGMSFT
Date     
2017-11-03172.5000001111.599976178.9199981032.47998084.139999
2017-11-02168.1100011094.219971178.9199981025.57995684.050003
2017-11-01166.8899991103.680054182.6600041025.50000083.180000
2017-10-31169.0399931105.280029180.0599981016.64001583.180000
2017-10-30166.7200011110.849976179.8699951017.10998583.889999
top_tech_dr = top_tech_df.pct_change()#股票数据每天的变化
top_tech_dr.head()

  结果:

 AAPLAMZNFBGOOGMSFT
Date     
2017-11-03NaNNaNNaNNaNNaN
2017-11-02-0.025449-0.0156350.000000-0.006683-0.001070
2017-11-01-0.0072570.0086460.020903-0.000078-0.010351
2017-10-310.0128830.001450-0.014234-0.0086400.000000
2017-10-30-0.0137250.005039-0.0010550.0004620.008536
top_tech_df.plot()#GOOG与AMZN曲线比较相似

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x122293fd0>

top_tech_df[['AAPL','FB','MSFT']].plot()#画出其中三列 

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x1225960b8>

sns.jointplot('AMZN','GOOG', top_tech_dr, kind='scatter')#kind='scatter'表示散点图;看点是否在一条斜率为45度的直线上来观察两家股票的相关性,注意坐标大小代表的是上升或者下降

  结果:<seaborn.axisgrid.JointGrid at 0x124dd0f98>

sns.jointplot('MSFT','FB', top_tech_dr, kind='scatter')

  结果:<seaborn.axisgrid.JointGrid at 0x125928940>

sns.pairplot(top_tech_dr.dropna())#.dropna()表示去掉NaN

  结果:<seaborn.axisgrid.PairGrid at 0x125fa27f0>

top_tech_dr['AAPL'].quantile(0.52)
#结果:-0.0001447090809730694

  

top_tech_dr['MSFT'].quantile(0.05)#有(1-%5)的信心每天的变化最大为-0.021328913487084877  (最大亏损为%2)

  结果:-0.021328913487084877

vips = pdr.get_data_yahoo('VIPS', start=start)['Adj Close']
vips.plot()

  结果:<matplotlib.axes._subplots.AxesSubplot at 0x127b0f7b8>

vips.pct_change().quantile(0.2)#-0.02181125767068397

  

 

 

 

转载于:https://www.cnblogs.com/tianqizhi/p/8867122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值