2020-06-09
阅读量:
1130
结构化数据
1、结构化数据 – 列表
- 列表是扩在花括号中的一组数据
由数值、布尔值以及字母组成的列表
{123, true, "A"}
由数值组成的列表
{1, 2, 3}
- 列表中每个数据都有属于自己的序号以便自己能够被检索到;
- 列表中的数据序号从0开始按照排列顺序依次整数递增;
- 大列表内还可以嵌套子列表、记录等
大列表内嵌套两个数值组成的小列表
{
{1, 2, 3},
{4, 5, 6}
}
列表内嵌套两个记录
{
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"]
}
- 花括号除了用来括起列表内的所有数据还用来指定列表内数据的序号,通过指定数据序号可以从列表内找到并获取所需的数据值。
从列表内取序号为0的数值,结果为123
{123, true, "A"}{0}
先从大列表内取序号为0的第一个子列表,再从子列表中取序号为1的值,结果为2
{
{1, 2, 3},
{4, 5, 6}
}{0}{1}
2、结构化数据 – 记录
- 记录用来定义字段和给字段赋值
- 一个字段由字段名以及字段内的值组成
- 字段名是唯一的文本值,是字段的标识符
- 字段名可以不用引号引用,字段名有两种表达形式:
不加""的表达形式、例如OrderID
加#和""的表达形式、例如#"Today's data is:"
- 记录中的内容写在[]括号内,[]括号同样用于在记录中取特定字段的值。
例1:定义字段以及显示记录内所有内容
let Source =
[
OrderID = 1,
#"CustomerID" = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
例2:定义字段以及显示记录内[Item]字段的值
let Source =
[
OrderID = 1,
#"CustomerID" = 1,
= "Fishing rod",
Price = 100.00
]
in Source[#"CustomerID"] //equals 1
3、结构化数据 – 表
- 表是由行列数据构成的,
- 可以使用隐式或显示方式定义字段(列)的数据类型。
- 使用 #table建表时,可以使用列表或者记录来定义列名,并使用嵌套列表来定义表中的数据,
- 嵌套列表的大列表内包含所有定义单行用的子列表,而每个子列表则用来定义一行数据。
- 花括号{}可以用来索引查找指定行的数据。
例1:隐式字段表
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in Source
根据每列第一个值确定该列的数据类型
例2:显示字段表
let
Source = #table(
type table [OrderID = number,
CustomerID = number,
Item = text,
Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
} )
in Source
无论有多少条记录,哪怕只有一条也要用双层话括号括起来
例3:建表后取表中第一行数据
let Source =
#table( type table
[OrderID = number,
CustomerID = number,
Item = text,
Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
} )
in Source{1}
4、其他数据结构(1)
数据结构中可以包含任意M值 例1:复合数据结构的列表
let Source =
{
1, //数值
"Bob", //文本
DateTime.ToText(DateTime.LocalNow(), "yyyy-MMdd"), //函数值
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0] //记录
}
in Source
例2:包含子列表的记录
let Source =
[
CustomerID = 1,
Name = "Bob",
Phone = "1234567",
Orders = {
[OrderID = 1,CustomerID = 1,Item = "Fishing rod", Price = 100.0],
[OrderID = 2, CustomerID = 1, Item = "1 lb. worms", Price = 5.0]
}
]
in Source
5、计算方式及运算符
- M函数的计算方式与Excel单元格相互间引用计算的方式类似,其计算顺序是根据计算单元中每个元素间的依赖关系决定的。 例1:记录中各元素间相互引用计算
[ A1 = A2 * 2,
A2 = A3 + 1,
A3 = 1 ]
- 它与Excel单元格的区别在于M函数中的A1、A2、A3是记录中的元素,而Excel中的A1、A2、A3是单元格地址
- 在M函数中还可以进行更为复杂的元素间的引用计算。
例2:复合嵌套记录内元素间的引用计算
[
Sales =
{
[ Year = 2007, FirstHalf = 1000, SecondHalf = 1100, Total = FirstHalf + SecondHalf ],
[ Year = 2008, FirstHalf = 1200, SecondHalf = 1300, Total = FirstHalf + SecondHalf ]
},
#"Total Sales" = Sales{0}[Total] + Sales{1}[Total]
]
6、获取网页信息思维过程
- 确定要获取信息所在网站
- 解析网址
- 明确应使用什么函数爬数
- 明确所要数据在网址全部数据中的什么位置
- 创建参数表或自定义函数,批量或灵活爬取所要信息
(teamname as text)=>
let
源 = Web.Page(Web.Contents("https://china.nba.com/teams/stats/#!/"& teamname )),
球队信息 = 源{0}[Data]
in
源






评论(0)


暂无数据
推荐帖子
0条评论
0条评论