金融数据挖掘—科学计算语言—基础篇5
一、Python基础
二、Numpy科学计算包
三、Pandas数据分析包
四、图形绘制
五、数据源处理
(一)网络数据源
Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,便于用pandas/NumPy/Matplotlib进行数据分析和可视化。从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x。
练习
import tushare as ts
#(1)
pro=ts.pro_api("d80a01f7ee178ec6105b1dca49e4adcebd8043329dab055e74b5297c") #设置初始化接口
basic=pro.stock_basic() #获取股票基本信息
basic #显示
basic.to_csv("股票基本信息.csv") #以csv格式保存
#(2)
#方法1:
ts.get_today_all()
#方法2:
pro.daily(ts_code="000001.SZ,000031.SZ",start_date="20200101",end_date="20220421")
#(3)
ts.get_realtime_quotes("hs300")
(二)网页爬虫
(.?) # 非贪婪匹配1 文本A(.?)文本B # 用于获取文本A和文本B之间的内容
.? # 非贪婪匹配2 文本A.?文本B # 用于跨越文本A和文本B之间的内容
练习1.获取百度新闻网页的源代码
import requests
u="http://news.baidu.com/"
s={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50"}
#s以字典形式,User-Agent是键,值是用户代理
res=requests.get(u,headers=s).text
print(res)
练习2.通过正则表达式提取“Hello 123 world 456 Python基础135”中的数字
练习3.
s1='<p class="c-author"><img***>央视网新闻 2019年04月13日 13:33</p>'
r1='<p class="c-author">(.*?)</p>'
re.findall(r1,s1)[0].replace("<img***>","").replace(" ","") #[0]代表提取列表的首个元素
练习4.
#(1)
s='''<h3 class="c-title">
<a href="https://baijiahao.baidu.com/s?id=1631161702623128831&wfr=spider&for=pc"
data-click="{
一堆我们不关心的英文
}"
target="_blank"
>
<em>阿里巴巴</em>代码竞赛现全球首位AI评委 能为代码质量打分
</a>'''
r='<h3 class="c-title">.*?<a href="(.*?)"'
re.findall(r,s,re.S)[0] #re.findall(r,s,re.S获取的是列表形式
#(2)
r2='<h3 class="c-title">.*?<em>(.*?)</a>'
re.findall(r2,s,re.S)[0].replace("</em>","").replace("\n","").replace(" ","")
练习5.
import pandas_datareader.wb as worldbank
import matplotlib.pyplot as plt
#(1)
countries=worldbank.get_countries()
countries
#(2)
countries[countries.name=="China"]
#(3)
data=worldbank.download(indicator="NY.GNP.PCAP.KD",country=["KOR","MX","CHN"],start=2012,end=2022)
data
data1=data.unstack()
data1
data2=data.unstack(level=0)
data2
#(4)
plt.rcParams["font.size"]=15
plt.figure(figsize=(10,6))
plt.plot(data2["NY.GNP.PCAP.KD","China"],"r-")
plt.plot(data2["NY.GNP.PCAP.KD","Korea, Rep."],"b-*")
plt.plot(data2["NY.GNP.PCAP.KD","Mexico"],"g--")
plt.legend(["CHN","HOR","MX"])