名古屋大学の障害情報一覧にあるネットワーク障害の発生年月日、発生月をPythonで解析してみる。2022/05/14 時点でのHTML構造に対応しているので、ホームページの構造が更新されると使えなくなることをご承知おきください。
データをダウンロード
import urllib.request import datetime suffix_urls = [""] for i in range(2,14): suffix_urls.append(f"page{i}/") datetimes = [] months = [] for suffix_url in suffix_urls: url = f"https://icts.nagoya-u.ac.jp/ja/information/trouble/{suffix_url}" filename = "a.html" urllib.request.urlretrieve(url, filename) for line in open(filename,encoding="utf-8").readlines(): if "ネットワーク障害について" in line: datetimes.append(datetime.datetime.strptime(line.replace(" ","")[6:17], '%Y年%m月%d日')) print(len(datetimes))
横軸に発生年月日、縦軸に障害累積回数を取って、どの時期に障害が多いのか確認する。
import matplotlib.pyplot as plt plt.plot(list(reversed(datetimes)),[i+1 for i in range(len(datetimes))]) plt.xlabel("発生年月日") plt.ylabel("障害累積回数") plt.grid() plt.show()
2018年は障害発生件数は比較的少ない他は、定常的に障害は発生しているようだ。
月ごとに発生回数のヒストグラムを作って、気温が高い夏に障害が多いのか、気温が低い冬に障害が少ないのか確認する。
plt.hist([dt.month for dt in datetimes], bins=12,range=[0.5,12.5]) plt.xticks([i for i in range(1,13)],[f"{i}月" for i in range(1,13)]) plt.xlabel("発生月") plt.ylabel("発生回数") plt.show()
2月は有意に少ない気がするが、他の月で傾向を見出すことはできなかった。
障害の内容が多種多様で、単なるハングアップから電源故障まで含むため、電源故障などの機器関連のみ抜き出せば、もう少し季節変動は見えたかもしれない。
障害発生から回復までの時間を取得する
import urllib.request import datetime suffix_urls = [""] for i in range(2,14): suffix_urls.append(f"page{i}/") datetimes = [] months = [] for suffix_url in suffix_urls: url = f"https://icts.nagoya-u.ac.jp/ja/information/trouble/{suffix_url}" filename = "a.html" urllib.request.urlretrieve(url, filename) for line in open(filename,encoding="utf-8").readlines(): if "ネットワーク障害について" in line: url2 = "https://icts.nagoya-u.ac.jp"+line.split("\"")[1] filename2 = "b.html" urllib.request.urlretrieve(url2, filename2) lines2 = open(filename2,encoding="utf-8").readlines() for j, line2 in enumerate(lines2): if "障害発生時間" in line2: if "~" not in lines2[j+1]: print(lines2[j+2].replace("</p>",""),end="") else: print(lines2[j+1].replace("</p>",""),end="") print(len(datetimes))
出力結果はここには載せない。気になる人は各自実行してみて欲しい。