解密金融数据(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-30 23:18:56

点击下载

作者:(美)贾斯汀·保利

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

解密金融数据

解密金融数据试读:

前言

如果你在书店打开了这本书,正在犹豫这本书是否适合你,那么让我来帮你分析:

·本书能帮助你将来自于彭博和IHS Markit的金融数据与自己的观点结合起来进行分析,并用Microsoft Excel制作专业的分析报告,而不需要进行编程或者IT部门的协助。

·本书会一步一步地指导你快速制作出专业化的市场信息报告,其中包括历史财务信息、比较分析和相对价值。

·对于资产组合经理来说,本书展示了如何制作一份专业的资产组合总结报告,其中对资产组合的业绩、成长性、风险调整后收益和组成等进行了高度概括。

·如果你是程序员,或者可能成为程序员,本书还介绍了如何使用C#实现相同的功能。

·我并非学术人员,所以关注“实战”。你需要的基础知识仅仅是金融知识和Excel知识。你不需要有任何编程、VBA或高等数学基础。

我一直喜欢计算机科学,所以不奇怪我的第一份工作是在Wachovia(现为Wells Fargo)公司做程序员。不过在我的职业生涯早期,我就意识到了有些重要的东西会指引我走向完全不同的职业道路。我认识到我运用科技获取和分析数据的能力在IT部门以外的其他领域(例如金融领域)能发挥更大的作用。

做了三年程序员之后,我转入银行研究部门,用我的计算机技术挖掘财富市场上的海量信息,并与内部消息相结合。这些技术使我比其他分析师有更大的优势,我成为苏格兰皇家银行的策略总监,之后我又成为位于纽约的Brigade Capital Management公司的高级结构化信贷分析师。在Brigade公司,我用计算机技术对投资进行估值,并体现了很大优势。

在我的职业生涯中,我不时地会教许多同事一些有用的计算机技术。在教他们的过程中,我了解到即使你不懂编程,也能够深入彭博屏幕的背后做很多分析工作。你需要的基础知识不过是金融行业雇佣的大多数人已经掌握的知识、分析思维和使用Excel的经验(当然,还需要本书)。本书还照顾到程序员的需求,本书没有费时费力地讲解API文档,而是用许多有用的C#案例展示如何从彭博和IHS Markit获取市场数据,用Math.Net开源库进行金融分析,用SQL Server Reporting Services(SSRS)自动生成专业化的报告。

我写本书的目的就是教更多人使用这些技术,帮助人们使自己的简历在厚厚的简历堆中脱颖而出。本书排版约定本书中的不少代码都被拆成几行写,这是由于印刷页面的限制。如果你在系统中运行代码就无须分行。

斜体字(Italic)

表示新的术语、链接、电子邮箱地址、文件名和文件扩展名。

等宽字体(Constant width)

用于程序清单,也用于在段落中引用程序元素,例如变量名、函数名、数据库、数据类型、环境变量、程序语句和关键词。

加粗等宽字体(Constant width bold)

表示应该由用户输入的命令或者其他文字信息。

斜体的等宽字体(Constant width italic)

表示此处应该替换为由用户提供的数值,或者根据上下文确定的数值。这个图标表示一个通用的注释。这个图标表示警告。使用代码示例

可以在http://bit.ly/unlockFD_examples上下载辅助资料(代码示例、练习等)

本书的目标是切实好用,帮助你完成工作。原则上,如果本书提供了代码,你就可以在你的程序和文档中使用。除非你要大范围复制代码,否则不用与我们联系要求获得许可。例如,使用本书中的几大段代码不需要许可。售卖O’Reilly出版社的书的案例光盘需要许可。回答问题时,引用本书或本书中的案例不需要许可。在你的产品文档中大量使用本书中的示例代码需要许可。

我们赞赏但不要求注明引用。引用通常包括书名、作者、出版商和ISBN。例如“Unlocking Financial Data by Justin Pauley(O’Reilly).Copyright 2018Justin Pauley,978-1-491-97325-7”。

如果你觉得自己使用代码示例的范围超出公平使用或上述许可的范围,请联系permissions@oreilly.com。Safari在线图书

Safari Books Online针对企业、政府、教育机构和个人提供了不同的购买计划,你可根据实际需求进行选购。

用户可以访问上千种图书、培训视频、学习路径、互动教材和专业的播放列表,这些内容来自超过250个出版商,包括O’Reilly Media、哈佛商业评论、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett和Course Technology等。关于Safari在线图书的更多信息,请访问http://oreilly.com/safari。联系方式

美国:

O’Reilly Media,Inc.

1005Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们有个关于本书的网页,上面有勘误表,示例和所有的附加信息。可以通过以下链接访问:http://bit.ly/unlockingFinancialData_1e。

关于本书的评论和技术问题,请发邮件给bookquestions@oreilly.com。

关于本书的更多信息,如教程、会议、新闻,请参见网站:

http://www.oreilly.com

http://www.oreilly.com.cn致谢

本书献给我的妻子Emily Pauley。特别感谢对本书贡献了宝贵时间和支持的人;没有你们我无法完成本书(排名不分先后):Alex Belgrade、Scott Moore、Jeana Curro、Dan Bleicher、Matt Perkal、Sumit Sablok和Tom O’Shea。第1章简介

金融分析师的工作简单说就是找出有价证券的价值,有价证券包括股票、贷款、债券,甚至房地产贷款的债券化投资组合等。换句话说,金融分析师需要确定他买卖一种有价证券的价格。确定价格没有统一的方法、模型或者公式,因为每笔投资都是不同的。然而,估值过程通常包括以下两个重要步骤:

·分析师需要详细、彻底地了解每笔潜在投资,分辨出各种投资方式的细微差别,以及赚钱和赔钱的概率。

·风险调整后的收益结果与其他的潜在投资进行比较,以确定给定投资的估值到底是高了、低了,还是合理。

不是简单地对每个有价证券进行一次估值;投资必须进行持续估值。在经济高度全球化的今天,投资风险持续变化,大宗商品价格变动、政府监管措施、自然灾害、消费者敏感程度以及其他数不清的因素都可能对投资风险产生影响。同理,即使有些因素并没有直接影响一个有价证券,但是它们可能使一项投资与其他投资相比看上去更便宜或者更昂贵。

对有价证券进行估值的过程是复杂的,耗费大量时间,还需要分析大量金融数据。大部分金融数据是由发行有价证券的公司或者相关银行提供的,因此并不总是能提供完整、准确的情况。更重要的是,大部分公司都有海量金融数据,这些数据虽然能帮助估值,但是技术部门以外的人不知道如何获取数据,甚至不知道数据的存在。

本书将带你超越彭博终端,解密彭博数据的真实潜力。本书仅仅使用Excel(而不用任何编程技术)展示如何获取彭博屏幕背后的数据,按照你的意愿组织数据,并服务于你对投资的决策考虑。本书还介绍如何从IHS Markit获取金融信息,IHS Markit是企业债券和贷款数据(特别是定价)的最佳数据源之一。许多银行、资管经理、对冲基金订购了Markit数据,但是大部分数据都用于支撑内部或后台系统,却很少到达分析师手中。

除了展示如何获取金融信息外,本书第二部分介绍如何进行数据分析。该部分教你利用金融数据,通过分析贷款、保险和再融资的价格变动趋势,确定相对价值,测量投资组合风险,计算有价证券之间的相关性并研判市场趋势。

最后,我们将把数据、分析与你的观点结合起来,根据个人意愿创建定制报告。与千篇一律的报告不同,你的报告会将一个公司的业绩与你自己设定的对等组、你认为有价值的对应基准指数或者你认为有价值的金融字段和计算进行比较。

尽管这些内容(数据获取、分析和报告)都可以用简单的方法自动实现、维护和更新,不需要进行编程,不过本书还是为程序员或者潜在程序员提供了使用C#编程语言的方法。数据和信息在所有的行业都是宝贵的,在金融行业尤甚,程序开发人员写代码、查询数据库的能力可以使他比分析师更有价值。本书中有很多案例,告诉你如何获取金融信息,对大型数据集进行不同种类的简单金融分析,并使用SSRS(不用SQL Server)创建金融报告。如果你对介于Excel和C#之间的方法感兴趣,我们还介绍了如何使用Microsoft Access数据库。

本章具体介绍本书的各个部分,特别是理念和目标。并根据投资类型(股票、债券和贷款),分别介绍如何使用本书。1.1 概览

本书分为三大部分:获取金融数据、金融数据分析、创建金融报告。每一部分都有明确且实用的目标。1.1.1 第一部分:获取金融数据

第一部分(从第2章到第4章)介绍如何用彭博(Bloomberg)和Markit获取、存储金融数据,如股票、指数、债券和银行贷款等。从彭博和Markit系统中获取这些信息,你将可以:

·获取彭博屏幕上看不到的额外信息。

·创建包含企业数据的表,以便一起比较多个公司、债券或贷款。

·在大部分可交易企业债券和贷款市场中查询每日价格和机构信息。

·根据个人偏好,仅显示重要的内容。

·使用其他来源,重写错误或缺失信息。

·根据个人观点,对公司进行分类,建立合适的对等组(peer groups)。

·把彭博和Markit数据与你的计算和观点相结合。

学完该部分后,你能灵活分解和运用金融数据,灵活性远超使用彭博终端。此外,第3章的技巧能保证你用易于维护的方式存储数据,并与其他数据集相结合。1.1.2 第二部分:金融数据分析

第二部分(从第5章到第8章)将第一部分收集到的金融数据放入具体的背景环境中进行金融分析。第二部分先将某个有价证券与对等有价证券进行比较,然后检测投资组合的风险水平,最后与更广阔的市场趋势相结合。使用该部分介绍的技术,你将可以:

·用相关性和回归确定两个有价证券(或指数)之间的关系。

·将各个有价证券的业绩与有类似风险和收益性质的有价证券对等组进行比较。

·用加权Z值(Z-score)对有价证券的相对业绩进行排序。

·通过计算方差、标准差和夏普比率(Sharpe ratio),测量投资组合风险调整后的收益。

·把投资组合“划分”成几个组,以关注看不见的内容和趋势。

·用不同的标准建立投资组合门槛,以关注风险。

·用Markit数据发现对价格、新发放息差和再融资有意义的趋势。

学完该部分后,你能把第一部分介绍的数据库加以应用,进行观点、风险和趋势分析。此外,第6章中描述的方法将告诉你如何保存历史,发现用第一部分的知识获取到的数据库存在的特殊问题。1.1.3 第三部分:创建金融报告

第三部分(第9章和第10章)结合了第一部分和第二部分的内容,教你如何对各个公司和投资组合创建分析报告。在该部分中,我们将学习把前面的章节中用到的数据和分析,按照你的意愿进行展示并绘制图表。该部分将展示如何:

·为每个公司创建一份两页长的分析报告(活页,tear sheet),其中内容包括重要的历史金融数据、自定义备注、与对等公司的价值比较和分析师研究出来的价格趋势等。

·用一个投资组合或一个指数的历史收益,计算时间加权(几何)投资组合收益、年化投资组合收益、年化投资组合标准差和夏普比率。

·创建一份两页长的投资组合摘要报告,其中包括高度概括的投资组合业绩、增长、风险调整后的收益和投资产品组成。

学完该部分后,你就能从下拉菜单选择一个公司名,然后马上就能创建一个定制专业公司报告,而不用进行编程。此外,你还能针对投资组合的业绩绘制图表,并将其业绩与基准进行风险和收益比较。1.2 金融市场

本书关注三个重要金融市场:股票、企业债券和企业贷款。尽管如此,你可以将在本书中学到的内容直接应用到其他市场,比如结构化产品、市政债券等。1.2.1 股票

本书中的很大篇幅都关注股票市场。本书第一部分展示如何用彭博数据创建一个有基本数据和技术数据(转换成使用单一货币)的表。因为是在Excel里,所以你可以很容易地用自己的输入内容对彭博数据进行补充。例如,通过增加自己的类型列,你可以对相似的公司进行正确的分组,而非依靠传统的行业分类信息(有可能是误导信息)。此外,彭博有海量金融企业数据。本书教你如何找到想寻找的确切信息,而不用对着每个公司数十屏幕的资料狂翻一气。下面仅是部分字段:

·领域、行业、子行业。

·流通股中短期利率所占的比重。

·标准普尔和穆迪评级。

·市值、企业价值、EPS。

·总债务、净债务、总债务/EBITDA。

·股息收益率、十二个月总收益。

·三个月和今年迄今价格变动(%)。

·利息备付、自由现金流(FCF),自由现金流/总债务。

·信用违约交换息差。

·买入/卖出/持有建议。

·毛利、滚动市盈率EBITDA。

·历史金融数据。

本书第二部分教你如何计算两个公司之间或者一个公司与一个对标指数(基准指数)之间的关系(相关性和Beta)。还介绍如何对Excel公司表中每个自定义的分类添加业绩数据中位数。你可以使用业绩数据中位数,将每个公司的业绩与其对等组进行比较。

本书第三部分教你如何设计公司报告,而不是依靠第三方提供的报告。定制报告的优势就是可以使用自己想用的字段、备注和计算。1.2.2 企业贷款(银行贷款、杠杆贷款)

与股票一样,本书第一部分从彭博提取一系列有用的字段,存入Excel(或Access),包括:

·利差、下限、指数。

·到期日。

·穆迪和标准普尔机构评级。

·今年迄今和三个月价格变化。

·贴现差额、收益率。

·下一个提前赎回日、赎回价格。

然而和股票不一样的是,本书第一部分展示如何从IHS Markit获取贷款数据,其中的贷款信息可以说是丰富的。此外,Markit数据涵盖了大部分可交易的贷款,而不是少量数据。每笔贷款的每日贷款价格,结合每笔贷款的机构信息,使我们能够了解整体贷款趋势,例如某个行业的贷款趋势。如下是一些Markit贷款机构数据:

·发行人、行业、机构类型。

·发起人、牵头行、管理行。

·规模、利差、下限、OID。

·CUSIP。

·留置权类型(第一留置权/第二留置权等)。

·不包含借方保护条款的高风险贷款标示(Cov-Lite Flag)。

·穆迪和标准普尔机构评级。

·发行日期、交割日期、到期日期。

在第二部分,贷款分类取决于母公司的分类以及风险和收益性质,例如“Short CCC”代表评级为CCC的短期贷款。根据对等组的中位数对贷款进行排序。除了机构层面的信息和价格,Markit提供本书第二部分用到的再融资信息判断趋势,例如分行业的息差收窄或扩大。1.2.3 企业债券

和股票一样的是,在彭博中有大量企业债券数据可以将其抽取出来放入Excel(或者Access)表。一些字段包括:

·票面利息。

·到期日。

·穆迪和标准普尔机构评级。

·YAS利差和YAS收益率(参见彭博YAS屏幕)。

·今年迄今和三个月价格变化。

·可赎回标示、下一个提前赎回日、下一次赎回价格。

和贷款一样,债券也归到第二部分。每个分类的中位数值结果之后都用作该分类每个债券的基准值。1.3 三种途径

本书的理念有三种不同的实现方法(途径),从技术难度角度说,从易到难的排序是:Excel、Microsoft Access和C#。由于各章的理念相互依存,所以要做好实践。本书会用“途径”专门指明某种方法,便于你找到对应方法。

由于大多数人熟悉Excel,因此本书大部分章节使用Excel作为主要数据处理手段。Microsoft Access途径是建立在Excel途径基础之上的,要先把数据库连接到Excel工作簿,然后在Access数据库中查询数据,这可避免使用复杂的Excel公式。C#途径用代码从第三方系统(彭博和Markit)提取数据,在Microsoft Access中存储数据并分析,使用SSRS生成报告。

每章都会采用三种途径,有两个原因。第一个原因是本书的目标读者不同。使用Excel很多年的金融分析师可能从来没使用过数据库,或者没写过一行代码。而对于程序员来说,有很多获取、操作和存储数据的方法比Excel更直接。第二个原因是鼓励从没有使用过数据库或者没写过代码的人试一试。尽管本书不教授如何查询数据库或者编写程序,你可以结合本书与教授如何查询数据库或者编写程序的书(例如Jennifer Greene和Andrew Stellman写的《Head First C#》(O’Reilly))一起深度学习。此外,初次涉及编程的人员可以使用Excel实例以便更好地理解C#代码。下面列出了每种途径的优缺点。1.3.1 途径1:Microsoft Excel

无论你是分析师、程序员、科学家、会计或者其他职业,只要你和数字打交道,都可能用到Excel。Excel是市场上最强大、灵活、受欢迎的分析程序之一。它除了拥有大量实用函数之外,Excel的界面也适合大众使用。然而,它与Access和C#相比还有一些不足:

·尽管Excel处理几千行数据没问题,但是如果数据量很大,计算效率就不高了。数据的行数或者列数过多可能导致效率下降,甚至宕机。

·Excel公式可能很快就会变得复杂冗长,难以阅读。仅仅进行最基本的运算就可能用到多个内函数和数组函数。

·尽管Excel公式是动态的,但是很难维持。随便插入一列就可能使某些公式出现错误而难以察觉。

·在出问题的时候,动态的长公式难以进行调试。1.3.2 途径2:Microsoft Access

尽管Microsoft Access就是Microsoft的企业版数据库软件SQL Server的简化版,但是几乎所有人都可以不必求助于IT部门就能用上Access。Access是一个很棒的数据库应用,能方便地连接到Excel,导入逗号分隔值(CSV)文件,或者你自己的、长达数百万行的表(最大约2GB)。如果你从来没使用过数据库,也不会觉得Access比Excel更难。和Excel一样,数据存储在类似于Excel工作表的数据库表格里,但是数据库的列更有条理(定义为日期、文本、数字等)。然而,Access用一种很简单的语言分割处理数据,而非使用很长的Excel公式,那种语言被命名为结构化查询语言(Structured Query Language,SQL),既方便使用,又方便读取。你可以用SQL从多个表连接数据,而且可以包括许多与Excel相同的集合函数(平均值、最大值、最小值、标准差等)。查询2017年出版的书籍数量,可用如下简单的查询方式:SELECT COUNT(*) FROM Books WHERE Year(PublicationDate) = 2017

在本书中,用途径2的人需要先用Excel从彭博获取数据,然后把Excel工作表连接到Access再进行查询。能够简便查询数据的能力使Access很强大。然而,Access也有缺点:

·其内置报告函数比Excel弱很多。除了不直观之外,还缺少Excel具备的画图函数。

·Access没有Excel那么灵活。使用Access无法直接在单元格中输入公式,也不能在数据表旁边直接插入图表。

·查询前一行的值可能比想象得更复杂。

·查询结果不像Excel那样容易排格式。

·尽管Access可以容易地连接到Excel表格获取彭博数据,但是它却不能连接到彭博。

·SQL查询尽管可以阅读,但也可能变得冗长复杂。1.3.3 途径3:C#

C#(读音为“C sharp”)是使用Microsoft.NET Framework的一种编程语言。尽管C#函数强大,但也能简单易学。此外,还有Microsoft的Visual Studio集成开发环境(Integrated Development Environment,IDE),这是一种写代码的工具,可以用它创建漂亮的应用。与Access和Excel不同,C#不受表、行、列的限制。它可以从Excel、Access、网站、email、彭博、文本文件或者差不多任何东西里获取数据。C#可以接入无穷多的数学、科学和金融函数。可将数据和计算传送给SSRS,用几行代码就可以产生漂亮的报告,然后转换成PDF或Excel文件。最后,因为C#创建应用,所以可以用它更新数据、创建报告,甚至发送邮件。尽管如此,C#也有其缺点:

·C#需要的前台工作比Excel多。用C#从彭博获取数据需要编写多行代码,而Excel只需要一个简单的公式。

·SSRS是与C#结合使用的报告工具,功能很强大;然而,它没有Excel那么简单灵活。

·在工作电脑上安装C#(.NET)可能需要IT部门协助并获得特殊许可。

·尽管C#是比较简单的编程语言,但是学习来也要经历学习曲线。和其他编程语言一样,C#也有自己的语法和细微差别。

尽管我们鼓励你探索新技术,不过概念比实现更重要;用最适合你、最契合你的实际情况的技术就好了。1.4 线上文件

你可以从O’Reilly出版社的网站上下载全套Excel工作表、Access数据库和C#代码,然后根据具体情况修改使用。这样你就不用全部重新开始。然而,你还是需要明白每个步骤的意义,这样才能不犯错误。而且由于版权问题,本书也不能提供所有数据(特别是Markit的数据),因此有些数据并非真实的。

可以从http://bit.ly/unlockFD_examples下载文件。1.5 本章小结

在最终作出投资决策时,最重要的是分析师的信念。没人能教会你信念,信念来自于多年的经验——挣钱(有时也赔钱)。要知道一些数字是否有意义,或者有些公司的CFO是否确切地回答关于受益的问题,是需要经验的。世界上所有的数据和分析加起来也不能铸成信念,本书的目的是帮你在指端收集更多信息,以支持你铸成信念,发现更多的投资想法。第2章组织金融数据

数据!数据!数据!没有黏土做不了砖。——福尔摩斯

尽管马上就从彭博等来源获取金融数据很有吸引力,先坐下来想一想你打算把数据存在哪里,这样做绝对是“磨刀不误砍柴工”。做个规划或者方案是重要的一步,因为杂乱无章的数据很快就会难以更新,或者容易出错。例如,一个用于追踪学生、教师和课程的Microsoft Excel工作簿或Access数据库。如果每个班的老师都是用姓名作标识,然后老师结婚改了姓,那么与她的名字相关的所有信息都得更新。如果出现一点小状况,就可能出现大问题。如果学校足够大,就可能有两位老师重名,排课和发工资都可能出现问题。

为了解决这个问题,需要把数据存储在所谓的“第三范式”。简而言之,我们要为每套数据创建一个数据库或者一张Excel表(例如学生们一张表、老师们一张表、各个课程一张表等)。这些工作表(worksheet)或表(table)中的列只包含分属于各自实体的属性。这称为“有”(has-a)关系。这样,所有信息和属性就不会重复了。例如,一个教师的全名只会出现在Teacher表中,因为教师“有”姓名。Class表包含关于课程(例如生物、数学等)的信息,不应包含教师姓名列,因为这将导致信息重复。

然而,这就产生了如何把教师分派到课程的问题,因为每个课程“有”教师。当你需要一张表引用另一表中的一个实体(教师、学生等),就要使用主关键字(Primary Key)。主关键字是一个永远不会改变的唯一标识符,例如教师证号码(Teacher ID)或者社保号码,它标示出表中某个独一无二的行。因为唯一标识符永远不会改变,我们可以用它在Class表中作为引用(reference),也称为外关键字(Foreign Key),以引用Teacher表的一个教师。因为Class表用主关键字引用教师,如果教师改名的话,只更新Teacher表就行了。尽管这听起来可能有点复杂,你需要记住不应把同样的数据存储在多个地方。

本章展示如何在Excel和Access中创建这些例表,并带你学习如何正确地存储和获取信息。2.1 途径1:Excel2.1.1 Excel区域与Excel表

Excel是一个很棒、很灵活的工具,因为可以把数据和公式放在工作表中的任何地方。然而,如果不增加一些结构,公式可能就会难以阅读,而且还会产生不易发觉的错误。有人就因为模型中的毛病损失了钱财或丢了工作。避免这些问题的一种方法是将Excel区域(range)转换为Excel表(table)。

在一张Excel工作表中,任何相互连接的单元格群组都是一个Excel区域。Excel区域所受的限制很少;它既可以是一个单元格,也可以是整张工作表。另一方面,Excel表是在Excel区域上增加了列标题,并提供命名引用。例如,如果在Excel工作簿上随便一个位置存放了一个学生表单,那么数学生个数的公式如下所示:=COUNTA(A1:A14)

如果列移动了或者增加了新的行,可能公式就不能查出正确的行数。然而,如果把Excel区域转换成Excel表,命名为“Student”,公式如下所示:=COUNTA(Student[StudentID])

在这种情况下,你可以完全确信表里包括了所有学生。用下面的步骤填入Excel区域,并转换为Excel表:

1.第2行的A至E列分别命名为:StudentID、FirstName、LastName、DateOfBirth和Sex。

2.从第3行到第8行,增加与列标题对应的学生数据。

3.选择第1步和第2步创建的Excel区域中的每一个单元格。

4.在Excel功能区上,在Home键上,选择“Format as Table”(或者按Ctrl+T组合键)。确保在“My table has headers”框上打钩,然后点击OK。

图2-1显示的是几个Excel表,我们用这些表讨论第三范式和存储数据的正确方式。

把Excel区域转换为Excel表,除了增加彩色格式之外,还使每个列标题旁边的下拉式控件变得可用。此外,右击Excel表并从Table选项中选择Totals Row,就能在Excel表中添加一个合计行(Total Row),你就能为每列选择一个聚合函数功能了(见图2-2)。图2-1:Excel表示例图2-2:Total行的下拉式菜单

命名表格是很重要的。方法是点击表中任意单元格,然后在函数区上,点击Design,然后在左上角的Table Name文本框中输入一个名字(如Student)。将图2-1中的表命名为:Student、Teacher、Class和Enrollment。命名表格之所以很重要,因为这让引用每个Excel表的公式变得更加便于读写。在本章中的后续部分,将会介绍这个内容。2.1.2 增加引用列

根据图2-1,示例中的数据分成四个表格:Student、Teacher、Class和Enrollment。Student表包含每个学生的所有属性,包括唯一标识符(StudentID)作为主关键字。同理,Teacher表包含每个教师的所有属性,包括唯一标识符和主关键字(TeacherID)。

Class表开头很像Student和Teacher表,包含每个课程的属性,包括主关键字(ClassID)。然而,因为一个课程“有”教师,所以它包括Teacher表的主关键字列(TeacherID),以引用该课程的教师。包含来自于另一个表的主关键字的列,称为外关键字(Foreign Key)。Enrollment表(包括每个课程学生的表单)有两个外关键字:ClassID(确认学生课程的班级)和StudentID(确认参加课程的学生)。此外,因为根据定义Enrollment表每行都是唯一的(一个学生不能两次在同一个课程),可以让ClassID和StudentID二者共同作为主关键字,以标识一个唯一的行。当两列或更多列共同组成一个主关键字,称为复合关键字(Composite Key)或者复合主关键字(Composite Primary Key)。

然而在Excel中,如果不得不引用好几张表才能确认教师、课程和学生名,就有点恼人了。所以,我们采用INDEX和MATCH函数,用主关键字和外关键字从一张表到另一个表增加列。重要的是,我们并非向其他表增加属性本身,这样会产生数据冗余;我们增加的是引用或连接。如果更新原始表中的数据,所有对该数据的引用也会自动更新。

尽管许多Excel用户熟悉VLOOKUP函数,传统上它用一个数据集里的标识符“查询”另一个数据集里的信息,但是VLOOKUP的功能其实不如INDEX和MATCH函数结合使用。VLOOKUP的主要缺陷是依赖于列的顺序和位置。使用VLOOKUP时,你想查找的信息必须位于lookup值的右侧。此外,如果增加、删除、移动列,就可能导致VLOOKUP偏好错误的单元格,由此导致重大错误。这些错误在使用INDEX和MATCH函数时不会出现。向TeacherID外关键字与Teacher列的TeacherID主关键字相匹配的Class表增加教师姓名的公式,如下所示:=INDEX(Teacher[FirstName],MATCH([TeacherID],Teacher[TeacherID],0))

把公式分解一下,INDEX函数有两个参数:列名和行号。INDEX函数返回该行该列交叉的那个单元格的值。MATCH函数有三个参数:查询值、要搜索的列和匹配类型(匹配类型应当一直为零)。MATCH函数返回包含查询值的行号。在Class表TeacherID列与Teacher表TeacherID列相匹配的前提下,INDEX函数返回Teacher表FirstName列的内容。你还可以把它与姓相结合:=INDEX(Teacher[FirstName],MATCH([TeacherID],Teacher[TeacherID],0))& " " &INDEX(Teacher[LastName],MATCH([TeacherID],Teacher[TeacherID],0))

本公式向Enrollment表中添加一列,用ClassID展示Class表中的Title:=INDEX(Class[Title],MATCH([ClassID],Class[ClassID],0))

本公式向Enrollment表添加学生的全名:=INDEX(Student[FirstName],MATCH([StudentID],Student[StudentID],0))&" "& INDEX(Student[LastName],MATCH([StudentID],Student[StudentID],0))

本公式向Enrollment表添加学生的性别:=INDEX(Student[Sex],MATCH([StudentID],Student[StudentID],0))

注意,如果你改变了任何源信息(学生或教师姓名),使用INDEX和MATCH引用的单元格会自动更新。尽管这看上去有点复杂,你越用就会越熟练。此外,Excel有很棒的自动补全功能,边打字边可以从字段表单中进行选择。

除了向Excel表增加引用列之外,有时增加包含总结式信息的列也是有用的。例如,这可能包括向Class表增加每班学生数量列,或者向Teacher表增加每班教师数量列。用命名的Excel表和列,向Class表增加学生数量列非常容易,具体如下:=COUNTIF(Enrollment[ClassID],[@ClassID])

或者再进一步,计算每班女学生的数量:=COUNTIFS(Enrollment[ClassID],[ClassID],Enrollment[Student''s Sex],"F")

注意,在Excel表中复制粘贴而来的公式是不同的。在Excel区域中,复制和粘贴会导致公式被更新,引用的列会根据粘贴位置而相对变化。而在Excel表中,复制和粘贴单元格会导致使用确切的公式。要锁定某单元的公式用于拖动(而非在公式中用$s),你需要像Class[[ClassID]:[ClassID]]这样引用单元格,而非单纯用[ClassID]。2.1.3 数据验证

要保证主关键字和外关键字是正确的,这很重要。如果一个课程里有某个TeacherID并不存在于Teacher表中,就很糟糕了。幸运的是,Excel有一种数据验证(Data Validation)工具,能够帮助维护这些关系。Excel的数据验证工具强制使一个单元格包含来自于某个表单的值,还能关注到表单发生变化以及外关键字不再匹配的情况。

然而不幸的是,数据验证工具只适用于已命名的区域,而不适用于表列名。用下面的步骤添加一个已命名的区域,连接到Teacher表中的TeacherID列。

1.在函数区上,点击Formulas选项卡。在Defined Names组中,点击Define Name。

2.在Name旁边输入TeacherIDs,在“Refers to”旁边输入=Teacher[TeacherID],然后点击OK。

然后,用下面的步骤为Class表TeacherID外关键字列增加数据验证。

3.在Class Excel表中,选择TeacherID列对应的那几行。

4.在函数区上点击Data选项卡,在Data Tools组中点击Data Validation,然后选择Data Validation。

5.选择Allow下拉菜单下面的List。取消勾选Ignore blank。把Source设置为=TeacherIDs,然后点击OK。

结果是Class表中每个TeacherID单元格中有一个下拉框,这样你就只能选择Teacher表中存在的TeacherID。此外,点击Data Validation下拉菜单中Circle Invalid Data,Excel会在不正确的外关键字上画一个红色的圈。图2-3展示了红色的圈和下拉式数据验证功能。图2-3:Excel数据验证功能2.2 途径2和3:Access中的表格

在涉及数据结构和表格之间的关系时,Microsoft Access比Excel严谨得多。本节展示如何在Access中创建表,在表之间建立联系,并用查询把数据结合起来。本节使用的部分例子与2.1节的Excel例子相同,推荐你也阅读2.1节。

第一步是与图2-1一样的图表。在Design模式下,为每张表增加列,把主关键字列(StudentID、TeacherID等)的数据类型设置为Number。右击Primary Key列,然后选择要建立的主关键字,使这些列成为各个对应表的主关键字。不需要对外关键字(如Class表中的TeacherID)进行任何处理。

然后在表中填上数据,在函数区上,点击Database Tools,然后点击Relationships。把外关键字从一张表拖到其他表的对应主关键字处(如将Class表中的TeacherID拖到Teacher表中的TeacherID处)。在Edit Relationships对话框(见图2-4)中,选择Enforce Referential Integrity,以确保外关键字与主关键字匹配。图2-4:Access中的Edit Relationships对话框

当所有的关系都建立起来之后,Relationships选项卡应该看起来像图2-5这样。如果你试图向Class表添加一行,其中的TeacherID却并不存在于Teacher表中,那么这些关系会导致错误。图2-5:Access中的表格关系

用查询连接数据

对于不熟悉SQL的人来说,听说要学习SQL有点吓人,实际上它比你想的简单得多;甚至比在本书中的一些复杂的Excel公式还简单。尽管本书简要介绍了如何使用SQL,仍推荐阅读Thomas Nield写的《Getting Started with SQL》一书(O’Reilly出版社)。如下是SQL查询基本语法:SELECT Column1, Column2, Column3 from TableName;

该查询将展示TableName表中列1至列3每行的内容。还可以添加一个WHERE子句,进一步过滤一些结果。例如,如下将从Enrollment表返回ClassId为365595的所有StudentID:SELECTStudentIDfrom EnrollmentWHERE ClassId=365595

你还可以使用JOIN语句把多张表连接起来。例如,修改前一个查询,以包含Student表中该学生的姓和名,Student表的StudentID外关键字与Student表的主关键字匹配,用如下带内连接(INNER JOIN)的查询:SELECTE.StudentID,S.FirstName as [Student's First Name],S.LastName as [Student's Last Name]From Enrollment EINNER JOIN Student S on S.StudentID=E.StudentIDWHERE ClassId=365595

SQL查询对于回答复杂问题是很有力的工具。尽管SQL查询可能有点复杂,但是读着就比较容易理解的,不像有些Excel公式那样令人费解。如下查询将Class表与Teacher表连接起来,展示教师姓名和课程信息。此外,用子查询提取每班的学生数和女学生数:SELECTC.ClassID,C.Title,C.DateTime,C.Location,T.FirstName as [Teacher's First Name],T.Lastname as [Teacher's Last Name],(Select count(*) from Enrollment E where E.ClassID=C.ClassID) as [# of Students],(Select count(*) from Enrollment Einner join Student S on S.StudentID=E.StudentIDwhere E.ClassID=C.ClassID and S.Sex='F' ) as [# of Female Students]from Class CINNER JOIN Teacher T on T.TeacherID=C.TeacherID2.3 本章小结

在本章中,我们讲到了预先对数据架构进行规划是很重要的,规划能够让你的数据组织合理,避免未来出现让人头痛的麻烦。一个良好的架构应当用一个唯一标识符(主关键字)来标示一个有价证券及其属性,并引用该唯一标识符,而非重复其属性(“第三范式”)。为金融数据找到唯一标识符可能并不太容易;最好是大部分时间都用该标识符,以保持一致。无论你用什么途径,Excel还是Microsoft Access,所用的架构都是相同的。在第3章中,我们将介绍如何提取彭博数据,存入Excel和Access中。第3章彭博

Bloomberg Professional(也称为彭博终端)是金融分析师最有用的工具之一。然而,尽管彭博终端本身有许多功能,但是其灵活程度和分析能力不及Microsoft Excel和Access。在本章中,我们用彭博提供的金融数据结合Excel、Access的灵活性,创建一个强大的分析工具。此外,彭博有Excel Add-in函数,还有完整的.NET API,方便获取其金融数据。

我们将探索Excel Add-in和.NET API的常用特性;对于其他特性请查阅DAPI上的彭博文档。从彭博获取的数据是供个人使用的。扩散这些数据可能违反服务使用规则。此外,每天或每月能从彭博获取的有价证券和字段数量是有限制的。想获得更多信息,请参见彭博文档(DAPI)或咨询彭博业务代表(BREP)。

在开始前需要发出一点警告:尽管彭博公司会甄别验证数据,但是仍然有些彭博信息可能是不正确的。然而,这不能成为你的分析不正确的理由。在本书后面,我们将讨论从大数据集合中识别和剔除不良数据的技术,但是只能手动审查数据以保证准确性,没有别的办法。如果你认为一些彭博数据不正确,请联系Bloomberg Help,以便该公司为你和其他用户修补数据。尽管如此,不要让数据可能不正确的想法吓坏你,不正确数据是小概率事件,而且在处理金融数据时,如果你想事事完美,那么可能一事无成。3.1 确定字段

将彭博数据放入Excel或其API的第一步是,确定你想获取什么字段。幸运的是,确定字段有几个简单的方法。3.1.1 鼠标滑动

在许多彭博屏幕中,你可以滑动鼠标,展示对应彭博字段的工具提示。例如,运行AAPL US Equity DES,提取Apple公司的描述屏幕,然后把光标指向“52Wk H”(52周以来高股价);会出现一个工具框,提示你相应的Excel字段ID是HIGH_52WEEK,如图3-1所示。图3-1:展示Excel字段ID的工具提示标签可能不太明确,所以需要用FLDS命令再检查一下定义,详见下节。3.1.2 FLDS屏幕

彭博允许用户用FLDS屏幕搜索字段。要打开FLDS屏幕,首先挑选一个有价证券(例如Nokia FH Equity),然后用FLDS。打开FLDS屏幕之后,用查询文本框搜索一个字段(例如搜索“market cap”(市值),如图3-2所示。这个方法比鼠标滑动法更好,因为字段数量众多,查询能够提取出的字段比在工具提示框找到的更有用。例如,在描述屏幕(Excel字段ID:CUR_MKT_CAP)上把鼠标滑动到Mkt Cap上,不会显示Currency Adjusted Market Cap字段(Excel字段ID:CRNCY_ADJ_MKT_CAP),该字段可以用不同的货币提取市值(见图3-2)。如果你要比较的两个公司属于不同地区,调整货币单位就是很重要的。此外,FLDS屏幕显示每个字段的现值,使你更容易找到想要的字段。FLDS屏幕的另一个优点是能从彭博直接把字段拖倒你的Excel工作表中去(需要在Options下选用该功能)。图3-2:FLDS屏幕

更重要的是,在FLDS屏幕中,你可以点击一个字段,查看更详细的描述和可选重写(overrides)(见图3-3)。在进行分析之前,阅读每个字段的描述是很重要的。例如,你可以用EQY_FUND_CRNCY(见图3-3)在请求CRNCY_ADJ_MKT_CAP时重写货币。在本章后面将探讨重写问题。图3-3:彭博字段描述3.1.3 彭博函数构造器和在Excel中发现字段

用彭博Office工具,你能用直观的菜单从Excel直接获取FLDS屏幕的功能。在Excel的函数区上,点击彭博选项卡,然后在Create group中,点击Function Builder,如图3-4所示。图3-4:Excel功能区上的彭博控件

函数构造器(Function Builder)有许多有用的函数,但是这里仅关注Bloomberg Data Point(BDP)函数。在本章后面会更详细地介绍BDP函数,它从彭博中提取一个单一数据点。选择BDP之后,你可以用Function Builder搜索一个有价证券和字段,见图3-5。图3-5:Excel中的彭博函数构造器

或者用彭博字段搜索(Field Search)浏览字段库,在Excel的Bloomberg控件上,在Tools群中,选择Find Fields按钮(见图3-6)。尽管可以按类别下拉,但是用FLDS屏幕更方便查询,因为它将可用字段按热门程度进行排序。

现在你明白使用Field Search和Function Builder很容易,但是不要直接把本章的其余部分越过去。下面几节展示几个不用将彭博字段硬编码成Excel公式,就能提取数据的简单方式。这将保证你的工作表和数据库表更容易维护,可以用于第5章和第9章。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载