L17 利用Pandas解析日誌資料

2021-09-29 20:48:26 字數 3390 閱讀 9620

樣例資料如下

步驟1 開始

步驟1: : 任務1 : followed link after success : 開始執行任務 (2019/05/10 02:00:22.177)

步驟1: : 任務1 : [nr=6, errors=0, exit_status=0, result=true] : 任務執行完畢 (2019/05/10 02:00:45.227)

步驟1: : 任務2 : followed link after success : 開始執行任務 (2019/05/10 02:00:45.227)

步驟1: : 任務2 : [nr=6, errors=0, exit_status=0, result=true] : 任務執行完畢 (2019/05/10 02:09:21.490)

步驟2: : start : start of job entry : 開始執行任務 (2019/05/10 02:10:26.177)

步驟2: : start : [nr=7, errors=0, exit_status=0, result=true] : 任務執行完畢 (2019/05/10 02:10:26.179)

步驟2: : 任務5 : followed無條件的鏈結 : 開始執行任務 (2019/05/10 02:10:26.179)

步驟2: : 任務5 : [nr=7, errors=0, exit_status=0, result=true] : 任務執行完畢 (2019/05/10 02:17:51.991)

如上樣例,源日誌記錄中包含步驟名稱、任務名稱、執行狀態及執行的時間。帶有這樣資訊的資料行才是待提取的資料記錄。

lst_log =

log_dir = r'd:\mypc\python\vscodebook\dataset\pj1_日誌分析\log20190101.txt'

with

open

(log_dir, encoding=

'utf-8'

)as log_etl:

for line in log_etl:

# 逐行讀取資料 ,只取有效資料

if' : : '

in line:))

df_etllog = pd.dataframe(

)df_etllog.head(

)

資料預覽1

)# 重新命名列

df_etllog1.columns=

['步驟名稱'

,'c1'

,'任務項'

,'c2'

,'狀態'

]df_etllog2 = df_etllog1.join(df_etllog)

資料預覽2

'狀態'].

str.split(

'(',expand=

true

)df_etllog3.columns=

['完成狀態'

,'時間'

]# 去除字元

df_etllog3[

'時間'

]= df_etllog3[

'時間'].

str.replace(

')','')

# 轉化為時間型別

# df_etllog3['時間'].astype(np.datetime64)

df_etllog3[

'時間'

]= pd.to_datetime(df_etllog3[

'時間'])

# 索引重新命名

df_etllog4 = df_etllog3.join(df_etllog2)[[

'步驟名稱'

,'任務項'

,'完成狀態'

,'時間']]

df_etllog4.index.name=

'執行順序'

資料預覽3

['步驟名稱'

,'任務項'])

['時間'

].agg(

[np.

min, np.

max]

).rename(columns=

).reset_index(

)​ 2、利用起止時間,作減計算耗時,單位精確到分鐘(dt.seconds/60)。

df_etllog5[

'耗時(分鐘)']=

(df_etllog5[

'結束時間'

]- df_etllog5[

'開始時間'])

.dt.seconds/

60

資料預覽4

到這裡,其實已經完成了資料清洗的目標。基於這份結構化的資料,可以很方便分析日常各任務的執行狀態及耗時情況。此處提供如下參考,利用條形圖按耗時展現top 10 任務。

df_rs5min = df_etllog5[df_etllog5[

'耗時(分鐘)'

]>5]

.sort_values(

['開始時間'

], ascending=

true

)

plt.barh(df_rsl5min[

'任務項'

], df_rsl5min[

'耗時(分鐘)'],

height=

0.8,

linestyle=

'--'

, alpha=

0.8)

plt.show(

)

利用pandas的這些基本功能來解析固定格式的非結構化資料,確實很得心應手。只要日誌檔案能按統一的規則儲存,則仍然能無壓力解析。基於結構化的資料,能很方便利用視覺化工具完成日常的效能監控報告。歡迎分享、嘗試。

L1 7 誰是贏家 (10 分)

某電視台的娛樂節目有個表演評審環節,每次安排兩位藝人表演,他們的勝負由觀眾投票和 3 名評委投票兩部分共同決定。規則為 如果一位藝人的觀眾票數高,且得到至少 1 名評委的認可,該藝人就勝出 或藝人的觀眾票數低,但得到全部評委的認可,也可以勝出。節目保證投票的觀眾人數為奇數,所以不存在平票的情況。本題...

L1 7 吃魚還是吃肉(c ) 結構體

l1 7 吃魚還是吃肉 國家給出了 8 歲男寶寶的標準身高為 130 厘公尺 標準體重為 27 公斤 8 歲女寶寶的標準身高為 129 厘公尺 標準體重為 25 公斤。現在你要根據小寶寶的身高體重,給出補充營養的建議。輸入格式 輸入在第一行給出乙個不超過 10 的正整數 n,隨後 n 行,每行給出一...

L17 文字編輯工具vim(一)

1.vim介紹 vi 和vim最大的區別就是編輯乙個文字時,vi不會顯示顏色,而vim會顯示顏色。顯示顏色更易於使用者進行編輯。其他功能沒有什麼區別。所以在linux系統下,使用vi還是vim完全取決個人喜好。安裝 yum install y vim enhanced 一般模式 當vim filen...