GitHub का मानचित्र
(github.com/anvaka)- Map of GitHub 6.9 लाख से अधिक GitHub प्रोजेक्ट्स को बिंदुओं के रूप में रखने वाला एक मानचित्र है, और जिन प्रोजेक्ट्स के common stargazer ज़्यादा हैं वे एक-दूसरे के अधिक करीब रखे जाते हैं
- मानचित्र बनाने में Google BigQuery के GitHub activity events public dataset का उपयोग किया गया, और फ़रवरी 2011 से मई 2025 तक की events से लगभग 50 करोड़ star डेटा इस्तेमाल किया गया
- repositories के बीच संबंध की गणना में सटीक Jaccard Similarity का उपयोग हुआ, और 24GB RAM वाले घरेलू कंप्यूटर पर यह संभव नहीं था, इसलिए 512GB RAM वाले AWS EC2 instance पर कई घंटों तक प्रोसेस किया गया
- clustering के लिए कई algorithms आज़माने के बाद Leiden clustering चुना गया, और नतीजतन लगभग 6.9 लाख प्रोजेक्ट्स 1,500 से अधिक clusters में बँटे
- rendering को अपने layout tool के साथ maplibre, GeoJSON, और tippecanoe के संयोजन से बनाया गया, और कई country-name labels ChatGPT की मदद से तैयार किए गए
प्रोजेक्ट अवलोकन
- Map of GitHub GitHub के 6.9 लाख से अधिक प्रोजेक्ट्स को visualise करने वाला एक मानचित्र है
- हर बिंदु एक project को दर्शाता है
- जिन प्रोजेक्ट्स को common users ने star दिया है, वे मानचित्र पर एक-दूसरे के अधिक करीब रखे जाते हैं
सार्वजनिक संस्करण
- Current release, May 10, 2025: 6.9 लाख प्रोजेक्ट्स, 1,500 clusters
- Initial release, May 8, 2023: 4 लाख प्रोजेक्ट्स, 1,000 clusters
डेटा संग्रह और similarity calculation
- पहले चरण में यह लाया गया कि किस user ने किस repository को star दिया
- Google BigQuery के GitHub activity events public dataset का उपयोग किया गया
- लक्षित अवधि फ़रवरी 2011 से मई 2025 तक है
- इस प्रक्रिया में लगभग 50 करोड़ stars का डेटा मिला
- दूसरे चरण में हर repository के बीच सटीक Jaccard Similarity की गणना की गई
- 24GB RAM वाले घरेलू कंप्यूटर के लिए यह गणना बहुत बड़ी थी
- 512GB RAM वाले AWS EC2 instance पर यह कुछ घंटों में पूरा हुआ
- similarity के अन्य तरीके भी आज़माए गए, लेकिन Jaccard ने सबसे भरोसेमंद परिणाम दिए
clustering और map layout
- तीसरे चरण में repositories को समूहित करने के लिए कई clustering algorithms आज़माए गए
- अंततः Leiden clustering को सबसे अधिक पसंद किया गया, और लगभग 6.9 लाख प्रोजेक्ट्स 1,500 से अधिक clusters में बँट गए
- चौथे चरण में cluster के अंदर nodes की placement के लिए अपने ngraph.forcelayout का उपयोग किया गया
- पूरे clusters की global placement के लिए अलग settings इस्तेमाल की गईं
rendering का तरीका
- पाँचवाँ चरण मानचित्र को render करने की प्रक्रिया है
- पिछले प्रोजेक्ट्स की तरह सब कुछ फिर से बनाने के बजाय maplibre का उपयोग किया गया
- डेटा को GeoJSON फ़ॉर्मेट में बदला गया
- tiles बनाने के लिए tippecanoe का उपयोग हुआ
- इसके बाद map navigation experience तैयार किया गया
country-name labels बनाना
- मानचित्र पर दिखने वाले कई country labels ChatGPT की मदद से बनाए गए
- अगर कोई गलत label दिखे, तो right-click से उसे ठीक करके pull request भेजी जा सकती है
- labels बनाने के लिए system prompt में GitHub repositories के समूह को किसी खास programming community के “देश” की तरह मानकर अलग और याद रखने में आसान नाम बनाने को कहा गया
- नाम 1 से 3 शब्दों में संक्षिप्त होना चाहिए
- वह repository समूह के common topic, technology, और purpose को पकड़ना चाहिए
- “JSWorld”, “UI”, “Web”, “Forge”, “Archipelago”, “Hub”, “Republic”, “Nexus” जैसे सामान्य expressions से बचना चाहिए
- मिलते-जुलते repository names को बस जोड़कर नाम नहीं बनाना चाहिए
- नाम इतना अलग होना चाहिए कि मानचित्र पर दूसरे देशों के नामों से तुरंत अलग पहचाना जा सके
- user input में
repoListऔरrepoNamesOnlyशामिल होते हैं, और उन repositories के ठोस topics व technologies का विश्लेषण करके नाम बनाने को कहा जाता है - अगर LLM पहले के नामों से बहुत मिलता-जुलता नाम लौटाता है, तो उसे फिर से कोशिश करने को कहा जाता है और temperature बढ़ाकर अधिक creative परिणाम लाए जाते हैं
search और design
- search box को सभी repositories के simple dump को पहले अक्षर या author के आधार पर index करके बनाया गया
- search box में
aदर्ज करने परaसे शुरू होने वाली repositories ढूँढी जाती हैं और client पर fuzzy matcher से दिखाई जाती हैं - अभी का data representation पसंद है, लेकिन map visual design के लिए सही style अभी भी खोजा जा रहा है
- अगर किसी के पास map design experience या visual ideas हों, तो उन्हें साझा करने का अनुरोध है
लाइसेंस
- repository को MIT लाइसेंस के तहत सार्वजनिक किया गया है
- अगर डेटा को किसी और काम में उपयोग किया जाए, तो इस प्रोजेक्ट को attribution देने पर विचार करने का अनुरोध है
1 टिप्पणियां
Hacker News की रायें
पता नहीं क्यों torvalds/linux JS प्रोजेक्ट्स, awesome-X सूचियों और frontend checklist के बगल में Fronterra में है
या तो kernel hackers को अचानक frontend से प्यार हो गया है, या ज्यादा संभावना यह है कि code लिखने वाले लोगों और GitHub projects को star करने वाले लोगों में बहुत कम overlap है
वे semantically जुड़े होने की वजह से समान नहीं दिखते, बस दोनों popular हैं इसलिए समान दिख जाते हैं
reddit map में भी यही समस्या आई थी: https://anvaka.github.io/map-of-reddit/ — popular subreddits सब एक-दूसरे से “similar” बन जाते हैं
फिर भी छोटे और कम प्रसिद्ध projects पर यह अब भी अच्छा काम करता है :D
हालांकि हर file download करके embeddings calculate करने के लिए जितने resources चाहिए, उसे देखते हुए शायद यह practically मुश्किल होगा
https://xkcd.com/1138/
असली link: https://anvaka.github.io/map-of-github/
Among Us वाले इलाके का नाम Sussex देखकर हंसी आ गई
Rustland इतना छोटा है, यह देखकर हैरानी हुई। यह Clouderra के अंदर बस एक state जितना है
Bevy और Veloren दोनों का Rustland में होना भी दिलचस्प है। शायद stars game development community की तुलना में Rust community से ज्यादा आए हैं
यह समझ में आता है कि Rust ecosystem अभी भी अपेक्षाकृत छोटा है, और “X को Rust में करने वाले लोग” काफी दिखते हैं
लगता है हर कोई अपने bubble के size को overestimate करता है
तो “X but in Rust” शायद “RustLand” में नहीं बल्कि “X” वाली तरफ जा सकता है
अपना project mapbox-gl-utils यहाँ मिलना काफी मजेदार है
https://anvaka.github.io/map-of-github/#12/24.78947/18.85186
search feature के बिना सिर्फ map से कोई खास project ढूंढना एक मजेदार mini-game बन जाता है :-)
Julia fan के तौर पर julialang/julia से इतने कम connections देखकर हैरानी हुई
यह niche language तो है, लेकिन इस map में इसका इतना isolated दिखना users या developers के experience से बहुत अलग भी नहीं लगता
julialang/julia खुद tensorflow और opencv के पास है, और actual Julia packages कहीं और इकट्ठे हैं—यह “aspirational users” और “actual users” का फर्क दिखाता लगता है
Julia project को star करने वाले बहुत से लोग numerical computing वाले Python users थे जो नया Python ढूंढ रहे थे, लेकिन ज्यादातर Python में ही रहे, इसलिए उनके बाकी stars भी numerical computing Python side पर हैं
वहीं JuliaLand packages को star करने वाले लोग actual Julia users हैं, इसलिए वे plausibly Moleculandia, AstroSpace, Quantumia के पास इकट्ठे हुए हैं
बहुत neat और creative approach है, लेकिन सच कहूँ तो country/map metaphor सबसे अच्छा है या नहीं, इस पर दुविधा है
कई मामलों में सिर्फ नाम से साफ नहीं होता, इसलिए क्या represent हो रहा है समझने के लिए zoom करना पड़ता है
इसके बजाय hierarchical clustering करके, ज्यादा descriptive और faithful LLM-generated labels लगाकर, फिर top-level clusters के बीच average connectivity को lines से दिखाना शायद ज्यादा interesting होता
90s में ऐसी images पहली बार बनाकर लगभग तुरंत उनकी limits सीखने वाले व्यक्ति के तौर पर, मुझे अच्छा लगा कि यह overclaim नहीं करता। यह paper नहीं, बस एक view है
मुझे ऐसे charts पसंद हैं जिनमें axes का meaning हो। lines, shapes, boxes/groups, distance, X versus Y, color, thickness, texture, background, foreground जैसी चीजें
simple चीजें भी अच्छी होती हैं। अक्सर लोग बिना meaning के style के लिए lines खींच देते हैं, लेकिन यह बस कुछ groups वाली image है और इसमें character है। अच्छा नहीं है क्या?
बेशक lines मुझे अब भी पसंद हैं, लेकिन वे हर जगह, हर समय जरूरी नहीं होतीं
data को group करने के कई तरीके अक्सर अपने-अपने हिसाब से सही लगते हैं, इसलिए जो भी final clustering चुनें, वह perfect नहीं होती
हम्म… शायद quantum clustering जैसा कुछ करना एक fun project हो सकता है
अभी थोड़ा धुंधला याद है, लेकिन hdbscan algorithm, यानी hierarchical clustering, try किया था। GitHub scale के graph में उसे memory में load नहीं किया जा सकता था
आखिर में hierarchical clustering जैसी किसी चीज़, louvain/leiden/खुद बनाए तरीके के mix का इस्तेमाल किया, और final map में जो दिख रहा है वही उसका result है
Quitlessia और NeoQuitlessia… नाम बड़े wicked हैं
Doom Emacs, Emacsia में नहीं बल्कि NeoQuitlessia में है, और आश्चर्यजनक रूप से यह सही लगता है :)
हम quit नहीं करेंगे
सोच रहा हूँ repositories के बीच connections कैसे तय होते हैं
मैंने अपनी कुछ repositories check कीं, और कुछ connections में किसी भी direction में reference नहीं दिखता
basically, जैसा दूसरों ने guess किया था, lines “star करने वाले लोगों” के आधार पर highest similarity scores दिखाती हैं, और पूरा map भी उसी आधार पर बना है
यह confusing हो सकता है, लेकिन lines सिर्फ किसी particular country पर click करने पर दिखती हैं
शायद edge बनाना है या नहीं तय करने के लिए कोई hardcoded threshold होगा। जैसे A और B के बीच Jaccard similarity 0.2 से ज्यादा हो तो edge बना देना