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:表達式)

相關文章
相關標籤/搜索