हेब्रोसोसिटी का सामाजिक ग्राफ

आज, मैं हेबर दर्शकों पर अपने छोटे से प्रयोग के बारे में एक कहानी बताना चाहूंगा। प्रयोग का विषय हैब्रॉस्सिटी के सामाजिक ग्राफ का निर्माण था।



विवरण

प्रयोग में लिए गए उद्देश्य:


ग्राफ़ में पार्स करना और भरना

उपयोगकर्ताओं और उनके दोस्तों के बारे में जानकारी प्राप्त करने के लिए, मैंने parser.py स्क्रिप्ट लिखा:

# -*- coding:utf-8 -*- # parser.py from BeautifulSoup import BeautifulSoup from urllib2 import urlopen, URLError from draw import Drawer class Parser(object): def __init__(self, address='http://habrahabr.ru/people/page', begin = 1, end = 3098): self.drawer = Drawer() self.queue_user = [] self.__begin = begin self.__end = end self.__address = address def parse(self): for i in xrange(self.__begin, self.__end): try: doc = BeautifulSoup(urlopen(self.__address + str(i))) #     . page = doc.findAll('td', attrs = {'class':'user'}) for user in page: #       print 'Parsing for user: %s' %user.dl.dt.a.string doc = BeautifulSoup(urlopen(user.dl.dt.a['href'])) page = doc.findAll('a', attrs = {'rel' : 'friend'}) #          if page: for friend in page: self.drawer.graph.add_nodes_from((user.dl.dt.a.string, friend.string)) self.drawer.graph.add_edge(user.dl.dt.a.string, friend.string) print "Add edge (%s, %s)"%(user.dl.dt.a.string, friend.string) else: self.drawer.graph.add_node(user.dl.dt.a.string) except URLError: #      -  i -= 1 print 'Nodes: %s' %self.drawer.graph.size() self.drawer.draw() if __name__ == '__main__': parse = Parser(end=8) parse.parse() 


पृष्ठों को पार्स करने के लिए, मैंने सुंदरसौप का उपयोग किया। दराज वर्ग ग्राफ को संग्रहीत करने और प्रदान करने के लिए जिम्मेदार है।

ग्राफ ड्राइंग और इमेज सेविंग

जैसा कि ऊपर उल्लेख किया गया है, ड्राडोमो मॉड्यूल से दराज वर्ग ग्राफ को संग्रहीत करने और प्रदान करने के लिए जिम्मेदार है:

 # -*- coding:utf-8 -*- # draw.py import networkx as nx import matplotlib.pyplot as plt class Drawer(object): def __init__(self, file_name = 'graph.png'): self.graph = nx.Graph() self.file_name = file_name def draw(self): '''      ''' nx.draw(self.graph,pos=nx.spring_layout(self.graph), node_size=3500, nodecolor='r',edge_color='b', node_shape='o') #      plt.gcf().set_size_inches(100,100) plt.savefig(self.file_name) 


इस वर्ग में, हम नेटवर्क क्षेत्र में नेटवर्कएक्स मॉड्यूल से ग्राफ वर्ग के एक उदाहरण को संग्रहीत करते हैं, जिसमें हमारा सामाजिक ग्राफ स्थित होगा। यह ध्यान दिया जाना चाहिए कि ग्राफ़ वर्ग ग्राफ़ के साथ काम करने के लिए बड़ी संख्या में तरीके प्रदान करता है। मॉड्यूल के साथ काम करने पर विवरण प्रलेखन में पाया जा सकता है। आपको उस पद्धति पर ध्यान देना चाहिए जो परिणामी आकृति / ग्राफ का आकार निर्धारित करता है। पैरामीटर को बदला जा सकता है, यह ग्राफ में कोने की संख्या पर निर्भर करता है।

परिणाम

किए गए कार्यों का परिणाम नियोजित लोगों से कुछ अलग है। स्क्रिप्ट के दौरान, मैंने संसाधनों की बहुत महत्वपूर्ण खपत का खुलासा किया। जैसा कि आप जानते हैं, हैबर उपयोगकर्ताओं की अनुमानित संख्या 60,000 है। यहां तक ​​कि अगर हम त्याग करते हैं (जैसा कि मैंने वास्तव में किया था) ऐसे उपयोगकर्ता जिनके कोई मित्र नहीं हैं, संख्या अभी भी महत्वपूर्ण है। 3 जीबी रैम के साथ मशीन पर कार्यक्रम के संचालन की जांच की गई। जैसे ही ग्राफ खींचना शुरू होता है, सिस्टम बेशर्मी से स्वैप करना शुरू कर देता है, इसलिए ग्राफ में उपयोगकर्ताओं की संख्या कम करनी पड़ी। नतीजतन, मुझे कई अलग-अलग उपयोगकर्ताओं के साथ प्रदान किए गए ग्राफ़ के कई संस्करण मिले।
चित्र में 852 उपयोगकर्ताओं वाला ग्राफ दिखाया गया है:


जैसा कि आप देख सकते हैं, लेख के लिए छवियों को बहुत संकुचित होना है, इसलिए बाकी का हवाला दिया जाएगा, छवियों के बड़े आकार (7-14Mb) के कारण:


संभावनाओं



UPD: छवि संग्रह

मैं छवियों को डाउनलोड करने, लोगों को अपलोड करने के साथ समस्याओं के लिए माफी चाहता हूं।

UPD2: zoom.it पर चित्र

उनकी सलाह और सहायता के लिए mstyura का धन्यवाद।
4095 उपयोगकर्ता
7071 उपयोगकर्ता

Source: https://habr.com/ru/post/In126417/


All Articles