<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Betrachtung und Analyse der Lerndaten
Es werden zunächst die Daten Betrachtet, um Besonderheiten zu finden, und sich mit den Daten vertraut zu machen.
Step1:  Zunächst werden die Daten geladen.
Step2:  So sehen die Daten aus
Step3:  Sehen wir uns die Verteilung der Klassen an
Step4:  Wenn die Klassen vorher auf 0 und 1 rediziert werden, sieht das Ergebnis etwas anders aus
Step5:  Als naechstes soll die Klassenhierarchie betrachtet werden. Sehen wir uns zunaechst die Surchschnittliche Summe der Klassenlabels innerhalb der Oberklassen an.
Step6:  Betrachten wir nun Korrelationen zwischen Klassen. Dazu werden die summierten Abstände zwischen den Werten von jeweils zwei Klassen aufgetragen. Blau
<ASSISTANT_TASK:>
Python Code:
from tweet import Tweet
import numpy as np
from csv_handling import load_tweet_csv
import matplotlib.pyplot as plt
Explanation: Betrachtung und Analyse der Lerndaten
Es werden zunächst die Daten Betrachtet, um Besonderheiten zu finden, und sich mit den Daten vertraut zu machen.
End of explanation
tweets = load_tweet_csv("train.csv", use_pickle=False, use_cache=False)
Explanation: Zunächst werden die Daten geladen.
End of explanation
len(tweets)
tweets[:10]
[t["tweet"] for t in tweets[:5]]
Explanation: So sehen die Daten aus:
End of explanation
fig, ax = plt.subplots()
classes = Tweet.get_all_keys()
y_pos = np.arange(len(classes))
classes_sum = [0]*len(classes)
for tweet in tweets:
    for i in range(len(classes)):
        classes_sum[i] += tweet[classes[i]]
ax.barh(y_pos, classes_sum, align='center',
        color='green', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(classes)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Summe aller vergebenen Labelwahrscheinlichkeiten')
ax.set_title('Vorkommen der einzelnen Klassen')
plt.show()
Explanation: Sehen wir uns die Verteilung der Klassen an:
End of explanation
fig, ax = plt.subplots()
classes_bin_sum = [0] * len(classes)
for tweet in tweets:
    for i in range(len(classes)):
        classes_bin_sum[i] += 1 if tweet[classes[i]] > 0.5 else 0
ax.barh(y_pos, classes_bin_sum, align='center',
        color='green', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(classes)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Summe aller gerundeten vergebenen Labelwahrscheinlichkeiten')
ax.set_title('Vorkommen der einzelnen Klassen, binaer betrachtet')
plt.show()
Explanation: Wenn die Klassen vorher auf 0 und 1 rediziert werden, sieht das Ergebnis etwas anders aus:
End of explanation
fig, ax = plt.subplots()
class_groups = ["k", "s", "w"]
y_pos = np.arange(len(class_groups))
main_classes_sum = [0] * len(class_groups)
for tweet in tweets:
    for tweet_class in classes:
        main_classes_sum[class_groups.index(tweet_class[0])] += tweet[tweet_class]
main_classes_sum = [grp/len(tweets) for grp in main_classes_sum]
ax.barh(y_pos, main_classes_sum, align='center',
        color='green', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(class_groups)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Druchschnittliche Summe der Labels pro Oberklasse')
ax.set_title('Klassenhierarchie, Summe der Unterklassen')
plt.show()
Explanation: Als naechstes soll die Klassenhierarchie betrachtet werden. Sehen wir uns zunaechst die Surchschnittliche Summe der Klassenlabels innerhalb der Oberklassen an.
End of explanation
fig, ax = plt.subplots(figsize=(8, 8))
classes = Tweet.get_all_keys()
y_pos = np.arange(len(classes))
error = np.full((len(classes), len(classes)), 0, dtype=int)
for tweet in tweets[:100]:
    for i, class_i in enumerate(classes):
        for j, class_j in enumerate(classes):
            error[i, j] += abs((tweet[class_i] - tweet[class_j]))
ax.set_yticks(y_pos)
ax.set_yticklabels(classes)
ax.set_xticks(y_pos)
ax.set_xticklabels(classes)
ax.set_title('Korrelation zwischen Klassen')
plt.imshow(error, interpolation='nearest')
plt.show()
Explanation: Betrachten wir nun Korrelationen zwischen Klassen. Dazu werden die summierten Abstände zwischen den Werten von jeweils zwei Klassen aufgetragen. Blau: Korrelation, Grün: Keine Korrelation, Rot: Antikorrelation.
End of explanation
<END_TASK>