Korrelation: Farbanpassung und Konsistenzprüfung
This commit is contained in:
@ -491,11 +491,6 @@ df['X_Dimension'] = df[[tag for tag in tags_to_search_processed if tag in df.col
|
|||||||
df['Y_Dimension'] = df[[cat for cat in categories_processed if cat in df.columns]].sum(axis=1)
|
df['Y_Dimension'] = df[[cat for cat in categories_processed if cat in df.columns]].sum(axis=1)
|
||||||
df['Z_Dimension'] = df[[rq for rq in research_questions_processed if rq in df.columns]].sum(axis=1)
|
df['Z_Dimension'] = df[[rq for rq in research_questions_processed if rq in df.columns]].sum(axis=1)
|
||||||
|
|
||||||
# Clusteranalyse mit K-Means basierend auf den deduktiven Dimensionen
|
|
||||||
features = df[['X_Dimension', 'Y_Dimension', 'Z_Dimension']]
|
|
||||||
scaler = StandardScaler()
|
|
||||||
scaled_features = scaler.fit_transform(features)
|
|
||||||
|
|
||||||
# Clusteranalyse mit K-Means basierend auf den deduktiven Dimensionen
|
# Clusteranalyse mit K-Means basierend auf den deduktiven Dimensionen
|
||||||
# Prüfung auf konstante deduktive Dimensionen
|
# Prüfung auf konstante deduktive Dimensionen
|
||||||
if df[['X_Dimension', 'Y_Dimension', 'Z_Dimension']].nunique().eq(1).all():
|
if df[['X_Dimension', 'Y_Dimension', 'Z_Dimension']].nunique().eq(1).all():
|
||||||
@ -568,6 +563,19 @@ for cluster in cluster_means.index:
|
|||||||
|
|
||||||
# Statische Cluster-Beschriftungen in den DataFrame einfügen
|
# Statische Cluster-Beschriftungen in den DataFrame einfügen
|
||||||
df['Cluster_Label'] = df['KMeans_Cluster'].map(cluster_labels)
|
df['Cluster_Label'] = df['KMeans_Cluster'].map(cluster_labels)
|
||||||
|
df['Cluster_Label'] = df['Cluster_Label'].fillna(df['KMeans_Cluster'])
|
||||||
|
|
||||||
|
# Farbzuordnung für die Clusterlabels aus den CI-Farben ableiten
|
||||||
|
fallback_color = cluster_colors.get("0", colors.get('primaryLine', '#1f77b4'))
|
||||||
|
color_map = {}
|
||||||
|
for cluster_key, label in cluster_labels.items():
|
||||||
|
base_color = cluster_colors.get(str(cluster_key), fallback_color)
|
||||||
|
color_map[label] = base_color
|
||||||
|
|
||||||
|
# Sicherstellen, dass auch eventuelle Restlabels (z.B. "Nicht gültig") erfasst werden
|
||||||
|
for label in df['Cluster_Label'].dropna().unique():
|
||||||
|
if label not in color_map:
|
||||||
|
color_map[label] = cluster_colors.get(str(label), fallback_color)
|
||||||
|
|
||||||
# Ausgabe der statischen Cluster-Beschriftungen
|
# Ausgabe der statischen Cluster-Beschriftungen
|
||||||
print("Cluster-Beschriftungen (inhaltlich):")
|
print("Cluster-Beschriftungen (inhaltlich):")
|
||||||
@ -584,7 +592,7 @@ fig_cluster = px.scatter_3d(
|
|||||||
color='Cluster_Label',
|
color='Cluster_Label',
|
||||||
size='Point_Size',
|
size='Point_Size',
|
||||||
size_max=100,
|
size_max=100,
|
||||||
color_discrete_sequence=list(cluster_colors.values()),
|
color_discrete_map=color_map,
|
||||||
hover_data={
|
hover_data={
|
||||||
'Cluster_Label': True,
|
'Cluster_Label': True,
|
||||||
'X_Dimension': True,
|
'X_Dimension': True,
|
||||||
@ -753,8 +761,17 @@ def plot_average_correlation_plotly(summary_df):
|
|||||||
)
|
)
|
||||||
# PNG-Export ergänzen
|
# PNG-Export ergänzen
|
||||||
png_path = os.path.join(export_path_png, f"{slugify('summary_plot_' + global_bib_filename.replace('.bib', ''))}.png")
|
png_path = os.path.join(export_path_png, f"{slugify('summary_plot_' + global_bib_filename.replace('.bib', ''))}.png")
|
||||||
|
try:
|
||||||
fig.write_image(png_path, width=1200, height=800, scale=2)
|
fig.write_image(png_path, width=1200, height=800, scale=2)
|
||||||
print(f"✅ PNG-Summary-Datei gespeichert unter: {png_path}")
|
print(f"✅ PNG-Summary-Datei gespeichert unter: {png_path}")
|
||||||
|
except ValueError as err:
|
||||||
|
if "kaleido" in str(err).lower():
|
||||||
|
print("⚠️ PNG-Export übersprungen: Plotly benötigt das Paket 'kaleido'.")
|
||||||
|
print(" Installation (falls gewünscht): pip install -U kaleido")
|
||||||
|
else:
|
||||||
|
print(f"⚠️ PNG-Export fehlgeschlagen: {err}")
|
||||||
|
except Exception as err:
|
||||||
|
print(f"⚠️ PNG-Export fehlgeschlagen: {err}")
|
||||||
|
|
||||||
#============================
|
#============================
|
||||||
# Aufruf Alle möglichen bivariaten Korrelationen visualisieren
|
# Aufruf Alle möglichen bivariaten Korrelationen visualisieren
|
||||||
|
|||||||
@ -166,13 +166,6 @@ def visualize_network(bib_database):
|
|||||||
if tag in keyword:
|
if tag in keyword:
|
||||||
tag_counts[tag] += 1
|
tag_counts[tag] += 1
|
||||||
|
|
||||||
fundzahlen = defaultdict(int)
|
|
||||||
for tag, count in tag_counts.items():
|
|
||||||
search_term = tag.split(':')[-1]
|
|
||||||
for key, value in search_terms.items():
|
|
||||||
if search_term == value:
|
|
||||||
fundzahlen[value] += count
|
|
||||||
|
|
||||||
search_terms_network = {
|
search_terms_network = {
|
||||||
"Primäre Begriffe": {
|
"Primäre Begriffe": {
|
||||||
"learning:management:system": [
|
"learning:management:system": [
|
||||||
@ -181,7 +174,7 @@ def visualize_network(bib_database):
|
|||||||
"online:lernplattform",
|
"online:lernplattform",
|
||||||
"online:lernumgebung",
|
"online:lernumgebung",
|
||||||
"digital:learning",
|
"digital:learning",
|
||||||
"digitales:lernen"
|
"digital:lernen"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Sekundäre Begriffe": {
|
"Sekundäre Begriffe": {
|
||||||
@ -191,15 +184,15 @@ def visualize_network(bib_database):
|
|||||||
],
|
],
|
||||||
"bildung:technologie": [
|
"bildung:technologie": [
|
||||||
"digital:learning",
|
"digital:learning",
|
||||||
"digitales:lernen",
|
"digital:lernen",
|
||||||
"blended:learning"
|
"blended:learning"
|
||||||
],
|
],
|
||||||
"digital:learning": [
|
"digital:learning": [
|
||||||
"digitale:medien",
|
"digital:medien",
|
||||||
"online:learning"
|
"online:learning"
|
||||||
],
|
],
|
||||||
"digitales:lernen": [
|
"digital:lernen": [
|
||||||
"digitale:medien",
|
"digital:medien",
|
||||||
"online:lernen"
|
"online:lernen"
|
||||||
],
|
],
|
||||||
"blended:learning": ["mooc"]
|
"blended:learning": ["mooc"]
|
||||||
@ -210,6 +203,14 @@ def visualize_network(bib_database):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Fundzählung exakt entlang der search_terms-Definition
|
||||||
|
fundzahlen = defaultdict(int)
|
||||||
|
|
||||||
|
for number, suchbegriff in search_terms.items():
|
||||||
|
for typ in types:
|
||||||
|
tag = f'#{number}:{typ}:{suchbegriff}'.lower()
|
||||||
|
fundzahlen[suchbegriff.lower()] += tag_counts.get(tag, 0)
|
||||||
|
|
||||||
G = nx.Graph()
|
G = nx.Graph()
|
||||||
|
|
||||||
hierarchy_colors = {
|
hierarchy_colors = {
|
||||||
|
|||||||
Reference in New Issue
Block a user