比较字符串

R 中的数据清洗

Maggie Matsui

Content Developer @ DataCamp

度量数值间的距离

一条从 0 到 15 的数轴,3 和 10 处各有一个点。

R 中的数据清洗

度量数值间的距离

同一数轴,用红色括号标出 3 与 10 两点间的长度。

R 中的数据清洗

度量数值间的距离

在表示距离的红线下方,10 减 3 等于 7。

                                            typhoon 与 baboon 的距离是多少?

R 中的数据清洗

最小编辑距离

从一个字符串变到另一个需要多少个笔误?

用于插入的绿色加号。

R 中的数据清洗

最小编辑距离

从一个字符串变到另一个需要多少个笔误?

用于删除的红色减号

R 中的数据清洗

最小编辑距离

从一个字符串变到另一个需要多少个笔误?

用于替换的紫色循环符号。

R 中的数据清洗

最小编辑距离

从一个字符串变到另一个需要多少个笔误?

用于换位的蓝色双箭头。

R 中的数据清洗

编辑距离 = 1

展示 dog 与 dogs 的差异,带绿色加号。

R 中的数据清洗

编辑距离 = 1

展示 bath 与 bat 的差异,带红色减号。

R 中的数据清洗

编辑距离 = 1

展示 cats 与 rats 的差异,带紫色循环符号。

R 中的数据清洗

编辑距离 = 1

展示 sign 与 sign 的差异,带蓝色双箭头。

R 中的数据清洗

更复杂的示例

baboon $\rightarrow$ typhoon

单词 baboon

R 中的数据清洗

更复杂的示例

baboon $\rightarrow$ typhoon
  • 插入 h

baboon 下方是 babhoon,h 上方有绿色加号。

R 中的数据清洗

更复杂的示例

baboon $\rightarrow$ typhoon
  • 插入 h
  • b $\rightarrow$ t

其下是单词 tabhoon,t 上方有紫色循环符号

R 中的数据清洗

更复杂的示例

baboon $\rightarrow$ typhoon
  • 插入 h
  • b $\rightarrow$ t
  • a $\rightarrow$ y

其下是单词 tybhoon,y 上方有紫色循环符号。

R 中的数据清洗

更复杂的示例

baboon $\rightarrow$ typhoon
  • 插入 h
  • b $\rightarrow$ t
  • a $\rightarrow$ y
  • b $\rightarrow$ p

总计:4

其下是单词 typhoon,p 上方有紫色循环符号。

R 中的数据清洗

编辑距离的类型

  • Damerau-Levenshtein
    • 刚学到的方法
  • Levenshtein
    • 只考虑替换、插入、删除
  • LCS(最长公共子序列)
    • 只考虑插入和删除
  • 其他
    • Jaro-Winkler
    • Jaccard

哪个最好?

R 中的数据清洗

R 中的字符串距离

library(stringdist)
stringdist("baboon", 
           "typhoon",
           method = "dl")
4

前面幻灯片中的图,展示从 baboon 到 typhoon 的步骤。

R 中的数据清洗

其他方法

# LCS
stringdist("baboon", "typhoon",
           method = "lcs")
7
# Jaccard
stringdist("baboon", "typhoon",
           method = "jaccard")
0.75
R 中的数据清洗

用比较字符串来清洗数据

  • 第 2 章:
    • "EU", "eur", "Europ" $\rightarrow$ "Europe"
  • 如果变体太多怎么办?
    • "EU", "eur", "Europ", "Europa", "Erope", "Evropa", ... $\rightarrow$ "Europe"
    • 使用字符串距离!
R 中的数据清洗

用比较字符串来清洗数据

survey
          city move_score
1       chicgo          4
2   los angles          4
3      chicogo          5
4      new yrk          5
5    new yoork          2
6     seatttle          3
7   losangeles          4
8      seeatle          2
...
cities
         city
1    new york
2     chicago
3 los angeles
4     seattle
R 中的数据清洗

用字符串距离重新映射

library(fuzzyjoin)
stringdist_left_join(survey, cities, by = "city", method = "dl")
        city.x move_score      city.y
1       chicgo          4     chicago
2   los angles          4 los angeles
3      chicogo          5     chicago
4      new yrk          5    new york
5    new yoork          2    new york
6     seatttle          3     seattle
7   losangeles          4 los angeles
8      seeatle          2     seattle
9      siattle          1     seattle
...
R 中的数据清洗

用字符串距离重新映射

stringdist_left_join(survey, cities, by = "city", method = "dl", max_dist = 1)
        city.x move_score      city.y
1       chicgo          4     chicago
2   los angles          4 los angeles
3      chicogo          5     chicago
4      new yrk          5    new york
5    new yoork          2    new york
6     seatttle          3     seattle
7   losangeles          4 los angeles
8      seeatle          2        <NA>
9      siattle          1     seattle
...
R 中的数据清洗

Passons à la pratique !

R 中的数据清洗

Preparing Video For Download...