Lekcja  – Król maili / Najlepiej skomunikowane miasta

def add_node(V, node):

    if node in V.keys():
        return
    else:
        V[node] = {}

 
def add_edge(V, source, dest, weight):

    if not source in V.keys():
        add_node(V, source)
    if not dest in  V.keys():
        add_node(V, dest)

    if not dest in V[source].keys():
        V[source][dest] = weight
    else:
        V[source][dest] += weight      


# http://snap.stanford.edu/data/email-Eu-core.html
file_path = r"D:/ALG-GRAPH/data/email-Eu-core.txt"

V = {}
with open(file_path, 'r') as f:
    for line in f:
        u,v = line.split(' ')
        u = int(u)
        v = int(v)
        add_edge(V, u, v, 1)

print(f'Number of nodes: {len(V)}')        
print(f'Number of edges: {sum( [ len(V[n]) for n in V.keys() ] )}')

print(f'Max outcoming emails: { max( [ len(V[n]) for n in V.keys() ] ) }')

max_mails =  max( [ len(V[n]) for n in V.keys() ] )
mail_king = -1
for n in V.keys():
    if len(V[n]) == max_mails:
        print(f'King of the emails is {n}')
        mail_king = n
        
in_mails = 0
for n in V.keys():
    if mail_king in V[n]:
        in_mails += 1

print(f'Number of incoming emails for {mail_king} is: {in_mails}')

Lab

import csv
from operator import itemgetter
from cv2 import THRESH_TOZERO
from defusedxml import ExternalReferenceForbidden
from matplotlib.animation import FFMpegFileWriter
from sqlalchemy import false

network = {}
select_month = 1

with open('data/usa-domestic-flight-2019.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {", ".join(row)}')
            line_count += 1
        else:
            line_count += 1
            origin = row[8]
            destination = row[11]
            month = int(row[12])

            if month != select_month:# or passengers == 0:
                continue

            if origin not in network.keys():
                network[origin] = [destination]
            else:
                if destination not in network[origin]:
                    network[origin].append(destination)
                       

print(f'Processed {line_count} lines.')
#print(network)

out_degrees = []

for origin, destinations in network.items():
    out_degrees.append({ 'name': origin,
                        'connections' : len(destinations) })

top10 = sorted(out_degrees, key=itemgetter('connections'), reverse=True)

for x in top10[:10]:
    print(f"{x['name']}\t{x['connections']}")