diff --git a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/S4-5-2.md b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/S4-5-2.md index bb10b6d..ec90950 100644 --- a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/S4-5-2.md +++ b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/S4-5-2.md @@ -28,7 +28,8 @@ Für das Aktualisieren des Netzwerks nach Benutzereingaben werden Callbacks verw ## Bedienung des Netzwerks auf der Homepage Die Homepage des Transparenzregisters sieht zur Vollendung des Projektes folgender Maßen aus: - +![Abbildung der Homepage](images/Home_page.PNG) + Auf der linken Seite befindet sich eine Tabelle mit den 10 Zehn "besten" Nodes aus dem Links abgebildetet Graphen. Mit "besten" sind hier die 10 Nodes mit dem höchsten Wert der oberhalb der Tabelle gewählten Metrik. Je nach gefilterten Daten ändert sich die Tabelle automatisch und zeigt immer den aktuellen Stand zum rechts erstellten Graphen. Der Graph auf der rechten Seite repräsentiert die Verflechtung von Unternehmen und Akteuren. Dabei stellen rote Punkte Personen wie Wirtschaftsprüfer oder Geschäftsführer dar, während blaue Punkte Unternehmen symbolisieren. Die Bedienung des Graphen erfolgt über die oberen Bedienfelder. Die ersten beiden Dropdown-Menüs ermöglichen die Auswahl der Datenbasis, auf die sich der Graph beziehen soll. Hierbei ist auch eine Mehrfachauswahl möglich. Neben den Daten kann auch das Layout des Graphen eingestellt werden, wobei für die dreidimensionale Darstellung nur begrenzte Optionen verfügbar sind. @@ -36,11 +37,13 @@ Der Graph auf der rechten Seite repräsentiert die Verflechtung von Unternehmen Die initiale Erstellung eines Graphen kann mehrere Sekunden in Anspruch nehmen, wird jedoch anschließend zwischengespeichert und kann in den nächsten 30 Minuten schneller durchgeführt werden. Die anfänglichen Leistungsprobleme resultieren aus der Menge an Daten, die abgerufen, verarbeitet und dargestellt werden müssen. Das Zusammenspiel von Datenbank, NetworkX und Plotly beeinflusst hier die Gesamtperformance. ## Bedienung des Netzwerks auf der Company Page -Nach Auswahl eines bestimmten Unternehmens kann auf der Unternehmensseite der Reiter "Verflechtung" gewählt werden, um die Verflechtungen des Unternehmens zu betrachten. Sollte das ausgewählte Unternehmen keine Verflechtungen aufweisen, wird dem Nutzer ein entsprechender Hinweistext angezeigt. +Nach Auswahl eines bestimmten Unternehmens kann auf der Unternehmensseite der Reiter "Verflechtung" gewählt werden, um die Verflechtungen des Unternehmens zu betrachten. Sollte das ausgewählte Unternehmen keine Verflechtungen aufweisen, wird dem Nutzer ein entsprechender Hinweistext angezeigt. Im Bild rot makiert. +![Abbildung eines Hinweis Textes](images/Company_note.PNG) Bei ausreichend vorhandenen Daten wird ein kompakter Graph erstellt, der die Verflechtungen des betrachteten Unternehmens zeigt. Hierbei werden lediglich die engsten Verbindungen visualisiert. Auf dieser Seite ist keine Interaktion mit dem Graphen vorgesehen, da der Benutzer hier lediglich zusätzliche Informationen zum Unternehmen erhalten soll, ohne den gesamten Graphen durchzugehen. Diese Funktion ist für die Homepage vorgesehen. +![Abbildung der Companypage](images/Company_page.PNG) ## Bedienung des Netzwerks auf der Person Details Page Die Personen-Detailseite verhält sich in Bezug auf das Netzwerk analog zur Unternehmensseite. Auch hier erhält der Nutzer lediglich zusätzliche Informationen zur Person, kann jedoch nicht weiter mit dem Graphen interagieren. diff --git a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_note.PNG b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_note.PNG new file mode 100644 index 0000000..17521ca Binary files /dev/null and b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_note.PNG differ diff --git a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_page.PNG b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_page.PNG new file mode 100644 index 0000000..79a9458 Binary files /dev/null and b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Company_page.PNG differ diff --git a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Home_page.PNG b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Home_page.PNG new file mode 100644 index 0000000..ec111dc Binary files /dev/null and b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/Home_page.PNG differ diff --git a/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/unterschrift.PNG b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/unterschrift.PNG new file mode 100644 index 0000000..ee80af4 Binary files /dev/null and b/documentations/Ergebnisse/Abschlussbericht_und_Praesentation/TiRo/images/unterschrift.PNG differ diff --git a/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/abbildungen/unterschrift.PNG b/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/abbildungen/unterschrift.PNG new file mode 100644 index 0000000..319b9b5 Binary files /dev/null and b/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/abbildungen/unterschrift.PNG differ diff --git a/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/verflechtungsanalyse.md b/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/verflechtungsanalyse.md index ba9ebd1..dc79320 100644 --- a/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/verflechtungsanalyse.md +++ b/documentations/Ergebnisse/Zwischenbericht_und_Praesentation/TiRo/verflechtungsanalyse.md @@ -24,7 +24,7 @@ Werken anderer Autoren entnommen sind, habe ich als solche kenntlich gemacht. Die Arbeit wurde bisher weder gesamt noch in Teilen einer anderen Prüfungsbehörde vorgelegt und auch noch nicht veröffentlicht. -2023-10-01 +2023-10-01 image @@ -88,29 +88,27 @@ analysieren, da auch Verflechtungen Graphen sind. ### Begriffliche Definition Graphen sind nach der Graphentheorie "Strukturen aus Punkten und -Verbindungen zwischen diesen Punkten" [@DiskreteMathematik S. 257]. Die +Verbindungen zwischen diesen Punkten" [1]. Die Punkte werden als **Ecken/Knoten** oder im Englischen ***Nodes*** und die Verbindungen als **Kanten/Verbindungen**, oder im Englischen ***Edges*** bezeichnet. Dabei liegt der Kern eines Graphen nicht in der Visualisierung, sondern in dessen mengentheoretischen Eigenschaften. -[@DiskreteMathematik S. 257] +[1] Es gibt diverse Arten von Graphen: **Ungerichtete Graphen** und **gerichtete Graphen** beziehungsweise **Digraphen**. Für ungerichtete Graphen gilt folgende Definition: -::: displayquote -"Ein ungerichteter Graph $G$ ist ein Paar ($V$, $E$). Hierbei ist $V$ +*"Ein ungerichteter Graph $G$ ist ein Paar ($V$, $E$). Hierbei ist $V$ eine endliche Menge, welche die Ecken repräsentiert, und $E$ ist eine Menge, die aus Mengen der Form $v1$, $v2$ besteht, wobei $v1$, $v2$ -$\in$ $V$ gilt. $E$ repräsentiert die Menge der Kanten." -[@DiskreteMathematik S. 257] -::: +$\in$ $V$ gilt. $E$ repräsentiert die Menge der Kanten."* +[1] Anhand dieser Definition lassen sich Graphen mit beliebig vielen Kanten zwischen den Ecken bilden. Die Kanten müssen dabei nicht geradlinig verlaufen, sodass derselbe Graph auf verschiedene Weisen dargestellt -werden kann. [@DiskreteMathematik vgl. S. 257-258] +werden kann. [1] Im Gegensatz dazu besitzen gerichtete Graphen Kanten mit einer vorgegebenen Richtung. Diese Richtung wird anhand eines Pfeiles auf der @@ -118,19 +116,17 @@ Kante visualisiert. Auch ein gerichteter Graph kann auf verschiedene Arten dargestellt werden. Eine mögliche Definition von gerichteten Graphen ist die folgende: -::: displayquote -"Ein gerichteter Graph oder Digraph $D$ ist eine Struktur ($V$, $E$). +*"Ein gerichteter Graph oder Digraph $D$ ist eine Struktur ($V$, $E$). Hierbei ist $V$ eine endliche Menge der Ecken und $E$ ist eine Menge, die aus Paaren der Form ($v1$, $v2$) besteht, wobei $v1$, $v2$ $\in$ $V$ gilt. E repräsentiert die Menge der gerichteten Kanten, welche auch -Bögen genannt werden." [@DiskreteMathematik S. 258] -::: +Bögen genannt werden."* [1] Die bereits angesprochene Möglichkeit, einen Graphen mit denselben Eigenschaften auf unterschiedlichste Weise darzustellen, bezeichnet man als **Isomorphie**. Es ist einfach von einem Graph einen isomorphen Graphen zu erzeugen, aber deutlich komplexer die Isomorphie von zwei -Graphen festzustellen. [@MathematikInformatiker vgl. S. 272] +Graphen festzustellen. [2] ### Sociogram/ Social Network/ Social Graph @@ -144,7 +140,7 @@ Ein solcher Graph oder ein solches Netz wird aufgebaut, indem jede Ecke des Graphen einen Akteur (Person oder Unternehmen), jede Kante eine Verbindung (Beauftragung, Verwandschaft, Arbeitsverhältnis) darstellt. Die Kanten können mit Gewichten versehen werden. Jede Kante ist dabei -gerichtet.[@SocialMediaAnalysis vgl. S. 8] +gerichtet.[3] Das Ergebnis kann als *Social Graph, Social Network* oder *Sociogram* bezeichnet werden. In dieser Arbeit wird hauptsächlich der Begriff @@ -157,7 +153,7 @@ eine *Triad*, welche offen oder geschlossen sein kann. Offen bedeutet, dass über einen Knoten die anderen beiden verbunden sind. Hingegen ist bei einer geschlossenen *Triad* jeder Knoten mit beiden anderen Knoten über eine Kante verbunden. Die größte soziale Gruppe stellt ein *Quad* -dar und besteht aus vier Ecken.[@SocialNetworkAnalysis S. 12-14] +dar und besteht aus vier Ecken.[4] Die Ansammlung von mehreren Akteuren durch enge Verbindungen wird als ***Cluster*** oder ***Group*** bezeichnet. @@ -173,7 +169,7 @@ einem anderen zu gelangen. Dieser Wert kann auf einen Teil des Graphen sowie auf den gesamt Graphen gemittelt werden. Ist der Median der *number of hops* im Gesamtgraphen beispielsweise bei 5, so werden Verbindungen, die diesen Schwellwert überschreiten, zu einem Cluster -kombiniert. [@SocialMediaAnalysis S. 9] +kombiniert. [3] Weitere Einsichten werden über ein Netzwerk erlangt, in dem man Teile des Netzwerkes oder das gesamte Netzwerk in drei verschiedene Level @@ -181,7 +177,7 @@ abstrahiert. **Element-Level** ist die Betrachtung der Auswirkungen und Einflüsse einzelner Ecken und Kanten. **Group-Level** analysiert die Zusammenhänge und Dichte von Gruppen innerhalb des Netzes. **Network-Level** ist das Interesse an den topologischen Eigenschaften -des Netzwerks. [@IntroductionSNA vgl.] +des Netzwerks. [5] #### Element-Level Metriken @@ -202,7 +198,7 @@ mit sich selbst verbindet. Akteuren verbindet, die ähnlich sind hinsichtlich der Größe des Grades. **Homophily** ist die Wahrscheinlichkeit von Verbindungen sehr ähnlicher -Akteure untereinander. [@IntroductionSNA vgl.] +Akteure untereinander. [5] Weitere Algorithmen und Kennzahlen sind die Folgenden: @@ -241,7 +237,7 @@ dieser Kennzahl muss allerdings mit Vorsicht agiert werden. Eine hohe *Betweeness Centrality* kann ausdrücken, dass ein Akteur einen großen Einfluss und Autorität über einen Cluster im Netzwerk verfügt, es kann jedoch auch sein, dass der Akteur nur als Vermittler beider Enden -dient. [@SNA101 Vgl.] +dient. [7] Dieser Wert lässt sich dadurch berechnen, indem jedes Ecken-Paar des Netzwerkes genommen wird und die Anzahl der zwischen ihnen liegenden @@ -266,7 +262,7 @@ Bei der Interpretation dieser Kennzahl können Informationsverteiler bestimmt werden, jedoch haben in einem sehr verbundenen Netzwerk die Ecken meist einen sehr ähnlichen *Closeness Centrality* Wert. Daher ist es bei diesen Netzwerken sinnvoll, eher Informationsverteiler in den -einzelnen Clustern auszumachen. [@SNA101 Vgl.] +einzelnen Clustern auszumachen. [7] Dieser Wert wird berechnet, indem man die Gesamtanzahl an Schritte zu einer Ecke zählt und diesen Wert invertiert. @@ -289,7 +285,7 @@ allerdings, dass die ungerichteten Graphen deutlich besser funktionieren. Die Problematiken der *Eigenvector Centrality* bei gerichteten Graphen kann mittels der *Katz Centrality* behoben werden, welche aber in dieser Arbeit nicht weiter behandelt wird. -[@NetworksAnIntro Vgl. S. 169-171] +[6] Berechnet wird die Kennzahl je Knoten durch das Bilden eines Eigenvektors und Iterieren über jede der Kanten. Wenn die Kennzahl durch @@ -304,8 +300,7 @@ eingehenden Verbindungen ausgestattet. Die Verbindungen werden dann abhängig vom ausgehenden Knoten gewichtet. Diese Kennzahl wird genutzt, um bei *directed Graphs* einflussreiche Akteure auszumachen. Es war einer der ersten Rangfolgen Algorithmen hinter der Google Search Engine -und wurde nach dem Entwickler und Gründer Larry Page benannt. [@SNA101 -vgl.] +und wurde nach dem Entwickler und Gründer Larry Page benannt. [7] Akteure mit einem hohen *PageRank Centrality* Wert können als besonders einflussreich über ihre direkten Verbindungen hinaus interpretiert @@ -317,8 +312,7 @@ werden. ein k-Wert abhängig von seinem degree. Die Knoten werden dann gruppiert und gefiltert. Werte mit einem niedrigen k-Wert werden raus genommen. Somit bleiben nur Werte mit einem hohen k-Wert übrig und es bilden sich -semi-autonome Gruppierungen innerhalb des Netzwerks. [@SNAAlgorithms -vgl.] +semi-autonome Gruppierungen innerhalb des Netzwerks. [8] Der k-Wert bietet eine Möglichkeit für das Transparenzregister verschiedene Zoom Stufen einzubauen, damit gerade bei hohen Mengen an @@ -328,7 +322,7 @@ Daten man noch einen Überblick gewinnt. um von einer Ecke zur anderen zu kommen. Der kürzeste Weg gibt die Route an, mit der man mit so wenigen "hops" wie möglich durchs Netz kommt. Die "hops" können auch gewichtet werden, um Distanzen berechnen zu können -oder die Menge an "hops". [@SNAAlgorithms Vgl.] +oder die Menge an "hops". [8] Dieser Wert sagt etwas zur Weite des Netzwerks aus. Im Zusammenhang mit dem Projekt liefert diese Metrik eher unwichtigere Erkenntnisse. @@ -421,46 +415,46 @@ geladen. ``` {.python language="Python" breaklines="true"} # import pandas - import pandas as pd +import pandas as pd - # create dataframe based on the sample data - df_nodes = pd.read_csv('companies.csv', sep = ';') +# create dataframe based on the sample data +df_nodes = pd.read_csv('companies.csv', sep = ';') - # define shape based on the type - node_shape = {'Company': 'dot', 'Person': 'triangle'} - df_nodes['shape'] = df_nodes['type'].map(node_shape) +# define shape based on the type +node_shape = {'Company': 'dot', 'Person': 'triangle'} +df_nodes['shape'] = df_nodes['type'].map(node_shape) - # define color based on branche - node_color = {'Automobilhersteller': ' #729b79ff', - 'Automobilzulieferer': '#475b63ff', - 'Branche 3': '#f3e8eeff', - 'Branche 4': '#bacdb0ff', 'Branche 5': '#2e2c2fff'} - df_nodes['color'] = df_nodes['branche'].map(node_color) +# define color based on branche +node_color = { + 'Automobilhersteller': ' #729b79ff', + 'Automobilzulieferer': '#475b63ff', + 'Branche 3': '#f3e8eeff', + 'Branche 4': '#bacdb0ff', + 'Branche 5': '#2e2c2fff', +} +df_nodes['color'] = df_nodes['branche'].map(node_color) - # add information column that can be used for - the mouse over in the graph - df_nodes = df_nodes.fillna('') - df_nodes['title'] = df_nodes['label'] + '\n' + - df_nodes['branche'] +# add information column that can be used for +the mouse over in the graph +df_nodes = df_nodes.fillna('') +df_nodes['title'] = df_nodes['label'] + '\n' + +df_nodes['branche'] - # show first five entries of the dataframe - print(df_nodes.head()) +# show first five entries of the dataframe +print(df_nodes.head()) ``` Als Ergebnis erhält man ein Dataframe mit den verschiedenen Automobilherstellern. -::: center -::: {#tab:table1} - **ID** **Name** **Typ** - -------- --------------------------- --------- - 1 Porsche Automobil Holding Company - 2 Volkswagen AG Company - 3 Volkswagen Company + | **ID** | **Name** | **Typ** | + |--------|--------|--------| + |1| Porsche Automobil Holding | Company | + | 2 | Volkswagen AG | Company | + | 3 | Volkswagen | Company | + +*Tabelle 1: Tabelle der Automobilhersteller.* - : Tabelle der Automobilhersteller. -::: -::: Neben den Daten zu den Firmen wird noch eine zweite Tabelle \"relations\" eingelesen, welche die Beziehungen zwischen den Akteuren @@ -471,54 +465,52 @@ erstellt aus einem Dataframe einen Graphen. ``` {.python language="Python" breaklines="true"} # import networkx - import networkx as nx +import networkx as nx - # create edges from dataframe - graph = nx.from_pandas_edgelist(df_edges, source="from", - target="to", edge_attr="label") +# create edges from dataframe +graph = nx.from_pandas_edgelist(df_edges, source="from", +target="to", edge_attr="label") ``` Anschließend wird der erzeugte Graph mit PyVis visualisiert. ``` {.python language="Python" breaklines="true"} # visualize using pyvis - from pyvis.network import Network +from pyvis.network import Network - net = Network( - directed=False, neighborhood_highlight=True, - bgcolor="white", font_color="black") +net = Network( +directed=False, neighborhood_highlight=True, +bgcolor="white", font_color="black") - # pass networkx graph to pyvis - net.from_nx(graph) +# pass networkx graph to pyvis +net.from_nx(graph) - # set edge options - net.inherit_edge_colors(False) - net.set_edge_smooth("dynamic") +# set edge options +net.inherit_edge_colors(False) +net.set_edge_smooth("dynamic") - adj_list = net.get_adj_list() +adj_list = net.get_adj_list() - # calculate and update size of the nodes - depending on their number of edges - for node_id, neighbors in adj_list.items(): - # df["edges"] = measure_vector.values() +# calculate and update size of the nodes +depending on their number of edges +for node_id, neighbors in adj_list.items(): + df["edges"] = measure_vector.values() - size = 10 # len(neighbors)*5 +size = 10 # len(neighbors)*5 - next( - (node.update({"size": size}) for node in net.nodes - if node["id"] == node_id), - None, - ) +next( +(node.update({"size": size}) for node in net.nodes if node["id"] == node_id), + None,) - # set the node distance and spring lenght using repulsion - net.repulsion(node_distance=150, spring_length=50) +# set the node distance and spring lenght using repulsion +net.repulsion(node_distance=150, spring_length=50) - # activate physics buttons to further explore the available solvers: - # barnesHut, forceAtlas2Based, repulsion, hierarchicalRepulsion - net.show_buttons(filter_=["physics"]) +# activate physics buttons to further explore the available solvers: +# barnesHut, forceAtlas2Based, repulsion, hierarchicalRepulsion +net.show_buttons(filter_=["physics"]) - # save graph as HTML - net.save_graph("./metrics/test.html") +# save graph as HTML +net.save_graph("./metrics/test.html") ``` Das Resultat ist ein vollständiger Graph, welcher als HTML gespeichert @@ -528,7 +520,7 @@ Des Weiteren können Einstellungen an der Physik vorgenommen werden, um die Ansicht des Graphen zu verändern, beispielsweise die Knoten auseinander zu ziehen. -![Abbildung eines Graphens mit Mockdaten](abbildungen/Graph.PNG){width="80%"} +![Abbildung eines Graphens mit Mockdaten](abbildungen/Graph.PNG) ### Anwendung der Social Network Analysis (SNA) @@ -550,37 +542,35 @@ folgt aus: ``` {.python language="Python" breaklines="true"} adj_list = net.get_adj_list() - measure_vector = {} +measure_vector = {} - if measure_type == "eigenvector": +if measure_type == "eigenvector": measure_vector = nx.eigenvector_centrality(graph) df["eigenvector"] = measure_vector.values() - if measure_type == "degree": +if measure_type == "degree": measure_vector = nx.degree_centrality(graph) df["degree"] = measure_vector.values() - if measure_type == "betweeness": +if measure_type == "betweeness": measure_vector = nx.betweenness_centrality(graph) df["betweeness"] = measure_vector.values() - if measure_type == "closeness": +if measure_type == "closeness": measure_vector = nx.closeness_centrality(graph) df["closeness"] = measure_vector.values() - # calculate and update size of the nodes depending on their number of edges - for node_id, neighbors in adj_list.items(): - # df["edges"] = measure_vector.values() +# calculate and update size of the nodes depending on their number of edges +for node_id, neighbors in adj_list.items(): +# df["edges"] = measure_vector.values() - if measure_type == "edges": +if measure_type == "edges": size = 10 # len(neighbors)*5 - else: +else: size = measure_vector[node_id] * 50 next( ( node.update({"size": size}) - for node in net.nodes - if node["id"] == node_id - ), - None, - ) + for node in net.nodes if node["id"] == node_id), + None, + ) ``` Selbiges wird mit den Kennzahlen *degree_centrality, @@ -588,8 +578,7 @@ betweennes_centrality* und *closeness_centrality* durchgeführt. Über die *save_graph* Methode kann das Netzwerk dank des Pyvis Frameworks als HTML gespeichert und das fertige Netz im Browser betrachtet werden. -![Netzwerk mit der Metrik eigenvector -centrality.](abbildungen/Eigenvector.PNG){width="80%"} +![Netzwerk mit der Metrik eigenvector centrality.](abbildungen/Eigenvector.PNG) Anhand der Veränderung des Netzwerks kann man sehen, wie die Auswirkungen der Kennzahlen sind. Der Eigenvector misst, wie viele @@ -599,7 +588,7 @@ vor allem die Porsche AG in diesem Beispiel deutlich hervor, da diese viele direkt Verbindungen hat und mit dem Audi Knoten verbunden ist, der wiederum die zweit meisten Verknüpfungen besitzt. -![Netzwerk mit der Metrik degree centrality.](abbildungen/Degree.PNG){width="80%"} +![Netzwerk mit der Metrik degree centrality.](abbildungen/Degree.PNG) Die *Degree Centrality* zeigt hingegen ein etwas anderes Bild. Hier sind die Hauptakteure noch einmal deutlich größer im Verhältnis zu den @@ -609,8 +598,7 @@ und "Skoda Auto", da alle nur eine direkte Verbindung besitzen. Beim vorherigen Graphen war "Seat" größer, da es mit einem einflussreichen Knoten verbunden war und Hella nicht. -![Netzwerk mit der Metrik betweenness -centrality.](abbildungen/Betweenness.PNG){width="80%"} +![Netzwerk mit der Metrik betweenness centrality.](abbildungen/Betweenness.PNG) Im dritten Graphen mit der *betweenness centrality* sieht man, dass die Blätter keinen Knoten mehr haben, da dieser nicht als \"Brücke\" @@ -618,8 +606,7 @@ fungiert. In einem sehr großen Netzwerk könnte man solche Knoten wegfallen lassen, um ein genaueren Überblick der wichtigen Akteure zu erhalten. -![Netzwerk mit der Metrik closeness -centrality.](abbildungen/Closeness.PNG){width="80%"} +![Netzwerk mit der Metrik closeness centrality.](abbildungen/Closeness.PNG) Die letzte Metrik der Element-Level Metriken zeigt ein eher homogenes Bild. Die Knoten sind generell größer, was daran liegt, dass es hier @@ -733,8 +720,7 @@ dienten Personen und Firmen. Die Unternehmen wurden grün dargestellt, sind aber aufgrund der Größe eher schlecht von den Personen mit blauen Punkten zu unterscheiden. -![Graph mit Unternehmens- und -Personendaten](abbildungen/Transparenzregister_Graph.PNG){width="80%"} +![Graph mit Unternehmens- und Personendaten](abbildungen/Transparenzregister_Graph.PNG) ### Handlungsempfehlung @@ -834,3 +820,24 @@ welche Erkenntnisse mithilfe der SNA auf den Daten gewonnen werden können. Liefern die vorgeschlagenen Metriken die zu erwartenden Resultate? Sind alle Metriken überhaupt mit den Daten anwendbar? Diese Fragestellungen werden im Rahmen des Projektes angegangen. + +### Literaturverzeichnis + +- **[1]** S. Iwanowski und R. Lang, „Graphentheorie,“ ger, in Diskrete Mathematik mit +Grundlagen, Wiesbaden: Springer Fachmedien Wiesbaden, 2020, S. 257–320, isbn: +3658327596. + +- **[2]** P. Hartmann, „Graphentheorie,“ ger, in Mathematik für Informatiker, Wiesbaden: +Springer Fachmedien Wiesbaden, 2020, S. 269–300, isbn: 9783658265236. +- **[3]** I. Pitas, Graph-Based Social Media Analysis. CRC Press, 2016, isbn: 9780429162602. + +- **[4]** X. Fu, Social Network Analysis. CRC Press, 2017, isbn: 9781315369594. + +- **[5]** E. Yüksel, https://medium.com/@emreeyukseel/a-brief-introduction-to-social-network-analysis-2d13427f5189. + +- **[6]** M. Newmans, Networks An introduction. Oxford University Press Inc., 2010, isbn: +9780199206650. + +- **[7]** A. Disney,https://cambridge-intelligence.com/keylines-faqs-social-network-analysis/. + +- **[8]** C. Intelligence, https://cambridge-intelligence.com/social-network-analysis/. \ No newline at end of file