python 办公自动化系列 (1) 从22053条数据中统计断网次数并计算平均断网时间

简介: 找到通网后的第一个日志和断网前的最后一个日志,然后提取 date 列的时间做减法,获得本次断网时间,之后用同样的方法统计每次的断网时间,最后计算总的断网次数和断网时间的平均值

一、需求


aliyun-ddns.html文件里有服务器相关的一些日志信息,具体如下:



需求:找到通网后的第一个日志和断网前的最后一个日志,然后提取 date 列的时间做减法,获得本次断网时间,之后用同样的方法统计每次的断网时间,最后计算总的断网次数断网时间的平均值。



二、python代码实现


pd.read_html()方法,可以直接将网页上这种表格型数据转成DataFrame


importpandasaspd# pd.read_html()方法,可以直接将网页上这种表格型数据转成DataFramedf=pd.read_html(r'aliyun-ddns.html')[0]
df


运行效果如下:


可以看到,总共有22053条数据,人工去找断网前最后一个日志和通网后的第一个日志,再算断网时间,想起来都挺费劲的,还很无聊。


Python自动化办公当然是为了在处理这些简单、重复、有规律的任务时,能够帮助我们解放双手,让复杂的工作自动化。


不过在写自动化脚本之前也要先拆分任务,明确思路再进行操作。


任务拆解


如何找到断网前最后一个日志和通网后的第一个日志


# 通网的日志   content列的字符串len('2020/08/25 13:30:58 m.hlnas.top 112.226.49.5 [中国 山东 青岛]')
# 断网的日志   content列里的字符串len('2020/08/24 16:59:03 Query IP Format error.')
len('2020/08/25 12:30:55 m.hlnas.top')



分析通网和断网的日志里content列里内容的长度,找断网前最后一个日志和通网后的第一个日志的基本思路如下:


  • 第 i 行 content列里字符串长度大于50,i+1 行content列里字符串长度小于45,这个第 i 行则为断网前的最后一个日志。
  • 第 i 行 content列里字符串长度小于45,i+1 行content列里字符串长度大于50,这个第 i+1 行则为通网后的第一个日志。


算时间差


importpandasaspdtime_delta=pd.to_datetime('2020-08-25 04:35:56') -pd.to_datetime('2020-08-25 04:04:50')
print(time_delta)
print(time_delta.components)
print(time_delta.components.days)      
print(time_delta.components.hours)
print(time_delta.components.minutes)
print(time_delta.components.seconds)
print(time_delta.total_seconds())     # 总的秒数运行结果如下:0days00:31:06Components(days=0, hours=0, minutes=31, seconds=6, milliseconds=0, microseconds=0, nanoseconds=0)
003161866.0


完整实现如下


importpandasaspd# pd.read_html()方法,可以直接将网页上这种表格型数据转成DataFramedf=pd.read_html('aliyun-ddns.html')[0]
count= []    # 记录总的断网 通网次数 [(断网日志的行索引, 通网日志的行索引)...]flag=0record= []   # 记录一次的断网 同网  (断网日志的行索引, 通网日志的行索引)foriinrange(len(df)):
try:
iflen(df.iloc[i+1, ::]['content']) <45andlen(df.iloc[i, ::]['content']) >50:   #   断网前最后一个日志record.append(i)
flag+=1iflen(df.iloc[i+1, ::]['content']) >50andlen(df.iloc[i, ::]['content']) <45:   #  通网后第一个日志record.append(i+1)
flag+=1ifflag==2:
count.append(record)
flag=0# 置为0record= []   # 置为空exceptIndexError:    # 超界   说明遍历统计结束passprint(count)        


从统计的结果任选两条进行查看,对比看看是否找对。




对比可以发现,查找结果完全正确。


# 统计断网次数print(f'断网次数:{len(count)}')


# 计算时间差data= []
foritemincount:
disconnection_time=df.loc[item[0], ::]['date']    # 断网时间connection_time=df.iloc[item[1], ::]['date']      # 通网时间delta= (pd.to_datetime(disconnection_time) -pd.to_datetime(connection_time)).total_seconds() # 总秒数data.append({'断网时间': disconnection_time, '通网时间': connection_time, '时间差(秒)': delta})
datas=pd.DataFrame(data)
datas.head(8)



# 求断网时间的平均值averge=datas['时间差'].mean()
print('断网时间平均值:{:.3f}s'.format(averge))
# 数据保存到Exceldf.to_excel('aliyun-ddns.xlsx')
datas.to_excel('cal_datas.xlsx')



从这批数据中统计得到,断网次数为97,平均断网时间为6133.938s。


保存每次记录如下:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by=&#39;A&#39;, ascending=False)`。`rank()`函数用于计算排名,如`df[&#39;A&#39;].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=[&#39;A&#39;, &#39;B&#39;], ascending=[True, False])`和分别对&#39;A&#39;、&#39;B&#39;列排名。
13 2
|
2天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
24 1
|
1天前
|
机器学习/深度学习 算法 Python
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
20 4
|
2天前
|
机器学习/深度学习 算法 算法框架/工具
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
21 0
|
2天前
|
机器学习/深度学习 数据挖掘 网络架构
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
12 0
|
2天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
10 0
|
4天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
37 9
|
缓存 Python 数据安全/隐私保护

热门文章

最新文章