mirror of
https://github.com/fhswf/aki_prj23_transparenzregister.git
synced 2025-06-22 20:33:54 +02:00
Include pictures of the Frontend
This commit is contained in:
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
@ -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
|
||||
|
||||
<img src="abbildungen/unterschrift.PNG" alt="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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
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.
|
||||
|
||||
{width="80%"}
|
||||

|
||||
|
||||
### 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/.
|
Reference in New Issue
Block a user