樣例資料如下
步驟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...