13.4.3 收集有关地区的统计信息

我们的目标是展示自 1990 年以来,不同地区森林面积的变化。我们需要遍历所有已有的地区,检查数据是否可用,找到下载的指标值。这可以通过使用我们创建的映射,非常轻松地完成,因为已经用年份和地区 ID 作为键。

但是需要小心,因为有一些数据可能会缺失,因此,我们要过滤掉所有年份没有数据的地区。另外,我们还想要显示森林总面积,而不是百分比,因此,在返回数据之前,要进行简单的计算。虽然听起来可能很难,但是,代码并不非常复杂。清单 13.17 显示了最终我们要在 F# Interactive 中输入的几条命令,能得到我们想要收集的数据。

清单 13.17 计算森林面积 (F# Interactive)

> let calculateForests(area:float<km^2>, forest:float<percent>) =   <--[1] 计算森林总面积
     let forestArea = forest * area
     forestArea / 100.0<percent>
;;
val calculateForests : float<km ^ 2> * float<percent> -> float<km ^ 2>

> let years = [ 1990; 2000; 2005 ]
   let dataAvailable(key) =     <-- [2] 对于给定的给定的键,值是否可用?
     years |> Seq.forall (fun y –>
       (Map.contains (y, key) areas) &&
       (Map.contains (y, key) forests));;
val years : int list
val dataAvailable : string –> bool

> let getForestData(key) =     <-- [3] 得到每年的值
     [| for y in years do
         yield calculateForests(areas.[y, key], forests.[y, key]) |];;
val getForestData : string -> float<km ^ 2> array

> let stats = seq {     <-- [4] 对所有地区,查找可用数据
     for name in regions do
       if dataAvailable(name) then
         yield name, getForestData(name) };;
val stats : seq<string * float<km ^ 2> array>

清单 13.17 定义了几个辅助函数,处理下载的数据,并定义了一个名为 stats(统计数据)的值,包含最后结果。由于有了计量单位,可以很容易看出第一个函数做了什么[1],它用该地区的总面积和森林面积所占的百分比,计算森林总面积,以平方公里计。

第二个函数[2]检查我们所需要的数据,对于指定的地区 ID,和我们感兴趣的三年是否都可用。它使用函数 Map.contains,测试 F# 映射(由第二个参数描述)是否包含由第一个参数值指定的键。最后一个辅助函数[3]看起来和第二个很相似,它假定数据是可用的,使用年以及地区名作为键,对所有监控的年份,从映射中提取数据;然后,使用第一个函数,从原始数据计算出森林面积。

有了最后两个函数,我们就可以收集所有地区的统计数字了[4]。返回值是元组的序列,元组的第一个元素为地区名,第二个元素为数组。数组有三个元素,对应于所监控的三年的值。

在 F# Interactive 中获取数据以后,就可以观察,但是在互动窗口中,通过输出数据很难看到各种模式。为了能够从收集的数据中获取更多的信息,必须以更友好的方式,对数据进行可视化,例如,使用 Microsoft Excel。

时间: 2024-07-31 09:26:21

13.4.3 收集有关地区的统计信息的相关文章

11g上如何收集优化器(optimizer)统计信息

注:本文参见MOS(my oracle support)英文文档Document:749227.1 - How to Gather Optimizer Statistics on 11g 本文概述了在Oracle 11g中收集CBO(Cost Based Optimizer)统计信息的推荐方法.     本文适用范围:           Oracle Server – 企业版 – 版本 11.1.0.6 to 11.2.0.3           Oracle Server – 标准版 –版本

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs

数据库性能优化 相关书籍: 1.基于成本的Oracle优化法则 2.Oracle性能诊断艺术 3.基于Oracle的SQL优化 ----------------------------------------------------------------------------------------- 两种优化器: CBO  cost-base optimizer 基于cost 更大适应性/灵活性/10g开始 RBO  rule-base optimizer 基于规则 制定了15条/10g以

Oracle里收集与查看统计信息的方法

Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息.CBO会利用这些统计信息来计算目标SQL各种可能的.不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 表的统计信息用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数.表块

Oracle 判断 并 手动收集 统计信息 脚本

CREATE OR REPLACE PROCEDURE SchameB.PRC_GATHER_STATS AUTHID CURRENT_USER IS BEGIN SYS.DBMS_STATS.GATHER_TABLE_STATS('SchName', 'TableName', CASCADE => TRUE); END; / select owner,table_name,last_analyzed,num_rows from dba_tables where owner='SYSTEM' a

验证Oracle收集统计信息参数granularity数据分析的力度

最近在学习Oracle的统计信息这一块,收集统计信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, ---所有者名字 tabname VARCHAR2, ---表名 partname VARCHAR2 DEFAULT NULL, ---要分析的分区名 estimate_percent NUMBER DEFAULT NULL, ---采样的比例 block_sample BOOLEAN DEFAULT FALSE, ---是否块分析

ORACLE 收集统计信息

原文链接:http://blog.itpub.net/2317695/viewspace-1226138/ 今天网上看到一篇关于收集统计信息的文章,还不错,特转载下来. 1.     理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: ·         表的统计信息 o   行数 o   Block数 o   行平均长度 ·         列的统计信息 o   列中不同值的

什么是统计信息以及收集查看方法

概念: oracle的统计信息:存储在数据字典里,且从多个维度描写叙述了Oracle数据库里对象的具体信息.CBO会利用这些统计信息来计算各条路径的成本. 分类: 表.索引.列.系统.数据字典.内部对象的统计信息 收集统计信息: ANALYZE 命令和DBMS_STATS包.表.索引.列.数据字典都能够用两个.系统.内部对象仅仅能用DBMS_STATS. 1.ANALYZE analyze table PROC_PROGRESS_LOG delete statistics; --删除统计信息 a

SQLSERVER读懂语句运行的统计信息

SQLSERVER读懂语句运行的统计信息 对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间.执行时间.做了多少次磁盘读等. 如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息. 这些信息对分析问题很有价值. 1 SET STATISTICS TIME ON 2 SET STATISTICS IO ON 3 SET STATISTICS PROFILE ON SET STATISTICS TIME ON 请先来看看SET STA

使用analyze命令统计信息

① 搜集和删除索引.表和簇的统计信息② 验证表.索引和簇的结构③ 鉴定表和簇和行迁移和行链接针对analyze的搜集和删除统计信息功能而言Oracle推荐使用DBMS_STATS包来代替analyze搜集优化信息DBMS_STATS可以并行的搜集信息,可以搜集分区表的全局信息进一步来说,CBO只会使用DBMS_STATS包所统计出来的信息    https://blog.csdn.net/iteye_14608/article/details/82447870 1.以计算模式收集表.表的所有列及