Я написал коды для демонстрации значений 3 параметров [Скорость, Ускорение, Температура] из моего набора данных (текстовый файл) с помощью графиков HeatMap в форме матрицы 24x20.Данные в текстовом файле были сохранены в следующем порядке: указатель-скорость-ускорение-температура и повторялись много раз, а после 480 раз повторялись снова как 2-й цикл и так далее.Таким образом, я извлек эти основные параметры и поместил их в списки, и для каждого параметра в каждом цикле я печатаю и сохраняю CSV-файл и пытаюсь отобразить каждое значение, а также пытаюсь отобразить отсутствующие значения (включая nan и inf) для каждого параметра и попытаться получитьвсе графики в одном окне с заголовком номера правильного цикла и попытаться подсчитать пропущенные значения (не только nan , но также inf ), чтобы указать следующие графики при получении графикадля них через insnull
и замену пропущенных значений на 0 (я предпочитаю заменять Nan и Inf на последнее доступное значение в предыдущем цикле или в лучшем случае заменить на среднее значение значений последнего и следующего доступных циклов вместо 0), ноСтолкнулся с ошибкой ниже:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Мне интересно, есть ли элегантный способ подсчитывать inf и nan отдельно в списках и распечатывать их в окне графика через HeatMap
и isnull
для каждого цикла, включая подсчетинформация и сохранить их где-нибудь на жестком диске для других задач.Мои сценарии следующие:
import sys
import os
import numpy as np
import pandas as pd
#from sklearn.preprocessing import minmax_scale
import seaborn as sns
import matplotlib.pyplot as plt
def mkdf(ListOf480Numbers):
normalMatrix = np.array_split(ListOf480Numbers,8)
fixMatrix = []
for i in range(8):
lines = np.array_split(normalMatrix[i],6)
newMatrix = [0,0,0,0,0,0]
for j in (1,3,5):
newMatrix[j] = lines[j]
for j in (0,2,4):
newMatrix[j] = lines[j][::-1]
fixMatrix.append(newMatrix)
return fixMatrix
def print_df(fixMatrix):
values = []
for i in range(6):
values.append([*fixMatrix[6][i], *fixMatrix[7][i]])
for i in range(6):
values.append([*fixMatrix[4][i], *fixMatrix[5][i]])
for i in range(6):
values.append([*fixMatrix[2][i], *fixMatrix[3][i]])
for i in range(6):
values.append([*fixMatrix[0][i], *fixMatrix[1][i]])
df = pd.DataFrame(values)
return (df)
df = pd.read_csv('D:\me4.TXT', header=None)
id_set = df[df.index % 4 == 0].astype('int').values
Speed = df[df.index % 4 == 1].values
Acceleration = df[df.index % 4 == 2].values
Temperature = df[df.index % 4 == 3].values
data = {'Speed': Speed[:,0], 'Acceleration': Acceleration[:,0], 'Temperature': Temperature[:,0]}
main_data = pd.DataFrame(data, columns=['Speed','Acceleration','Temperature'], index = id_set[:,0])
def plotheatmap(new_value):
Sections = mkdf(new_value)
df = print_df(Sections)
sns.heatmap(df, vmin=min_nor, vmax=max_nor, cmap ='coolwarm')
plt.title(i, fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.savefig(f'{i}/{i}{count}.png')
plt.clf()
return
'''
Missing data plot
'''
Speed = np.array(Speed, dtype='float64')
Acceleration = np.array(Acceleration, dtype='float64')
Temperature = np.array(Temperature, dtype='float64')
df = pd.DataFrame({"Speed":[Speed],"Acceleration":[Acceleration],"Temperature":[Temperature]})
#pd.isnull(np.array([np.nan, 0], dtype=object))
pd.isnull(np.array([np.nan, 0], dtype=float))
df = df.replace(0,np.nan)
df = df.replace(1,np.inf)
plt.subplot2grid((3, 3), (2, 0), colspan=3)
plt.suptitle('Analysis of data in cycle Nr.{count}', fontsize=14, fontweight='bold')
plt.subplots_adjust(hspace=0.5, bottom=0.1)
sns.heatmap(df.isnull(),cbar=False)
plt.text(3, 4, r'nan={c} inf={d}',
verticalalignment='bottom', horizontalalignment='right', color='green', fontsize=15)
nan = np.array(df.isnull())
inf = np.array(df.isnull())
count_nan = len(df) - df.count()
print(count_nan)
c = 0
for i in nan:
for j in i:
if j:
c += 1
print(f'Total nan: {c}')
d = 1
for i in inf:
for j in i:
if j:
d += 1
print(f'Total inf: {d}')
plt.title(f'Total missing values: {c+d}', fontsize=12, color='black',
loc='left', style='italic')
plt.axis('off')
cycles = int(len(main_data)/480)
print(f'Total cycles: {cycles}')
for i in main_data:
for cycle in range(3):
count = '{:04}'.format(cycle)
j = cycle * 480
ordered_data = mkdf(main_data.iloc[j:j+480][i])
csv = print_df(ordered_data)
csv.to_csv(f'{i}{count}.csv', header=None, index=None)
Sections = mkdf(ordered_data)
df = print_df(Sections)
plt.title(i, fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.savefig(f'{i}{count}.png')
plt.clf()
'''
Speed plot
'''
Speed_df = pd.read_csv("Speed.csv",header=None)
plt.subplot2grid((3, 3), (0, 0), colspan=1)
sns.heatmap(Speed_df, vmin=-1, vmax=1, cmap ="coolwarm")
plt.title('Speed', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
'''
Speed missing plot
'''
Speed_df = pd.read_csv("Speed.csv",header=None)
Speed_df = Speed_df.replace(0,np.nan)
plt.subplot2grid((3, 3), (1, 0), colspan=1)
sns.heatmap(Speed_df.isnull(),cbar=False)
plt.title(f'Speed MV: {c}', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
'''
acceleration plot
'''
acc_df = pd.read_csv("acceleration.csv",header=None)
plt.subplot2grid((3, 3), (0, 1), colspan=1)
sns.heatmap(acc_df, vmin=-1, vmax=1, cmap ="coolwarm")
plt.title('acceleration', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
'''
acceleration missing plot
'''
acceleration_df = pd.read_csv("acceleration.csv",header=None)
acceleratione_df = acceleration_df.replace(0,np.nan)
plt.subplot2grid((3, 3), (1, 1), colspan=1)
sns.heatmap(acceleration_df.isnull(),cbar=False)
plt.title(f'accel MV: {c}', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
'''
Temperature plot
'''
temp_df = pd.read_csv("temperature.csv",header=None)
plt.subplot2grid((3, 3), (0, 2), colspan=1)
sns.heatmap(temp_df, vmin=-40, vmax=150, cmap ="coolwarm")
plt.title('Temperature', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
'''
Temperature missing plot
'''
temperature_df = pd.read_csv("temperature.csv",header=None)
temperature_df = temperature_df.replace(0,np.nan)
temperature_df = temperature_df.replace(0,np.inf)
plt.subplot2grid((3, 3), (1, 2), colspan=1)
sns.heatmap(temperature_df.isnull(),cbar=False)
plt.title(f'temp MV: {c}', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.show()
Мой желаемый результат:
Я также предоставляю образец текстового файла набора данных для 3 циклов:
1024 * набор данных *