内容简介:初入数据分析大门,感觉需要补的知识太多太多。不太建议系统补齐各种知识,因为大概率会倒在半路上。以项目为导向,梳理大概流程,对流程中所需的知识点进行大致学习,以后遇到知识盲点再回来补。接下来我以股票分析为例来了解数据分析流程。
初入数据分析大门,感觉需要补的知识太多太多。不太建议系统补齐各种知识,因为大概率会倒在半路上。
以项目为导向,梳理大概流程,对流程中所需的知识点进行大致学习,以后遇到知识盲点再回来补。
接下来我以股票分析为例来了解数据分析流程。
个人认为股票分析无非就分为 获取数据
、 数据处理
、 数据可视化
三个部分,依赖 Python 强大的第三方开源库,上手难度变得非常低。
所需知识
- 基础
- Python
- 环境
- anaconda
- 数据获取
- pandas_datareader
- 数据处理
- numpy
- pandas
- 数据可视化
- matplotlib seaborn
目的
- 分析股票走势
- 多只股票的关系
Python 基本语法
推荐去看廖雪峰的 Python 教程,浅显易懂,上手很快。
安装 anaconda
Anaconda是一个包含180+的科学包及其依赖项的开源Python发行版本。
安装 anaconda,直接去anaconda 官网下载安装即可。
anaconda 安装成功后,会自带安装Jupyter,jupyter 主要用于我们代码的编写和运行。
创建一个新文件夹 stock-market-analysis
,进入当前目录,启动 jupyter 。
# 启动 jupyter conda notebook 复制代码
启动成功,在浏览器中打开 http://localhost:8888/tree)
,单击 new
,创建一个新的 notebook 就可以开始愉快的玩耍了!
numpy
numpy 是一个用于科学计算的 Python 库。
基本用法
# 引入 numpy import numpy as np 复制代码
# 创建一个长度为15,3乘5的二维数组 a = np.arange(15).reshape(3, 5) # 打印a a 复制代码
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) 复制代码
# 创建一个长度为15,间隔10,3乘5的二维数组 b = np.arange( 1, 150, 10 ).reshape(3, 5) # 打印b b 复制代码
array([[ 1, 11, 21, 31, 41], [ 51, 61, 71, 81, 91], [101, 111, 121, 131, 141]]) 复制代码
# 两个二维数组相加 a + b 复制代码
array([[ 1, 12, 23, 34, 45], [ 56, 67, 78, 89, 100], [111, 122, 133, 144, 155]]) 复制代码
pandas
pandas 是一个基于 numpy 强大的 Python 数据分析包,它提供了很高级的数据结构和大量处理数据的方法。最终目的是为了我们更好的理解和处理数据。
基本用法
pandas 提供了两种数据结构,Series 和 DataFrame。
import numpy as np import pandas as pd from pandas import Series, DataFrame 复制代码
Series
Series 类似于字典,可以根据索引查找对应值
# 创建一个长度为4,1到10的随机整数 Series(np.random.randint(1,10,4)) 复制代码
0 4 1 2 2 3 3 1 dtype: int64 复制代码
# 指定index s = Series(np.random.randint(1,10,4), index=['a','b','c','d']) s 复制代码
a 4 b 5 c 5 d 8 dtype: int64 复制代码
# 根据 index 查找 s['a'] 复制代码
4 复制代码
DataFrame
DataFrame 是二维的数据结构,可以用行列的方式表示,可以把它想象成一个 Excel 表。
# 生成值为时间的数组 dates = pd.date_range('20130101', periods=6) dates 复制代码
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') 复制代码
# 生成 index 为日期,列名为 ABCD 的 DataFrame df = DataFrame(np.random.randint(1,10,24).reshape(6,4), index=dates, columns=list('ABCD')) df 复制代码
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 4 | 3 | 5 | 3 |
2013-01-02 | 3 | 1 | 1 | 8 |
2013-01-03 | 6 | 1 | 8 | 6 |
2013-01-04 | 8 | 8 | 9 | 2 |
2013-01-05 | 1 | 5 | 1 | 8 |
2013-01-06 | 2 | 4 | 9 | 5 |
matplotlib seaborn
matplotlib 是 Python 非常重要的数据可视化库,而seaborn 是基于 matplotlib 开发的可视化库,更为强大易用。
基本用法
import numpy as np import pandas as pd from pandas import Series, DataFrame import matplotlib.pyplot as plt import seaborn as sns 复制代码
# 创建一个 Series,1000个从1到100间隔均匀的数组 s = Series(np.linspace(1, 100, 1000)) 复制代码
s.plot() 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x1a226a23c8> 复制代码
# 创建一个 DataFrame,1到10的随机整数,10乘4的二维数组,列名为 a,b,c,d df = DataFrame(np.random.randint(1,10,40).reshape(10,4),columns=list("abcd")) 复制代码
df 复制代码
a | b | c | d | |
---|---|---|---|---|
0 | 3 | 6 | 8 | 9 |
1 | 2 | 6 | 9 | 9 |
2 | 8 | 9 | 2 | 9 |
3 | 7 | 4 | 5 | 4 |
4 | 7 | 9 | 5 | 8 |
5 | 9 | 9 | 3 | 3 |
6 | 5 | 2 | 3 | 1 |
7 | 1 | 8 | 3 | 7 |
8 | 3 | 1 | 7 | 2 |
9 | 2 | 1 | 9 | 7 |
# matpoltlib 画图 df.plot() 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x11fe2ab38> 复制代码
# 对每列进行求和 df_sum = df.sum() # 指定柱状图 df_sum.plot(kind='bar') 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x1a22821668> 复制代码
# seaborn 画图 index = df_sum.index values = df_sum.values sns.barplot(index, values) 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x1a229041d0> 复制代码
有了以上的一些基本知识就可开始分析股票了。
股票分析
股票分析的步骤:
- 获取数据
- 处理数据
- 数据可视化
- 分析数据
# basic import numpy as np import pandas as pd from pandas import Series, DataFrame # get data import pandas_datareader as pdr # visual import matplotlib.pyplot as plt import seaborn as sns # time from datetime import datetime 复制代码
# pandas_datareader 这个库提供 API 来获取股票数据 # get_data_yahoo 代表数据源来自 yahoo,'BABA' 是阿里巴巴的股票代码 df = pdr.get_data_yahoo('BABA') # 由于数据较多,我们只取头部的五条数据来看 # high 表示最高价,low 表示最低价,open 表示开盘价,close 表示收盘价,volume 表示交易量 df.head() 复制代码
High | Low | Open | Close | Volume | Adj Close | |
---|---|---|---|---|---|---|
Date | ||||||
2014-09-19 | 99.699997 | 89.949997 | 92.699997 | 93.889999 | 271879400 | 93.889999 |
2014-09-22 | 92.949997 | 89.500000 | 92.699997 | 89.889999 | 66657800 | 89.889999 |
2014-09-23 | 90.480003 | 86.620003 | 88.940002 | 87.169998 | 39009800 | 87.169998 |
2014-09-24 | 90.570000 | 87.220001 | 88.470001 | 90.570000 | 32088000 | 90.570000 |
2014-09-25 | 91.500000 | 88.500000 | 91.089996 | 88.919998 | 28598000 | 88.919998 |
# 我们取五家从2015年1月1号至今的股票数据进行分析 # 'MSFT':微软, 'AAPL':苹果, 'AMZN':亚马逊, 'FB':脸书, 'GOOG':谷歌 start = datetime(2015,1,1) company = ['MSFT', 'AAPL', 'AMZN', 'FB', 'GOOG'] top_df = pdr.get_data_yahoo(company, start=start) 复制代码
# 得到一个数据集合,这个数据集合是 pandas.core 数据结构 type(top_df) 复制代码
pandas.core.frame.DataFrame 复制代码
# 看一下他们最近几日的收盘价 top_df['Close'].tail() 复制代码
Symbols | AAPL | AMZN | FB | GOOG | MSFT |
---|---|---|---|---|---|
Date | |||||
2018-10-30 | 213.300003 | 1530.420044 | 146.220001 | 1036.209961 | 103.730003 |
2018-10-31 | 218.860001 | 1598.010010 | 151.789993 | 1076.770020 | 106.809998 |
2018-11-01 | 222.220001 | 1665.530029 | 151.750000 | 1070.000000 | 105.919998 |
2018-11-02 | 207.479996 | 1665.530029 | 150.350006 | 1057.790039 | 106.160004 |
2018-11-05 | 201.589996 | 1627.800049 | 148.679993 | 1040.089966 | 107.510002 |
# 直接用 matplotlib 画它们的股价走势 top_df['Close'].plot() 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x1a1741f748> 复制代码
# 根据他们的股价走势,画出股价波动 top_df_dr = top_df['Close'].pct_change() top_df_dr.plot() 复制代码
<matplotlib.axes._subplots.AxesSubplot at 0x1a173004a8> 复制代码
# 上面的估计波动图太密集,不容易开出问题,我们选亚马逊和谷歌的进行对比 # 利用 seaborn 画出亚马逊和谷歌的散点图 # 每个点对应的横坐标和纵坐标,分别对应谷歌和亚马逊当日的涨跌情况,如果都为负数说明当日股价均为下跌 sns.jointplot('AMZN', 'GOOG', top_df_dr) 复制代码
<seaborn.axisgrid.JointGrid at 0x1a172d8048> 复制代码
# 我们还可以利用强大的 seaborn 对五家公司进行相互对比 sns.pairplot(top_df_dr.dropna()) 复制代码
<seaborn.axisgrid.PairGrid at 0x1a1786ada0> 复制代码
以上所述就是小编给大家介绍的《Python 股票分析入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 算法学习之股票预测
- 深度有趣 | 10 股票价格预测
- SVM调参之股票预测
- Flask 扫盲系列-在线股票走势图
- Python 爬虫实战(2):股票数据定向爬虫
- 机器学习交易——如何使用回归预测股票价格?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning Web App Development
Semmy Purewal / O'Reilly Media / 2014-3-3 / USD 29.99
Grasp the fundamentals of web application development by building a simple database-backed app from scratch, using HTML, JavaScript, and other open source tools. Through hands-on tutorials, this pract......一起来看看 《Learning Web App Development》 这本书的介绍吧!