1 前言
2022年1月末,正值年前,股票市场持续大幅下跌,与之相应的基金市场也出现了近一周的持续跌势。作为一个资深的投资者,我承认自己曾是一名“韭菜”,在2021年12月初购买了中欧医疗健康混合C基金。这只基金由医疗板块的佼佼者葛兰担任基金经理。尽管我听闻葛兰是医疗板块最杰出的基金经理之一,而医疗行业又是民生大计,当时我对这次投资有着极高的期望,期待着获得可观的收益。
然而,我购买这只基金后,却经历了一个月的持续下跌,导致我的投资亏损接近15%。为了改变这一局面,我不断学习有关基金的知识,希望通过数据分析的方法来量化我的购买决策,以科学的方式获取更多的收益。
2 数据采集/清洗
数据来源与所需数据 为了进行准确的数据分析,我们将从天天基金网获取必要的数据。以下是我们需要收集的数据:
- 中欧医疗健康混合C基金的历史净值和日涨幅数据。
- 同类型基金(医疗行业)的历史净值均值和日涨幅数据。
- 沪深300指数基金的历史净值和日涨幅数据。
- 中欧医疗健康混合C基金的用户评论数据。
针对中欧医疗健康混合C的历史净值以及日涨幅、同类型基金(医疗)的历史净值的均值以及日涨幅、沪深300指数基金历史净值以及日涨幅数据利用Python的requests库对天天基金网进行爬取。点击“基金档案”并搜索“中欧医疗健康混合C”可以看到基金净值的表格,网站截图如下所示:
并且通过天天基金网的板块检索选择与中欧医疗相似的七只基金,基金代码分别是007613、001563、003581、005043、007111、005044、110023。具体操作如下图所示:
2.1 数据采集
#导入相应的包
import requests
import re
import json
import pandas as pd
#爬取中欧医疗数据
df_list = []
for i in range(1,65):
url = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery18304159015262110892_1643544350831&fundCode=003096&pageIndex={}&pageSize=20&startDate=&endDate=&_=1643545365216".format(i)
headers = {
"Referer":"http://fundf10.eastmoney.com/jjjz_003096.html",
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0',
}
resp = requests.get(url,headers=headers)
html = resp.text
res = re.findall('\((.*?)\)',html)
datas = json.loads(res[0])["Data"]["LSJZList"]
df = pd.DataFrame(datas)
df_list.append(df)
df_data = pd.concat(df_list)
df_data.to_csv('中欧医疗健康混合C (003096).csv',index=False,encoding="utf_8_sig")
#爬取同医疗类型基金数据并计算净值均值方便以后对比
same_type = ["007613","001563","003581","005043","007111","005044","110023"]
pages = [25,64,62,50,34,50,64]
df_list = []
for index in range(1,65):
lis = []
for i in range(0,7):
if pages[i] >= index:
lis.append(same_type[i])
else:
pass
df1 = []
for i in lis:
url = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery18304159015262110892_1643544350831&fundCode={}&pageIndex={}&pageSize=20&startDate=&endDate=&_=1643545365216".format(i,index)
headers = {
"Referer":"http://fundf10.eastmoney.com/jjjz_{}.html".format(i),
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0',
}
resp = requests.get(url,headers=headers)
html = resp.text
res = re.findall('\((.*?)\)',html)
datas = json.loads(res[0])["Data"]["LSJZList"]
df = pd.DataFrame(datas)
df1.append(df)
df_new = pd.concat(df1,keys=lis)
df_list.append(df_new)
df_data = pd.concat(df_list)
df_data.to_csv('同类基金.csv',index=True,encoding=&#