日志初筛
一般来讲,日志文件都是存在linux服务器,所以,第一步的数据提取操作其实可以由linux平台上的文本分析小钢炮grep, sed, awk
完成。
例如,我们需要提取[手机号: 18811112222, ...
这样的字段手机号码,我们可以使用以下脚本实现:
less catalina.out | grep '\[手机号' | sed 's/^.*手机号://g' | sed 's/,.*$//g'
sed
部分可以多提一点:
- 通过
sed 's/^.*str1//g'
筛掉str1
前的内容 - 通过
sed 's/str2.*$//g'
筛掉str2
后的内容。
这样,在把筛到的手机号保存到文件里就ok了:
less catalina.out | grep '\[手机号' | sed 's/^.*手机号://g' | sed 's/,.*$//g' > mobile.txt
号码频率的统计
接下来,需要统计mobile.txt
文件中各个号码出现的次数。
最简单的实现方式当然是使用一个dictionary去存储每一个关键字,然后在出现的时候做累加。这很容易实现。
这里在提供另外一种使用pandas
现成模块的方法:
import pandas as pd
# import data
data = pd.read_csv('mobile.txt', sep=" ", header=None)
# check statistical feature
data.describe()
len(data)
len(data.drop_duplicates())
# get each item's counting, and export to mobileRes.txt file
data.groupby(data.columns.tolist(),as_index=False, sort=False).size().sort_values(ascending=False).to_csv("mobileRes.txt", sep='\t', encoding='utf-8')
这样,你便能得到一个两列的数据,第一列为手机号码,第二列为对应的频数。
有了它们后,便可以画出手机频率分布图,继续使用Python或者Excel都可以简单实现。