You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.5 KiB
47 lines
1.5 KiB
import pandas as pd |
|
import matplotlib.pyplot as plt |
|
import seaborn as sns |
|
from all_arguments import arguments as arguments_dict # Arguments dictionary with sentiment information |
|
|
|
|
|
# Step 1: Read the CSV file |
|
df = pd.read_csv('speeches.csv', delimiter=';') |
|
|
|
# Step 2: Extract relevant columns |
|
# Assuming the arguments start from the 5th column onwards |
|
arguments = df.columns[5:] |
|
df_arguments = df[['_key', 'name'] + list(arguments)] |
|
|
|
# Step 3: Create a binary matrix for arguments |
|
# Convert the argument columns to integers |
|
df_arguments[arguments] = df_arguments[arguments].apply(pd.to_numeric, errors='coerce').fillna(0).astype(int) |
|
|
|
# Step 4: Sum the arguments for each politician |
|
df_sum = df_arguments.groupby('name')[arguments].sum().reset_index() |
|
|
|
# Step 5: Plot the data |
|
plt.figure(figsize=(12, 8)) |
|
sns.heatmap(df_sum.set_index('name'), annot=True, cmap='coolwarm', cbar=True) |
|
plt.title('Arguments Used by Politicians') |
|
plt.xlabel('Arguments') |
|
plt.ylabel('Politicians') |
|
|
|
# Step 6: Color the x-axis labels based on sentiment |
|
ax = plt.gca() |
|
x_labels = ax.get_xticklabels() |
|
for label in x_labels: |
|
argument = label.get_text() |
|
sentiment = arguments_dict.get(argument, {}).get('sentiment', 'neutral') |
|
if sentiment == 'positive': |
|
label.set_color('green') |
|
elif sentiment == 'negative': |
|
label.set_color('red') |
|
else: |
|
label.set_color('black') |
|
|
|
plt.xticks(rotation=45, ha='right') |
|
plt.tight_layout() |
|
|
|
# Save the plot instead of showing it |
|
plt.savefig('arguments_used_by_politicians.png') |
|
plt.close() |