|
import seaborn as sns
|
|
import matplotlib.pyplot as plt
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
def plot_emotion_confusion_matrix(results_df, emotion_columns):
|
|
|
|
correct_count = {emotion: 0 for emotion in emotion_columns}
|
|
incorrect_count = {emotion: 0 for emotion in emotion_columns}
|
|
undefined_count = {emotion: 0 for emotion in emotion_columns}
|
|
|
|
for idx, row in results_df.iterrows():
|
|
true_emotions = set(row['true emotions'].split()) if isinstance(row['true emotions'], str) else set()
|
|
predicted_emotions = set(row['predict emotions'].split()) if isinstance(row['predict emotions'], str) else set()
|
|
|
|
for emotion in emotion_columns:
|
|
if emotion in true_emotions and emotion in predicted_emotions:
|
|
correct_count[emotion] += 1
|
|
elif emotion in predicted_emotions and emotion not in true_emotions:
|
|
incorrect_count[emotion] += 1
|
|
elif emotion in true_emotions and emotion not in predicted_emotions:
|
|
undefined_count[emotion] += 1
|
|
|
|
data = []
|
|
for emotion in emotion_columns:
|
|
data.append([
|
|
correct_count[emotion],
|
|
incorrect_count[emotion],
|
|
undefined_count[emotion]
|
|
])
|
|
|
|
heatmap_df = pd.DataFrame(data, columns=["Correctly Identified", "Incorrectly Identified", "Undefined"], index=emotion_columns)
|
|
|
|
num_examples = len(results_df)
|
|
|
|
plt.figure(figsize=(10, 12))
|
|
sns.heatmap(heatmap_df, annot=True, cmap="Blues", fmt="d", cbar=False)
|
|
plt.title(f"Emotion Prediction Confusion Matrix (Examples: {num_examples})")
|
|
plt.xlabel("Prediction Status")
|
|
plt.ylabel("Emotion")
|
|
plt.xticks(rotation=45, ha="right")
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
|
|
def plot_true_emotion_frequency(results_df, emotion_columns):
|
|
|
|
true_emotion_count = {emotion: 0 for emotion in emotion_columns}
|
|
|
|
for idx, row in results_df.iterrows():
|
|
true_emotions = set(row['true emotions'].split()) if isinstance(row['true emotions'], str) else set()
|
|
|
|
for emotion in emotion_columns:
|
|
if emotion in true_emotions:
|
|
true_emotion_count[emotion] += 1
|
|
|
|
data = []
|
|
for emotion in emotion_columns:
|
|
data.append([true_emotion_count[emotion]])
|
|
|
|
heatmap_df = pd.DataFrame(data, columns=["True Emotion Count"], index=emotion_columns)
|
|
|
|
plt.figure(figsize=(10, 12))
|
|
sns.heatmap(heatmap_df, annot=True, cmap="YlGnBu", fmt="d", cbar=False)
|
|
plt.title(f"True Emotion Frequency (Examples: {len(results_df)})")
|
|
plt.xlabel("True Emotion Count")
|
|
plt.ylabel("Emotion")
|
|
plt.xticks(rotation=45, ha="right")
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
|
|
def plot_predicted_emotion_frequency(results_df, emotion_columns):
|
|
|
|
predicted_emotion_count = {emotion: 0 for emotion in emotion_columns}
|
|
|
|
for idx, row in results_df.iterrows():
|
|
predicted_emotions = set(row['predict emotions'].split()) if isinstance(row['predict emotions'], str) else set()
|
|
|
|
for emotion in emotion_columns:
|
|
if emotion in predicted_emotions:
|
|
predicted_emotion_count[emotion] += 1
|
|
|
|
data = []
|
|
for emotion in emotion_columns:
|
|
data.append([predicted_emotion_count[emotion]])
|
|
|
|
heatmap_df = pd.DataFrame(data, columns=["Predicted Emotion Count"], index=emotion_columns)
|
|
|
|
plt.figure(figsize=(10, 12))
|
|
sns.heatmap(heatmap_df, annot=True, cmap="YlOrRd", fmt="d", cbar=False)
|
|
plt.title(f"Predicted Emotion Frequency (Examples: {len(results_df)})")
|
|
plt.xlabel("Predicted Emotion Count")
|
|
plt.ylabel("Emotion")
|
|
plt.xticks(rotation=45, ha="right")
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
|
|
csv_path = "RuBert-tiny2-EmotionsDetected/Dstasets/Emotions_detected.csv"
|
|
results_df = pd.read_csv(csv_path)
|
|
|
|
emotion_columns = [
|
|
"admiration", "amusement", "anger", "annoyance", "approval", "caring", "confusion", "curiosity", "desire",
|
|
"disappointment", "disapproval", "disgust", "embarrassment", "excitement", "fear", "gratitude", "grief", "joy",
|
|
"love", "nervousness", "optimism", "pride", "realization", "relief", "remorse", "sadness", "surprise", "neutral"
|
|
]
|
|
|
|
plot_true_emotion_frequency(results_df, emotion_columns)
|
|
plot_predicted_emotion_frequency(results_df, emotion_columns)
|
|
plot_emotion_confusion_matrix(results_df, emotion_columns)
|
|
|