Seaborn是Python常用的统计数据可视化库,以下内容简单介绍Seaborn如何使用。
In [1]:
#导入需要的程序包
import pandas as pd
import seaborn as sns
In [2]:
# 获取600196.XSHG的2015年01月的日级数据, 只获取open+close字段
df = get_price('600196.XSHG', start_date='2014-01-01', end_date='2015-01-31', frequency='daily', fields=['open','close'])
returns = df.pct_change().dropna()
sns.distplot(returns.iloc[:,0:1])
Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f2802524790>
我们可以比较不同股票的相关性,通过线性回归,画出不同股票的拟合曲线、置信区间(阴影区域)、皮尔森回归系数以及P值。
In [3]:
pingan = get_price('000001.XSHE', start_date='2014-01-01', end_date='2015-02-01', frequency='daily', fields=['open'])
fuxing = get_price('600196.XSHG', start_date='2014-01-01', end_date='2015-02-01', frequency='daily', fields=['open'])
returns_pingan = pingan.pct_change().dropna()
returns_fuxing = fuxing.pct_change().dropna()
sns.jointplot(returns_pingan['open'], returns_fuxing['open'], kind='reg', size=12)
Out[3]:
<seaborn.axisgrid.JointGrid at 0x7f2801cafbd0>
从以上各图,可以分析两只股票之间是否存在一个可能的投资机会,如果散点均匀分布在直线周围,表明两个股票有较强的相关性。
同一板块的股票相关性较强,我们以农业板块(A01)的股票作为示例分析多支股票的相关性。
In [8]:
df = get_price(get_industry_stocks('A01'), fields=('close',))['close']
df
Out[8]:
000998.XSHE
002041.XSHE
300087.XSHE
300143.XSHE
300189.XSHE
600108.XSHG
600313.XSHG
600354.XSHG
600359.XSHG
600371.XSHG
600506.XSHG
600540.XSHG
600598.XSHG
601118.XSHG
2015-01-05
19.77
12.84
5.21
12.76
6.78
9.53
11.39
8.81
10.92
10.66
11.33
8.16
10.17
8.88
2015-01-06
20.17
13.05
5.38
12.76
6.95
9.77
11.70
8.75
11.08
10.82
11.62
8.30
10.51
9.15
2015-01-07
20.01
12.98
5.32
11.48
6.89
10.00
11.90
8.85
11.07
10.81
11.54
8.28
10.54
9.03
2015-01-08
20.56
13.16
5.44
10.58
6.93
9.79
12.00
8.89
11.12
10.87
11.81
8.30
10.56
8.85
2015-01-09
20.19
13.01
5.30
10.39
6.80
9.43
11.61
8.60
10.80
10.58
11.73
8.19
10.43
8.61
2015-01-12
19.65
13.11
5.14
10.07
6.66
9.47
11.58
8.47
10.73
10.38
11.34
8.09
10.42
8.89
2015-01-13
20.03
13.28
5.32
10.36
6.82
9.52
11.87
8.78
10.90
10.51
11.54
8.12
10.44
8.94
2015-01-14
19.64
13.09
5.24
10.13
6.69
9.47
11.68
8.64
10.88
10.45
11.84
8.17
10.17
8.75
2015-01-15
19.80
13.18
5.33
10.18
6.76
9.58
11.79
8.65
11.11
10.55
11.86
8.28
10.35
8.90
2015-01-16
20.21
13.40
5.50
10.26
6.89
10.02
12.14
8.80
11.25
10.73
11.98
8.34
10.51
9.09
2015-01-19
19.64
13.44
5.43
10.28
6.64
9.68
11.95
8.42
10.79
10.45
11.96
8.14
10.10
8.60
2015-01-20
20.05
13.69
5.61
10.55
6.83
10.04
12.52
8.59
11.10
10.76
12.33
8.31
10.48
8.80
2015-01-21
20.48
13.93
5.76
10.82
7.00
10.25
13.26
8.84
11.29
10.96
12.65
8.49
10.82
8.94
2015-01-22
21.08
14.06
5.81
10.85
7.20
10.43
13.76
9.18
11.58
11.18
12.76
8.64
11.09
9.25
2015-01-23
20.66
13.80
5.70
10.85
7.08
10.11
13.63
8.98
11.36
10.95
12.62
8.57
10.94
9.06
2015-01-26
20.76
13.90
5.73
10.87
7.16
10.15
13.89
9.08
11.49
11.13
12.74
8.83
11.42
9.20
2015-01-27
21.22
14.09
6.07
10.91
7.27
10.46
14.89
9.37
11.73
11.22
12.79
9.02
11.59
9.34
2015-01-28
20.75
13.82
6.31
11.21
7.20
10.19
14.32
9.24
11.54
11.00
12.61
9.00
11.50
9.15
2015-01-29
20.65
13.53
6.20
11.12
7.21
10.08
14.34
9.36
11.24
10.89
12.32
8.95
11.43
9.04
2015-01-30
21.43
13.80
6.29
10.69
7.37
10.27
14.50
9.40
11.34
11.22
12.26
8.89
11.49
9.14
2015-02-02
20.99
13.46
6.24
10.55
7.20
9.66
13.47
8.93
11.31
11.26
12.22
8.93
10.92
8.81
2015-02-03
20.60
13.25
6.34
10.75
7.14
9.46
13.59
8.74
11.13
11.04
12.37
9.23
10.81
8.73
2015-02-04
20.14
13.24
6.27
10.76
7.12
9.24
13.09
8.60
10.87
11.23
12.45
8.88
10.73
8.64
2015-02-05
19.97
13.01
6.09
10.80
7.12
8.98
12.92
8.44
10.70
11.13
12.18
8.70
10.58
8.37
2015-02-06
19.15
12.70
5.86
10.47
6.98
8.58
12.45
8.14
10.35
10.80
11.88
8.50
10.36
7.93
2015-02-09
18.83
12.89
5.90
10.50
6.98
8.64
13.36
8.18
10.33
10.61
11.85
8.40
10.44
8.01
2015-02-10
19.12
12.94
5.88
10.75
7.11
8.71
13.75
8.25
10.27
10.66
11.85
8.44
10.41
8.04
2015-02-11
19.02
13.06
6.03
11.01
7.13
8.82
14.51
8.28
10.61
10.67
11.98
8.66
10.75
8.18
2015-02-12
19.31
12.90
6.21
11.18
7.18
8.77
14.41
8.20
10.57
10.98
12.08
8.71
11.03
8.14
2015-02-13
19.52
13.03
6.28
11.57
7.25
8.90
14.31
8.34
10.71
11.06
12.29
8.91
11.04
8.23
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
2015-09-01
19.52
14.99
14.98
12.55
28.37
6.77
11.12
6.85
9.28
11.16
14.11
8.06
12.41
7.15
2015-09-02
18.69
15.60
14.98
11.49
28.37
6.73
10.01
6.29
8.48
10.48
13.19
7.25
11.18
6.45
2015-09-07
19.26
15.75
14.98
12.64
28.37
6.84
10.37
6.45
8.80
11.13
13.66
7.54
11.97
6.57
2015-09-08
20.98
16.07
14.98
13.90
28.37
7.29
11.20
7.02
9.35
12.13
14.53
8.06
12.86
6.93
2015-09-09
21.17
16.33
14.98
14.27
28.37
7.32
11.86
7.30
9.88
12.69
15.04
8.63
13.21
7.22
2015-09-10
19.90
15.85
14.98
15.70
28.37
7.21
11.89
7.21
10.87
12.61
15.45
8.90
13.22
7.04
2015-09-11
19.62
15.65
14.98
16.23
28.37
7.21
12.07
7.33
11.42
12.60
15.99
9.13
13.23
7.20
2015-09-14
18.53
14.11
14.98
14.61
28.37
7.00
10.87
6.60
10.28
11.34
14.39
8.22
13.44
6.84
2015-09-15
17.81
13.68
14.98
13.78
28.37
6.30
10.27
5.98
9.25
10.21
14.06
7.40
12.10
6.16
2015-09-16
19.40
14.86
14.98
15.16
28.37
6.81
11.25
6.58
10.18
11.23
15.46
8.13
13.19
6.74
2015-09-17
18.69
14.45
14.98
14.21
28.37
6.44
10.70
6.38
9.77
11.19
14.84
7.78
12.64
6.47
2015-09-18
19.02
14.53
14.98
14.31
28.37
6.51
10.92
6.62
9.90
12.09
15.33
8.01
12.72
6.55
2015-09-21
19.49
14.83
14.98
15.74
28.37
6.70
11.30
6.89
10.39
12.45
15.77
8.35
13.13
6.73
2015-09-22
19.55
14.88
14.98
16.97
28.37
7.11
11.99
6.91
11.08
12.47
15.89
8.62
13.86
7.08
2015-09-23
19.00
14.51
14.98
17.20
28.37
6.79
11.64
7.00
11.19
12.11
15.52
8.86
13.55
6.72
2015-09-24
19.15
14.60
14.98
17.41
28.37
6.89
11.98
7.03
11.06
12.49
16.85
8.79
13.68
6.82
2015-09-25
18.80
14.22
14.98
16.90
28.37
6.71
11.39
6.68
10.38
11.66
15.40
8.14
13.53
6.59
2015-09-28
18.92
14.35
14.98
18.59
28.37
6.96
11.50
6.87
10.62
12.13
15.28
8.79
13.71
6.82
2015-09-29
18.37
14.23
14.98
18.01
28.37
7.00
11.46
6.96
10.56
12.23
15.28
9.14
13.74
6.99
2015-09-30
18.30
14.27
14.98
16.89
28.37
7.21
11.93
6.80
10.42
12.16
15.04
9.01
14.32
7.39
2015-10-08
19.40
14.82
14.98
18.58
28.37
7.61
13.12
7.14
11.09
12.82
15.64
9.26
15.75
7.70
2015-10-09
20.27
15.50
14.98
18.78
28.37
7.88
14.02
7.31
11.20
13.74
15.63
9.25
16.19
8.09
2015-10-12
20.99
16.17
14.98
18.80
28.37
7.87
14.25
7.62
11.58
14.27
16.50
9.68
16.81
8.08
2015-10-13
20.81
16.06
14.98
20.43
28.37
8.05
14.65
7.80
11.67
14.39
16.74
9.59
17.58
8.30
2015-10-14
20.90
16.24
14.98
20.05
28.37
7.90
14.24
7.65
11.68
14.00
16.76
9.32
16.79
7.98
2015-10-15
21.35
16.49
14.98
22.03
28.37
8.12
14.51
7.83
11.92
14.32
17.29
9.51
16.93
8.11
2015-10-16
21.39
16.46
14.98
21.70
28.37
8.14
14.29
8.08
11.87
14.60
17.98
9.65
16.56
8.06
2015-10-19
20.60
15.83
14.98
21.00
28.37
7.97
14.08
7.87
11.59
16.00
17.94
9.51
16.42
8.15
2015-10-20
21.00
16.20
14.98
20.56
28.37
8.11
14.19
7.99
11.72
15.90
17.88
9.68
16.53
8.17
2015-10-21
19.38
15.03
14.98
18.50
28.37
7.30
12.77
7.20
10.55
14.31
16.52
8.78
14.88
7.35
193 rows × 14 columns
In [9]:
df1 = df.iloc[:,0:5]
df1
Out[9]:
000998.XSHE
002041.XSHE
300087.XSHE
300143.XSHE
300189.XSHE
2015-01-05
19.77
12.84
5.21
12.76
6.78
2015-01-06
20.17
13.05
5.38
12.76
6.95
2015-01-07
20.01
12.98
5.32
11.48
6.89
2015-01-08
20.56
13.16
5.44
10.58
6.93
2015-01-09
20.19
13.01
5.30
10.39
6.80
2015-01-12
19.65
13.11
5.14
10.07
6.66
2015-01-13
20.03
13.28
5.32
10.36
6.82
2015-01-14
19.64
13.09
5.24
10.13
6.69
2015-01-15
19.80
13.18
5.33
10.18
6.76
2015-01-16
20.21
13.40
5.50
10.26
6.89
2015-01-19
19.64
13.44
5.43
10.28
6.64
2015-01-20
20.05
13.69
5.61
10.55
6.83
2015-01-21
20.48
13.93
5.76
10.82
7.00
2015-01-22
21.08
14.06
5.81
10.85
7.20
2015-01-23
20.66
13.80
5.70
10.85
7.08
2015-01-26
20.76
13.90
5.73
10.87
7.16
2015-01-27
21.22
14.09
6.07
10.91
7.27
2015-01-28
20.75
13.82
6.31
11.21
7.20
2015-01-29
20.65
13.53
6.20
11.12
7.21
2015-01-30
21.43
13.80
6.29
10.69
7.37
2015-02-02
20.99
13.46
6.24
10.55
7.20
2015-02-03
20.60
13.25
6.34
10.75
7.14
2015-02-04
20.14
13.24
6.27
10.76
7.12
2015-02-05
19.97
13.01
6.09
10.80
7.12
2015-02-06
19.15
12.70
5.86
10.47
6.98
2015-02-09
18.83
12.89
5.90
10.50
6.98
2015-02-10
19.12
12.94
5.88
10.75
7.11
2015-02-11
19.02
13.06
6.03
11.01
7.13
2015-02-12
19.31
12.90
6.21
11.18
7.18
2015-02-13
19.52
13.03
6.28
11.57
7.25
...
...
...
...
...
...
2015-09-01
19.52
14.99
14.98
12.55
28.37
2015-09-02
18.69
15.60
14.98
11.49
28.37
2015-09-07
19.26
15.75
14.98
12.64
28.37
2015-09-08
20.98
16.07
14.98
13.90
28.37
2015-09-09
21.17
16.33
14.98
14.27
28.37
2015-09-10
19.90
15.85
14.98
15.70
28.37
2015-09-11
19.62
15.65
14.98
16.23
28.37
2015-09-14
18.53
14.11
14.98
14.61
28.37
2015-09-15
17.81
13.68
14.98
13.78
28.37
2015-09-16
19.40
14.86
14.98
15.16
28.37
2015-09-17
18.69
14.45
14.98
14.21
28.37
2015-09-18
19.02
14.53
14.98
14.31
28.37
2015-09-21
19.49
14.83
14.98
15.74
28.37
2015-09-22
19.55
14.88
14.98
16.97
28.37
2015-09-23
19.00
14.51
14.98
17.20
28.37
2015-09-24
19.15
14.60
14.98
17.41
28.37
2015-09-25
18.80
14.22
14.98
16.90
28.37
2015-09-28
18.92
14.35
14.98
18.59
28.37
2015-09-29
18.37
14.23
14.98
18.01
28.37
2015-09-30
18.30
14.27
14.98
16.89
28.37
2015-10-08
19.40
14.82
14.98
18.58
28.37
2015-10-09
20.27
15.50
14.98
18.78
28.37
2015-10-12
20.99
16.17
14.98
18.80
28.37
2015-10-13
20.81
16.06
14.98
20.43
28.37
2015-10-14
20.90
16.24
14.98
20.05
28.37
2015-10-15
21.35
16.49
14.98
22.03
28.37
2015-10-16
21.39
16.46
14.98
21.70
28.37
2015-10-19
20.60
15.83
14.98
21.00
28.37
2015-10-20
21.00
16.20
14.98
20.56
28.37
2015-10-21
19.38
15.03
14.98
18.50
28.37
193 rows × 5 columns
使用pct_change()计算收益率,使用dropna去除缺失值,使用distplot画出直方分布图。
In [10]:
returns = df1.pct_change().dropna()
sns.distplot(returns.iloc[:,0:1])
Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27feb6e850>
如果有多组数据需要通过统计分布图进行比较,可以使用violinplot得到小提琴图。
In [16]:
sns.violinplot(returns,size=24)
Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27f748de50>
使用pairplot画出散点图,通过散点图分析两两之间的关系
In [12]:
sns.pairplot(returns, diag_kind='kde', size=2.4)
Out[12]:
<seaborn.axisgrid.PairGrid at 0x7f27ff264990>
我们可以通过使用heatmap更系统地探索相关性
In [13]:
sns.heatmap(returns.corr())
Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27fd465210>
还可以通过clustermap画出聚类图,将相近的聚成一类;您可以通过查阅机器学习相关书籍了解更多过关于聚类的信息。
In [30]:
sns.clustermap(returns.corr())
Out[30]:
<seaborn.matrix.ClusterGrid at 0x7ff867c44550>
In [4]:
sns.clustermap?