कुछ साल पहले, मैं गेम ऑफ थ्रोन्स की किताबें पढ़ रहा था और मुझे अपने दिमाग में सभी किरदारों को याद रखने में मुश्किल हो रही थी। (यह आश्चर्य की बात नहीं है - श्रृंखला में 150 से अधिक नामित किरदार हैं!) मैं अध्यायों के बीच आगे-पीछे जा रहा था या कथानक याद रखने के लिए लगातार ए सॉन्ग ऑफ आइस एंड फायर विकी देख रहा था। मुझे एक मानसिक मानचित्र की आवश्यकता थी - निश्चित रूप से इन किरदारों को कल्पना करने का कोई बेहतर तरीका था?
यहाँ विकिपीडिया से लिया गया एक नमूना नेटवर्क ग्राफ़ दिखाया गया है जो विभिन्न भाषाओं में विकिपीडिया संपादकों के योगदान को दर्शाता है। इस उदाहरण का उपयोग करते हुए, यहाँ ग्राफ़ सिद्धांत अवधारणाओं की कुछ मूल बातें (या एक त्वरित रिफ्रेशर, यदि आप पहले से ही परिचित हैं) दी गई हैं:
जिन भाषाओं में लेख लिखे गए थे, उन्हें दर्शाने वाले वृत्त ग्राफ के "शीर्ष" हैं (परस्पर बदले जाने वाले "नोड्स")।
"किनारे" प्रत्येक कोने के जोड़े को जोड़ने वाली रेखाएँ हैं। ग्राफ़ में प्रत्येक किनारे को एक घटना फ़ंक्शन के माध्यम से निर्धारित किया जाता है जो कोने के जोड़े को किनारे पर मैप करता है।
इस उदाहरण में, प्रत्येक किनारा (लाइन वेट या मोटाई के अनुसार) उन संपादकों की संख्या को दर्शाता है जिन्होंने लाइन को जोड़ने वाली दोनों भाषाओं में योगदान दिया है। इसे हम एक अनिर्देशित सरल ग्राफ कहते हैं। "अनिर्देशित" का अर्थ है {en--> fr} और {fr --> en} समान हैं, और "सरल" का अर्थ है कि प्रत्येक कोने के जोड़े को एक से अधिक किनारा नहीं जोड़ता है। ग्राफ "भारित" भी है, जिसका अर्थ है कि किनारों की मोटाई कोने के बीच संबंध की ताकत के सापेक्ष है। इस उदाहरण में, भारित घटना फ़ंक्शन कुछ इस तरह दिख सकता है:
जबकि इस तरह से ग्राफ का दृश्य प्रतिनिधित्व संबंधों को शीघ्रता से दिखाने के लिए एक सहज दृष्टिकोण है ताकि उन्हें समझना आसान हो, डेटासेट को ग्राफ ऑब्जेक्ट के रूप में प्रस्तुत करने से हमें और भी अधिक गहन जानकारी मिल सकती है।
"डेटा विज्ञान में, 80 प्रतिशत समय डेटा तैयार करने में व्यतीत होता है, 20 प्रतिशत समय डेटा तैयार करने की आवश्यकता के बारे में शिकायत करने में व्यतीत होता है।"
डेटा वैज्ञानिक शायद हर बात पर सहमत न हों — लेकिन हम इस बात पर सहमत हैं कि किसी भी प्रोजेक्ट का सबसे कठिन हिस्सा डेटा प्राप्त करना है। हमारे लिए सौभाग्य की बात है कि इस लेख के लिए वह हिस्सा हमारे पीछे रह गया है। हैमिल्टन गीतों का एक अच्छा साफ डेटासेट कागल पर आसानी से उपलब्ध है जिसे आप आसानी से डाउनलोड कर सकते हैं और ग्राफ़ बनाना शुरू कर सकते हैं।
हैमिल्टन डेटासेट कुछ इस प्रकार दिखता है।
प्रत्येक पात्र/गीत/गीत की पंक्ति के लिए एक पंक्ति रिकार्ड की जाती है।
सभी हैमिल्टन स्पीकरों का नेटवर्क ग्राफ़ बनाने के लिए, निम्नलिखित को परिभाषित किया जाना चाहिए:
नोड्स (स्पीकर की सूची)
किनारे (स्पीकर की प्रत्येक जोड़ी को जोड़ने के लिए)
शीर्षों के प्रत्येक जोड़े को किनारे पर मैप करने के लिए घटना फ़ंक्शन (वैकल्पिक भार के साथ)
मैंने जो घटना फ़ंक्शन चुना है वह प्रत्येक जोड़ी वक्ताओं द्वारा एक साथ गाए जाने वाले गानों की संख्या है। मेरी धारणा यह है कि जितने अधिक गानों में दो किरदार एक साथ दिखाई देते हैं, उनका रिश्ता उतना ही मजबूत होता है।
Weight {speaker,x, speaker,y} = #songs that feature both speaker,x and speaker,y
R के dplyr का उपयोग करके, मैं अपने मूल डेटासेट को **{src, dest, weight}**
इकाई में बदल सकता हूँ, और फिर उसे एक आसन्न मैट्रिक्स में परिवर्तित कर सकता हूँ। फिर मैं इस आसन्न मैट्रिक्स से एक "ग्राफ़ ऑब्जेक्ट" बनाने के लिए R के igraph पैकेज में graph.adjacency का उपयोग कर सकता हूँ, जिसका उपयोग मैं प्लॉटिंग और अन्य विश्लेषणों के लिए कर सकता हूँ।
ग्राफ_ऑब्जेक्ट को प्लॉट.आईग्राफ फ़ंक्शन का उपयोग करके विज़ुअलाइज़ किया जा सकता है। चूँकि इस फ़ंक्शन में चुनने के लिए कई कस्टम लेआउट हैं, इसलिए मैं "स्टार" लेआउट का उपयोग करके उसी ग्राफ़ को रेंडर करके शुरू करता हूँ।
तकनीकी रूप से परिणाम एक नेटवर्क प्लॉट है। लेकिन क्या इसे और भी बेहतर बनाना संभव है? ऊपर दिया गया चार्ट यह सुझाव देता है कि सभी कोने और किनारों का समान महत्व है - लेकिन यह एक सामाजिक नेटवर्क को देखने के पूरे उद्देश्य को कमज़ोर करता है। कुछ पात्र वास्तव में अधिक "महत्वपूर्ण" हैं, और कुछ वक्ताओं के दूसरों के सापेक्ष मजबूत संबंध हैं।
यह ग्राफ इसे कैसे प्रतिबिंबित कर सकता है?
यहीं पर एज वेट और वर्टेक्स डिग्री की भूमिका आती है। मैं वजन के सापेक्ष edge.width
(यानी, प्लॉट में किनारे की मोटाई) और डिग्री के सापेक्ष vertex.label.cex
(यानी, वर्टेक्स का फ़ॉन्ट आकार) बनाने के लिए plot.igraph
फ़ंक्शन के मापदंडों के साथ खेलना शुरू करता हूं।
बहुत बेहतर! उच्च डिग्री वाले पात्र दृष्टिगत रूप से बड़े होते हैं, और मजबूत और कमजोर रिश्तों के बीच का अंतर भी रेखाओं के अंधेरे से स्पष्ट होता है। यह पुनरावृत्ति बहुत अधिक सहज है और दर्शकों को पात्रों के बीच संबंधों को तुरंत समझने में मदद करती है। यह भी उचित है कि किंग जॉर्ज एक अकेला नोड है, यह देखते हुए कि उसके गाने हमेशा (बहुत मज़ेदार) मोनोलॉग होते हैं।
आप R में visNetwork लाइब्रेरी का उपयोग इंटरैक्टिव नेटवर्क ग्राफ़ बनाने के लिए भी कर सकते हैं। लाइब्रेरी ग्राफ़ के कई हिस्सों को ज़ूम इन और आउट करना संभव बनाती है (विशेष रूप से बड़े ग्राफ़ के साथ उपयोगी), और इसमें शाइनी के लिए समर्थन है।
नोड्स के महत्व की पहचान करने के लिए ग्राफ सिद्धांत में केंद्रीयता एक महत्वपूर्ण अवधारणा है:
डिग्री केन्द्रीयता : यह प्रत्येक नोड से जुड़े किनारों की संख्या का माप है।
आइजेन सेंट्रलिटी : यह इस बात का माप दर्शाता है कि कोई नोड कितना “अच्छी तरह से जुड़ा हुआ” है, कितने लिंक कनेक्शन साझा करते हैं, और इसी तरह नेटवर्क के माध्यम से। यह पूरे नेटवर्क पर प्रभाव रखने वाले नोड्स की पहचान करता है, न कि केवल सीधे उससे जुड़े हुए नोड्स की।
बीचनेस सेंट्रलिटी: यह वस्तुतः यह दर्शाता है कि दिया गया नोड अन्य नोड्स के बीच कितना है और नेटवर्क के विभिन्न क्लस्टरों के बीच एक “पुल” के रूप में कार्य करता है। यह नेटवर्क के बाकी हिस्सों पर प्रत्येक कोने के “प्रभाव” का एक माप है।
मैं उत्पन्न ग्राफ के लिए केंद्रीयता प्राप्त करने के लिए igraph के degree(), Betweenness(), और eigen_centrality() फ़ंक्शन का उपयोग कर सकता हूं:
ऐसा लगता है कि हमारे ग्राफ में एरॉन बूर की बीचनेस सेंट्रलिटी ('ब्रिज') सबसे ज़्यादा है, जबकि हैमिल्टन की आइगेनवेक्टर सेंट्रलिटी ('इंफ्लुएंसर') सबसे ज़्यादा है। आप इससे जो चाहें समझ सकते हैं।
नेटवर्क ग्राफ़ के व्यावसायिक अनुप्रयोग अनेक हैं:
सोशल नेटवर्किंग साइट्स समान उपयोगकर्ताओं के समुदाय बनाने और लक्षित अनुशंसाएँ प्रदान करने के लिए नेटवर्क ग्राफ़ का उपयोग करती हैं। "सुझाए गए मित्र" सुविधा के पीछे एल्गोरिदम का एक प्रारंभिक कार्यान्वयन कुछ इस तरह दिख सकता है: "ऐलिस के दस में से नौ तत्काल मित्र बॉब के भी मित्र हैं -> बॉब को ऐलिस के संभावित मित्र के रूप में सुझाएँ।"
ऐसे अनुप्रयोग जो स्थान X से स्थान Y तक की सबसे छोटी दूरी को मैप करते हैं (जैसे मानचित्र, राइड-शेयरिंग सेवाएं, डिलीवरी ट्रकों के लिए आपूर्ति श्रृंखला और लॉजिस्टिक्स, इत्यादि) संभवतः "सबसे छोटे पथ" एल्गोरिदम के वेरिएंट का उपयोग करते हैं, जिन्हें कंप्यूटर विज्ञान में ट्रैवलिंग सेल्समैन समस्या के रूप में जाना जाता है।
नेटवर्क सिद्धांत प्राकृतिक भाषा प्रसंस्करण (एनएलपी) के भीतर शाब्दिक और अर्थपूर्ण प्रसंस्करण का एक महत्वपूर्ण घटक है, जिसका प्रयोग चैटबॉट और वर्चुअल सहायकों जैसे एलेक्सा, कोरटाना, सिरी और यहां तक कि आईबीएम के वॉटसन द्वारा जेपार्डी में जीतने के लिए भी किया जाता है, जो कि शब्दों के खेल और सरलता से बहुत दूर का खेल है।
सिक्स डिग्रीज़ ऑफ़ केविन बेकन जैसे नाम-ड्रॉपिंग पार्टी गेम नेटवर्क ग्राफ़ का उपयोग करते हैं।
महामारी विज्ञान में, महामारी या “सुपर स्प्रेडर” घटनाओं की उत्पत्ति की पहचान करने में केंद्रीयता उपायों का उपयोग किया जा सकता है।
अगर आप इसके बारे में सोचें, तो इंटरनेट बस अलग-अलग वेबसाइटों का एक विशाल नेटवर्क है। सर्च इंजन किसी खास सर्च क्वेरी के लिए सबसे ज़्यादा प्रासंगिक पेज दिखाने के लिए नॉलेज ग्राफ माप का इस्तेमाल करते हैं।
वे जितने मज़ेदार हैं, यह ध्यान रखना ज़रूरी है कि उत्पादन में इस्तेमाल किए जाने पर नेटवर्क ग्राफ़ कमियों से रहित नहीं हैं। उदाहरण के लिए, वे संसाधन-गहन हो सकते हैं। किसी भी मैट्रिक्स ऑपरेशन के मामले में, स्केलेबिलिटी और प्रदर्शन कभी-कभी प्रभावित होते हैं। एक "कोल्ड स्टार्ट" समस्या भी है - यदि आपका डेटासेट बहुत विरल है या संस्थाओं के बीच वास्तव में बहुत अधिक संबंध नहीं हैं, तो नेटवर्क ग्राफ़ एक प्रभावी समाधान नहीं है। हालांकि, सही तरीके से और सही संदर्भ में उपयोग किए जाने पर, वे व्यवसाय के लिए मूल्यवान हो सकते हैं।
कोड: https://github.com/iswaryam/hamilton/ •
डेटासेट क्रेडिट: https://www.kaggle.com/lbalter/hamilton-lyrics#
यदि आप पॉटरहेड हैं, तो मेरा गिटहब देखें - मैंने हैरी पॉटर के पात्रों का भी इसी प्रकार की विधि से ग्राफ बनाया है।