Я анализирую сетевые и семантические значения твитов, которые я скачал по заданному предмету и геолокации, используя двудольный граф.Оптимизация скрипта индексирования для двудольного графика
Используя Python, я создаю файл .net, содержащий 2 набора узлов и ребер. Этот файл представляет собой объединение файлов, которые я создал отдельно: два набора вершин и краев. Проблема заключается в создании компонента Edges файла .net.
У меня есть 3 файла:
- tweeterers.csv с отправителями/tweeterers ("номер/ID" и "имя")
- words.csv, семантическими тегами/словами Я извлек из твитов. Формат - это «номер/идентификатор» и «имя», с «числом», начиная с последнего «числа» указанного файла. От 0 до 6 слов в строке
- Names_Text_full_clean.csv, с твитерами и словами. Каждая строка содержит 1 имя твитера и от 0 до 6 слов. Этот файл даст мне связь между твитерами и словами для графика.
Я в основном читаю каждый твитер, читаю слово, читаю, если есть ассоциация. Если да, я пишу ассоциацию (это край). Это тройной цикл. Это очень медленно с сетями среднего размера: сеть с ~ 650 узлами и ~ 18000 ребер заняла у меня почти 2 дня на двухъядерном процессоре Mac Mini 2.7GHz.
Любая помощь, чтобы ускорить его, будет высоко оценена!
Ниже приведен код:
import csv # csv library is to handle csv files
# open the twetterers file and make it available in 'reader1'
file_read1 = open('tweeterers.csv', 'rU')
reader1 = csv.reader(file_read1)
# open the file for writing and make it available in 'writer'
file_write=open('edges.csv', 'wb')
writer=csv.writer(file_write)
for sender in reader1:
file_read2 = open('words.csv', 'rU')
reader2 = csv.reader(file_read2)
for word in reader2:
file_read = open('Names_Text_full_clean.csv', 'rU')
reader = csv.reader(file_read)
for match in reader:
for elem in range (1,len(match)):
if sender[1] == match [0]:
if word [1] == match [elem]:
a = sender[0],word[0]
writer.writerow(a)
print "I wrote a record: it's: ",a
file_read.close()
file_read1.close()
file_read2.close()
file_write.close()
Вы действительно печатаете результаты 'print 'Я написал запись: это:", a'? Если вы, вероятно, должны удалить это, это, безусловно, ускорит процесс. – Brad
Конечно, Брэд.Это было сделано только для целей отладки. Спасибо за ваш комментарий! – timeitself