Finology 大数据金融

通过大数据以量化金融

公式回顾

高中所学的排列组合,我们用程序来模拟一下。

如果是从 n 个元素中取出 n 个元素进行排列,那一共有 n! 种排法。

因为,有 n 个元素,放入 n 个盒子里,第1个盒子有 n 种取法,第2个盒子有 n - 1 种取法,第 n 个盒子有 1 种取法,根据分步算法,n * (n - 1) * (n - 2) * … * 1 = n! 。

那如果是 n 个元素,任取 m 个排列,那同理能得出如下公式。

$ P_n^m=\frac{n!}{(n-m)!} $

如果是组合,我们把 m 个元素的阶乘除掉即可。

$ C_n^m=\frac{n!}{(n-m)!m!} $

同时,排列组合还有如下两个重要公式:

$ P_{n+1}^m=P_n^m+mP_n^{m-1} $

$ C_{n+1}^m=C_n^m+C_n^{m-1} $

排列

1
2
3
4
5
6
7
8
9
10
11
12
import itertools
list = range(3)
p = itertools.permutations(list, 2)
for i in p:
print(i)

(0, 1)
(0, 2)
(1, 0)
(1, 2)
(2, 0)
(2, 1)

组合

1
2
3
4
5
6
7
c = itertools.combinations(list, 2)
for i in c:
print(i)

(0, 1)
(0, 2)
(1, 2)

如果要显示 %,我们需要在前面再加一个 %,做为转义用。

1
String.format("%d%%", 100);

这时才会正确显示 100%

当标签文本很长时,或者是某维度的数据列表长度很长时,都会造成标签的重叠覆盖。

解决方法有以下几种。我们使用的数据如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import matplotlib.pyplot as plt

industry = ['交通运输', '休闲服务', '传媒', '公用事业', '农林牧渔', '化工',
'医药生物', '商业贸易', '国防军工', '家用电器', '建筑材料', '建筑装饰',
'房地产', '有色金属', '机械设备', '汽车', '电子', '电气设备', '纺织服装',
'综合', '计算机', '轻工制造', '采掘', '银行', '非银金融', '食品饮料']
cap = [4572, 253, 84, 119, 23, 352, 1059, 631, 900, 95, 43, 430, 1524, 52, 1254,
2581, 3012, 195, 70, 31, 1338, 61, 111, 4964, 2782, 291]

# 生成Series
s = pd.Series(cap, industry)
# 排序
sort_s = series.sort_values(ascending=False)

# 生成x轴 y轴序列
x = sort_s.index
y = sort_s.values

fig, axs = plt.subplots()
axs.bar(x, y)

拉长画布

查看画布默认大小

1
2
plt.rcParams['figure.figsize']
[6.0, 4.0]

我们把画布拉长一倍,设置 figsize 参数。

1
2
fig, axs = plt.subplots(figsize=(12, 4))
axs.bar(x, y)

拉长以后,bar 的宽度也变大了。

由于 x 轴的数据太多了,还是有覆盖现象。

调整标签字体字号

1
2
3
4
fig, axs = plt.subplots()
# 调整x轴标签的大小
axs.tick_params(axis='x', labelsize=6)
axs.bar(x, y)

x轴和y轴互换

1
2
fig, axs = plt.subplots()
axs.barh(x, y)

标签旋转

目前比较好的解决方案可能是标签旋转,再适当的放大x轴。

1
2
3
4
fig, axs = plt.subplots(figsize=(12, 4))
# x轴标签旋转
axs.tick_params(axis='x', labelrotation=-60)
axs.bar(x, y)
0%