A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

初入数据分析大门,感觉需要补的知识太多太多。不太建议系统补齐各种知识,因为大概率会倒在半路上。
以项目为导向,梳理大概流程,对流程中所需的知识点进行大致学习,以后遇到知识盲点再回来补。
接下来我以股票分析为例来了解数据分析流程。
个人认为股票分析无非就分为获取数据、数据处理、数据可视化三个部分,依赖 Python 强大的第三方开源库,上手难度变得非常低。
所需知识
  • 基础
    • Python
  • 环境
    • anaconda
  • 数据获取
    • pandas_datareader
  • 数据处理
    • numpy
    • pandas
  • 数据可视化
    • matplotlib seaborn
目的
  • 分析股票走势
  • 多只股票的关系
Python 基本语法推荐去看廖雪峰的 Python 教程,浅显易懂,上手很快。
安装 anacondaAnaconda是一个包含180+的科学包及其依赖项的开源Python发行版本。
安装 anaconda,直接去anaconda 官网下载安装即可。
anaconda 安装成功后,会自带安装 Jupyter,jupyter 主要用于我们代码的编写和运行。
创建一个新文件夹 stock-market-analysis ,进入当前目录,启动 jupyter 。
# 启动 jupyterconda notebook 复制代码启动成功,在浏览器中打开 http://localhost:8888/tree) ,单击 new,创建一个新的 notebook 就可以开始愉快的玩耍了!
numpynumpy 是一个用于科学计算的 Python 库。
基本用法# 引入 numpyimport numpy as np复制代码# 创建一个长度为15,3乘5的二维数组a = np.arange(15).reshape(3, 5)# 打印aa复制代码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)# 打印bb复制代码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]])复制代码去官网了解更多
pandaspandas 是一个基于 numpy 强大的 Python 数据分析包,它提供了很高级的数据结构和大量处理数据的方法。最终目的是为了我们更好的理解和处理数据。
基本用法pandas 提供了两种数据结构,Series 和 DataFrame。
import numpy as npimport pandas as pdfrom pandas import Series, DataFrame复制代码SeriesSeries 类似于字典,可以根据索引查找对应值
# 创建一个长度为4,1到10的随机整数Series(np.random.randint(1,10,4))复制代码0    41    22    33    1dtype: int64复制代码# 指定indexs = Series(np.random.randint(1,10,4), index=['a','b','c','d'])s复制代码a    4b    5c    5d    8dtype: int64复制代码# 根据 index 查找s['a']复制代码4复制代码DataFrameDataFrame 是二维的数据结构,可以用行列的方式表示,可以把它想象成一个 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 的 DataFramedf = 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 seabornmatplotlib 是 Python 非常重要的数据可视化库,而 seaborn 是基于 matplotlib 开发的可视化库,更为强大易用。
基本用法import numpy as npimport pandas as pdfrom pandas import Series, DataFrameimport matplotlib.pyplot as pltimport 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,ddf = 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.indexvalues = df_sum.valuessns.barplot(index, values)复制代码<matplotlib.axes._subplots.AxesSubplot at 0x1a229041d0>复制代码

去 matplotlib 官网了解更多
去 seaborn 官网了解更多
有了以上的一些基本知识就可开始分析股票了。
股票分析股票分析的步骤:
  • 获取数据
  • 处理数据
  • 数据可视化
  • 分析数据
# basicimport numpy as npimport pandas as pdfrom pandas import Series, DataFrame# get dataimport pandas_datareader as pdr# visualimport matplotlib.pyplot as pltimport seaborn as sns# timefrom 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>复制代码

感谢阅读!

【转载】
作者:缪宇
链接:https://juejin.im/post/5bdffcf35188251707502421



3 个回复

倒序浏览
回复 使用道具 举报
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马