কয়েক বছর আগে, আমি গেম অফ থ্রোনস বইটি পড়েছিলাম এবং দেখেছিলাম যে আমার মাথায় থাকা সমস্ত চরিত্রের ট্র্যাক রাখতে আমার খুব কষ্ট হচ্ছে। (এটি আশ্চর্যের কিছু নয় - সিরিজটিতে 150 টিরও বেশি নামযুক্ত চরিত্র রয়েছে!) আমি চ্যাপ্টারগুলির মধ্যে পিছনে যাচ্ছিলাম বা ক্রমাগত প্লটলাইনগুলি মনে রাখার জন্য A Song of Ice and Fire wiki খুঁজছিলাম। আমার একটি মানসিক মানচিত্র দরকার ছিল - অবশ্যই এই অক্ষরগুলি কল্পনা করার আরও ভাল উপায় ছিল?
এখানে উইকিপিডিয়া থেকে একটি নমুনা নেটওয়ার্ক গ্রাফ চিত্রিত করা হয়েছে যা বিভিন্ন ভাষায় উইকিপিডিয়া সম্পাদকদের অবদানকে চিত্রিত করে। এই উদাহরণটি ব্যবহার করে, এখানে গ্রাফ তত্ত্বের ধারণাগুলির কিছু মৌলিক (বা একটি দ্রুত রিফ্রেশার, যদি আপনি ইতিমধ্যে পরিচিত হন) রয়েছে:
যে ভাষায় নিবন্ধগুলি লেখা হয়েছে সেগুলির প্রতিনিধিত্বকারী চেনাশোনাগুলি হল গ্রাফের "বিন্দুগুলি" (বিনিময়ভাবে, "নোড")।
"প্রান্ত" হল প্রতিটি জোড়া শীর্ষবিন্দুর সাথে সংযোগকারী রেখা। গ্রাফের প্রতিটি প্রান্ত একটি ইনসিডেন্স ফাংশনের মাধ্যমে নির্ধারিত হয় যা একটি প্রান্তে এক জোড়া শীর্ষবিন্দুকে ম্যাপ করে।
এই উদাহরণে, প্রতিটি প্রান্ত প্রতিনিধিত্ব করে (রেখার ওজন, বা বেধ দ্বারা) সম্পাদকের সংখ্যা যারা লাইনটি সংযোগকারী উভয় ভাষাতে অবদান রেখেছেন। এটিকে আমরা একটি অনির্দেশিত সরল গ্রাফ বলি। "অনির্দেশিত" মানে {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 ব্যবহার করতে পারি এই সংলগ্ন ম্যাট্রিক্স থেকে একটি "গ্রাফ অবজেক্ট" তৈরি করতে, যা আমি প্লটিং এবং অন্যান্য বিশ্লেষণের জন্য ব্যবহার করতে পারি।
plot.igraph ফাংশন ব্যবহার করে graph_obj কল্পনা করা যেতে পারে। যেহেতু এই ফাংশনে বেছে নেওয়ার জন্য অনেকগুলি কাস্টম লেআউট রয়েছে, তাই আমি "স্টার" লেআউট ব্যবহার করে একই গ্রাফ রেন্ডার করে শুরু করি।
ফলাফলটি প্রযুক্তিগতভাবে একটি নেটওয়ার্ক প্লট। কিন্তু এটা কি আরও ভালো করা সম্ভব? উপরের চার্ট থেকে মনে হচ্ছে যে সমস্ত শিরোনাম এবং প্রান্তের সমান গুরুত্ব রয়েছে — তবে এটি একটি সামাজিক নেটওয়ার্ককে কল্পনা করার সম্পূর্ণ বিন্দুকে দুর্বল করে। কিছু অক্ষর প্রকৃতপক্ষে আরও "উল্লেখযোগ্য" এবং কিছু বক্তার অন্যদের তুলনায় শক্তিশালী সম্পর্ক রয়েছে।
কিভাবে এই গ্রাফ যে প্রতিফলিত করতে পারেন?
এখানেই এজ ওয়েট এবং ভার্টেক্স ডিগ্রী কাজ করে। আমি ওজনের সাপেক্ষে edge.width
(অর্থাৎ, প্লটে প্রান্তের পুরুত্ব) এবং vertex.label.cex
(অর্থাৎ, এর ফন্টের আকার) তৈরি করতে plot.igraph
ফাংশনের প্যারামিটারগুলির সাথে খেলা শুরু করি। শীর্ষবিন্দু) ডিগ্রির সাথে সম্পর্কিত।
অনেক ভাল! উচ্চতর ডিগ্রী সহ অক্ষরগুলি দৃশ্যত বড়, এবং শক্তিশালী এবং দুর্বল সম্পর্কের মধ্যে পার্থক্য লাইনগুলির অন্ধকার থেকেও স্পষ্ট। এই পুনরাবৃত্তি অনেক বেশি স্বজ্ঞাত এবং দর্শককে অবিলম্বে অক্ষরের মধ্যে সম্পর্কগুলি উপলব্ধি করতে দেয়। এটাও মানানসই যে কিং জর্জ একজন একাকী, কারণ তার গান সবসময় (খুব মজার) মনোলোগ।
আপনি একটি ইন্টারেক্টিভ নেটওয়ার্ক গ্রাফ তৈরি করতে R-এ visNetwork লাইব্রেরি ব্যবহার করতে পারেন। লাইব্রেরিটি গ্রাফের একাধিক অংশ জুম ইন এবং আউট করা সম্ভব করে তোলে (বিশেষ করে একটি বড় গ্রাফের সাথে উপযোগী), এবং চকচকে সমর্থন রয়েছে।
নোডের তাৎপর্য সনাক্ত করার জন্য গ্রাফ তত্ত্বের কেন্দ্রীয়তা একটি মূল ধারণা:
ডিগ্রি কেন্দ্রীয়তা : এটি প্রতিটি নোডের সাথে সংযুক্ত প্রান্তের সংখ্যার একটি পরিমাপ।
আইজেন সেন্ট্রালিটি : এটি একটি নোড কতটা "ভালভাবে সংযুক্ত", নেটওয়ার্কের মাধ্যমে কতগুলি লিঙ্ক সংযোগ ভাগ করে এবং আরও অনেক কিছুর পরিমাপ করে। এটি পুরো নেটওয়ার্কের উপর প্রভাব সহ নোডগুলিকে সনাক্ত করে, শুধুমাত্র এটির সাথে সরাসরি সংযুক্ত নয়।
বিটুইননেস সেন্ট্রালিটি: এটি আক্ষরিক অর্থে একটি প্রদত্ত নোড অন্যান্য নোডের মধ্যে কতটা এবং নেটওয়ার্কের বিভিন্ন ক্লাস্টারের মধ্যে একটি "সেতু" হিসাবে কাজ করে। এটি নেটওয়ার্কের বাকি অংশের প্রতিটি শীর্ষবিন্দুর "প্রভাব" এর একটি পরিমাপ।
জেনারেট করা গ্রাফের কেন্দ্রীয়তা পেতে আমি igraph এর ডিগ্রি(), betweenness(), এবং eigen_centrality() ফাংশন ব্যবহার করতে পারি:
দেখে মনে হচ্ছে আমাদের গ্রাফে অ্যারন বার-এর মধ্যে সবচেয়ে বেশি মধ্যমতা ("সেতু") রয়েছে, অন্যদিকে হ্যামিল্টনের সর্বোচ্চ আইজেনভেক্টর কেন্দ্রীয়তা ("প্রভাবক") রয়েছে। যেটা তোমার ইচ্ছা কর।
নেটওয়ার্ক গ্রাফের ব্যবসায়িক অ্যাপ্লিকেশনগুলি অসংখ্য:
সামাজিক নেটওয়ার্কিং সাইটগুলি একই ধরনের ব্যবহারকারীদের সম্প্রদায় তৈরি করতে নেটওয়ার্ক গ্রাফ ব্যবহার করে এবং লক্ষ্যযুক্ত সুপারিশগুলি অফার করে। একটি "প্রস্তাবিত বন্ধু" বৈশিষ্ট্যের পিছনে অ্যালগরিদমের একটি প্রাথমিক বাস্তবায়ন এইরকম দেখতে পারে: "আলিসের নিকটবর্তী দশজনের মধ্যে নয়জনও ববের বন্ধু -> অ্যালিসের সম্ভাব্য বন্ধু হিসাবে ববকে সুপারিশ করে৷"
যে অ্যাপ্লিকেশনগুলি X স্থান থেকে Y স্থানে সবচেয়ে কম দূরত্ব ম্যাপ করে (যেমন মানচিত্র, রাইড-শেয়ারিং পরিষেবা, সরবরাহের চেইন এবং ডেলিভারি ট্রাকের জন্য লজিস্টিক ইত্যাদি) সম্ভবত "সংক্ষিপ্ততম পথ" অ্যালগরিদমের রূপগুলি ব্যবহার করে, যা কম্পিউটার বিজ্ঞানে জনপ্রিয়ভাবে পরিচিত ভ্রমণ বিক্রয়কর্মী সমস্যা .
নেটওয়ার্ক তত্ত্ব হল ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং (এনএলপি) এর মধ্যে আভিধানিক এবং শব্দার্থিক প্রক্রিয়াকরণের একটি গুরুত্বপূর্ণ উপাদান, যা চ্যাটবট এবং অ্যালেক্সা, কর্টানা, সিরি এবং এমনকি আইবিএম-এর ওয়াটসন বিজয়ী জেওপার্ডির মতো ভার্চুয়াল সহকারীর মধ্যে ব্যবহৃত হয়! , শ্লেষ এবং শব্দের খেলা যা সহজবোধ্য নয়।
কেভিন বেকনের ছয় ডিগ্রির মতো নাম-ড্রপিং পার্টি গেমগুলি নেটওয়ার্ক গ্রাফ ব্যবহার করে।
এপিডেমিওলজিতে, মহামারী বা "সুপার স্প্রেডার" ইভেন্টগুলির উত্স শনাক্ত করতে কেন্দ্রীয়তা ব্যবস্থা ব্যবহার করা যেতে পারে।
আপনি যদি এটি সম্পর্কে চিন্তা করেন, ইন্টারনেট হল বিভিন্ন ওয়েবসাইটের একটি বিশাল নেটওয়ার্ক। অনুসন্ধান ইঞ্জিনগুলি একটি নির্দিষ্ট অনুসন্ধান প্রশ্নের জন্য সবচেয়ে প্রাসঙ্গিক পৃষ্ঠাগুলি ফেরত দিতে জ্ঞান গ্রাফ পরিমাপ ব্যবহার করে।
সেগুলি যেমন মজার, এটি লক্ষ্য করা গুরুত্বপূর্ণ যে নেটওয়ার্ক গ্রাফগুলি উত্পাদনে নিযুক্ত করার সময় ত্রুটিবিহীন নয়। উদাহরণস্বরূপ, তারা সম্পদ-নিবিড় হতে পারে। যেকোন ম্যাট্রিক্স অপারেশনের ক্ষেত্রে যেমন হয়, স্কেলেবিলিটি এবং পারফরম্যান্স কখনও কখনও একটি আঘাত লাগে। এছাড়াও একটি "কোল্ড স্টার্ট" সমস্যা রয়েছে — যদি আপনার ডেটাসেট খুব বিরল হয় বা সত্তার মধ্যে সত্যিই অনেক সম্পর্ক না থাকে, তাহলে নেটওয়ার্ক গ্রাফ একটি কার্যকর সমাধান নয়। সঠিকভাবে এবং সঠিক প্রসঙ্গে ব্যবহার করা হয়, তবে, তারা ব্যবসার জন্য মূল্যবান হতে পারে।
কোড: https://github.com/iswaryam/hamilton/ •
ডেটাসেট ক্রেডিট: https://www.kaggle.com/lbalter/hamilton-lyrics#
আপনি যদি একজন পটারহেড হন, আমার গিটহাব দেখুন - আমি একই পদ্ধতিতে হ্যারি পটারের চরিত্রগুলিও গ্রাফ করেছি।