Das Skript liest direkt deine Thermometer.csv (mit Systemebene = psychisch|sozial), konstruiert ein bipartites Netz (Systemebene ↔ Item) mit Kantengewicht = Effektstärke (Vorzeichen bleibt erhalten), rendert ein interaktives Spring-Layout und exportiert (optional) JSON mit Knoten/Kanten & einfachen Zentralitäten.
This commit is contained in:
2093
export/network_systemebenen.json
Normal file
2093
export/network_systemebenen.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,130 +1,130 @@
|
|||||||
Thermometer_ID,Stichwort,Kapitel,Kapitelname,Effektstärke,Psych,Sozial,Adressierung,Kopplungsindex
|
Thermometer_ID,Stichwort,Kapitel,Kapitelname,Effektstärke,Psych,Sozial,Psych_Score,Sozial_Score,Adressierung,Kopplungsindex
|
||||||
5.01,Vorausgehende Fähigkeiten & Intelligenz,5,Lernende,0.96,1,0,Psychisch adressiert,0.42985074626865666
|
5.01,Vorausgehende Fähigkeiten & Intelligenz,5,Lernende,0.96,1,0,0.2527880175581538,0.0,Unspezifisch,0.0
|
||||||
5.02,Vorausgehendes Leistungsniveau,5,Lernende,0.73,0,0,Unspezifisch,0.108955223880597
|
5.02,Vorausgehendes Leistungsniveau,5,Lernende,0.73,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.03,Beziehung zwischen Schul- und Berufsleistungen,5,Lernende,0.37,0,1,Sozial adressiert,0.16567164179104474
|
5.03,Beziehung zwischen Schul- und Berufsleistungen,5,Lernende,0.37,0,1,0.15964837245995286,1.0,Sozial adressiert,0.07602651689610047
|
||||||
5.04,Beziehung zwischen Schul- und Universitätsleistungen,5,Lernende,0.55,0,1,Sozial adressiert,0.2462686567164179
|
5.04,Beziehung zwischen Schul- und Universitätsleistungen,5,Lernende,0.55,0,1,0.15964837245995286,1.0,Sozial adressiert,0.11301238998068991
|
||||||
5.05,Erkenntnisstufen,5,Lernende,1.28,0,0,Unspezifisch,0.191044776119403
|
5.05,Erkenntnisstufen,5,Lernende,1.28,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.06,Exekutive Funktionen,5,Lernende,0.62,1,0,Psychisch adressiert,0.27761194029850744
|
5.06,Exekutive Funktionen,5,Lernende,0.62,1,0,0.1691895074980196,0.0,Unspezifisch,0.0
|
||||||
5.07,Stärke des Arbeitsgedächtnisses,5,Lernende,0.63,1,0,Psychisch adressiert,0.28208955223880594
|
5.07,Stärke des Arbeitsgedächtnisses,5,Lernende,0.63,1,0,0.2124709760649637,0.0,Unspezifisch,0.0
|
||||||
5.08,Vorschulische nicht-kognitive Fähigkeiten,5,Lernende,0.2,0,0,Unspezifisch,0.029850746268656716
|
5.08,Vorschulische nicht-kognitive Fähigkeiten,5,Lernende,0.2,0,0,0.031812831785820506,0.0,Unspezifisch,0.0
|
||||||
5.09,Gekreuzte Lateralität,5,Lernende,-0.03,0,0,Unspezifisch,-0.004477611940298508
|
5.09,Gekreuzte Lateralität,5,Lernende,-0.03,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.1,Feldunabhängigkeit,5,Lernende,0.94,0,0,Unspezifisch,0.14029850746268654
|
5.1,Feldunabhängigkeit,5,Lernende,0.94,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.11,Beurteilung der eigenen Leistungsfähigkeit,5,Lernende,0.96,0,0,Unspezifisch,0.14328358208955225
|
5.11,Beurteilung der eigenen Leistungsfähigkeit,5,Lernende,0.96,0,0,0.0,0.04381564319288124,Unspezifisch,0.0
|
||||||
5.12,Kreativität und Lernleistung in Beziehung setzen,5,Lernende,0.4,1,1,Kopplung (Psych+Sozial),0.29850746268656714
|
5.12,Kreativität und Lernleistung in Beziehung setzen,5,Lernende,0.4,1,1,0.40108966731777734,0.8874646677220274,Sozial adressiert,0.1649206348742427
|
||||||
5.13,Kritisches Denken,5,Lernende,0.84,0,0,Unspezifisch,0.1253731343283582
|
5.13,Kritisches Denken,5,Lernende,0.84,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.14,Beharrlichkeit und Zuversicht (Mindset),5,Lernende,0.19,1,0,Psychisch adressiert,0.08507462686567163
|
5.14,Beharrlichkeit und Zuversicht (Mindset),5,Lernende,0.19,1,0,0.9999999999999998,0.13892955428098744,Psychisch adressiert,0.034592072139558915
|
||||||
5.15,Beharrlichkeit und Zuversicht (Achtsamkeit),5,Lernende,0.26,1,0,Psychisch adressiert,0.11641791044776119
|
5.15,Beharrlichkeit und Zuversicht (Achtsamkeit),5,Lernende,0.26,1,0,1.0,0.13892955428098744,Psychisch adressiert,0.04733651976992273
|
||||||
5.16,Beharrlichkeit und Zuversicht (Durchhaltevermögen),5,Lernende,0.35,1,0,Psychisch adressiert,0.15671641791044774
|
5.16,Beharrlichkeit und Zuversicht (Durchhaltevermögen),5,Lernende,0.35,1,0,1.0,0.13892955428098744,Psychisch adressiert,0.06372223815181906
|
||||||
5.17,Beharrlichkeit und Zuversicht (Konzentration / Ausdauer und Engagement),5,Lernende,0.41,1,0,Psychisch adressiert,0.18358208955223876
|
5.17,Beharrlichkeit und Zuversicht (Konzentration / Ausdauer und Engagement),5,Lernende,0.41,1,0,0.9169443794419201,0.18294588632083286,Psychisch adressiert,0.09333087485819039
|
||||||
5.18,Beharrlichkeit und Zuversicht (Selbstwirksamkeitserwartung),5,Lernende,0.64,1,0,Psychisch adressiert,0.28656716417910444
|
5.18,Beharrlichkeit und Zuversicht (Selbstwirksamkeitserwartung),5,Lernende,0.64,1,0,1.0,0.13892955428098744,Psychisch adressiert,0.11652066404904056
|
||||||
5.19,Beharrlichkeit und Zuversicht (Positives Selbstbild),5,Lernende,0.51,1,0,Psychisch adressiert,0.22835820895522385
|
5.19,Beharrlichkeit und Zuversicht (Positives Selbstbild),5,Lernende,0.51,1,0,0.9150153385998437,0.11671160860050925,Psychisch adressiert,0.07879034982332515
|
||||||
5.2,Beharrlichkeit und Zuversicht (Selbstkontrolle),5,Lernende,0.66,1,0,Psychisch adressiert,0.2955223880597015
|
5.2,Beharrlichkeit und Zuversicht (Selbstkontrolle),5,Lernende,0.66,1,0,1.0,0.13892955428098744,Psychisch adressiert,0.12016193480057308
|
||||||
5.21,Schülerpersönlichkeit,5,Lernende,0.18,0,1,Sozial adressiert,0.08059701492537313
|
5.21,Schülerpersönlichkeit,5,Lernende,0.18,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
5.22,Perfektionismus,5,Lernende,-0.03,0,0,Unspezifisch,-0.004477611940298508
|
5.22,Perfektionismus,5,Lernende,-0.03,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.23,Emotionen,5,Lernende,0.61,1,0,Psychisch adressiert,0.27313432835820894
|
5.23,Emotionen,5,Lernende,0.61,1,0,0.2617553433696667,0.0,Unspezifisch,0.0
|
||||||
5.24,Emotionen (Emotionale Intelligenz),5,Lernende,0.5,1,0,Psychisch adressiert,0.22388059701492535
|
5.24,Emotionen (Emotionale Intelligenz),5,Lernende,0.5,1,0,0.32326820154195457,0.0,Unspezifisch,0.0
|
||||||
5.25,Emotionen (Wohlbefinden),5,Lernende,0.08,1,0,Psychisch adressiert,0.035820895522388055
|
5.25,Emotionen (Wohlbefinden),5,Lernende,0.08,1,0,0.2565764928702714,0.0,Unspezifisch,0.0
|
||||||
5.26,Positiv-aktivierend (Freude),5,Lernende,0.5,0,0,Unspezifisch,0.07462686567164178
|
5.26,Positiv-aktivierend (Freude),5,Lernende,0.5,0,0,0.1794134564197927,0.0,Unspezifisch,0.0
|
||||||
5.27,Positiv-aktivierend (Hoffnung),5,Lernende,0.2,0,0,Unspezifisch,0.029850746268656716
|
5.27,Positiv-aktivierend (Hoffnung),5,Lernende,0.2,0,0,0.1794134564197927,0.0,Unspezifisch,0.0
|
||||||
5.28,Positiv-aktivierend (Neugierde),5,Lernende,0.74,1,0,Psychisch adressiert,0.3313432835820895
|
5.28,Positiv-aktivierend (Neugierde),5,Lernende,0.74,1,0,0.2872540893491681,0.0,Unspezifisch,0.0
|
||||||
5.29,Positiv-aktivierend (Glücklichsein),5,Lernende,0.54,0,0,Unspezifisch,0.08059701492537313
|
5.29,Positiv-aktivierend (Glücklichsein),5,Lernende,0.54,0,0,0.1794134564197927,0.0,Unspezifisch,0.0
|
||||||
5.3,Positiv-aktivierend (Entspannung),5,Lernende,0.16,0,0,Unspezifisch,0.023880597014925373
|
5.3,Positiv-aktivierend (Entspannung),5,Lernende,0.16,0,0,0.1794134564197927,0.0,Unspezifisch,0.0
|
||||||
5.31,negativ-aktivierend (Angst),5,Lernende,-0.4,1,0,Psychisch adressiert,-0.1791044776119403
|
5.31,negativ-aktivierend (Angst),5,Lernende,-0.4,1,0,0.47754607156925744,0.0,Unspezifisch,-0.0
|
||||||
5.32,negativ-aktivierend (Depressionen),5,Lernende,-0.3,1,0,Psychisch adressiert,-0.1343283582089552
|
5.32,negativ-aktivierend (Depressionen),5,Lernende,-0.3,1,0,0.47754607156925744,0.0,Unspezifisch,-0.0
|
||||||
5.33,negativ-aktivierend (Wut),5,Lernende,-0.65,1,0,Psychisch adressiert,-0.291044776119403
|
5.33,negativ-aktivierend (Wut),5,Lernende,-0.65,1,0,0.47754607156925744,0.0,Unspezifisch,-0.0
|
||||||
5.34,negativ-aktivierend (Frustration),5,Lernende,-0.04,1,0,Psychisch adressiert,-0.017910447761194027
|
5.34,negativ-aktivierend (Frustration),5,Lernende,-0.04,1,0,0.47754607156925744,0.0,Unspezifisch,-0.0
|
||||||
5.35,negativ-aktivierend (Aggression und Gewalt),5,Lernende,0.03,0,0,Unspezifisch,0.004477611940298508
|
5.35,negativ-aktivierend (Aggression und Gewalt),5,Lernende,0.03,0,0,0.38779084864439206,0.1072336846861937,Unspezifisch,0.0037613912871891017
|
||||||
5.36,negativ-aktivierend (Langeweile),5,Lernende,-0.46,0,0,Unspezifisch,-0.06865671641791045
|
5.36,negativ-aktivierend (Langeweile),5,Lernende,-0.46,0,0,0.3599915288899237,0.0,Unspezifisch,-0.0
|
||||||
5.37,kognitive Dispositionen (Morgentypus vs. Abendtypus),5,Lernende,0.18,0,0,Unspezifisch,0.026865671641791045
|
5.37,kognitive Dispositionen (Morgentypus vs. Abendtypus),5,Lernende,0.18,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.38,kognitive Dispositionen (Prokrastination),5,Lernende,-0.41,0,0,Unspezifisch,-0.06119402985074626
|
5.38,kognitive Dispositionen (Prokrastination),5,Lernende,-0.41,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.39,Frühgeburt / Geburtsgewicht,5,Lernende,-0.59,0,0,Unspezifisch,-0.0880597014925373
|
5.39,Frühgeburt / Geburtsgewicht,5,Lernende,-0.59,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.4,Stillen,5,Lernende,-0.04,0,0,Unspezifisch,-0.005970149253731343
|
5.4,Stillen,5,Lernende,-0.04,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.41,Krankheit,5,Lernende,-0.51,0,0,Unspezifisch,-0.07611940298507464
|
5.41,Krankheit,5,Lernende,-0.51,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.42,Körperliche Syndrome,5,Lernende,-0.42,0,0,Unspezifisch,-0.0626865671641791
|
5.42,Körperliche Syndrome,5,Lernende,-0.42,0,0,0.0,0.08089398939089698,Unspezifisch,-0.0
|
||||||
5.43,Misshandlung,5,Lernende,-0.63,0,0,Unspezifisch,-0.09402985074626866
|
5.43,Misshandlung,5,Lernende,-0.63,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.44,Autismus,5,Lernende,0.08,0,0,Unspezifisch,0.011940298507462687
|
5.44,Autismus,5,Lernende,0.08,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.45,Schlafdauer und Schlafqualität,5,Lernende,0.02,0,0,Unspezifisch,0.0029850746268656717
|
5.45,Schlafdauer und Schlafqualität,5,Lernende,0.02,0,0,0.164053967059909,0.134345842707663,Unspezifisch,0.0022047919755978996
|
||||||
5.46,Zucker,5,Lernende,-0.13,0,0,Unspezifisch,-0.019402985074626868
|
5.46,Zucker,5,Lernende,-0.13,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.47,Bewegung,5,Lernende,0.25,0,0,Unspezifisch,0.03731343283582089
|
5.47,Bewegung,5,Lernende,0.25,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.48,Positive Sicht auf eigene Ethnizität,5,Lernende,0.17,0,0,Unspezifisch,0.02537313432835821
|
5.48,Positive Sicht auf eigene Ethnizität,5,Lernende,0.17,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
5.49,Dachloser Dialekt,5,Lernende,-0.29,0,0,Unspezifisch,-0.043283582089552235
|
5.49,Dachloser Dialekt,5,Lernende,-0.29,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.5,Bedrohung durch Stereotype,5,Lernende,-0.19,0,0,Unspezifisch,-0.028358208955223882
|
5.5,Bedrohung durch Stereotype,5,Lernende,-0.19,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
5.51,Geschlechterunterschiede,5,Lernende,0.0,0,0,Unspezifisch,0.0
|
5.51,Geschlechterunterschiede,5,Lernende,0.0,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.01,Sozioökonomischer Status,6,Elternhaus und Familie,0.56,0,0,Unspezifisch,0.08358208955223882
|
6.01,Sozioökonomischer Status,6,Elternhaus und Familie,0.56,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.02,Bezug staatlicher Transferleistungen,6,Elternhaus und Familie,-0.12,0,0,Unspezifisch,-0.01791044776119403
|
6.02,Bezug staatlicher Transferleistungen,6,Elternhaus und Familie,-0.12,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
6.03,Erwerbstätigkeit der Mutter,6,Elternhaus und Familie,0.05,0,0,Unspezifisch,0.007462686567164179
|
6.03,Erwerbstätigkeit der Mutter,6,Elternhaus und Familie,0.05,0,0,0.0,0.052526032170821725,Unspezifisch,0.0
|
||||||
6.04,Stipendien,6,Elternhaus und Familie,0.03,0,0,Unspezifisch,0.004477611940298508
|
6.04,Stipendien,6,Elternhaus und Familie,0.03,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.05,Einwanderungsstatus,6,Elternhaus und Familie,0.05,0,0,Unspezifisch,0.007462686567164179
|
6.05,Einwanderungsstatus,6,Elternhaus und Familie,0.05,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.06,Familienstruktur,6,Elternhaus und Familie,0.14,0,1,Sozial adressiert,0.06268656716417911
|
6.06,Familienstruktur,6,Elternhaus und Familie,0.14,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
6.07,Geschieden,6,Elternhaus und Familie,-0.26,0,0,Unspezifisch,-0.038805970149253737
|
6.07,Geschieden,6,Elternhaus und Familie,-0.26,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
6.08,nicht-geschieden vs. wiederverheiratet,6,Elternhaus und Familie,0.24,0,0,Unspezifisch,0.03582089552238806
|
6.08,nicht-geschieden vs. wiederverheiratet,6,Elternhaus und Familie,0.24,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.09,Adoption,6,Elternhaus und Familie,0.21,0,0,Unspezifisch,0.03134328358208955
|
6.09,Adoption,6,Elternhaus und Familie,0.21,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.1,Kinderheime,6,Elternhaus und Familie,0.33,0,0,Unspezifisch,0.049253731343283584
|
6.1,Kinderheime,6,Elternhaus und Familie,0.33,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.11,Häusliches Anregungsniveau,6,Elternhaus und Familie,0.4,0,0,Unspezifisch,0.05970149253731343
|
6.11,Häusliches Anregungsniveau,6,Elternhaus und Familie,0.4,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.12,Elternunterstützung beim Lernen,6,Elternhaus und Familie,0.41,0,1,Sozial adressiert,0.18358208955223876
|
6.12,Elternunterstützung beim Lernen,6,Elternhaus und Familie,0.41,0,1,0.0,0.5253540155866715,Sozial adressiert,0.0
|
||||||
6.13,Elterliche Autonomieunterstützung (Familienhilfe),6,Elternhaus und Familie,0.06,0,1,Sozial adressiert,0.02686567164179104
|
6.13,Elterliche Autonomieunterstützung (Familienhilfe),6,Elternhaus und Familie,0.06,0,1,0.0,0.4024554512584783,Unspezifisch,0.0
|
||||||
6.14,Elternerwartungen,6,Elternhaus und Familie,0.49,0,1,Sozial adressiert,0.21940298507462683
|
6.14,Elternerwartungen,6,Elternhaus und Familie,0.49,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
6.15,Körperliche Züchtigung,6,Elternhaus und Familie,-0.33,0,0,Unspezifisch,-0.049253731343283584
|
6.15,Körperliche Züchtigung,6,Elternhaus und Familie,-0.33,0,0,0.0,0.08089398939089698,Unspezifisch,-0.0
|
||||||
6.16,Väter,6,Elternhaus und Familie,0.21,0,0,Unspezifisch,0.03134328358208955
|
6.16,Väter,6,Elternhaus und Familie,0.21,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
6.17,Schulwechsel,6,Elternhaus und Familie,-0.38,0,0,Unspezifisch,-0.056716417910447764
|
6.17,Schulwechsel,6,Elternhaus und Familie,-0.38,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
6.18,Fernsehen,6,Elternhaus und Familie,-0.15,0,0,Unspezifisch,-0.022388059701492536
|
6.18,Fernsehen,6,Elternhaus und Familie,-0.15,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
6.19,Programme für Eltern,6,Elternhaus und Familie,0.39,0,1,Sozial adressiert,0.1746268656716418
|
6.19,Programme für Eltern,6,Elternhaus und Familie,0.39,0,1,0.0,0.4696793605647991,Unspezifisch,0.0
|
||||||
6.2,Hausbesuche durch Lehrpersonen,6,Elternhaus und Familie,0.22,0,0,Unspezifisch,0.03283582089552239
|
6.2,Hausbesuche durch Lehrpersonen,6,Elternhaus und Familie,0.22,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.01,Finanzielle Ausstattung,7,Schule und Gesellschaft,0.19,0,0,Unspezifisch,0.028358208955223882
|
7.01,Finanzielle Ausstattung,7,Schule und Gesellschaft,0.19,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.02,Accountability / Rechenschaftspflicht,7,Schule und Gesellschaft,0.27,0,0,Unspezifisch,0.04029850746268657
|
7.02,Accountability / Rechenschaftspflicht,7,Schule und Gesellschaft,0.27,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.03,Leistungsbezogene Bezahlung,7,Schule und Gesellschaft,0.05,0,0,Unspezifisch,0.007462686567164179
|
7.03,Leistungsbezogene Bezahlung,7,Schule und Gesellschaft,0.05,0,0,0.0,0.0883718619675973,Unspezifisch,0.0
|
||||||
7.04,Qualität des Schulgebäudes,7,Schule und Gesellschaft,0.24,0,0,Unspezifisch,0.03582089552238806
|
7.04,Qualität des Schulgebäudes,7,Schule und Gesellschaft,0.24,0,0,0.030629916226700193,0.0,Unspezifisch,0.0
|
||||||
7.05,Vertragsschulen / Charter-Schulen,7,Schule und Gesellschaft,0.04,0,1,Sozial adressiert,0.017910447761194027
|
7.05,Vertragsschulen / Charter-Schulen,7,Schule und Gesellschaft,0.04,0,1,0.0,0.4024554512584783,Unspezifisch,0.0
|
||||||
7.06,Konfessionsschulen,7,Schule und Gesellschaft,0.23,0,1,Sozial adressiert,0.10298507462686567
|
7.06,Konfessionsschulen,7,Schule und Gesellschaft,0.23,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
7.07,Monoedukation,7,Schule und Gesellschaft,0.07,0,0,Unspezifisch,0.010447761194029853
|
7.07,Monoedukation,7,Schule und Gesellschaft,0.07,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.08,Dauer der Sommerferien,7,Schule und Gesellschaft,-0.09,0,0,Unspezifisch,-0.013432835820895522
|
7.08,Dauer der Sommerferien,7,Schule und Gesellschaft,-0.09,0,0,0.0,0.052526032170821725,Unspezifisch,-0.0
|
||||||
7.09,Sommerschulen,7,Schule und Gesellschaft,0.17,0,1,Sozial adressiert,0.07611940298507462
|
7.09,Sommerschulen,7,Schule und Gesellschaft,0.17,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
7.1,Schulkalender / Stundenplan,7,Schule und Gesellschaft,0.1,0,1,Sozial adressiert,0.04477611940298507
|
7.1,Schulkalender / Stundenplan,7,Schule und Gesellschaft,0.1,0,1,0.0,0.3117406520628955,Unspezifisch,0.0
|
||||||
7.11,Desegration,7,Schule und Gesellschaft,0.23,0,0,Unspezifisch,0.034328358208955224
|
7.11,Desegration,7,Schule und Gesellschaft,0.23,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.12,Ethnische Vielfalt,7,Schule und Gesellschaft,0.09,0,0,Unspezifisch,0.013432835820895522
|
7.12,Ethnische Vielfalt,7,Schule und Gesellschaft,0.09,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.13,Wohnheimunterbringung,7,Schule und Gesellschaft,0.05,0,0,Unspezifisch,0.007462686567164179
|
7.13,Wohnheimunterbringung,7,Schule und Gesellschaft,0.05,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.14,Schulgröße,7,Schule und Gesellschaft,0.33,0,0,Unspezifisch,0.049253731343283584
|
7.14,Schulgröße,7,Schule und Gesellschaft,0.33,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.15,Neuordnung des Schulbezirks,7,Schule und Gesellschaft,0.05,0,0,Unspezifisch,0.007462686567164179
|
7.15,Neuordnung des Schulbezirks,7,Schule und Gesellschaft,0.05,0,0,0.030629916226700193,0.0,Unspezifisch,0.0
|
||||||
7.16,Schulwahlfreiheit,7,Schule und Gesellschaft,0.27,0,0,Unspezifisch,0.04029850746268657
|
7.16,Schulwahlfreiheit,7,Schule und Gesellschaft,0.27,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
7.17,Fördermaßnahmen im Sekundarbereich I,7,Schule und Gesellschaft,0.18,0,0,Unspezifisch,0.026865671641791045
|
7.17,Fördermaßnahmen im Sekundarbereich I,7,Schule und Gesellschaft,0.18,0,0,0.0,0.06724457235289279,Unspezifisch,0.0
|
||||||
7.18,Schulleitung,7,Schule und Gesellschaft,0.37,0,1,Sozial adressiert,0.16567164179104474
|
7.18,Schulleitung,7,Schule und Gesellschaft,0.37,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
7.19,Schulklima,7,Schule und Gesellschaft,0.53,0,1,Sozial adressiert,0.23731343283582088
|
7.19,Schulklima,7,Schule und Gesellschaft,0.53,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
7.2,Schuleffekte,7,Schule und Gesellschaft,0.48,0,1,Sozial adressiert,0.21492537313432833
|
7.2,Schuleffekte,7,Schule und Gesellschaft,0.48,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.01,Klassengröße,8,Klassenzimmer,0.17,0,1,Sozial adressiert,0.07611940298507462
|
8.01,Klassengröße,8,Klassenzimmer,0.17,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.02,Offene Klassenzimmer,8,Klassenzimmer,0.02,0,1,Sozial adressiert,0.008955223880597014
|
8.02,Offene Klassenzimmer,8,Klassenzimmer,0.02,0,1,0.0,0.39925052969616115,Unspezifisch,0.0
|
||||||
8.03,Leistungsbezogene Klassenbildung (Tracking),8,Klassenzimmer,0.09,0,1,Sozial adressiert,0.04029850746268657
|
8.03,Leistungsbezogene Klassenbildung (Tracking),8,Klassenzimmer,0.09,0,1,0.0,0.39773319151400016,Unspezifisch,0.0
|
||||||
8.04,Auflösung einer leistungsbezogenen Einteilung in Lerngruppen (Detracking),8,Klassenzimmer,0.09,0,1,Sozial adressiert,0.04029850746268657
|
8.04,Auflösung einer leistungsbezogenen Einteilung in Lerngruppen (Detracking),8,Klassenzimmer,0.09,0,1,0.017369803187693027,0.7677081620152576,Sozial adressiert,0.0022816339693582663
|
||||||
8.05,Jahrgangsübergreifende Klassen,8,Klassenzimmer,-0.01,0,1,Sozial adressiert,-0.004477611940298507
|
8.05,Jahrgangsübergreifende Klassen,8,Klassenzimmer,-0.01,0,1,0.0,0.3117406520628955,Unspezifisch,-0.0
|
||||||
8.06,Allgemeines Lernen in Kleingruppen,8,Klassenzimmer,0.16,0,1,Sozial adressiert,0.07164179104477611
|
8.06,Allgemeines Lernen in Kleingruppen,8,Klassenzimmer,0.16,0,1,0.02503700404561494,0.9382351484674251,Sozial adressiert,0.005823582505719788
|
||||||
8.07,Aufgabenbezogenes Lernen in Kleingruppen,8,Klassenzimmer,0.46,0,1,Sozial adressiert,0.20597014925373133
|
8.07,Aufgabenbezogenes Lernen in Kleingruppen,8,Klassenzimmer,0.46,0,1,0.02503700404561494,0.9382351484674248,Sozial adressiert,0.01674279970394439
|
||||||
8.08,Inklusive Beschulung,8,Klassenzimmer,0.52,0,0,Unspezifisch,0.07761194029850747
|
8.08,Inklusive Beschulung,8,Klassenzimmer,0.52,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
8.09,Förderklassen für Hochbegabte,8,Klassenzimmer,0.21,0,1,Sozial adressiert,0.09402985074626864
|
8.09,Förderklassen für Hochbegabte,8,Klassenzimmer,0.21,0,1,0.0,0.4696793605647991,Unspezifisch,0.0
|
||||||
8.1,Klassenführung,8,Klassenzimmer,0.43,0,1,Sozial adressiert,0.1925373134328358
|
8.1,Klassenführung,8,Klassenzimmer,0.43,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.11,Aktive Pausen im Klassenzimmer,8,Klassenzimmer,0.16,0,1,Sozial adressiert,0.07164179104477611
|
8.11,Aktive Pausen im Klassenzimmer,8,Klassenzimmer,0.16,0,1,0.0,0.52930848478775,Sozial adressiert,0.0
|
||||||
8.12,(Cyber-)Bulling,8,Klassenzimmer,-0.28,0,1,Sozial adressiert,-0.12537313432835823
|
8.12,(Cyber-)Bulling,8,Klassenzimmer,-0.28,0,1,0.0,0.3117406520628955,Unspezifisch,-0.0
|
||||||
8.13,Reduktion von Unterrichtsstörungen,8,Klassenzimmer,0.82,0,1,Sozial adressiert,0.3671641791044775
|
8.13,Reduktion von Unterrichtsstörungen,8,Klassenzimmer,0.82,0,1,0.0,0.3942360103241583,Unspezifisch,0.0
|
||||||
8.14,Schulverweis / Schulausschluss,8,Klassenzimmer,-0.2,0,1,Sozial adressiert,-0.08955223880597014
|
8.14,Schulverweis / Schulausschluss,8,Klassenzimmer,-0.2,0,1,0.0,0.3117406520628955,Unspezifisch,-0.0
|
||||||
8.15,ADHS-Behandlung mit Medikamenten,8,Klassenzimmer,0.3,0,0,Unspezifisch,0.04477611940298507
|
8.15,ADHS-Behandlung mit Medikamenten,8,Klassenzimmer,0.3,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
8.16,ADHS-Interventionsprogramme,8,Klassenzimmer,0.44,0,0,Unspezifisch,0.06567164179104477
|
8.16,ADHS-Interventionsprogramme,8,Klassenzimmer,0.44,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
8.18,Klassenklima,8,Klassenzimmer,0.29,0,1,Sozial adressiert,0.1298507462686567
|
8.18,Klassenklima,8,Klassenzimmer,0.29,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.19,Klassenzusammenhalt,8,Klassenzimmer,0.66,0,1,Sozial adressiert,0.2955223880597015
|
8.19,Klassenzusammenhalt,8,Klassenzimmer,0.66,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.2,Lehrer-Schüler-Beziehung,8,Klassenzimmer,0.62,0,1,Sozial adressiert,0.27761194029850744
|
8.2,Lehrer-Schüler-Beziehung,8,Klassenzimmer,0.62,0,1,0.03179792295459634,0.7794583847205449,Sozial adressiert,0.02827160641470908
|
||||||
8.21,Lehrer-Schüler-Abhängigkeit,8,Klassenzimmer,-0.24,0,1,Sozial adressiert,-0.10746268656716416
|
8.21,Lehrer-Schüler-Abhängigkeit,8,Klassenzimmer,-0.24,0,1,0.0,0.6093029525550286,Sozial adressiert,-0.0
|
||||||
8.22,Freundschaften,8,Klassenzimmer,0.35,0,0,Unspezifisch,0.05223880597014925
|
8.22,Freundschaften,8,Klassenzimmer,0.35,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
8.23,Schulzugehörigkeit,8,Klassenzimmer,0.46,0,1,Sozial adressiert,0.20597014925373133
|
8.23,Schulzugehörigkeit,8,Klassenzimmer,0.46,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
8.24,Unbeliebtheit in der Klasse,8,Klassenzimmer,-0.26,0,1,Sozial adressiert,-0.11641791044776119
|
8.24,Unbeliebtheit in der Klasse,8,Klassenzimmer,-0.26,0,1,0.024808331335058664,0.6946174430503596,Sozial adressiert,-0.00929513690957964
|
||||||
8.25,Lebensalter relativ zur Klasse,8,Klassenzimmer,0.45,0,1,Sozial adressiert,0.2014925373134328
|
8.25,Lebensalter relativ zur Klasse,8,Klassenzimmer,0.45,0,1,0.0,0.5328065938399964,Sozial adressiert,0.0
|
||||||
8.26,Nicht-Versetzung,8,Klassenzimmer,-0.24,0,0,Unspezifisch,-0.03582089552238806
|
8.26,Nicht-Versetzung,8,Klassenzimmer,-0.24,0,0,0.0,0.0,Unspezifisch,-0.0
|
||||||
9.02,Sprachkompetenz,9,Lehrperson,0.22,0,0,Unspezifisch,0.03283582089552239
|
9.02,Sprachkompetenz,9,Lehrperson,0.22,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
9.03,Lehrererwartung - körperliche Attraktivität,9,Lehrperson,0.36,0,1,Sozial adressiert,0.16119402985074627
|
9.03,Lehrererwartung - körperliche Attraktivität,9,Lehrperson,0.36,0,1,0.0,0.3942360103241583,Unspezifisch,0.0
|
||||||
9.04,Nichtetikettieren von Lernenden,9,Lehrperson,0.61,0,0,Unspezifisch,0.09104477611940298
|
9.04,Nichtetikettieren von Lernenden,9,Lehrperson,0.61,0,0,0.0,0.06120589113399045,Unspezifisch,0.0
|
||||||
9.05,Einschätzung des Leistungsniveaus durch die Lehrperson,9,Lehrperson,1.3,0,0,Unspezifisch,0.19402985074626866
|
9.05,Einschätzung des Leistungsniveaus durch die Lehrperson,9,Lehrperson,1.3,0,0,0.020595212386533574,0.0,Unspezifisch,0.0
|
||||||
9.06,Glaubwürdigkeit,9,Lehrperson,1.09,0,0,Unspezifisch,0.16268656716417912
|
9.06,Glaubwürdigkeit,9,Lehrperson,1.09,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
9.07,Klarheit der Lehrperson,9,Lehrperson,0.85,0,0,Unspezifisch,0.12686567164179105
|
9.07,Klarheit der Lehrperson,9,Lehrperson,0.85,0,0,0.0,0.053409723511062844,Unspezifisch,0.0
|
||||||
9.08,Kollektive Wirksamkeitserwartung,9,Lehrperson,1.34,0,0,Unspezifisch,0.2
|
9.08,Kollektive Wirksamkeitserwartung,9,Lehrperson,1.34,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
9.09,Lehrerbildung,9,Lehrperson,0.1,0,1,Sozial adressiert,0.04477611940298507
|
9.09,Lehrerbildung,9,Lehrperson,0.1,0,1,0.0,0.17998354938586214,Unspezifisch,0.0
|
||||||
9.1,Qualifikation von Lehrpersonen,9,Lehrperson,0.39,0,0,Unspezifisch,0.0582089552238806
|
9.1,Qualifikation von Lehrpersonen,9,Lehrperson,0.39,0,0,0.0,0.06221247338804557,Unspezifisch,0.0
|
||||||
9.11,Lehrerfort- und -weiterbildung,9,Lehrperson,0.44,0,1,Sozial adressiert,0.19701492537313434
|
9.11,Lehrerfort- und -weiterbildung,9,Lehrperson,0.44,0,1,0.17667634224147707,0.48701828493542343,Unspezifisch,0.08513992009581346
|
||||||
9.12,Coaching,9,Lehrperson,0.26,0,0,Unspezifisch,0.038805970149253737
|
9.12,Coaching,9,Lehrperson,0.26,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
9.13,Micro-Teaching,9,Lehrperson,1.01,0,0,Unspezifisch,0.15074626865671642
|
9.13,Micro-Teaching,9,Lehrperson,1.01,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
9.14,Fachkompetenz,9,Lehrperson,0.13,0,0,Unspezifisch,0.019402985074626868
|
9.14,Fachkompetenz,9,Lehrperson,0.13,0,0,0.0,0.0,Unspezifisch,0.0
|
||||||
|
|||||||
|
File diff suppressed because it is too large
Load Diff
389
visible-learning netzwerkanalyse.py
Normal file
389
visible-learning netzwerkanalyse.py
Normal file
@ -0,0 +1,389 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
"""
|
||||||
|
Visible Learning – Netzwerkanalyse (Systemebenen × Thermometer)
|
||||||
|
---------------------------------------------------------------
|
||||||
|
CI: wie in den bestehenden Skripten (plotly_template)
|
||||||
|
Daten: Thermometer.csv (Pflichtspalten: Thermometer_ID, Stichwort, Effektstärke, Subkapitel, Kapitelname, Systemebene)
|
||||||
|
|
||||||
|
Modell:
|
||||||
|
- Bipartites Netzwerk: Systemebene (psychisch/sozial) ↔ Item (Thermometer)
|
||||||
|
- Kantengewicht = Effektstärke (Vorzeichen beibehalten), Breite ~ |d|
|
||||||
|
- Knoten-Infos im Hover: ID, Stichwort, Kapitel/Subkapitel, d
|
||||||
|
- Optional: Filter nach |d| (min_abs_d) und Kapiteln/Subkapiteln
|
||||||
|
|
||||||
|
Exports:
|
||||||
|
- PNG/HTML (gemäß config)
|
||||||
|
- JSON: nodes/edges + einfache Zentralitäten (weighted degree)
|
||||||
|
"""
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Imports
|
||||||
|
# -----------------------------------------
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import math
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
import plotly.graph_objs as go
|
||||||
|
import plotly.io as pio
|
||||||
|
|
||||||
|
import networkx as nx
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Konfiguration laden
|
||||||
|
# -----------------------------------------
|
||||||
|
from config_visible_learning import (
|
||||||
|
csv_file,
|
||||||
|
export_fig_visual,
|
||||||
|
export_fig_png,
|
||||||
|
theme,
|
||||||
|
)
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Template/CI
|
||||||
|
# -----------------------------------------
|
||||||
|
try:
|
||||||
|
from ci_template import plotly_template
|
||||||
|
plotly_template.set_theme(theme)
|
||||||
|
_ci_layout = lambda title: plotly_template.get_standard_layout(title=title, x_title="", y_title="")
|
||||||
|
_styles = plotly_template.get_plot_styles()
|
||||||
|
_colors = plotly_template.get_colors()
|
||||||
|
except Exception:
|
||||||
|
# Minimaler Fallback, falls Template nicht verfügbar ist
|
||||||
|
_ci_layout = lambda title: dict(title=title)
|
||||||
|
_styles = {}
|
||||||
|
_colors = {}
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Export-Helfer
|
||||||
|
# -----------------------------------------
|
||||||
|
EXPORT_DIR = os.path.join(os.path.dirname(__file__), "export")
|
||||||
|
os.makedirs(EXPORT_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
def export_figure(fig, name: str):
|
||||||
|
base = os.path.join(EXPORT_DIR, name)
|
||||||
|
if export_fig_visual:
|
||||||
|
pio.write_html(fig, file=f"{base}.html", auto_open=False, include_plotlyjs="cdn")
|
||||||
|
if export_fig_png:
|
||||||
|
try:
|
||||||
|
pio.write_image(fig, f"{base}.png", scale=2)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def export_json(obj: dict, name: str):
|
||||||
|
try:
|
||||||
|
with open(os.path.join(EXPORT_DIR, name), "w", encoding="utf-8") as f:
|
||||||
|
json.dump(obj, f, ensure_ascii=False, indent=2)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Daten laden
|
||||||
|
# -----------------------------------------
|
||||||
|
REQUIRED_COLS = ["Thermometer_ID", "Stichwort", "Effektstärke", "Subkapitel", "Kapitelname", "Systemebene"]
|
||||||
|
|
||||||
|
def load_data(path: str) -> pd.DataFrame:
|
||||||
|
df = pd.read_csv(path)
|
||||||
|
missing = [c for c in REQUIRED_COLS if c not in df.columns]
|
||||||
|
if missing:
|
||||||
|
raise ValueError(f"Fehlende Spalten in CSV: {missing}")
|
||||||
|
# Effektstärke robust nach float
|
||||||
|
df["Effektstärke"] = (
|
||||||
|
df["Effektstärke"].astype(str).str.replace(",", ".", regex=False).str.strip()
|
||||||
|
)
|
||||||
|
df["Effektstärke"] = pd.to_numeric(df["Effektstärke"], errors="coerce")
|
||||||
|
df = df.dropna(subset=["Effektstärke"])
|
||||||
|
# Prüfung: unspezifische Systemebenen
|
||||||
|
invalid_systems = df[~df["Systemebene"].astype(str).str.lower().isin(["psychisch", "sozial"])]
|
||||||
|
if not invalid_systems.empty:
|
||||||
|
print("WARNUNG: Unspezifische Systemebenen gefunden:")
|
||||||
|
print(invalid_systems[["Thermometer_ID", "Stichwort", "Systemebene"]].to_string(index=False))
|
||||||
|
# Kapitelnummer aus ID (optional nützlich)
|
||||||
|
try:
|
||||||
|
df["Kapitel"] = df["Thermometer_ID"].astype(str).str.split(".").str[0].astype(int)
|
||||||
|
except Exception:
|
||||||
|
df["Kapitel"] = None
|
||||||
|
return df
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Netzwerk bauen
|
||||||
|
# -----------------------------------------
|
||||||
|
def build_bipartite_graph(
|
||||||
|
df: pd.DataFrame,
|
||||||
|
min_abs_d: float = 0.00,
|
||||||
|
kapitel_filter: list[int] | None = None,
|
||||||
|
subkapitel_filter: list[str] | None = None,
|
||||||
|
) -> nx.Graph:
|
||||||
|
data = df.copy()
|
||||||
|
|
||||||
|
# Filter
|
||||||
|
if kapitel_filter:
|
||||||
|
data = data[data["Kapitel"].isin(kapitel_filter)]
|
||||||
|
if subkapitel_filter:
|
||||||
|
data = data[data["Subkapitel"].isin(subkapitel_filter)]
|
||||||
|
if min_abs_d > 0:
|
||||||
|
data = data[data["Effektstärke"].abs() >= float(min_abs_d)]
|
||||||
|
|
||||||
|
# Nur gültige Systemebenen
|
||||||
|
data = data[data["Systemebene"].astype(str).str.lower().isin(["psychisch", "sozial"])]
|
||||||
|
|
||||||
|
G = nx.Graph()
|
||||||
|
# Systemknoten (part A)
|
||||||
|
systems = sorted(data["Systemebene"].str.lower().unique().tolist())
|
||||||
|
for s in systems:
|
||||||
|
G.add_node(
|
||||||
|
f"system::{s}",
|
||||||
|
bipartite="system",
|
||||||
|
label=s.capitalize(),
|
||||||
|
typ="System",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Itemknoten + Kanten (part B)
|
||||||
|
for _, r in data.iterrows():
|
||||||
|
sys_key = f"system::{str(r['Systemebene']).lower()}"
|
||||||
|
item_key = f"item::{r['Thermometer_ID']}"
|
||||||
|
# Item node
|
||||||
|
G.add_node(
|
||||||
|
item_key,
|
||||||
|
bipartite="item",
|
||||||
|
label=str(r["Stichwort"]),
|
||||||
|
id=str(r["Thermometer_ID"]),
|
||||||
|
d=float(r["Effektstärke"]),
|
||||||
|
kapitelname=str(r["Kapitelname"]),
|
||||||
|
subkapitel=str(r["Subkapitel"]),
|
||||||
|
)
|
||||||
|
# Edge: Gewicht = Effektstärke (Vorzeichen beibehalten)
|
||||||
|
G.add_edge(
|
||||||
|
sys_key, item_key,
|
||||||
|
weight=float(r["Effektstärke"]),
|
||||||
|
sign="pos" if r["Effektstärke"] >= 0 else "neg"
|
||||||
|
)
|
||||||
|
return G
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Layout & Visualisierung (Plotly)
|
||||||
|
# -----------------------------------------
|
||||||
|
def _edge_segments(G: nx.Graph, pos: dict[str, tuple[float, float]], sign: str | None = None):
|
||||||
|
"""Erzeugt x,y-Koordinaten-Listen für Liniensegmente (mit None-Trennern). Optional nach Vorzeichen filtern."""
|
||||||
|
xs, ys = [], []
|
||||||
|
for u, v, d in G.edges(data=True):
|
||||||
|
if sign and d.get("sign") != sign:
|
||||||
|
continue
|
||||||
|
x0, y0 = pos[u]
|
||||||
|
x1, y1 = pos[v]
|
||||||
|
xs += [x0, x1, None]
|
||||||
|
ys += [y0, y1, None]
|
||||||
|
return xs, ys
|
||||||
|
|
||||||
|
def plot_network(G: nx.Graph, title: str = "Netzwerk: Systemebenen × Thermometer", seed: int = 42):
|
||||||
|
# Spring-Layout (reproduzierbar über seed)
|
||||||
|
pos = nx.spring_layout(G, seed=seed, k=None, weight="weight")
|
||||||
|
|
||||||
|
# Knoten nach Typ trennen
|
||||||
|
system_nodes = [n for n, d in G.nodes(data=True) if d.get("bipartite") == "system"]
|
||||||
|
item_nodes = [n for n, d in G.nodes(data=True) if d.get("bipartite") == "item"]
|
||||||
|
|
||||||
|
# Edges (pos/neg) als eigene Traces (Linienstile aus CI)
|
||||||
|
x_pos, y_pos = _edge_segments(G, pos, sign="pos")
|
||||||
|
x_neg, y_neg = _edge_segments(G, pos, sign="neg")
|
||||||
|
|
||||||
|
line_primary = _styles.get("linie_primaryLine", dict(width=1))
|
||||||
|
line_secondary = _styles.get("linie_secondaryLine", dict(width=1))
|
||||||
|
|
||||||
|
edge_pos = go.Scatter(
|
||||||
|
x=x_pos, y=y_pos,
|
||||||
|
mode="lines",
|
||||||
|
line=line_primary,
|
||||||
|
hoverinfo="skip",
|
||||||
|
showlegend=True,
|
||||||
|
name="Kanten (d ≥ 0)"
|
||||||
|
)
|
||||||
|
edge_neg = go.Scatter(
|
||||||
|
x=x_neg, y=y_neg,
|
||||||
|
mode="lines",
|
||||||
|
line=line_secondary,
|
||||||
|
hoverinfo="skip",
|
||||||
|
showlegend=True,
|
||||||
|
name="Kanten (d < 0)"
|
||||||
|
)
|
||||||
|
|
||||||
|
# System-Knoten: Marker aus CI (z. B. accent)
|
||||||
|
sys_marker = _styles.get("marker_accent", dict(size=18))
|
||||||
|
sys_x = [pos[n][0] for n in system_nodes]
|
||||||
|
sys_y = [pos[n][1] for n in system_nodes]
|
||||||
|
sys_text = [G.nodes[n].get("label", n) for n in system_nodes]
|
||||||
|
sys_hover = [f"Systemebene: {G.nodes[n].get('label','')}" for n in system_nodes]
|
||||||
|
|
||||||
|
systems_trace = go.Scatter(
|
||||||
|
x=sys_x, y=sys_y, mode="markers",
|
||||||
|
marker={**sys_marker, "size": 18},
|
||||||
|
text=sys_text,
|
||||||
|
hovertext=sys_hover,
|
||||||
|
hovertemplate="%{hovertext}<extra></extra>",
|
||||||
|
name="System"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Item-Knoten: Marker aus CI (z. B. brightArea); Größe ~ |degree_weight|
|
||||||
|
item_marker = _styles.get("marker_brightArea", dict(size=10))
|
||||||
|
it_x = [pos[n][0] for n in item_nodes]
|
||||||
|
it_y = [pos[n][1] for n in item_nodes]
|
||||||
|
|
||||||
|
# Gewichtete Degree als Größe
|
||||||
|
wdeg = []
|
||||||
|
htxt = []
|
||||||
|
for n in item_nodes:
|
||||||
|
dsum = 0.0
|
||||||
|
for nbr in G[n]:
|
||||||
|
dsum += abs(G[n][nbr].get("weight", 0.0))
|
||||||
|
wdeg.append(dsum)
|
||||||
|
nd = G.nodes[n]
|
||||||
|
htxt.append(
|
||||||
|
"Thermometer: "
|
||||||
|
+ str(nd.get("id",""))
|
||||||
|
+ "<br>Stichwort: "
|
||||||
|
+ str(nd.get("label",""))
|
||||||
|
+ "<br>Kapitel: "
|
||||||
|
+ str(nd.get("kapitelname",""))
|
||||||
|
+ "<br>Subkapitel: "
|
||||||
|
+ str(nd.get("subkapitel",""))
|
||||||
|
+ "<br>d: "
|
||||||
|
+ f"{nd.get('d',np.nan):.2f}"
|
||||||
|
)
|
||||||
|
# Größen skalieren
|
||||||
|
wdeg = np.asarray(wdeg, dtype=float)
|
||||||
|
if wdeg.size and np.nanmax(wdeg) > 0:
|
||||||
|
sizes = 8 + 12 * (wdeg / np.nanmax(wdeg))
|
||||||
|
else:
|
||||||
|
sizes = np.full_like(wdeg, 10)
|
||||||
|
|
||||||
|
items_trace = go.Scatter(
|
||||||
|
x=it_x, y=it_y, mode="markers",
|
||||||
|
marker={**item_marker, "size": sizes},
|
||||||
|
hovertext=htxt,
|
||||||
|
hovertemplate="%{hovertext}<extra></extra>",
|
||||||
|
name="Thermometer"
|
||||||
|
)
|
||||||
|
|
||||||
|
fig = go.Figure(data=[edge_pos, edge_neg, systems_trace, items_trace])
|
||||||
|
fig.update_layout(_ci_layout(title))
|
||||||
|
# Achsen & Grid neutral halten, keine Beschriftungen im Plot (alles im Hover)
|
||||||
|
fig.update_xaxes(showticklabels=False, showgrid=False, zeroline=False)
|
||||||
|
fig.update_yaxes(showticklabels=False, showgrid=False, zeroline=False)
|
||||||
|
fig.show()
|
||||||
|
export_figure(fig, "vl-network")
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Einfache Metriken & Export
|
||||||
|
# -----------------------------------------
|
||||||
|
def summarize_network(G: nx.Graph) -> dict:
|
||||||
|
# weighted degree je Knoten
|
||||||
|
wdeg = {}
|
||||||
|
for n in G.nodes():
|
||||||
|
s = 0.0
|
||||||
|
for nbr in G[n]:
|
||||||
|
s += abs(G[n][nbr].get("weight", 0.0))
|
||||||
|
wdeg[n] = float(s)
|
||||||
|
# Top-Items nach gewichteter Degree
|
||||||
|
items = [(n, wdeg[n]) for n, d in G.nodes(data=True) if d.get("bipartite") == "item"]
|
||||||
|
items_sorted = sorted(items, key=lambda t: t[1], reverse=True)[:15]
|
||||||
|
top_items = []
|
||||||
|
for n, val in items_sorted:
|
||||||
|
nd = G.nodes[n]
|
||||||
|
top_items.append({
|
||||||
|
"Thermometer_ID": nd.get("id"),
|
||||||
|
"Stichwort": nd.get("label"),
|
||||||
|
"Kapitelname": nd.get("kapitelname"),
|
||||||
|
"Subkapitel": nd.get("subkapitel"),
|
||||||
|
"Effektstärke": nd.get("d"),
|
||||||
|
"weighted_degree_abs": val
|
||||||
|
})
|
||||||
|
# Systemseiten-Summe
|
||||||
|
systems = [(n, wdeg[n]) for n, d in G.nodes(data=True) if d.get("bipartite") == "system"]
|
||||||
|
system_summary = {G.nodes[n].get("label", n): float(val) for n, val in systems}
|
||||||
|
return {"top_items_by_weighted_degree": top_items, "system_weight_sums": system_summary}
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Pipeline
|
||||||
|
# -----------------------------------------
|
||||||
|
def run_network_analysis(
|
||||||
|
csv_path: str,
|
||||||
|
min_abs_d: float = 0.00,
|
||||||
|
kapitel_filter: list[int] | None = None,
|
||||||
|
subkapitel_filter: list[str] | None = None,
|
||||||
|
seed: int = 42
|
||||||
|
):
|
||||||
|
df = load_data(csv_path)
|
||||||
|
# Datenqualität knapp loggen
|
||||||
|
print(f"Rows: {len(df)} | min d = {df['Effektstärke'].min():.2f} | max d = {df['Effektstärke'].max():.2f}")
|
||||||
|
print("Systemebenen:", df["Systemebene"].dropna().unique().tolist())
|
||||||
|
if kapitel_filter:
|
||||||
|
print("Kapitel-Filter:", kapitel_filter)
|
||||||
|
if subkapitel_filter:
|
||||||
|
print("Subkapitel-Filter:", subkapitel_filter)
|
||||||
|
if min_abs_d > 0:
|
||||||
|
print(f"Filter |d| ≥ {min_abs_d:.2f}")
|
||||||
|
|
||||||
|
G = build_bipartite_graph(df, min_abs_d=min_abs_d,
|
||||||
|
kapitel_filter=kapitel_filter,
|
||||||
|
subkapitel_filter=subkapitel_filter)
|
||||||
|
if G.number_of_nodes() == 0 or G.number_of_edges() == 0:
|
||||||
|
print("Hinweis: Nach Filtern keine Knoten/Kanten – bitte Filter anpassen.")
|
||||||
|
return
|
||||||
|
|
||||||
|
plot_network(G, title="Netzwerk: Systemebenen × Thermometer (Kanten: Effektstärke)", seed=seed)
|
||||||
|
|
||||||
|
summary = summarize_network(G)
|
||||||
|
print("\nSystemgewicht-Summen:", summary["system_weight_sums"])
|
||||||
|
print("\nTop-Items (weighted degree):")
|
||||||
|
for r in summary["top_items_by_weighted_degree"]:
|
||||||
|
print(f" {r['Thermometer_ID']}: {r['Stichwort']} | d={r['Effektstärke']:.2f} | wd={r['weighted_degree_abs']:.2f}")
|
||||||
|
|
||||||
|
# Export JSON
|
||||||
|
payload = {
|
||||||
|
"meta": {
|
||||||
|
"theme": theme,
|
||||||
|
"min_abs_d": float(min_abs_d),
|
||||||
|
"kapitel_filter": kapitel_filter,
|
||||||
|
"subkapitel_filter": subkapitel_filter
|
||||||
|
},
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": n,
|
||||||
|
"label": G.nodes[n].get("label", ""),
|
||||||
|
"type": G.nodes[n].get("bipartite", ""),
|
||||||
|
"Thermometer_ID": G.nodes[n].get("id"),
|
||||||
|
"Kapitelname": G.nodes[n].get("kapitelname"),
|
||||||
|
"Subkapitel": G.nodes[n].get("subkapitel"),
|
||||||
|
"Effektstärke": G.nodes[n].get("d")
|
||||||
|
}
|
||||||
|
for n in G.nodes()
|
||||||
|
],
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"source": u,
|
||||||
|
"target": v,
|
||||||
|
"weight": float(d.get("weight", 0.0)),
|
||||||
|
"sign": d.get("sign", "")
|
||||||
|
}
|
||||||
|
for u, v, d in G.edges(data=True)
|
||||||
|
],
|
||||||
|
"summary": summary
|
||||||
|
}
|
||||||
|
export_json(payload, "network_systemebenen.json")
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Main
|
||||||
|
# -----------------------------------------
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Beispiel: keine Filter, aber du kannst unten einfach drehen:
|
||||||
|
# - min_abs_d=0.10 (macht das Netz ruhiger)
|
||||||
|
# - kapitel_filter=[5,6,7] oder subkapitel_filter=["Fähigkeiten", ...]
|
||||||
|
run_network_analysis(
|
||||||
|
csv_path=os.path.join(os.path.dirname(__file__), csv_file),
|
||||||
|
min_abs_d=0.00,
|
||||||
|
kapitel_filter=None,
|
||||||
|
subkapitel_filter=None,
|
||||||
|
seed=42
|
||||||
|
)
|
||||||
|
|
||||||
@ -450,10 +450,16 @@ def plot_rank_tables(df: pd.DataFrame, top_n: int = 15):
|
|||||||
fig.show()
|
fig.show()
|
||||||
export_figure(fig, fname, export_fig_visual, export_fig_png)
|
export_figure(fig, fname, export_fig_visual, export_fig_png)
|
||||||
|
|
||||||
top_abs = df.sort_values(df["Effektstärke"].abs(), ascending=False).head(top_n)
|
top_abs = (df.assign(_absd=lambda t: t["Effektstärke"].abs())
|
||||||
|
.sort_values("_absd", ascending=False)
|
||||||
|
.head(top_n)
|
||||||
|
.drop(columns=["_absd"]))
|
||||||
table(top_abs, f"Top {top_n} nach |d|", "sys_top_absd")
|
table(top_abs, f"Top {top_n} nach |d|", "sys_top_absd")
|
||||||
|
|
||||||
top_coup = df.sort_values(df["Kopplungsindex"].abs(), ascending=False).head(top_n)
|
top_coup = (df.assign(_absi=lambda t: t["Kopplungsindex"].abs())
|
||||||
|
.sort_values("_absi", ascending=False)
|
||||||
|
.head(top_n)
|
||||||
|
.drop(columns=["_absi"]))
|
||||||
table(top_coup, f"Top {top_n} nach |Kopplungsindex|", "sys_top_kopplung")
|
table(top_coup, f"Top {top_n} nach |Kopplungsindex|", "sys_top_kopplung")
|
||||||
|
|
||||||
# -----------------------------------------
|
# -----------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user