利用python进行基金数据分析

  • 背景说明
  • 分析过程
    • 1.获取所有种类基金数据
      • 1.1导入相关包
      • 1.2通过天天基金网接口获取基金数据
        • 1.2.1获取网页信息
        • 1.2.2将数据转化成二维表并写入本地磁盘(dataframe)
      • 1.3数据概览
        • 1.3.1查看前几行数据
        • 1.3.2查看各类型基金分布及可视化展示
    • 2.对某支基金进行分析
      • 2.1定义抓取函数
      • 2.2获取基金净值信息
      • 2.3 查看数据字段和数据内容
      • 2.4历史净值数据可视化分析
      • 2.5查看每年增长率正负的天数
        • 2.5.1增加“年”字段
        • 2.5.2正增长和负增长的数量及年度增长平均值

背景说明

本文主要是利用Python提取并分析相关数据,看下当前基金市场上存在哪些类型的基金,作为新手如何判断一支基金是否值得购买。

分析过程

1.获取所有种类基金数据

1.1导入相关包

import pandas as pd
import re
import numpy as np
from bs4 import BeautifulSoup
import requests
import matplotlib.pyplot as plt
%matplotlib inline # 解决图表在jupyter的显示问题
# 解决中文和‘-’号在jupyter的显示问题
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False

1.2通过天天基金网接口获取基金数据

1.2.1获取网页信息

url='http://fund.eastmoney.com/js/fundcode_search.js'
num=requests.get(url)
# 通过正则表达式获取基金信息
text=re.findall(r'"(\d*?)","(.*?)","(.*?)","(.*?)","(.*?)"',num.text)

1.2.2将数据转化成二维表并写入本地磁盘(dataframe)

# 转化为二维表
基金代码=[]
基金名称=[]
基金类型=[]
for i in text:content=list(i)基金代码.append(content[0])基金名称.append(content[2])基金类型.append(content[3])
基金信息=pd.DataFrame({'代码':基金代码,'名称':基金名称,'类型':基金类型})
# 写入到本地磁盘,想到后续会在excel做一些分析,先把数据下载下来
writer=pd.ExcelWriter(r'D:\工作文档\工作\2020\11月\python\基金数据导出.xlsx')
基金信息.to_excel(writer,sheet_name='基金信息',index=False)
writer.save()
writer.close()

1.3数据概览

1.3.1查看前几行数据

1.3.2查看各类型基金分布及可视化展示

# 按照类型进行分组
分组数量=基金信息.groupby('类型').agg(基金数量=('类型','count')).\
sort_values(by='基金数量',ascending=False).reset_index('类型')
# 图表展示
plt.style.use('ggplot')
fig=plt.figure(figsize=(20,8))
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.bar(x='类型',height='基金数量',data=分组数量)
for a,b in zip(range(len(分组数量.类型)),分组数量.基金数量):plt.text(a,b,b,ha='center',va='bottom',fontsize=16)
plt.title('各类基金数量',fontdict={'fontsize':20})

分析:

  • 通过图表看到,目前市面上基金数量前五的类别分别是混合型、债券型、定开债券、货币型和股票指数型。一般来讲,数量越多表明受到投资者喜爱的程度越高。
  • 针对不同类型的基金,可通过了解他们的特点然后结合自己的自身情况选择购买某一种类型的基金。

2.对某支基金进行分析

背景: 通常在购买某支基金前,需要对其历史净值信息、历史涨跌等信息进行充分了解再决定是否购买,以下通过简单的分析看下当下某支基金是否值得购买。

2.1定义抓取函数

# 这里通过天天基金网的数据接口,通过输入基金代码、查询的起始时间获取基金数据
# 抓取网页
def get_url(url, params=None, proxies=None):rsp = requests.get(url, params=params, proxies=proxies)rsp.raise_for_status()return rsp.text
# 从网页抓取数据
def get_fund_data(code,per=10,sdate='',edate='',proxies=None):url = 'http://fund.eastmoney.com/f10/F10DataApi.aspx'params = {'type': 'lsjz', 'code': code, 'page':1,'per': per, 'sdate': sdate, 'edate': edate}html = get_url(url, params, proxies)soup = BeautifulSoup(html, 'html.parser')# 获取总页数pattern=re.compile(r'pages:(.*),')result=re.search(pattern,html).group(1)pages=int(result)# 获取表头heads = []for head in soup.findAll("th"):heads.append(head.contents[0])# 数据存取列表records = []# 从第1页开始抓取所有页面数据page=1while page<=pages:params = {'type': 'lsjz', 'code': code, 'page':page,'per': per, 'sdate': sdate, 'edate': edate}html = get_url(url, params, proxies)soup = BeautifulSoup(html, 'html.parser')# 获取数据for row in soup.findAll("tbody")[0].findAll("tr"):row_records = []for record in row.findAll('td'):val = record.contents# 处理空值if val == []:row_records.append(np.nan)else:row_records.append(val[0])# 记录数据records.append(row_records)# 下一页page=page+1# 数据整理到dataframenp_records = np.array(records)data= pd.DataFrame()for col,col_name in enumerate(heads):data[col_name] = np_records[:,col]return data

2.2获取基金净值信息

#这里提取招商中证白酒基金作分析
found_code='161725'
start_date='2015-01-01'
end_date='2020-12-22'
增长率基准=0
if __name__ == "__main__":data=get_fund_data(found_code,per=49,sdate=start_date,edate=end_date)

2.3 查看数据字段和数据内容

data.info()

data.head()

  • 可以看到主要字段是日期、单位净值、累计净值和日增长率,这些都是后面分析的重要指标
  • 这里我们取了5年多的数据,差不多有一千三百多条数据,扣除节假日,数据量基本是对的,后续可通过查看某年或某月的数据进行验证。同时导出来的数据不存在缺失值,数据质量较好。

2.4历史净值数据可视化分析

# 修改数据类型
data['净值日期']=pd.to_datetime(data['净值日期'],format='%Y/%m/%d')
data['单位净值']= data['单位净值'].astype(float)
data['累计净值']=data['累计净值'].astype(float)
data['日增长率']=data['日增长率'].str.strip('%').astype(float)
# data['日增长率']=data['日增长率'].astype(float) #上面那句出错的情况用这一句转化,格式问题
data['基准值']=增长率基准
# 按照日期升序排序并重建索引
data=data.sort_values(by='净值日期',axis=0,ascending=True).reset_index(drop=True)# 获取净值日期、单位净值、累计净值、日增长率等数据并
net_value_date = data['净值日期']
net_asset_value = data['单位净值']
accumulative_net_value=data['累计净值']
daily_growth_rate = data['日增长率']
daily_jizhun=data['基准值']# 作基金净值图
fig = plt.figure(figsize=(16,10),dpi=240)
#坐标轴1
ax1 = fig.add_subplot(211)
ax1.plot(net_value_date,net_asset_value,label='基金净值')
ax1.plot(net_value_date,accumulative_net_value,label='累计净值')
ax1.set_ylabel('净值数据')
ax1.set_xlabel('日期')
plt.legend(loc='upper left')
#坐标轴2
ax2 = fig.add_subplot(212)
ax2.plot(net_value_date,daily_growth_rate,'r',label='日增长率')
ax2.plot(net_value_date,daily_jizhun,'b',label='增长率基准值')
ax2.set_ylabel('日增长率(%)')
plt.legend(loc='upper right')
plt.title('基金净值数据')
plt.show()

  • 从整体趋势上看,该基金自成立后累计净值呈现的是向上走的趋势,中间也有过几次分红的情况,因此这是一支盈利水平较为不错的基金,从长期看,该基金有比较大的概率可以盈利。同时目前净值属于历史最高水平,如果进场遇到回调,可能导致资金被套住,应该注意风险把控。
  • 从日增长率上看,该基金增长率整体波动范围不大,较为稳定。

2.5查看每年增长率正负的天数

2.5.1增加“年”字段

data1=data.iloc[:,0:4] # 这里提取后面分析需要用到的字段
data1['年']=data1['净值日期'].dt.year # 增加“年”字段

2.5.2正增长和负增长的数量及年度增长平均值

# 获取正增长年月和负增长年月数据
data1_inc=data1[data1['日增长率']>0]
data1_des=data1[data1['日增长率']<0]
data1_g_inc=data1_inc.groupby('年',as_index=False).agg({'日增长率':'count'}).rename(columns\={'日增长率':'正增长数量'})
data1_g_des=data1_des.groupby('年',as_index=False).agg({'日增长率':'count'}).rename(\columns={'日增长率':'负增长数量'})
data_g=pd.merge(data1_g_inc,data1_g_des,on='年',how='left')
# 转化百分比函数
def baifenbi(x):return ('%.2f%%'%(x*100))
data_g['正增长占比']=(data_g['正增长数量']/(data_g['正增长数量']+data_g['负增长数量']))
data_g['正增长占比']=data_g['正增长占比'].apply(baifenbi)
data_g
计算每一年的平均增长率
data_year_rate=data1.groupby('年',as_index=False).agg({'日增长率':'mean'}).rename(columns={'日增长率':'日增长率均值'})
data_year_rate.head(6)


  • 通过分析15年到20年的数据可知,除了18年股市整体大跌之外。其他年份日增长率为正的天数都是比负的多;再通过分析当年日增长率均值可看出,除了15年和18年日增长率均值为负,其他年份的均值均为正且绝对值相对来说比15年和18年的要大。因此如果长期持有的话,该基金还是能够有较大的盈利效应。

说明:这里只是利用python做一个简单的数据分析,具体选择基金的时候还需要注意到其他方面的问题。

利用python进行数据分析~基金分析相关推荐

  1. java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析

    引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...

  2. python 数据分析学什么-利用Python做数据分析 需要学习哪些知识

    根据调查结果,十大最常用的数据工具中有八个来自或利用Python.Python广泛应用于所有数据科学领域,包括数据分析.机器学习.深度学习和数据可视化.不过你知道如何利用Python做数据分析吗?需要 ...

  3. python数据分析视频网盘-利用Python进行数据分析视频教程云盘下载

    利用Python进行数据分析视频教程 内容简介 本视频讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.同时,它也是利用Python进行科学计算的实用指南(专门针对数据密 ...

  4. 【赠书】pandas创始人手把手教你利用Python进行数据分析

    周末就要到了,本次给大家赠送5本Python技术书籍,这次赠送的书籍是<利用Python进行数据分析>. 这是一本什么样的书 Python是目前数据科学领域的王者语言,众多科学家.工程师. ...

  5. 用python做数据分析pdf_利用python进行数据分析pdf

    利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...

  6. 利用python进行数据分析之准备工作(1)

    目录 一.简介 二.重要的python库 1.numpy库 2.pandas 3.matplotlib 4.IPython 5.Scipy 三.python环境安装和数据分析前的数据准备 一.简介 什 ...

  7. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)

    原博文 2016-06-17 23:21 − 以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频 ...

  8. 利用python进行数据分析——第十四章_数据分析案例

    文章目录 本章中的数据文件可从下面的github仓库中下载 利用python进行数据分析(第二版) 一.从Bitli获取 1.USA.gov数据 1.1纯python时区计数 1.2使用pandas进 ...

  9. 利用python进行数据分析——第13章 python建模库介绍

    文章目录 一.pandas与建模代码的结合 二.使用patsy创建模型描述 2.1Patsy公式中的数据转换 2.2分类数据与Patsy 三.statsmodels介绍 3.1评估线性模型 3.2评估 ...

  10. 数据基础---《利用Python进行数据分析·第2版》第8章 数据规整:聚合、合并和重塑

    之前自己对于numpy和pandas是要用的时候东学一点西一点,直到看到<利用Python进行数据分析·第2版>,觉得只看这一篇就够了.非常感谢原博主的翻译和分享. 在许多应用中,数据可能 ...

最新文章

  1. FASTQ! BAM! VCF
  2. MAUI中Maui.Graphics.Controls绘制控件
  3. binlog日志_MySQL三大日志binlog、redo log和undo log
  4. java学习(143):file方法类实现
  5. ACM 2018 Fellow名单公布:李飞飞等多位华人入选,无国内成员
  6. 傲游浏览器语言怎么切换 傲游浏览器语言切换方法简述
  7. wsdl可以访问单但是调不通_Dubbo 一些你不一定知道但是很好用的功能
  8. fat32转ntfs工具无损数据安全转换_干货真香! 无损制作UD三分区教程,新手小白的福利来了...
  9. C# 输入选择文件夹
  10. 关于Oracle分区的一篇文章
  11. Java8 Collectors.toMap的key重复
  12. 人民币大写金额转换为数字
  13. mapper中的 大于 小于 等于 符号的 转义使用
  14. 复制文件服务器启动,本地电脑与服务器之间如何远程复制粘贴文件呢?
  15. 零基础学大数据分析现实吗
  16. openstack的kvm win10镜像制作
  17. FTPS“严重错误: gnutls_handshake: A TLS fatal alert has been received.”
  18. [P3975][TJOI2015]弦论(后缀数组)
  19. Viper的使用方法
  20. 理解 B 树、B+ 树特点及使用场景

热门文章

  1. yate--sip server的学习过程
  2. STM32——EMWIN 字体(二十)
  3. 线性代数学习笔记——第六讲——矩阵的转置
  4. GEO、TCGA数据下载慢 下载中断解决办法
  5. C51简介及Keil的使用
  6. centos设置自动开关机
  7. python输出数字三角形_python 数字三角形
  8. hadoop大数据处理平台与案例
  9. 学习java兴趣之作模仿原神抽卡模块。希望哥、姐指点一下以下是代码;
  10. 1055 集体照(JAVA)