Я пытаюсь создать граф сети книг с использованием networkx.В моем примере я взял две книги с моей книжной полки и использовал API, чтобы извлечь «похожие книги» из Goodreads.Подобные книги читаются в словаре d1, используя приведенный ниже код.d1 выглядит так:
#use requests to get book details based on id
id_lst=[3431,6900]
print(id_lst)
from goodreads import client
gc = client.GoodreadsClient(api_key,api_secret)
d1 = {}
for id in id_lst[:2]:
book = gc.book(id)
similar = book.similar_books
similar_small = similar[0:4]
print(book)
test=similar[1]
#print(test)
d1.update({book:similar_small})
print(d1)
{The Five People You Meet in Heaven: [
Harry Potter and the Deathly Hallows (Harry Potter, #7),
Lord of the Flies,
A Wrinkle in Time (Time Quintet, #1),
Speak],
Tuesdays with Morrie: [
Harry Potter and the Deathly Hallows (Harry Potter, #7),
Lord of the Flies,
Speak,
Anna Karenina]}
Затем я превращаю этот словарь в список краев, используя следующий код:
output = []
for key in d1:
for i in d1[key]:
output.append((key, i))
print(output)
Возвращает этот список краев.
[(The Five People You Meet in Heaven, Harry Potter and the Deathly Hallows (Harry Potter, #7)),
(The Five People You Meet in Heaven, Lord of the Flies),
(The Five People You Meet in Heaven, A Wrinkle in Time (Time Quintet, #1)),
(The Five People You Meet in Heaven, Speak),
(Tuesdays with Morrie, Harry Potter and the Deathly Hallows (Harry Potter, #7)),
(Tuesdays with Morrie, Lord of the Flies),
(Tuesdays with Morrie, Speak),
(Tuesdays with Morrie, Anna Karenina)]
Затем я пытаюсь прочитать это в networkx, чтобы построить график.
G = nx.from_edgelist(output)
Возвращает график с двумя различными кластерами, которые не связаны, несмотря на, например, «Гарри Поттер и Дары смерти» (Harry Potter, #7)) «появляется дважды, поэтому он должен быть связан как с« Пятью людьми, которых вы встречаете на небесах », так и с« Вторниками с Морри ».
Я очень новичок в Python и графовых сетях в целом, и япытаясь создать небольшой проект самостоятельно, поскольку моя организация начинает на них смотреть, и я хочу укрепить свое понимание.
РЕДАКТИРОВАТЬ: добавлен код, который создает словарь d1.график
введите описание изображения здесь
EDIT3: результат nx.draw (G)
введите описание изображения здесь
РЕДАКТИРОВАТЬ 4: Final edit - все решается преобразованием вывода API в строку ...
#use requests to get book details based on id
id_lst=[3431,6900]
print(id_lst)
from goodreads import client
gc = client.GoodreadsClient(api_key,api_secret)
str_ls=[]
d1 = {}
for id in id_lst[:2]:
book = gc.book(id)
books = str(book)
similar = book.similar_books
similar_small = similar[0:4]
for s in similar_small:
str_b = str(s)
str_ls.append(str_b)
d1.update({books:str_ls})
Спасибо всем, кто помог!