كيفية بناء مخطط فين مع 50 دائرة؟ تصور مجموعات وتاريخ مشروع Python مفتوح المصدر

مرحبًا بالجميع ، اسمي فيدور إندوكايف ، أعمل كمحلل في Yandex. اليوم أريد أن أخبركم عن مهمة تصور مجموعات متقاطعة وعن حزمة Python مفتوحة المصدر التي أنشأتها لحلها. في هذه العملية ، سوف نتعرف على كيفية اختلاف الرسوم البيانية لـ Venn و Euler ، والتعرف على خدمة توزيع الطلبات واللمس بشكل ملموس في مجال العلوم مثل المعلوماتية الحيوية. سوف ننتقل من البسيط إلى الأكثر تعقيدًا. اذهب!





عن ماذا ولماذا هناك حاجة؟


تقريبا كل من شارك في تحليل البيانات الاستكشافية كان عليه أن يبحث عن إجابة للأسئلة من هذا النوع مرة واحدة على الأقل:

  • هناك مجموعة بيانات مع العديد من المتغيرات الثنائية المستقلة. أي منهم غالبًا ما يتم العثور عليه معًا؟
  • هناك عدة جداول ذات كائنات من نفس الطبيعة لها معرفات. كيف ترتبط مجموعات المعرفات من جداول مختلفة - إما أن يكون لكل جدول معرف خاص به ، أو نفس في جميع الجداول ، أو تختلف المجموعات ، ولكن قليلاً فقط؟
  • هناك عدة أنواع. أي الكائنات الحية لديها مجموعات مماثلة من الجينات أو البروتينات؟
  • كيفية رسم مثل مخطط دائري إذا تداخلت الفئات؟ (صحيح ، هذه لا تصبح مشكلة للجميع: انظر النسب المئوية في الشكل أدناه).




كل هذه الأسئلة يمكن اختزالها إلى نفس الصياغة. يبدو الأمر كما يلي: يتم إعطاء بعض المجموعات المحدودة ، ربما تتقاطع مع بعضها البعض ، ونحن بحاجة إلى تقييم موقفها النسبي - أي لفهم كيفية تقاطعها بالضبط.

سنركز على التصورات وأدوات البرمجيات للمساعدة في حل هذه المشكلة.

الرسوم البيانية فين


أعتقد أن مثل هذه الرسومات ذات دائرتين أو ثلاث دوائر مألوفة للجميع ولا تتطلب شرحًا:



من سمات مخطط فين أنه ثابت. الأرقام الواردة فيه متساوية وموجودة بشكل متناظر. يوضح الشكل جميع التقاطعات الممكنة ، حتى لو كانت معظمها فارغة بالفعل. هذه الرسوم البيانية مناسبة لتوضيح المفاهيم المجردة أو المجموعات التي أبعادها غير معروفة أو غير مهمة. المعلومات الأساسية هنا لا ترد في الجدول ، ولكن في التوقيعات.

صورةصورةهذه هي الطريقة التي تصور بها جون فين ، عالم الرياضيات والفيلسوف الإنجليزي. في مقالته لعام 1880اقترح مخططات لعرض العروض المنطقية بيانياً. على سبيل المثال ، عبارة "أي X إما Y أو Z" تعطي رسمًا تخطيطيًا على اليمين (توضيح مأخوذ من المقالة الأصلية). المنطقة التي لا تفي بالبيان مظللة باللون الأسود: تلك X التي ليست Y ولا Z. الرسالة الرئيسية للمقالة هي أن الرسومات الثابتة دون تغيير شكل وترتيب الأشكال هي أكثر ملاءمة لأغراض المنطق من الرسوم البيانية الديناميكية أويلر ، التي تمت مناقشتها ستذهب أدناه.

من الواضح أنه في تحليل البيانات ، فإن نطاق مخططات فين محدودة. إنهم يعطون فقط معلومات نوعية ، لكن ليس كمية ولا يعبرون عن حجم أو حتى الفراغ من التقاطعات. إذا لم يوقفك هذا ، فستكون تحت تصرفك حزمة venn ، التي تبني مثل هذه الرسوم البيانيةN=2,3,4,5,6 مجموعات. لكل واحدN هناك صورة أو صورتان نموذجيتان ، وستختلف التوقيعات فقط:

صورة


إذا أردنا شيئًا يعتمد بشكل أكثر ديناميكيًا على البيانات ، فيجب الانتباه إلى نهج آخر: مخططات أويلر.

مخططات أويلر



صورة


على عكس مخططات فين ، يتم اختيار شكل وموضع الأشكال على المستوى هنا لإظهار علاقة المجموعات أو المفاهيم. إذا كان بعض التقاطع فارغًا ، فلن تتداخل الأشكال أيضًا كلما أمكن ذلك ، كما هو الحال في الشكل حول النباتات والحيوانات.

يرجى ملاحظة أن الرسم عن السؤال في المحاضرة يختلف عن الاثنين الآخرين. من المهم ليس فقط موقع الأشكال ، ولكن أيضًا حجم التقاطعات - كل الدعابة مرفقة بها.

يمكن استخدام هذه الفكرة لمهمتنا. خذ مجموعتين أو ثلاث ورسم دوائر بمساحات تتناسب مع أحجام هذه المجموعات. ثم سنحاول ترتيب الدوائر على المستوى بحيث تتناسب مناطق التداخل أيضًا مع حجم التقاطعات.

هذا هو بالضبط ما تفعله الحزمة (على الرغم من اسمها)matplotlib-venn :

صورة

من السهل رسم مجموعتين بنسب دقيقة. ولكن بالفعل عند الثالثة ، قد تفشل الطريقة. دعنا ، على سبيل المثال ، تكون إحدى المجموعات الثلاث بالضبط تقاطع المجموعتين الأخريين:

صورة


الصورة لا تبدو جيدة ، ظهرت منطقة غريبة برقم 0. ولكن ليس هناك ما يدهش ، لأنه لا يمكن تمثيل تقاطع دائرتين على شكل دائرة.

وهنا مثال أكثر إحباطًا: مجموعتان واختلافهما المتماثل (تقاطع ناقص):

صورة


اتضح أنه شيء غريب تمامًا: انتبه إلى عدد الأصفار الموجودة!

لا يزال من الممكن حفظ المثال الأول إذا أخذنا مستطيلات بدلاً من الدوائر (تقاطع المستطيلات هو أيضًا مستطيل) ، بينما يتطلب المثال الثاني أشكالًا غير محدبة على الأقل. حسنا ، أكثر من ثلاث مجموعات ، هذه الحزمة لا تدعم من حيث المبدأ.

لا أعرف أدوات عامة أخرى لـ Python تعمل على تطوير نهج Euler-Venn ، وسيستمر تاريخ تجربتي الخاصة. ولكن قبل المتابعة ، سأقوم باستطراد صغير لشرح سبب توليي مهمة تصور المجموعات.

بضع كلمات حول API لبناء المسارات المثلى


كما قلت ، فإن قسمنا يفعل Yandex.routing. تساعد إحدى خدماتنا المتاجر عبر الإنترنت وخدمات التوصيل وأي شركة تتضمن أعمالها اللوجيستية على بناء مسارات مثالية للنقل.

يتفاعل العملاء مع الخدمة عن طريق إرسال طلبات API. يحتوي كل طلب على قائمة بالأوامر (نقاط التسليم) مع الإحداثيات وفترات التسليم ، وما إلى ذلك ، بالإضافة إلى قائمة بالآلات التي تحتاج إلى تسليم الطلبات. تقوم الخوارزمية لدينا باستيعاب كل هذه البيانات وتنتج مسارات مثالية مع مراعاة الاختناقات المرورية وسعة السيارة والمزيد.

لدينا المئات ، وليس الملايين من العملاء ، مثل خدمات Yandex B2C الشهيرة. لذلك ، فإن سعادة كل عميل لها أهمية خاصة بالنسبة لنا ، بالإضافة إلى أنه من الممكن إعطائه المزيد من الاهتمام والتعمق في مهامه. لهذا ، على وجه الخصوص ، من المفيد أن يكون لديك أدوات لمساعدتك على فهم الطلبات التي يرسلها العميل إلينا.

سوف أعطي مثالا على ذلك. افترض ، في يوم واحد ، تم تلقي 24 طلبًا من Romashka. قد يعني هذا:

  • يعملون في جميع أنحاء البلاد وبنوا 24 مجموعة مسارات لـ 24 مستودعات.
  • هناك مستودع واحد فقط ، لكن العميل يتلقى باستمرار طلبات جديدة. لأخذها في الاعتبار ، تحتاج إلى تحديث المسارات كل ساعة.
  • يتم تشكيل الطلبات من العميل بخطأ بسبب عدم تمكنه من الحصول على حل جيد لمهمة واحدة 24 مرة على التوالي.

بداهة ، من غير الواضح تمامًا ما حدث حقًا. ولكن إذا تمكنا من مقارنة 24 مجموعة من معرّفات الطلبات بسرعة ، فسيصبح الوضع واضحًا على الفور. إذا لم تتقاطع على الإطلاق - هذه هي الحالة الأولى (24 مستودعًا). إذا كانت المجموعات تتدفق من واحدة إلى أخرى ، فإن الثانية (التحديث المجدول للمسارات). حسنًا ، 24 مجموعة متطابقة تقريبًا هي علامة محتملة على حاجة العميل للمساعدة.

بسّط المهمة: من الدوائر إلى الخطوط


لبعض الوقت استخدمت حزمة matplotlib-venn ، لكن تقييد مجموعتين "ونصف" بالطبع كان محبطًا. التفكير في النهج المختلفة للمشكلة ، قررت أن أحاول الانتقال من الدوائر والبدائية ثنائية الأبعاد بشكل عام إلى خطوط أفقية أحادية البعد. يمكن بعد ذلك تصوير التقاطعات عموديًا على النحو التالي:

صورة


تدرك العين الأبعاد الخطية بشكل أفضل من المربعات ، ولا توجد حاجة إلى حساب المثلثات المعقدة للبناء ، كما أن تباعد المجموعات على طول المحور Y يجعل الرسم البياني أقل تحميلًا. بالإضافة إلى ذلك ، يتحسن أول مثال غير ناجح (مجموعتان وتقاطعهما مع الثالث) من تلقاء نفسه:

صورة


مشكلة الاختلاف المتماثل لا تزال هنا. لكننا سنتعامل معها مثل الإسكندر الأكبر مع العقدة الغوردية: دعونا ، إذا لزم الأمر ، نقطع إحدى المجموعات إلى قسمين:

صورة


تم تصوير المجموعة الحمراء في خطين بدلاً من خط واحد ، ولكن لا حرج في ذلك. كلاهما في نفس الارتفاع ولهما نفس اللون ، بحيث يتم قراءة وحدتهما بصريًا جيدًا.

من السهل التحقق من أنه بهذه الطريقة ، مع مراعاة النسب بدقة ، يمكن تصوير أي ثلاث مجموعات. وبالتالي ، فإن المشكلة لNيمكن اعتبار N يساوي 2 أو 3 حل.

إضافة أخرى لهذا النهج هو أنه من السهل تطبيقه على أي عدد من المجموعات ، وهو ما سنفعله قريبًا جدًا. كل ما هو مطلوب ليس حل واحد ، ولكن عدد عشوائي من فواصل الأسطر. لكن أولاً ، بعض التوافقات البسيطة.

القليل من الحساب


دعونا نلقي نظرة على مخطط فين بثلاث دوائر ونحسب عدد المناطق التي تقسمها الدوائر بعضها البعض:

صورة


يتم تحديد كل منطقة من خلال ما إذا كانت تقع داخل أو خارج كل دائرة من الدوائر الثلاث ، ولكن المنطقة الخارجية غير ضرورية. إجمالي نحصل عليه231=7 . يمكن أن تعطي المواقع الأخرى للدوائر الثلاث مناطق أقل تصل إلى 1 ، عندما تتزامن جميع الدوائر.

بتحويل هذه الحجة من الدوائر إلى المجموعات ، نحصل على ذلكNمجموعات N تكسر بعضها البعض لا أكثر2N1 لهذه الأجزاء الأولية. من المهم أن يتم تضمين كل من هذه الأجزاء بالكامل أو لا يتم تضمينها بالكامل في أي من هذه المجموعات. في مخططاتنا الجديدة ، تعتبر الأعمدة أجزاء أولية.

المزيد من المجموعات!


لذا ، نريد تعميم هذه المخططات على الحالة N>3:

صورة


إلى عن على Nمجموعات نحصل على شبكة معهاNخطوط N وM2N1أعمدة M 2 N - 1 ، كما حسبنا للتو. يبقى أن يمر من خلال كل سطر وملء الخلايا المقابلة للأجزاء الأولية المدرجة في هذه المجموعة.

للتوضيح ، خذ مثالا من خمس مجموعات:

programming_languages = {'python', 'r', 'c', 'c++', 'java', 'julia'}
geographic_places = {'java', 'buffalo', 'turkey', 'moscow'}
letters = {'a', 'r', 'c', 'i', 'z'}
human_names = {'robin', 'julia', 'alice', 'bob', 'conrad'}
animals = {'python', 'buffalo', 'turkey', 'cat', 'dog', 'robin'}

بالاعتماد على الوصف أعلاه نحصل على الشكل التالي:

صورة


يقرأ بشكل سيئ: هناك الكثير من الفجوات في الخطوط ، جميع المجموعات مقطعة إلى ملفوف. لكن بما أننا لا نحب الاستراحة ، فلماذا لا نحدد مباشرة مهمة التقليل منها؟ بعد كل شيء ، ترتيب الأعمدة غير مهم ، لا شيء يمنعنا من إعادة ترتيبها كما نريد. نصل إلى هذه المشكلة: ابحث عن تبديل أعمدة مصفوفة معينة من الأصفار والأعمدة مع الحد الأدنى من الفجوات بين الوحدات في الصفوف.

كما قيل لي لاحقًا ، هذه هي عمليا مهمة بائع متنقل في مقياس هامينج ؛ إنها NP-Complete . إذا كان هناك عدد قليل من الأعمدة (على سبيل المثال ، لا يزيد عن 12) ، فيمكنك العثور على التباديل اللازم عن طريق البحث الشامل ، وإلا فستحتاج إلى اللجوء إلى بعض الأساليب البحثية.

نطبق خوارزمية جشع بسيطة. دعونا نسمي التشابه بين عمودين عدد المواضع التي تتطابق عندها القيم في هذه الأعمدة. خذ العمودين الأكثر تشابهًا ، ضعهما معًا. بعد ذلك ، سوف نبني بحماس التسلسل على جانبي هذا الزوج. من بين الأعمدة المتبقية ، نجد العمود الأكثر تشابهًا مع أحد الأعمدة ، ونعلقه - وهكذا مع بقية الأعمدة.

إليك الأرقام قبل وبعد تطبيق الخوارزمية:

صورة


لقد أصبح أفضل بكثير. في هذه المرحلة شعرت أن شيئًا مفيدًا يخرج. بعد التجربة ، لاحظت أن الخوارزمية تميل إلى التمسك بالحد الأدنى المحلي. تمكنا من التعامل مع هذا الأمر بشكل جيد من خلال التوزيع العشوائي البسيط: نصدر القليل من الضوضاء حول تشابه الأعمدة ، وندير الخوارزمية ، ونكرر 1000 مرة ، ونختار أفضل 1000 حل.

والنتيجة هي أداة فعالة بالفعل ، ولكن يمكنك إضافة بعض المعلومات المفيدة إليها. لقد صنعت رسمين بيانيين إضافيين: تظهر أحجام المجموعات الأصلية على اليمين ، ويظهر الجزء العلوي لكل تقاطع عدد مجموعاتنا فيه. في الواقع ، هذا ليس أكثر من مجموع مصفوفة ثنائية لدينا في الصفوف (على اليمين) وفي الأعمدة (في الأعلى):

صورة


أضفت أيضًا خيار طلب المجموعات نفسها (أي الصفوف) وفقًا لنفس مبدأ الأعمدة: مع تقليل عدد الفواصل. نتيجة لذلك ، يتم تجميع مجموعات مماثلة:

صورة


التطبيق في العمل


بطبيعة الحال ، أولاً وقبل كل شيء ، بدأت في استخدام الأداة الجديدة للمهمة التي تم إنشاؤها من أجلها: لفحص طلبات العملاء لواجهة برمجة التطبيقات الخاصة بنا. لقد أسرتني النتائج. لذا ، على سبيل المثال ، بدا يوم عمل أحد العملاء. كل سطر هو طلب إلى API (العديد من معرفات الطلبات المضمنة فيه) ، والتوقيع في المنتصف هو وقت إرسال الطلبات:

صورة


طوال اليوم على مرأى ومسمع. في 10:49 أرسل لوجستي العملاء بفاصل زمني 23 ثانية طلبين متطابقين مع 129 طلبًا. من 11:25 إلى 15:53 ​​كانت هناك ثلاثة طلبات بمجموعة مختلفة من 152 طلبًا. في الساعة 16:43 وصل طلب فريد ثالث مع 114 طلبًا. لحل هذا الطلب ، قام اللوجستي بتطبيق أربعة تعديلات يدوية (يمكن القيام بذلك من خلال واجهة المستخدم الخاصة بنا).

وهذا ما يبدو عليه اليوم المثالي: تم حل جميع المهام المستقلة مرة واحدة ، ولم يكن هناك حاجة إلى تصحيحات أو اختيار المعلمات:

صورة


وإليك مثال من عميل يرسل الطلبات كل 15-30 دقيقة لمراعاة الطلبات المستلمة في الوقت الحقيقي:

صورة


حتى في 50 مجموعة ، كشفت الخوارزمية بوضوح البنية المخفية في البيانات. يمكنك معرفة كيفية إزالة الطلبات القديمة من الطلبات واستبدالها بطلبات جديدة عند تنفيذها.

في كلمة واحدة ، تمكنت تمامًا من إغلاق حاجتي للعمل باستخدام الأداة التي تم إنشاؤها.

الموز على نطاق واسع (ليس في الحقيقة)


بينما كنت أدرس النهج الحالية ، صادفت عدة مرات رسمًا من مجلة Nature ، التي تقارن جينومات الموز وخمسة نباتات أخرى:

صورة


لاحظ كيف ترتبط أحجام المناطق بعناصر 13 و 149 (يشار إليها بالسهام): والثاني أصغر عدة مرات. لذلك ليس هناك شك في أي تناسب.

بالطبع ، أردت أن أجرب يدي على هذه البيانات ، لكن النتيجة لم ترضيني:

صورة


الرسم البياني يبدو فوضويًا. والسبب هو ، أولاً ، أن جميع التقاطعات تقريبًا (62 من أصل 63 ممكنة) غير فارغة ، وثانيًا ، تختلف أحجامها بثلاث مرات من الحجم. ونتيجة لذلك ، أصبحت التعليقات التوضيحية العددية مزدحمة للغاية.

لجعل أداتي ملائمة لهذه البيانات ، أضفت العديد من المعلمات. يسمح لك أحدهما بمحاذاة عرض العمود جزئيًا ، بينما يخفي الآخر التعليقات التوضيحية إذا كان عرض العمود أقل من قيمة محددة.

صورة


تمت قراءة هذا الخيار جيدًا ، ولكن من أجل ذلك كان علي أن أضحي بالتناسب الدقيق للحجم.

كما اتضح ، مع الانتباه إلى مجال المعلوماتية الحيوية ، كنت على حق. لقد أرسلت منشورًا عن أداتي إلى Reddit في r / visualization و r / datascience و r / bioinformatics ، وكان من الأفضل تلقيها في الأخير ، وكانت المراجعات متحمسة حقًا.

تحويل المنتج


في النهاية ، أدركت أنها تحولت إلى أداة جيدة يمكن أن تكون مفيدة للكثيرين. لذلك ، ولدت الفكرة لتحويلها إلى حزمة كاملة مفتوحة المصدر. بالطبع ، كانت موافقة القادة ضرورية ، لكن الرجال لم يمانعوا فحسب ، بل دعموني أيضًا ، وهو ما يشكرهم كثيرًا.

بدأت العمل بشكل رئيسي في عطلات نهاية الأسبوع ، وبدأت بجلب الكود تدريجيًا إلى قابلية التسويق وكتابة الاختبارات والتعامل مع نظام الحزم في Python. هذا هو أول مشروع لي من هذا النوع ، لذا فقد استغرق الأمر عدة أشهر.

كان إيجاد اسم جيد مهمة صعبة أيضًا ، وتعاملت معها بشكل سيئ. الاسم المحدد (super venn) لا يمكن وصفها بأنها ناجحة ، لأن الملح الكامل لمخططات فين بطبيعتها الثابتة ، لكن على العكس ، حاولت أن أبين بدقة الأبعاد الحقيقية. ولكن عندما أدركت ذلك ، تم نشر المشروع بالفعل وكان الأوان قد فات لتغيير الاسم.

النظير


بالطبع ، لم أكن أول من استخدم هذا النهج لتصور المجموعات: الفكرة ، بشكل عام ، تكمن على السطح. هناك نوعان من تطبيقات الويب المماثلة في الوصول المفتوح: RainBio و Linear Diagram Generator ، والثاني يستخدم نفس المبدأ تمامًا مثل الألغام. (كتب المؤلفون أيضًا مقالة على 40 صفحة ، قارنت تجريبًا ما هو أفضل إدراكًا - خطوط أفقية أو عمودية ، رقيقة أو سميكة ، وما إلى ذلك. حتى بدا لي أن المقالة كانت أساسية بالنسبة لهم ، وكانت الأداة نفسها مجرد إضافة إليها .)

لمقارنة هذين التطبيقين بحزمتي ، نستخدم المثال مرة أخرى مع الكلمات. يمكنك أن تقرر بنفسك أي خيار أكثر قابلية للقراءة وغنية بالمعلومات.

Rainbio
صورة


مولد الرسم البياني الخطي
صورة


مشرف
صورة


نهوج أخرى


لا يسع المرء إلا أن يذكر مشروع UpSet ، الذي يوجد كتطبيق ويب وحزم لـ R و Python. يمكن فهم المبدأ الأساسي من خلال النظر إلى عرض بيانات جينوم الموز. يتم اقتصاص الرسم البياني إلى اليمين ، ولا يظهر سوى 30 تقاطعًا من 62:

صورة


من المثير للاهتمام ، إذا كنت تستخدم supervenn لفرز الأعمدة حسب العرض وجعل الأعمدة متشابهة باستخدام خيار محاذاة العرض ، فستحصل على نفس الشيء تقريبًا ، على الرغم من عدم ملاحظة ذلك على الفور. كل ما هو مفقود هو خطوط عمودية ذات أحجام تقاطع ، بدلاً من وجود أرقام فقط في أسفل الرسم البياني:

صورة


أثناء كتابة هذا النص ، حاولت استخدام إصدار Python من UpSet ، لكنني وجدت أن الحزمة لم يتم تحديثها منذ عام 2016 ، ولا تصف الوثائق تنسيق الإدخال بأي شكل من الأشكال ، وتعطلت حالة الاختبار مع وجود خطأ. تعمل نسخة الويب ، ولديها العديد من الوظائف المساعدة المفيدة ، ولكن العمل معها صعب للغاية بسبب الطريقة المعقدة لإدخال البيانات.

أخيرًا ، تتوفر نظرة عامة مثيرة للاهتمام حول تقنيات مجموعة التصور عبر الإنترنت . لا يتم تنفيذها جميعًا كأدوات برمجية. إليك بعض الصور لجذب انتباهك:

صورة

صورة


كنت مهتمًا بشكل خاص بطريقة مجموعات الفقاقيع (الصف السفلي) ، والتي تسمح لك بعرض مجموعات صغيرة أعلى ترتيب معين للعناصر على متن الطائرة. يمكن أن يكون ذلك مناسبًا ، على سبيل المثال ، عندما يتم إرفاق العناصر بالمحور الزمني (أ) أو بالخريطة (ب). حتى الآن ، تم تنفيذ هذه الطريقة فقط في Java و JavaScript (الروابط موجودة في صفحة المؤلفين) ، وسيكون من الرائع إذا قام شخص ما بنقلها إلى Python.

لقد أرسلت رسائل مع وصف موجز للمشروع إلى مؤلفي UpSet والمراجعة وحصلت على مراجعات جيدة. حتى أن اثنين منهم وعدوا بإدراج مشرف في محاضراتهم حول تصور المجموعات.

استنتاج


إذا كنت ترغب في استخدام الحزمة ، فهي متاحة على GitHub و PyPI: pip install supervenn . سأكون ممتنا لأية تعليقات حول رمز واستخدام الحزمة ، للأفكار والنقد. سأكون سعيدًا بشكل خاص لقراءة التوصيات حول كيفية تحسين خوارزمية تبديل الأعمدة بشكل كبيرN، ونصائح حول كيفية كتابة الاختبارات لوظائف الرسوم البيانية.

شكرا للانتباه!

المراجع


1. جون فين. على التمثيل التخطيطي والميكانيكي للافتراضات والأسباب . مجلة لندن وإدنبره ودبلن الفلسفية ، يوليو 1880.

2. J.-B. لامي و ر. تسوبرا. RainBio: التصور النسبي لمجموعات كبيرة في علم الأحياء . معاملات IEEE على التصور ورسومات الكمبيوتر ، دوى: 10.1109 / TVCG.2019.2921544.

3. بيتر رودجرز ، جيم ستابلتون وبيتر تشابمان. تصور مجموعات بمخططات خطية . المعاملات ACM على التفاعل البشري الكمبيوتر 22 (6) ص. 27: 1-27: 39 سبتمبر 2015. دوى: 10.1145 / 2810012.

4. ألكسندر ليكس ، نيلز جيهلينبورج ، هندريك ستروبيلت ، رومان فويليموت ، هانزبيتر فيستر
أبسيت: تصور مجموعات متقاطعة. معاملات IEEE على التصور ورسومات الكمبيوتر (InfoVis'14) ، 2014.

5. بلال السلاخ ، لوانا ميكاليف ، فولفجانج أيجنر ، هيلويج هاوزر ، سيلفيا ميكش وبيتر رودجرز. حالة التصور الحديثة . منتدى رسومات الحاسوب. المجلد 00 (2015) ، العدد 0 ص. 1-27 10.1111 / cgf.12722.

6. كريستوفر كولينز ، جيرالد بن وشيلاغ كاربينديل. مجموعات الفقاقيع: الكشف عن علاقات المجموعة مع Isocontours عبر التصورات الحالية . IEEE Trans. على التصور ورسومات الحاسوب (بروك من IEEE Conf. على تصور المعلومات) ، المجلد. 15 ، الإصدار. 6 ، ص. 1009-1016 ، 2009.

All Articles