这是菜鸟学Python的第88篇原创文章
阅读本文大概需要4分钟
关于基金分析这个小项目,我前面已经写了2篇了,第一篇是思路篇,第二篇是实战篇,现在最后一篇就是数据分析篇。其实还有第四篇就是可视化数据,数据可视化绝对是一门艺术活,以后我会写数据可视化,今天主要是带领大家一起来分析一下基金数据,看看哪只基金能让你赚最多的钱 ,毕竟投资理财才是是王道啊.小伙伴们,我们一起来探寻一下~~
第一步:读取数据并了解数据
上一篇我们已经把6500多只基金存入了CSV文件,这是一个大的表格数据,我们先读取数据并初步了解一下吧
a).读入CSV文件
df=pd.read_csv(file)
b).看看有多少只基金
print len(df)
>>
6548
c).熟悉数据格式,看看行列的信息
print df.index
>>
RangeIndex(start=0, stop=6548, step=1)
print df.columns
>>
Index([u'fund_id', u'fund_name', u'one_month', u'three_month', u'six_month',
u'one_year', u'three_year', u'from_start'],
dtype='object')
d).看看表格中的前5只基金
经过上面3步,我们已经知道了这个大表格数据是6549行*8列,其中:
index是从0开始到6548的int
fund_id是基金的id
fund_name这一列都是中文字符
其他的列都是带百分号的数字字符串
这样的序列数据,我们要处理会有一些麻烦,比如:
如何解决这3个问题呢,我们接着往下看
第二步:数据清洗
1).先把index换成基金的id
把fund_id作为index,便于后面的处理,会方便很多,用DataFrame里面的set_index函数
2).看看index是不是已经换了
3).去掉NA行
表格里面有很多空的数据,这样的数据会影响我们的分析,我们必须要去掉
#去掉NA的行
df2=df.dropna()
print 'dropna column:',len(df2)
>>
dropna column: 6315
4).去掉fund_name
为啥要去掉fund_name,比如我们想统计一个基金的1个月,3个月,6个月,1年,3年和成立以来的和,看看它的总成绩如何
直接sum的会有一个问题,就是fund_name是字符串,所以我们先把fund_name去掉吧,然后把fund_id那一列也去掉,因为index已经是fund_index我们就不要重复啦
这样的数据是不是干净了很多,清爽了很多啊
5).然后去掉%,我们就可以愉快的排序了
如何取消%,这个时候我们需要用到pandas里面的一个大名鼎鼎的apply函数
第三步:找出最佳投资基金
1).经过前面2步,已经万事俱备
也就是说我们可以随心所欲的分析,先来看看头牌的情况,获得每一列的最大值,看看整个基金里面的头牌的情况,我们取前100名
#获得"from_start"(按照基金成立)以来涨幅大小排序
同样的道理,我们依此获取其他的头牌
#获得 按照基金成立三年以来涨幅 大小排序
print df_drop_percent.sort_values(by=['three_year'],ascending=False).head(range)
y3_index=df_drop_percent.sort_values(by=['three_year'],ascending=False).head(range).index
#获得 按照基金成立一年以来涨幅 大小排序
y1_index=df_drop_percent.sort_values(by=['one_year'],ascending=False).head(range).index
#获得 按照基金成立6个月以来涨幅 大小排序
m6_index=df_drop_percent.sort_values(by=['six_month'],ascending=False).head(range).index
#获得按照基金成立3个月以来涨幅 大小排序
m3_index=df_drop_percent.sort_values(by=['three_month'],ascending=False).head(range).index
#获得 按照基金成立1个月以来涨幅 大小排序
m1_index=df_drop_percent.sort_values(by=['one_month'],ascending=False).head(range).index
2).找出全能王中王
我们想知道所以的组合里面有没有最强的,就是从成立以来都是涨的,而且3年,1年,半年,3个月,1个月一直都在涨的,这样的基金简直就是王中王啊,到底有没有呢,怎么找呢
#取上面所有的index并转化成集合
fs_index_set=set(fs_index)
y3_index_set=set(y3_index)
y1_index_set=set(y1_index)
m6_index_set=set(m6_index)
m3_index_set=set(m3_index)
m1_index_set=set(m1_index)
#取成立以来都是涨的,而且3年,1年,半年,3个月,1个月一直都在涨的
mix_6c=fs_index_set&y3_index_set&y1_index_set&m6_index_set&m3_index_set&m1_index_set
print 'mix 6c:',mix_6c
>>
mix 6c: set([])
#看来没有东方不败,一直都是在涨基金,那有没有3年,1年,6个月,3个月,1个月都在涨的基金呢
mix_5c=y3_index_set&y1_index_set&m6_index_set&m3_index_set&m1_index_set
print 'mix 5c:',mix_5c
>>
mix 5c:set([150050, 619, 150124, 110022])
哇真的有啊,发现这4个基金才是真正的黄金,激动的老泪纵横~~稳健的投资者可以考虑这4个基金
3).1年以内的最佳基金
积近的投资者,肯定还想看看最近1年的所以数据
mix_4c=y1_index_set&m6_index_set&m3_index_set&m1_index_set
print 'mix 4c:',mix_4c
>>
mix 4c: set([165312, 150050, 150149, 110022, 989,
619, 150124,169101, 169102, 169103, 1712, 1044, 150270,
150199, 1112, 161725, 990])
#把上面的最佳基金横向求和,看到底那个最好
>>
165312 72.48
150050 119.28
150149 106.17
110022 97.43
989 78.04
619 71.26
150124 110.42
169101 100.49
169102 86.71
169103 78.81
1712 76.7
1044 76.12
150270 171.5
150199 141.16
1112 88.05
161725 88.0
990 78.04
发现最好的1只基金150270一年涨了1.7倍多,太爽了,看看名字叫啥
fund_id fund_name one_month three_month six_month one_year \
fund_id
150050 150050 南方消费进取 21.42% 13.58% 22.58% 61.70%
three_year from_start
fund_id
150050 270.26% 197.13%
原来最好的基金就是南方消费进取
结论:
好了,今天6500多只基金数据分析篇就先讲到这里,其实数据分析是非常有趣的,这个小项目算是完成了,上面的对基金数据分析只是冰山一角,还有很多地方可以挖掘和分析,而基金投资,特别是量化基金投资涉及很多方面和模型,最主要的就是选基金只是第一步,还有如何买,投资多少,如何建模减少风险,如何卖,等等都有很讲究,今天的内容希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流
长按二维码,关注【菜鸟学python】