# Create the edge list
edge_list = [("Alice", "Bob"), ("Alice", "Charlie"), ("Alice", "Frank"), ("Bob", "Charlie"), ("Bob", "David"),
("Charlie", "David"), ("Charlie", "Eve"), ("Charlie", "Grace"), ("David", "Grace"), ("David", "Henry"),
("Eve", "Frank"), ("Eve", "Grace"), ("Frank", "Henry"), ("Grace", "Ivy"), ("Jack", "Alice"),
("Jack", "Bob"), ("Jack", "David"), ("Jack", "Eve"), ("Jack", "Henry")]
df = pd.DataFrame(edge_list, columns=["source", "target"])
# create network
g = nx.from_pandas_edgelist(df, create_using=nx.Graph()) #undirected network
# Plot network
nx.draw(g, with_labels=True)
# Calculate measures
print("Diameter:", nx.diameter(g))
print("Assortativity:", nx.degree_assortativity_coefficient(g))
print("Edge Density:", nx.density(g))
print("Transitivity (average):", nx.average_clustering(g))
print("Transitivity:", nx.transitivity(g))