在聊string之前,我先来聊聊属性 Attribute
文字是介绍数据属性的第一篇文章,那么在介绍文字的种种属性之前,我先来简单的解释一下什么是属性。
属性以我的方式来解释就是描述一个东西的一个特点。人有生理属性有社会属性。生理属性比如性别,身高体重,那就是这个人可以用来区分他人的生理特点。那么文字的属性也好,日期的属性也好是一个意思,就是描述一个string和另一个string不同的特点。
介绍String的属性并不是这篇文章最主要的目的,我们需要了解的是根据这些属性,我们能够解决哪些我们在数据上遇到的问题。
String的长度 Length
每一段string都有它的长度,这个长度包括了string的每一个字符,字母+数字+标点符号。跟你想象所不同的是,有时候有一些string,你可能看不出来它有多长,我就以 test 为例,如果在Tableau里边,它只会显示test,后边的三个空格是不会显示的。我们认为test的长度只有4,但是test 实际上是7 是test加上三个空格。
我们知道了string的长度可以做一些什么?
Mapping
假设我们手上有一个表格,其中一个column是EmployeeID. 假设EmployeeID的长度如果是8位数就代表普通员工,6位数代表Manager,4数代表Senior,那你就可以一共EmployeeID的Length来定义每个员工的级别Data Cleaning
当我们从Excel导入数据的时候,经常会遇到有一些行是Total,Subtotal,这些数据导入到Tableau当中会极大的干扰后续的计算,为了排除这些total row,经常我们可以使用String的Length来排除这些row来确保数据的干净。Table Joining
想象此时你需要用你的EmployeeID Table与另一张EmployeeSalary Table进行 join,这个时候EmployeeID就成了这两个table join的关键。在tableau当中,你发现只有普通员工的数据,而manager以上的数据你都看不到。这个时候你检查EmployeeSalary这张表时发现,EmployeeSalary里EmployeeID这个column所有的length都是8,这就意味着这两张表里的EmployeeID不一样,EmployeeSalary这张表里的manager EmployeeID加上了两个0,Senior EmployeeID加了4个0
String的大小写 Upper and Lower Case
字符是语言的载体,而英语的拼写是绕不开的话题。大小写这个属性主要分为三种Upper Case全大写,Lower Case全小写还有一个最重要的Title Case。
Title Case是指在一串字符当中每个单词的首字母大写: This Is Title Case.
Title Case这个问题经常出现在两个地方一个是名字的转换,一个是Report的Title。 你唯一需要记住的就是Tableau里边提供了一个叫做PROPER( )的函数来将你的数据转化成Title Case。 想象一下,要是你不知道这个函数,你怎么转换?
String是可以被分割的
Email,地址,网站域名这些都是典型的由多个更小的字符串所组成的String。以bitextbook@gmail.com为例,bitextbook是前缀,@gmail是这个电子邮箱的后缀代表Email的Server是Gmail. 那根据这个格式,你就可以根据你的需要将String进行分割成更小的部分,比如我想看有多少用户的比例使用Gmail? 或者用户有多少个地址来自于某个国家?
String被分割的特性有着巨大的意义:
1. 你可以按照某个特定的字符开始分割,比如分割电子邮箱@之前和@之后的部分
2. 按照某个方向进行分割,从左开始数前5个字符留下,从右开始数最后五个字符留下
我从左开始删,删除五个
我从右开始删,删除五个
我从左开始保留,保留五个
我从右开始保留,保留五个
3. 某个字符可以被查找和替换,把电子邮件里所有的Gmail替换成共BITextbook
那如果我把一个字符从有替换成了没有那你是不是就相当于删除了这个字符?
4. 匹配。因为一个很长的字符串可以被任意分割,这也就意味着我可以将BItextbook和textbook进行匹配。这又衍生出了下面的关系
StringA 是不是等于StringB?
StringA 是不是包含StringB?
StringA 是不是以StringB开头?
StringB 是不是以StringB结尾?
我会在后边的章节里具体介绍如何使用Tableau内置的函数去实现这些功能,但是如果你能深入的理解了String的这些属性,你就会知道哪些功能实现,哪些不能实现,自由的去定义你想要实现的规则。
所有的数据分析工具和编程语言都是相似的,它们都是基于string的属性去设计的,所以即使是在不同的工具里,你往往会发现相似的东西。