Birkaç yıl önce Game of Thrones kitaplarını art arda okuyordum ve kafamdaki tüm karakterleri takip etmekte zorlandığımı fark ettim. (Bu şaşırtıcı değil - dizide 150'den fazla adlandırılmış karakter var!) Konuyu hatırlamak için bölümler arasında ileri geri gidiyordum ya da sürekli olarak Buz ve Ateşin Şarkısı wiki'sine bakıyordum. Zihinsel bir haritaya ihtiyacım vardı; bu karakterleri görselleştirmenin daha iyi bir yolu var mıydı mutlaka?
Burada resimde, Wikipedia editörlerinin farklı dillere katkılarını gösteren, Wikipedia'dan alınmış örnek bir ağ grafiği yer almaktadır. Bu örneği kullanarak, grafik teorisi kavramlarının bazı temellerini (veya zaten aşina iseniz hızlı bir tazelemeyi) burada bulabilirsiniz:
Makalelerin yazıldığı dilleri temsil eden daireler grafiğin "köşeleridir" (birbirinin yerine "düğümler").
“Kenarlar”, her bir köşe çiftini birbirine bağlayan çizgilerdir. Grafikteki her kenar, bir çift köşeyi bir kenara eşleyen bir geliş fonksiyonu aracılığıyla belirlenir.
Bu örnekte her kenar, satırın bağladığı her iki dile de katkıda bulunan editörlerin sayısını (çizgi kalınlığına veya kalınlığına göre) temsil eder. Buna yönlendirilmemiş basit grafik diyoruz. "Yönlendirilmemiş", {en--> fr} ve {fr --> en}'nin aynı olduğu anlamına gelir ve "basit", her köşe çiftini birden fazla kenarın bağlamadığı anlamına gelir. Grafik aynı zamanda "ağırlıklıdır", yani kenarların kalınlığı, köşeler arasındaki ilişkinin gücüne bağlıdır. Bu örnekte ağırlıklı insidans fonksiyonu şuna benzer:
Grafiklerin bu şekilde görsel temsili, anlaşılması kolay olacak şekilde ilişkileri hızlı bir şekilde göstermeye yönelik sezgisel bir yaklaşım olsa da, bir veri kümesini bir grafik nesnesi olarak temsil etmekten elde edebileceğimiz daha da zengin bilgiler vardır.
“Veri biliminde harcanan zamanın yüzde 80'i veri hazırlamakla geçiyor, yüzde 20'si ise veri hazırlama ihtiyacından şikayet etmekle geçiyor.”
Veri bilimcileri her konuda aynı fikirde olmayabilir ancak herhangi bir projenin en zor kısmının veriyi elde etmek olduğu konusunda hemfikiriz. Şanslıyız ki bu yazıda o kısım geride kaldı. Hamilton şarkı sözlerinin güzel ve temiz bir veri kümesi Kaggle'da mevcut olup kolayca indirip grafik oluşturmaya başlayabilirsiniz.
Hamilton veri seti böyle görünüyor.
Karakter/şarkı/şarkı sözü satırı başına bir kayıt satırı vardır.
Tüm Hamilton hoparlörlerinin ağ grafiğini oluşturmak için aşağıdakilerin tanımlanması gerekir:
Düğümler (konuşmacı listesi)
Kenarlar (her bir hoparlör çiftini bağlamak için)
Her köşe çiftini bir kenara eşlemek için görülme işlevi (isteğe bağlı ağırlıkla)
Seçtiğim görülme sıklığı işlevi , her bir hoparlör çiftinin birlikte göründüğü şarkı sayısıdır . Benim varsayımım, iki karakter ne kadar çok şarkıda birlikte görünürse ilişkileri o kadar güçlü olur.
Weight {speaker,x, speaker,y} = #songs that feature both speaker,x and speaker,y
R'nin dplyr'ini kullanarak orijinal veri kümemi bir **{src, dest, weight}**
varlığına dönüştürebilir ve ardından bunu bir bitişiklik matrisine dönüştürebilirim. Daha sonra bu bitişiklik matrisinden bir "grafik nesnesi" oluşturmak için R'nin igraph paketindeki graph.adjacency'yi kullanabilirim ve bunu daha sonra çizim ve diğer analizler için kullanabilirim.
graph_obj, plot.igraph işlevi kullanılarak görselleştirilebilir. Bu işlevin seçilebilecek birçok özel düzeni olduğundan, aynı grafiği "yıldız" düzenini kullanarak oluşturarak başlıyorum.
Sonuç teknik olarak bir ağ grafiğidir. Ama daha iyisini yapmak mümkün mü? Yukarıdaki grafik, tüm köşelerin ve kenarların eşit öneme sahip olduğunu öne sürüyor gibi görünüyor; ancak bu, bir sosyal ağı görselleştirmenin tüm amacını baltalıyor. Bazı karakterler gerçekten daha "önemlidir" ve bazı konuşmacıların diğerlerine göre daha güçlü ilişkileri vardır.
Bu grafik bunu nasıl yansıtıyor?
Kenar ağırlığı ve köşe derecesi burada devreye giriyor. Ağırlığa göre edge.width
(yani çizimdeki kenarın kalınlığını) ve vertex.label.cex
(yani yazı tipi boyutunu) oluşturmak için plot.igraph
işlevinin parametreleriyle oynayarak başlıyorum. köşeler) dereceye göre.
Çok daha iyi! Derecesi yüksek olan karakterler görsel olarak daha büyük olup, güçlü ve zayıf ilişkiler arasındaki ayrım çizgilerin koyuluğundan da anlaşılmaktadır. Bu yineleme çok daha sezgiseldir ve izleyicinin karakterler arasındaki ilişkileri anında kavramasını sağlar. Şarkılarının her zaman (çok komik) monologlar olduğu göz önüne alındığında, King George'un yalnız bir düğüm olması da uygun.
Etkileşimli bir ağ grafiği oluşturmak için R'deki visNetwork kütüphanesini de kullanabilirsiniz. Kitaplık, grafiğin birden çok bölümünü yakınlaştırmayı ve uzaklaştırmayı mümkün kılar (özellikle büyük bir grafikte kullanışlıdır) ve Shiny desteğine sahiptir.
Merkezilik , grafik teorisinde düğümlerin önemini tanımlayan anahtar bir kavramdır:
Derece merkeziliği : Bu, her bir düğüme bağlı kenar sayısının bir ölçüsüdür.
Öz merkezilik : Bu, bir düğümün ne kadar "iyi bağlantılı" olduğunun, ağ üzerinden bağlantıların kaç bağlantı paylaştığının vb. bir ölçüsünü temsil eder. Yalnızca kendisine doğrudan bağlı olanları değil, tüm ağ üzerinde etkisi olan düğümleri tanımlar.
Arasındalık merkeziliği: Bu, kelimenin tam anlamıyla belirli bir düğümün diğer düğümler arasında ne kadar olduğu ve çeşitli ağ kümeleri arasında bir "köprü" görevi gördüğü anlamına gelir. Bu, her bir köşenin ağın geri kalanı üzerindeki "etkisinin" bir ölçüsüdür.
Oluşturulan grafiğin merkeziliğini elde etmek için igraph'ın Degree(), Amongness() ve eigen_centrality() işlevlerini kullanabilirim:
Görünüşe göre grafiğimizde Aaron Burr en yüksek aradalık merkeziliğine ("köprü") sahipken, Hamilton en yüksek özvektör merkeziliğine ("etkileyici") sahip. Bundan ne istersen yap.
Ağ grafiklerinin iş uygulamaları çoktur:
Sosyal ağ siteleri, benzer kullanıcılardan oluşan topluluklar oluşturmak ve hedefe yönelik öneriler sunmak için ağ grafiklerinden yararlanır. "Önerilen arkadaşlar" özelliğinin arkasındaki algoritmanın ilkel uygulaması şuna benzer: "Alice'in yakın arkadaşlarından on tanesinden dokuzu aynı zamanda Bob'un arkadaşıdır -> Bob'u Alice için potansiyel bir arkadaş olarak tavsiye eder."
X noktasından Y noktasına en kısa mesafeyi haritalandıran uygulamalar (haritalar, araç paylaşımı hizmetleri, tedarik zinciri ve teslimat kamyonları için lojistik vb. gibi) muhtemelen bilgisayar bilimlerinde popüler olarak bilinen "en kısa yol" algoritmalarının çeşitlerini kullanır. Gezgin satıcı problemi .
Ağ teorisi, doğal dil işleme (NLP) içindeki sözcüksel ve anlamsal işlemenin çok önemli bir bileşenidir ve sırasıyla sohbet robotları ve Alexa, Cortana, Siri gibi sanal asistanlar ve hatta IBM'in Watson ödüllü Jeopardy!'si arasında kullanılır. , basit olmaktan çok uzak, kelime oyunları ve kelime oyunlarından oluşan bir oyun.
Six Degrees of Kevin Bacon gibi isim bırakan parti oyunları ağ grafiklerini kullanır.
Epidemiyolojide, pandemilerin veya "süper yayılma" olaylarının kökenlerinin belirlenmesinde merkezilik ölçümleri kullanılabilir.
Düşünürseniz, İnternet'in farklı web sitelerinden oluşan devasa bir ağdan ibaret olduğunu görürsünüz. Arama motorları, belirli bir arama sorgusu için en alakalı sayfaları döndürmek amacıyla bilgi grafiği ölçümlerinden yararlanır.
Her ne kadar eğlenceli olsa da, ağ grafiklerinin üretimde kullanıldığında dezavantajlarının da olduğunu unutmamak önemlidir. Örneğin, kaynak yoğun olabilirler. Her matris işleminde olduğu gibi ölçeklenebilirlik ve performans bazen darbe alır. Ayrıca bir "soğuk başlangıç" sorunu da vardır; veri kümeniz çok seyrekse veya varlıklar arasında gerçekten çok fazla ilişki yoksa, ağ grafiği etkili bir çözüm değildir. Ancak doğru ve doğru bağlamda kullanıldığında iş açısından değerli olabilirler.
Kod: https://github.com/iswaryam/hamilton/ •
Veri kümesi kredisi: https://www.kaggle.com/lbalter/hamilton-lyrics#
Eğer bir Potterhead iseniz GitHub'uma göz atın. Benzer bir yöntemle Harry Potter karakterlerinin grafiğini de çizdim.