Python igraph: удаление вершин из графа

Я работаю с набором данных электронной почты enron, и я пытаюсь удалить адреса электронной почты, которые не имеют "@enron.com " (т. е. я хотел бы иметь только электронные письма enron). Когда я пытался удалить эти адреса без @enron.com некоторые письма просто пропущены по некоторым причинам. Ниже показан небольшой график, где вершинами являются адреса электронной почты. Это формат gml:

Creator "igraph version 0.7 Sun Mar 29 20:15:45 2015"
Version 1
graph
[
  directed 1
  node
  [
    id 0
    label "csutter@enron.com"
  ]
  node
  [
    id 1
    label "steve_williams@eogresources.com"
  ]
  node
  [
    id 2
    label "kutner.stephen@enron.com"
  ]
  node
  [
    id 3
    label "igsinc@ix.netcom"
  ]
  node
  [
    id 4
    label "dbn@felesky.com"
  ]
  node
  [
    id 5
    label "cheryltd@tbardranch.com"
  ]
  node
  [
    id 6
    label "slover.eric@enron.com"
  ]
  node
  [
    id 7
    label "alkeister@yahoo.com"
  ]
  node
  [
    id 8
    label "econnors@mail.mainland.cc.tx.us"
  ]
  node
  [
    id 9
    label "jafry@hotmail.com"
  ]
  edge
  [
    source 5
    target 5
    weight 1
  ]
]

мой код:

G = ig.read("enron_email_filtered.gml")
for v in G.vs:
    print v['label']
    if '@enron.com' not in v['label']:
        G.delete_vertices(v.index)
        print 'Deleted'

в этом наборе данных необходимо удалить 7 писем. Однако, исходя из вышеизложенного удален код, только 5 писем.

1 ответов


из учебника здесь, вы можете получить доступ ко всем вершинам с определенным свойством, а затем удалить их навалом следующим образом:

to_delete_ids = [v.index for v in G.vs if '@enron.com' not in v['label']]
G.delete_vertices(to_delete_ids)

вот результат, который я получил:

to delete ids: [1, 3, 4, 5, 7, 8, 9]
Before deletion: IGRAPH D-W- 10 1 --
+ attr: id (v), label (v), weight (e)
+ edges:
5->5
After deletion: IGRAPH D-W- 3 0 --
+ attr: id (v), label (v), weight (e)
label: csutter@enron.com
label: kutner.stephen@enron.com
label: slover.eric@enron.com