用Python找到最赚钱的基金|不看这篇你会后悔

浏览: 3249

image.png

这是菜鸟学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只基金

image.png

经过上面3步,我们已经知道了这个大表格数据是6549行*8列,其中:

  • index是从0开始到6548的int 

  • fund_id是基金的id

  • fund_name这一列都是中文字符

  • 其他的列都是带百分号的数字字符串


这样的序列数据,我们要处理会有一些麻烦,比如:

  • index不是基金id,不好统计

  • 涨幅都是带百分号的字符串,如何排序和统计

  • 如何要横向统计,每一个行中有既有fund_name中文字符,又有百分百的数字,如何求和


如何解决这3个问题呢,我们接着往下看

第二步:数据清洗

1).先把index换成基金的id

把fund_id作为index,便于后面的处理,会方便很多,用DataFrame里面的set_index函数

image.png

2).看看index是不是已经换了

image.png

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我们就不要重复啦

image.png

这样的数据是不是干净了很多,清爽了很多啊

5).然后去掉%,我们就可以愉快的排序了

如何取消%,这个时候我们需要用到pandas里面的一个大名鼎鼎的apply函数

image.png

第三步:找出最佳投资基金

1).经过前面2步,已经万事俱备

也就是说我们可以随心所欲的分析,先来看看头牌的情况,获得每一列的最大值,看看整个基金里面的头牌的情况,我们取前100名

#获得"from_start"(按照基金成立)以来涨幅大小排序

image.png

同样的道理,我们依此获取其他的头牌
#获得 按照基金成立三年以来涨幅 大小排序
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])

#把上面的最佳基金横向求和,看到底那个最好

image.png

>>
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】


推荐 0
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册