1、Python金融数据挖掘 高等教育出版第六章第六章数据源数据源处理处理【知识框架图】【知识框架图】数据源数据源与处理与处理网络数据源网络数据源Pandas Pandas 内置内置接口接口Seaborn Seaborn 内置内置接口接口网络爬虫网络爬虫正则表达式正则表达式urlliburllib模块模块扩展文件访问扩展文件访问文本文件访问文本文件访问AccessAccess数据库文件数据库文件访问访问目 录目 录Contents第一节第一节网络数据源网络数据源第二节第二节网页爬虫网页爬虫第三节第三节文件数据资源文件数据资源第四节第四节案例案例本章本章学习目标学习目标1用Python扩展包内置网络
2、数据源获取函数搜集金融数据的方法。2利用Pandas内置函数读取文本文件和Access数据库文件的方法。3网络爬虫的基本应用。需求背景需求背景数据使用现状:数据规模急剧膨胀,数据类型显著增多,数据结构日趋复杂。常见需求场景:Python扩展包中内建的网络数据源获取功能来搜集数据 Pandas读写文本文件 Access数据库mdb文件访问网络数据源网络数据源l本节以Pandas为例介绍网络数据源访问功能。l旧版Pandas是通过pandas.io.data子模块获取网络数据源。l新版Pandas已将该子模块独立成pandas_datareader包,须单独安装。l安装命令:安装命令:pip in
3、stall pandas-datareaderlpandas_datareader目前可访问的网络数据服务商主要包括:Yahoo!Finance(雅虎金融)、Google Finance(谷歌金融)、Enigma(Enigma公共数据搜索的提供商)、World Bank(世界银行)、OECD(经合组织)、Eurostat(欧盟统计局)、Nasdaq Trader symbol definitions(纳斯达克)等。l【例 6-1】是一个利用yahoo财经数据源查询股票的程序:第9行用于显示输入提示框以提示用户输入股票代码,其格式为“交易市场的正式股票代码.市场名称缩写”,如000001.ss表
4、示上海证券交易所的指数代码。第12行调用get_data_yahoo()方法获取指定的股票交易数据,其返回结果存放到DataFrame对象stock_info中l输出结果:l【例 6-2】以titanic.csv为例说明Seaborn数据源的使用方法,并进行了统计分析。lSeaborn数据源也是数据分析的重要数据源,通过load_dataset()方法可以访问以下各类数据文件:anscombe.csv、attention.csv、brain_networks.csv、car_crashes.csv、diamonds.csv、dots.csv、exercise.csv、flights.csv、f
5、mri.csv、gammas.csv、iris.csv、mpg.csv、planets.csv、tips.csv以及titanic.csv等。l例如,load_dataset(titanic.csv),就可以获取泰坦尼克号的乘客信息,其中包括他/她们的性别、舱位、票价、是否获救等字段。第15行语句将titanic数据库载入到PasTit中。随后的语句按照乘客性别和船票价格对乘客的生存情况进行了分析。乘客中女性生还率远高于男性;图表显示低票价乘客在遇难者和生还者中都占据较大比例,但同时显示低票价乘客的遇难者比例高于生还者。l输出结果:第15行语句将titanic数据库载入到PasTit中。随后的
6、语句按照乘客性别和船票价格对乘客的生存情况进行了分析。乘客中女性生还率远高于男性;图 6-2显示低票价乘客在遇难者和生还者中都占据较大比例,但同时显示低票价乘客的遇难者比例高于生还者。图 6-2lTusharel除了上述两种数据源,互联网还有一些收费或者免费的数据资源,读者可以利用搜索引擎以“网络数据接口”为关键字进行查询了解这些数据源的获取方法。l特别值得一提的是,目前国内Tushare金融大数据社区https:/tushare.pro/为注册用户提供了Python访问接口。用户可以通过该接口访问沪深股票行情数据、上市公司财务数据、期货、外汇、行业经济、宏观经济、新闻资讯(包括新闻联播文字稿
7、)等海量金融聚合大数据。为Python金融数据挖掘的学习者、研究者和从业者提供了一个极具价值的数据源。网页爬虫网页爬虫l网页爬虫(又被称为网页蜘蛛、网络机器人)是一种按照一定的规则自动抓取互联网信息的程序或脚本。l它的基本设计思想是从某一初始页面开始分析网页内容,如果是符合预设目标的内容则搜集存储;如果是url链接则继续访问该链接地址的内容。l网页爬虫起始页面访问开始,依次经过内容分析、数据采集、进入新链接等阶段,不断循环直到满足终止条件时才停止搜索。l【例 6-3】直接使用Python内置的urllib包和re包,对微软“Bing搜索”首页页面上所有超级链接进行搜索:第6行将http:/站点
8、地址赋给target变量。第8行将target所代表的网址传递给urllib.request.urlopen(target).read()进行读取访问操作,并且将读取到的内容放入content。第10行按照utf-8编码格式对content内容进行解码。第12-14行使用正则表达式(规则)提取content中所有的网址内容。l输出结果(部分):l正则表达式正则表达式l正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。l简单地讲,正则表达式就是构成或者分解字符串的规则。正则表达
9、式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。l很多文本编辑器通常利用正则表达式实现检索、替换那些符合某个模式的文本。l【例 6-4】说明了正则表达式的基本作用。假设网页中有包含0086-20-37215850#这是一个带国际长途区号的电话号码文本内容。利用Python的re正则表达式包就可以提取这串文本中的电话号码,并删除多余的符号和文字。第一个cell删除phone字符串中#以后的全部内容。第二个cell第2行使用D表示所有的非数字字符,该语句的作用将phone中剩下的非数字符号全部删除。正则表达式的主要作用是规定各种字符的表达、结合以及逻辑关系。lPython的re包中常用
10、的正则表达式元字符和语法如表 6-1所示。l正则表达式的应用非常灵活,建议读者参阅更多书籍,如正则表达式30分钟入门教程等相关教程。l在Python开发环境中除了自带的urllib之外,常见的第三方爬虫框架模块还包括Scrapy和Pyspider。读者可以参考相应的官方网站学习这些框架的使用方法:http:/www.scrapy.org/http:/docs.pyspider.org/en/latest/l此外,目前也有一些比较实用的网络爬虫工具,例如图 6 3所示的八爪鱼爬虫软件。这一类软件往往预制了主要网站的爬虫模板,用户只要填写期望搜集内容的关键字,爬虫工具就可以执行爬取任务,其爬取结果
11、以Excel或者CSV格式保存。读者可以访问http:/ 0.23.4 版本可以直接调用其内置方法处理的文件格式包括:Picking(Pandas对象文件)Flat File(包括csv)Clipboard(剪贴板)ExcelJSONHTML、HDFStore、Feather、Parquet、SAS、SQL、Google BigQuery及STATA等。文本文件文本文件lPython文件读写操作的基本流程是:打开文件获得文件对象;将文件对象赋给一个变量;通过这个变量对文件内的数据进行读写操作。l【例 6-5】以对存放2维数据的txt文本与NumPy数据对象进行读写操作为例来说明文件访问方法。l
12、读入的文件Exp04_file01.txt内容如图 6-4左侧所示。写入的文件Exp04_file01_out.txt内容如图 6-4右侧所示。图 6-4 文件读取与写入l方法一:读入文件Exp04_file01.txtl方法二:读入文件Exp04_file01.txtl利用读入的数据做数学运算。l将NewArr保存到新文件第2行通过调用open函数打开文本文件,open函数的第1个参数用于指定被打开的文件路径,第2个参数为文件的打开方式控制符。第7-9行np.savetxt()函数接收的参数包括:写入数据的文件名Exp04_file01_out.txt;写往该文件的数据对象是NewArr;每
13、一行的写入格式是由逗号分隔delimiter=,的两个浮点数fmt=%f,%f,指定换行符newline=n;给文件加上文件头header=Xaxis Yaxis和文件脚footer=Made in GDUF。为了正确显示输出文件的换行效果,建议使用UltraEdit、Notepad+等文本编辑软件查看。lOpen函数的打开方式控制符有多种形式,如表 6 2所示。数据库文件数据库文件l利用Python的pypyodbc包可以方便地访问数据库,使用前须执行pip install pypyodbc命令安装pypyodbc包。l为确保Python在访问Access数据库时正常加载Access驱动程序
14、,Access数据库软件与Access驱动程序的版本必须一致,即要么都是32位版本,要么都是64位版本。请参阅页面https:/ 6-5所示。图 6-5 Access工资数据库l【例 6-6】以访问Access数据库为例演示数据库访问的操作方法。第4行构造了一个数据库连接字符串str,在第6行将连接字符串作为pypyodbc.win_connect_mdb()函数的参数,db变量是打开的数据库对象。Curser游标可以执行SQL语句,本例执行select*from t1语句,从数据表t1中查询所有记录。l读取所有记录第2行则使用curser.fetchall()取出所有数据放入result中,
15、后续语句分别输出result中的所有记录和每条记录中索引号(从0开始计数)为2的字段值,即EmpName的值。l【例 6-7】是实现数据库增、删、改、查等访问操作的Python程序(以工资数据库中的数据表t1为例)。l程序见右显示:l说明见下面黄色框里面的内容:为了便于代码复用,In13:的22-55行将增、删、改、查基本操作封装成函数以便在main()函数中调用。使用Python异常处理机制try捕捉数据库访问期间可能出现的异常。l程序继续:l程序继续:l程序继续:l输出结果(部分):案例案例l【例 6-8】利用pandas_datareader获取世界银行网站提供的中国、韩国、墨西哥等三国
16、的人均GDP数据,并且作图对比。l输出结果(部分):第23-24行在download函数的参数中分别指定了读取的数据指标、国别和起止年份。使用Pandas存放数据,采用Matplotlib绘制图形(如图6-6所示)。图 6 6 Pandas_datareaders读取GDP信息l通过pandas_datareader.wb访问世界银行的数据接口,其使用细节请参阅:lhttps:/pandas-datareader.readthedocs.io/en/latest/readers/world-bank.html?highlight=pandas_datareader.wb本章小结本章小结lPan
17、das和Seaborn包内置的网络数据获取方法可以方便快捷地读取网络数据源的数据,众多金融数据源提供的丰富金融数据资源为金融数据挖掘提供了有力支持。l利用urllib和正则表达式技术可以开发实用的爬虫程序来搜集形式多样、内容丰富的数据。lPandas提供的多种文件资源访问方法为数据挖掘程序设计提供了诸多便利。重要概念重要概念1.网络数据访问接口2.网页爬虫3.正则表达式4.数据库访问接口复习思考题复习思考题1.使用Pandas_datareader获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。2.使用Pandas_datareader获取世界银行数据库中美国(USA)、瑞典(SWE)、瑞典(CHE)三个国家近20年的NY.GDP.PCAP.KD数据,作图分析。3.对于泰坦尼克的数据集,试分析幸存与否与独立登船相关(alone数据列),进一步地,可以分析与年龄段(age数据列)是否相关。4.下载并安装八爪鱼软件,尝试进行网页内容爬取。谢谢观赏谢谢观赏 下节课见下节课见