您还在为没法分析文本数据,没法提取文本文件中有价值的内容而头疼吗?也许用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:表达式)