Openrefine正则表达式

Openrefine 使用正则表达式清理F1数据

1.从F1网页中提取数据

在网页中有F1分站赛的处罚信息,这些信息以条目的形式出现,我们的目的是:在openrefine中,将这些条目数据利用正则表达式提取出来,生成结构化表格,以便于后期的分析。


image-20201023131403690.png

2.新建refine项目,选择剪切板的方式,将数据粘贴过来

image-20201023131307863.png

3.将保留空白行去掉

image-20201023131846938.png

image-20201023132213980.png

4.数据清洗

4.1生成包含比赛名称的列

if(value.contains('Prix'),value,"")
#根据Column1列新建一列 命名为race列
#contains(value,"Prix")返回的是TRUE or False,如果字符串中包含Prix字符,返回True,race列取值为value,否则取值为空字符串
#选race列,向下填充,将空格填充满
image-20201023133041012.png

image-20201023133337521.png

4.2 生成处罚通知的列

if(contains(value,'Prix'),'',value)
image-20201023133946822.png

检查数据发现在56-59行出现了归类错误,主要原因是在处罚信息里包含了完整的比赛名称,由于量不是很大,可以直接用edit进行编辑。

编辑前:


image-20201023135007560.png

编辑后:


image-20201023135523204.png

4.3去除同一条数据跨多行的情况

检查发现,在penalty notice列中存在着一条数据分布在多行的情况,要将这种情况去除


image-20201023140111965.png

解决方法:


image-20201023140539264.png
输入正则表达式:^[^-] 
#含义是:匹配开头不是"-"的值,记住行号并用edit对单元格进行剪切-复制更改
image-20201023140948599.png
penalty notice列,选择空白行,删除行
image-20201023142539940.png

image-20201023142622953.png

4.4 提取车手和车队名称

基于penalty notice列,新建列


image-20201023143412005.png
使用Java正则语法:
value.match(/- (.*?)\s\(([\w ]+)\)?.*/).join('::')
注意:
1.'-'后面的空格
2.用'?'将贪婪模式改为非贪婪模式
3.\( \)转义为普通括号
4.()代表分组,返回括号内的值,本例中是两个字符串
5.match()匹配字符串,并返回括号中的值
使用python正则语法:
#import re
#return re.findall("- (.*)\s\((\w+)\)",value)
#import re
#text=re.search("- (.*)\s\((\w+)\)",value)
#return text.group(1)+'::'+text.group(2)

image-20201023150323933.png

对车手车队列进行分面,检查提取的结果,发现有的行没有提取到信息,原因是没有 车手(车队)这种模式的字符串,手动更改单元格,删除Protest re Pirelli test行


image-20201023152028704.png

image-20201023152117044.png

image-20201023152701739.png

4.5将车手车队列分成车手、车队两列(::分割)

image-20201023152932974.png

4.6提取罚金

value.replace(',','').match(/.*€(\d+)/)[0]
#先将2,800中的','去掉再匹配正则
image-20201023155236449.png

分面检查发现有的罚金没有提取出来(Java正则提取不出来,原因未知,后改用python正则),接下来再提取一次,选择罚金列中空的行,根据penalty notice 新建一列罚金2

value.replace('€',':').replace(',','')
image-20201023164915299.png

选择罚金2,新建一列罚金1,使用python正则表达式

import re 
return re.findall(".*:(\d+)",value)[0]
image-20201023165718115.png

合并罚金列和罚金1列


image-20201023170007040.png
image-20201023170048670.png

4.7提取比赛阶段

比赛阶段主要有FP...或者Q...或者qualifying

value.match(/(?i).*((FP\d+)|(Q\d+)|(qualifying)).*/)[0]
#(?i)表示整体不区分大小写
image-20201023173509347.png

4.8提取速度

value.match(/.*?(\d+\.?\d+)\skm\/h.*/)[0]
image-20201023175110849.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354