OpenFEA技巧篇 | 文本分割

您还在为没法分析文本数据,没法提取文本文件中有价值的内容而头疼吗?也许用FEA能帮助您解决问题。我先进行抛砖引玉,先讲解如何用FEA分割文本文件,如下是一个名字为access_log_for_pands.txt的文本文件(数据来源于网络),内容为网站访问日志,格式以下:html

1、数据加载正则表达式

要提取有价值的数据,不管怎么样都要先导入数据到FEA中。咱们使用FEA加载数据原语:apache=load csv by access_log_for_pandas.txt with (sep="$",header=-1) ,把整个1.74M大小文件加载FEA引擎中,并使用dump apache命令查看加载完成的数据,以下图:apache

2、数据分割技巧浏览器

FEA一般会使用“字符串函数处理str”原语中split、slice函数对字符列进行分割,也能够经过lambda函数对字符串进行分割,原语格式以下:网络

df表.新列名=str 被处理列名 by (split\slicce(正则表达式))|df表.新列名=lambda 被处理列名 by (x:表达式) 数据结构

下面开始简单介绍几个分割技巧。函数

注意:目前str原语命令一共还支持其余15种不一样类型函数,cat、contains、count、endswith\startswith、findall、get、jion、len、lower\upper、match、pad、center、repeat、replace、strip\rstrip\lstip(想查看详细的函数说明信息,请访问http://www.openfea.cn/xiazaibanben.html目录下载《原语手册》)文件。测试

(一)split 根据特定字符分割字符串网站

观察dump apache展现出来的数据结果,咱们发现将日志经过 ‘ - - ’字符串进行分割,使用如下原语完成分割:日志

rename apache as (0:”s”) 

apache.x=str s by (split(' - - '))

apache.x0=str x by (get(0))

apache.x1=str x by (get(1))

apache=loc apache by (s,x0,x1)

执行完以上原语后,使用dump apache查看数据结构。

恭喜你,你已经分割成功。

注:咱们来总结一下split函数使用办法,示例以下:

apache.x=str s by (split('-'))      #以-为特殊字符,对s列值进行分割。

apache.x=str s by (split(' - - '))    #以 - - 为特殊字符串,对s列值进行分割。

apache.x=str s by (split(' -',1))    #以-为特殊字符,对s列的值只分割一次。

apache.x=str s by (split(' -',3))    #以-为特殊字符,对s列的值分割三次。

请同窗们本身去测试,以上四种语句分割是有不一样效果的。

(二)slice函数 截取字符串

通过前面的split函数分割后咱们把字符串s列分红了x0,x1两列。为了演示slice分片功能,结合咱们的目标是把x0列URL与IP再进行分割,作以下示例:

apache.y=str x0 by (slice(1,21))

apache.y1=str x0 by (slice(22, ))

apache=loc apache by (s,y,y1,x1)

执行完以上原语后,使用dump apache查看数据结构。

咱们已经对x0分割完成了,固然你对x0列进行分割,一样可使用split函数,不必定使用slice函数。

注:咱们来总结一下slice函数使用办法,示例以下:

apache.y=str x0 by (slice(None,None,-1 ))  #对x0进行倒序

apache.y1=str x0 by (slice(-1,-20,-1 ))     #从最后一个字符,到倒数第20个字符

apache.y2=str x0 by (slice(-20,-5,2 ))     #从倒数第20字符,到倒数第5个字符,2个字符一跳转

(三)lambda 分割

与split和slice不一样,本节讲使用lambda函数进行分割,可是道理都是同样的,都是使用split函数与slice函数,只是语法格式不同而已。

经过slice函数的处理,咱们已经把前半部分x0分割完毕,如今咱们要分割x1字符串了,示例以下:

apache.z=lambda x1 by (x:x.split("] ",1)[0][1:-1])     

apache.z1=lambda x1 by (x:x.split("] ",1)[1])   

apache=loc apache by (s,y,y1,z,z1)

执行完以上原语后,使用dump apache查看数据结构。

经过lambda表达式,咱们完成了对x1的分割,若是你还想继续把Z1分割下去,那同窗们请本身动手动脑。

注:咱们来总结一下lambda函数使用办法,示例以下:

apache.z=lambda x1 by (x:x.split("] ",1))   #以] 对字符串x1进行分割,获得一个list

apache.z=lambda x1 by (x:x.split("] ",1)[0][::-1]) #以] 对字符串x1进行分割,取得list第一个值后在倒序。

3、总结

经过对文本不断的分割,就能提取到有用的信息进行分类统计分析。像本示例就能够经过分割,提取到有哪些ip访问本网站,使用什么浏览器访问,访问最多的网页是哪些等相关信息。

最后总结,请同窗们必定要记住两个原语:

df表.新列名=str 被处理列名 by (split\slicce(正则表达式))

df表.新列名=lambda 被处理列名 by (x:表达式)

相关文章
相关标签/搜索