pythonでグラフがフリーズしてしまう

実現したいこと
[1] excelのデータを読み込み、機械学習にかける
[2]機械学習が検出した値(tp,fp,tn,fn)をデータフレームに格納する
[3]格納した値の移動平均をとる
[4][3]の値をグラフに描画する
[5][1]~[4]を繰り返す

最終的にはリアルタイムで動くグラフを作成したいです。

前提

pythonで作成しています。
上記の[1]~[3]は動作確認済みです。

発生している問題・エラーメッセージ

[4]のグラフを描画する際に「応答なし」と出て、グラフが真っ白の画面でフリーズしてしまいます。
コンソールは正常に動作しています。

### 該当のソースコード ``python3.8 import pandas as pd from sklearn.svm import OneClassSVM from sklearn.metrics import confusion_matrix import matplotlib.pyplot as plt from matplotlib import dates as mdates from datetime import datetime as dt from matplotlib import animation dataname = 'xxxxxx' #データ名の入力 dt_head=dt(2023,10,30,0,0,0) #データの先頭の時間 dt_end=dt(2023,10,31,0,0,0) #データの末の時間 n = 20000 # a = 全データ数 data=pd.read_excel(dataname+".xlsx",header=0, parse_dates={'DateTime': ['Date', 'Time']}) df_train = pd.read_excel(dataname+".xlsx",skiprows=1,names=['Date','Time','TER1', 'TER2','Rf_current','WB_status', 'Rf_voltage','WB_max_current', 'WB_ave_current','WB_max_current_time', 'WB_driving_time','object_variable']) df1 = pd.DataFrame() fig = plt.figure() for i in range(1,n-998,1): df_train_a = df_train[i-1:i+999] df_train_re = df_train_a.drop(['object_variable','Date','Time','TER1','TER2'],axis=1) X_train = df_train_re.to_numpy() Y_train = df_train_a['object_variable'].to_numpy() clf = OneClassSVM(kernel='rbf',gamma = 1,nu = 0.01 ) clf.fit(X_train) Y_pred = clf.predict(X_train) cm=confusion_matrix(Y_train, Y_pred, labels=[1,-1]) tn,fp,fn,tp=cm.flatten() list_ = [[tp,fn,fp,tn]] df1_new = pd.DataFrame(list_,columns = ['tp','fn','fp','tn']) df1 = pd.concat([df1,df1_new]) df2=pd.DataFrame() df1['x'] = df1.loc[:,'tn']+df1.loc[:,'fn'] df1['y'] = df1.loc[:,'tp']+df1.loc[:,'fp'] df1['z'] = df1['x'] - df1['y'] z_rolling = pd.DataFrame(df1['z']).rolling(window=500).mean() def plot(j): plt.rcParams["xtick.direction"] = "in" plt.rcParams["ytick.direction"] = "in" plt.xlim(dt_head, dt_end) plt.ylim([0,1000]) plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%m-%d")) plt.xlabel("Date") plt.ylabel("The number of datasets") plt.cla() A = data["DateTime"].values B = A[:j] df2 = z_rolling[:j] plt.plot(B,df2,'g') ani = animation.FuncAnimation(fig, plot, interval=1000) plt.show()

試したこと

私なりに調べましたが有効な解決策が見い出せず、質問させていただきます。
ちなみに、excelのデータ数を大幅に減らすと、アニメーションのグラフが出力されました。

補足情報(FW/ツールのバージョンなど)

プログラムの作成、実行にspyderを使用しています。

コメントを投稿

0 コメント