pandas数据相关性分析例一

导入数据

In [28]:
import pymongo
import pandas as pd
client = pymongo.MongoClient('localhost',27017)
colleciton = client['实盘大赛(清洗后)']['轻量组top50']
data = list(colleciton.find())
df = pd.DataFrame(data)

日最小收益率改为日最大亏损率,这样合逻辑

In [29]:
df['日最大亏损率'] = df["日最小收益率"].apply(abs)

去掉不需要的信息

In [30]:
df.head()
Out[30]:

_id昵称日最大收益率日最小收益率交易胜率盈亏比风险度均值累计净值日最大亏损率
05f0ef7851e3f25a91137ad88林.倚天剑0.8822-0.21660.61111.580.99339.8650.2166
15f0ef79b1e3f25a91137ad89林**0.7955-0.31190.65751.861.02739.4600.3119
25f0ef7b11e3f25a91137ad8a九月0.7212-0.32140.53421.610.930610.0470.3214
35f0ef7c51e3f25a91137ad8b风轻云淡定0.3973-0.07340.61114.350.44727.3850.0734
45f0ef7e01e3f25a91137ad8c黑色闪电0.2510-0.21020.66672.160.58737.6650.2102
In [31]:
df.columns
Out[31]:
Index(['_id', '昵称', '日最大收益率', '日最小收益率', '交易胜率', '盈亏比', '风险度均值', '累计净值',
       '日最大亏损率'],
      dtype='object')
In [32]:
df = df.drop(['_id', '昵称','日最小收益率'], axis=1)
In [33]:
df.head()
Out[33]:

日最大收益率交易胜率盈亏比风险度均值累计净值日最大亏损率
00.88220.61111.580.99339.8650.2166
10.79550.65751.861.02739.4600.3119
20.72120.53421.610.930610.0470.3214
30.39730.61114.350.44727.3850.0734
40.25100.66672.160.58737.6650.2102

直接应用pd.corr()函数求相关系数,每1项与剩余5项做相关性分析

In [36]:
lst = ['交易胜率', '盈亏比', '风险度均值', '累计净值', '日最大亏损率']
for i in lst:
    to_pair  = df[i]
    correlation = df['日最大收益率'].corr(to_pair)
    print(f'"日最大收益率"与"{i}"的相关系数为:{correlation}')
"日最大收益"与"交易胜率"的相关系数为:-0.09810174973723376
"日最大收益"与"盈亏比"的相关系数为:0.1872945230858573
"日最大收益"与"风险度均值"的相关系数为:0.47741378786165506
"日最大收益"与"累计净值"的相关系数为:0.6371079943434801
"日最大收益"与"日最大亏损率"的相关系数为:0.6035639292714104
结论1:日最大收益率与日最大亏损率和累计净值有一定正相关性
In [41]:
lst = ['日最大收益率','盈亏比', '风险度均值', '累计净值', '日最大亏损率']
for i in lst:
    to_pair  = df[i]
    correlation = df['交易胜率'].corr(to_pair)
    print(f'"交易胜率"与"{i}"的相关系数为:{correlation}')
"交易胜率"与"日最大收益率"的相关系数为:-0.09810174973723376
"交易胜率"与"盈亏比"的相关系数为:0.31615756028737424
"交易胜率"与"风险度均值"的相关系数为:-0.1196289149244652
"交易胜率"与"累计净值"的相关系数为:0.0038815121517267602
"交易胜率"与"日最大亏损率"的相关系数为:-0.14889420330252412
结论2:交易胜率与其他几项都没有相关性
In [42]:
lst = ['日最大收益率','交易胜率', '风险度均值', '累计净值', '日最大亏损率']
for i in lst:
    to_pair  = df[i]
    correlation = df['盈亏比'].corr(to_pair)
    print(f'"盈亏比"与"{i}"的相关系数为:{correlation}')
"盈亏比"与"日最大收益率"的相关系数为:0.1872945230858573
"盈亏比"与"交易胜率"的相关系数为:0.31615756028737424
"盈亏比"与"风险度均值"的相关系数为:-0.050102742098969845
"盈亏比"与"累计净值"的相关系数为:0.07253433560651605
"盈亏比"与"日最大亏损率"的相关系数为:-0.13900005271259094
结论3:盈亏比同样与其他几项没有相关性
In [43]:
lst = ['日最大收益率','交易胜率', '盈亏比', '累计净值', '日最大亏损率']
for i in lst:
    to_pair  = df[i]
    correlation = df['风险度均值'].corr(to_pair)
    print(f'"风险度均值"与"{i}"的相关系数为:{correlation}')
"风险度均值"与"日最大收益率"的相关系数为:0.47741378786165506
"风险度均值"与"交易胜率"的相关系数为:-0.1196289149244652
"风险度均值"与"盈亏比"的相关系数为:-0.050102742098969845
"风险度均值"与"累计净值"的相关系数为:0.5177855241596842
"风险度均值"与"日最大亏损率"的相关系数为:0.5739989094010964
结论4:风险度均值同样与其他几项相关性也不是很大啊
In [44]:
lst = ['日最大收益率','交易胜率', '盈亏比', '风险度均值', '日最大亏损率']
for i in lst:
    to_pair  = df[i]
    correlation = df['累计净值'].corr(to_pair)
    print(f'"累计净值"与"{i}"的相关系数为:{correlation}')
"累计净值"与"日最大收益率"的相关系数为:0.6371079943434801
"累计净值"与"交易胜率"的相关系数为:0.0038815121517267602
"累计净值"与"盈亏比"的相关系数为:0.07253433560651605
"累计净值"与"风险度均值"的相关系数为:0.5177855241596843
"累计净值"与"日最大亏损率"的相关系数为:0.7480495293414399
累计净值与日最大收益率和最大亏损率正相关,与结论1一样

总结

只得出1条结论,即日最大收益率、日最大亏损率、累计净值三者之间有一定的正相关性.这也符合常识,一般交易风格激进,日最大收益也大,日最大亏损也大,同样的如果交易结果为盈利,累计净值也大.貌似这条结论没什么用,权当消遣把.

不过同时也得出一条结论:即交易胜率独立于这些因素,得从其他方向入手.