Начало работы с Python Stock Analysis

открытый источник Python анализ данных визуализация данных
Начало работы с Python Stock Analysis

Когда я впервые вошел в дверь анализа данных, я почувствовал, что знаний слишком много, чтобы их можно было дополнить. Не рекомендуется заливать систему всевозможными знаниями, потому что велика вероятность, что она сорвется на полпути.

Ориентация на проект, разобраться в общем процессе и примерно изучить точки знаний, необходимые в процессе, и вернуться, чтобы восполнить пробелы в знаниях в будущем.

Далее я возьму анализ акций в качестве примера, чтобы понять процесс анализа данных.

Лично я думаю, что биржевой анализ есть не что иное, как деление на获取数据,数据处理,数据可视化Три части, основанные на мощных сторонних библиотеках Python с открытым исходным кодом, очень усложняют начало работы.

Требуемые знания

  • База
    • Python
  • окрестности
    • anaconda
  • Сбор данных
    • pandas_datareader
  • обработка данных
    • numpy
    • pandas
  • визуализация данных
    • matplotlib seaborn

Цель

  • Анализируйте тенденции акций
  • взаимосвязь между несколькими акциями

Базовый синтаксис Python

рекомендуется посмотретьУчебное пособие по Python от Ляо Сюэфэна, легко понять и легко использовать.

установить анаконду

Anaconda — это дистрибутив Python с открытым исходным кодом, содержащий более 180 научных пакетов и их зависимостей.

Чтобы установить Anaconda, перейдите непосредственно кофициальный сайт анакондыЗагрузить и установить.

После того, как анаконда будет успешно установлена, она будет установлена ​​сама.Jupyter, Jupyter в основном используется для написания и запуска нашего кода.

Создать новую папкуstock-market-analysis, введите текущий каталог и запустите jupyter.

# 启动 jupyter
conda notebook 

Запуск прошел успешно, открываем в браузереhttp://localhost:8888/tree), нажмитеnew, создайте новый блокнот и начните веселиться!

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Это мощный пакет анализа данных Python, основанный на numpy, который предоставляет очень высокоуровневые структуры данных и большое количество методов для обработки данных. Конечная цель состоит в том, чтобы мы лучше понимали и обрабатывали данные.

Основное использование

pandas предоставляет две структуры данных: Series и DataFrame.

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

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>

Перейдите на официальный сайт matplotlib, чтобы узнать больше.

Перейдите на официальный сайт Seaborn, чтобы узнать больше

Обладая некоторыми базовыми знаниями, приведенными выше, вы можете приступить к анализу акций.

анализ запасов

Этапы анализа акций:

  • получить данные
  • Обработка данных
  • визуализация данных
  • анализировать данные
# 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>

Спасибо за чтение!