تصوير بيانات Python: 5 أجزاء من الرمز للحصول على رسم مبعثر واستخدامه ، يستحق التجميع

المصدر: Big Data DT

هذا المقال عن 4700 كلمة ، اقترح القراءة 7 دقائق

ما هو مخطط النقاط المبعثرة؟ ما علاقات البيانات التي يمكن استخدامها لتقديم؟ ما هي المشاكل التي يمكن حلها أثناء تحليل البيانات؟ كيفية رسم مخطط مبعثر مع بايثون؟ هذا المقال يجيبهم واحدا تلو الآخر.

01 نظرة عامة

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

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

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

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

الشكل 1 ارتباط البيانات المتناثرة

في نظام Python ، يمكنك استخدام Scipy أو Statsmodels أو Sklearn لإجراء تحليل الانحدار على النقاط المنفصلة وتلخيص البيانات الموجودة وإجراء تحليل تنبؤي. هناك علاقة وثيقة بين هذه المتغيرات ، ولكن هذه العلاقات ليست دقيقة مثل الصيغ الرياضية والصيغ الفيزيائية. تعتبر المخططات المبعثرة أداة رسومية جيدة يمكن عرضها بشكل حدسي. كما هو موضح في الصورة 2.

الشكل 2 تركيب البيانات المبعثرة (الخطي)

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

02 أمثلة

يظهر مثال رمز المخطط المبعثر أدناه.

مثال على الرمز

#البيانات س = ذ = #حجم قماش ع = الشكل (plot_width = 400 ، plot_height = 400) # ص التشتت (س ، ص ، الحجم = 20 ، # وحدة شاشة عرض وحدة بكسل # نصف القطر = 1 ، وحدة محور تنسيق وحدات بيانات # علامة = "دائرة" ، color = "navy" ، alpha = 0.5) # p.Circle (x، y، size = 20، color = "navy"، alpha = 0.5) #عرض عرض (ع)

تظهر نتائج العملية في الشكل 3.

الشكل 3 مثال رمز result نتيجة التشغيل

يستخدم السطر 7 في مثال الرمز method طريقة التشتت لرسم الرسم المبعثر ؛ يستخدم السطر 11 طريقة الدائرة لرسم الرسم المبعثر (مستحسن). يتم وصف معلمات هاتين الطريقتين أدناه.

وصف المعلمة p.circle (x، y، ** kwargs).

  • س  (str أو seq): x إحداثيات النقاط المنفصلة أو اسم العمود أو القائمة
  • ذ  (str أو seq): y إحداثي النقطة المنفصلة
  • بحجم (str أو list): حجم النقاط المنفصلة ، وحدة بكسل الشاشة
  • علامة (str أو list): اسم نوع علامة نقطة منفصلة أو قائمة اسم
  • اللون (قيمة اللون ، اختياري): لون التعبئة والمخطط التفصيلي
  • مصدر  (`~ bokeh.models.sources.ColumnDataSource`): تنسيق بيانات Bokeh الحصري
  • ** kwargs:  سمات مخصصة أخرى ؛ حيث تكون القيمة الافتراضية لعلامة نوع العلامة هي: "marker =" circle "" ، يمكنك استخدام "radius" لتحديد نصف قطر الدائرة (الوحدة هي وحدة محور الإحداثيات) هذا مفيد جدًا في بيانات الويب. وبطرق مختلفة ، سيكون تأثير العرض على الأجهزة المختلفة مختلفًا قليلاً.

وصف معلمة p.scatter (x، y، ** kwargs).

  • س (: class: `~ bokeh.core.properties.NumberSpec`): إحداثيات x
  • ذ  (: class: `~ bokeh.core.properties.NumberSpec`): إحداثيات y
  • زاوية  (: class: `~ bokeh.core.properties.AngleSpec`): زاوية التدوير
  • وحدات الزاوية  (: class: `~ bokeh.core.enums.AngleUnits`): (افتراضي: 'rad') الافتراضي: راديان ، يمكنك أيضًا استخدام الدرجات ('degree')
  • ملء_الفا  (: class: `~ bokeh.core.properties.NumberSpec`): (افتراضي: 1.0) تعبئة الشفافية ، افتراضي: معتم
  • ملء_اللون  (: class: `~ bokeh.core.properties.ColorSpec`): (لون افتراضي:" رمادي ") ، لون تعبئة ، افتراضي: رمادي
  • line_alpha  (: class: `~ bokeh.core.properties.NumberSpec`): (افتراضي: 1.0) شفافية المخطط التفصيلي ، افتراضي: معتم
  • line_cap  (: class: `~ bokeh.core.enums.LineCap`): (افتراضي: 'butt') نهاية السطر (الحد الأقصى)
  • line_color  (: class: `~ bokeh.core.properties.ColorSpec`): (افتراضي: 'black') لون المخطط ، افتراضي: black
  • line_dash (: class: `~ bokeh.core.properties.DashPattern`): (افتراضي :) خط منقط
  • line_dash_offset  (: class: `~ bokeh.core.properties.Int`): (افتراضي: 0) إزاحة الخط المنقط
  • line_join (: class: `~ bokeh.core.enums.LineJoin`): (افتراضي: 'bevel')
  • عرض الخط  (: class: `~ bokeh.core.properties.NumberSpec`): (افتراضي: 1) عرض الخط ، افتراضي: 1

بالإضافة إلى ذلك ، يمكن استيراد بعض الخصائص في Bokeh ، مثل `~ bokeh.core.properties.NumberSpec` ،` ~ bokeh.core.properties.ColorSpec` إلى هذه الخاصية في دفتر ملاحظات Jupyter عبر `import bokeh.core.properties.NumberSpec` ، ثم تحقق من تعليماته التفصيلية.

مثال كود

#البيانات العدد = 4000 x = np.random.random (الحجم = N) * 100 # نقطة عشوائية x إحداثيات y = np.random.random (الحجم = N) * 100 # إحداثي النقطة y العشوائية نصف القطر = np.random.random (الحجم = N) * 1.5 # نصف قطر عشوائي # شريط الأدوات TOOLS = "hover، crosshair، pan، wheel_zoom، box_zoom، reset، tap، save، box_select، poly_select، lasso_select" # لون RGB ، قماش 1 ، رسم 1 الألوان 2 = p1 = الشكل (العرض = 300 ، الارتفاع = 300 ، الأدوات = الأدوات) p1.satter (x، y، radius = radii، fill_color = colors2، fill_alpha = 0.6، line_color = None) # RGB اللون ، قماش 2 ، رسم 2 الألوان 2 = p2 = الشكل (العرض = 300 ، الارتفاع = 300 ، الأدوات = الأدوات) p2.scatter (x، y، radius = radii، fill_color = colors2، fill_alpha = 0.6، line_color = None) # عرض مباشر # عرض (p1) # عرض (p2) #عرض الشبكة frombokeh.layoutsimportgridplot شبكة = شبكة مخطط () اظهر الخطوط)

تظهر نتيجة العملية في الشكل 4.

الشكل 4 مثال رمز result نتيجة التشغيل

في مثال الكود ، يستخدم السطر 11 والسطر 15 طريقة التشتت لرسم الرسم المبعثر. تعريف الأدوات المختلفة في شريط الأدوات في السطر 7 ، تعريف الألوان المختلفة لنقاط البيانات في السطر 9 ، ورسومات عرض الشبكة في السطر 20 و 21 ، يمكنك فهم هذه التقنيات مقدمًا.

مثال كود

frombokeh.sampledata.irisimportflowers # colormap = {'setosa': 'red'، 'versicolor': 'green'، 'virginica': 'blue'} الألوان = #اللوحة القماشية ص = الشكل (العنوان = "IrisMorphology") #رسم ص.الدائرة (الزهور ، الزهور ، اللون = الألوان ، تعبئة_الفا = 0.2 ، الحجم = 10) #آخر p.xaxis.axis_label = "PetalLength" p.yaxis.axis_label = "PetalWidth" #عرض عرض (ع)

تظهر نتيجة العملية في الشكل 5.

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

مثال 5 الشكل رمز result نتيجة التشغيل

مثال كود

frombokeh.layoutsimportcolumn ، مخطط الشبكة frombokeh.modelsimportBoxSelectTool ، Div #البيانات x = np.linspace (0،4 * np.pi، 100) y = np.sin (x) # شريط الأدوات TOOLS = "wheel_zoom، save، box_select، lasso_select، reset" # كود HTML div = Div (text = "" " < ص > يمكن عرض اللوحة في بوكيه في تنسيقات مختلفة ؛ < / ص > < ص > من خلال معلمة التكوين BoxSelectTool ، استخدم الماوس لتحديد البيانات في الشكل والتفاعل بطرق مختلفة. < / ص > يتم عرض كود #HTML مباشرة كطبقة ، ويمكن استخدامه أيضًا كمستند HTML بأكمله #عرض خصائص opts = dict (الأدوات = TOOLS، plot_width = 350، plot_height = 350) # رسم 1 p1 = الشكل (العنوان = "selectonmouseup" ، ** يختار) p1.circle (x، y، color = "navy"، size = 6، alpha = 0.6) # رسم 2 p2 = الشكل (title = "selectonmousemove"، ** opts) p2.square (x، y، color = "olive"، size = 6، alpha = 0.6) p2.select_one (BoxSelectTool) .select_every_mousemove = صواب # رسم 3 p3 = الشكل (title = "defaulthighlight"، ** opts) p3.circle (x، y، color = "firebrick"، alpha = 0.5، size = 6) # الرسم 4 p4 = الشكل (title = "customhighlight"، ** opts) p4.square (x، y، color = "navy"، size = 6، alpha = 0.6، nonselection_color = "orange" ، nonselection_alpha = 0.6) #نسق التخطيط = العمود (div ، gridplot (، toolbar_location = "right") ، sizing_mode = "scale_width") # sizing_mode يقيس الصورة وفقًا لعرض النافذة #رسم إظهار (التخطيط)

يمكن عرض اللوحة في بوكيه بطرق تخطيط متنوعة: من خلال تكوين معلمات العرض ، والتصور التفاعلي في العرض. تظهر نتيجة العملية في الشكل 6.

الشكل 6 مثال رمز result نتيجة التشغيل

يسمح مثال الرمز للقارئ أن يشعر بالتأثير التفاعلي لبوكيه ، ويمكن لطريقة Div استخدام علامات HTML مباشرة ، والتي يتم عرضها كطبقة مستقلة (السطر 30). بالإضافة إلى ذلك ، تجدر الإشارة إلى أنه يمكنك تعيين لون نقطة التشتت وشفافيتها وما إلى ذلك عند تحديد البيانات من خلال "nonselection_` أو" nonselection_alpha "أو" nonselection_fill_alpha ".

مثال كود

frombokeh.modelsimport ( ColumnDataSource ، النطاق 1 د ، DataRange1d ، LinearAxis ، SingleIntervalTicker ، FixedTicker ، التسمية ، السهم ، عادي ، HoverTool ، TapTool ، CustomJS) frombokeh.sampledata.sprintimportsprint abbrev_to_country = { "الولايات المتحدة الأمريكية": "الولايات المتحدة" ، "GBR": "بريطانيا" ، "JAM": "جامايكا" ، "CAN": "Canada" ، "TRI": "TrinidadandTobago" ، "AUS": "أستراليا" ، "GER": "Germany" ، "CUB": "كوبا" ، "NAM": "ناميبيا" ، "URS": "الاتحاد السوفياتي" ، "بار": "بربادوس" ، "BUL": "بلغاريا" ، "HUN": "المجر" ، "NED": "هولندا" ، "NZL": "نيوزيلاندا" ، "PAN": "بنما" ، "POR": "البرتغال" ، "RSA": "SouthAfrica" ، "EUA": "UnitedTeamofGermany" ، }} gold_fill = "# efcf6d" gold_line = "# c8a850" silver_fill = "# cccccc" silver_line = "# b0b0b1" bronze_fill = "# c59e8a" bronze_line = "# 98715d" fill_color = {"gold": gold_fill، "silver": silver_fill، "bronze": bronze_fill} line_color = {"gold": gold_line، "silver": silver_line، "bronze": bronze_line} defselected_name (الاسم والميدالية والسنة): returnnameifmedal == "gold" andyearinelse "" t0 = العدو سبرينت = سبرينت sprint = sprint.Abbrev.map (lambdaabbr: abbrev_to_country) sprint = sprint.Medal.map (lambdamedal: medal.lower ()) سبرينت = 100.0 / سبرينت sprint = 100.0 * (1.0-t0 / sprint.Time) sprint = sprint.Medal.map (lambdamedal: fill_color) sprint = sprint.Medal.map (lambdamedal: line_color) sprint = sprint.apply (tuple، axis = 1) .map (lambdaargs: selected_name (* args)) source = ColumnDataSource (sprint) xdr = Range1d (start = sprint.MetersBack.max () + 2، end = 0) #XXX: + 2ispoor-man's padding (otherwisemisseslasttick) ydr = DataRange1d (range_padding = 4، range_padding_units = "مطلق") مؤامرة = الشكل ( x_range = xdr، y_range = ydr ، عرض القطعة = 1000 ، ارتفاع الأرض = 600 ، toolbar_location = بلا ، outline_line_color = بلا ، y_axis_type = بلا) plot.title.text = "UsainBoltvs.116yearsofOlympicsprinters" plot.title.text_font_size = "14pt" plot.xaxis.ticker = SingleIntervalTicker (الفاصل الزمني = 5 ، num_minor_ticks = 0) plot.xaxis.axis_line_color = بلا plot.xaxis.major_tick_line_color = بلا plot.xgrid.grid_line_dash = "متقطع" yticker = FixedTicker (علامات =) yaxis = LinearAxis (مؤشر = yticker ، major_tick_in = -5 ، major_tick_out = 10) plot.add_layout (yaxis ، "right") medal = plot.circle (x = "MetersBack"، y = "Year"، radius = dict (value = 5، units = "screen") ، fill_color = "MedalFill" ، line_color = "MedalLine" ، fill_alpha = 0.5 ، المصدر = المصدر ، المستوى = "التراكب") plot.text (x = "MetersBack"، y = "Year"، x_offset = 10، y_offset = -5، text = "SelectedName"، text_align = "left"، text_baseline = "middle"، text_font_size = "9pt"، source = source) no_olympics_label = التصنيف ( س = 7.5 ، ص = 1942 ، text = "NoOlympicsin1940or1944" ، text_align = "center"، text_baseline = "middle" ، text_font_size = "9pt"، text_font_style = "italic"، text_color = "silver") no_olympics = plot.add_layout (no_olympics_label) x = sprint.MetersBack.min () -0.5 arrow = Arrow (x_start = x، x_end = 5، y_start = 1900، y_end = 1900، start = NormalHead (fill_color = "black"، size = 6)، end = None، line_width = 1.5) plot.add_layout (سهم) meter_back = التصنيف ( x = 5 ، x_offset = 10 ، y = 1900 ، text = "Metersbehind2012Bolt" ، text_align = "left" ، text_baseline = "middle" ، text_font_size = "10pt"، text_font_style = "bold") plot.add_layout (متر_ خلفي) إخلاء المسؤولية = التسمية ( x = 0 ، y = 0 ، x_units = "screen" ، y_units = "screen" ، text = "ThischartincludesmedalsfortheUnitedStatesandAustraliainthe \" وسيط \ "Gamesof1906 ، والتي لا تعترف بها شركة I.O.C. text_font_size = "8pt"، text_color = "silver") plot.add_layout (إخلاء المسؤولية ، "أدناه") تلميحات الأدوات = "" " < شعبة > < spanstyle = "font-size: 15px؛" > @اسم < / امتداد > < spanstyle = "font-size: 10px؛ color: # 666؛" > (Abrbrev) < / امتداد > < / div > < شعبة > < spanstyle = "font-size: 17px؛ font-weight: bold؛" > Time {0.00} < / امتداد > < spanstyle = "font-size: 10px؛ color: # 666؛" > @عام < / امتداد > < / div > < divstyle = "font-size: 11px؛ color: # 666؛" > @ {MetersBack} {0.00} متر خلف < / div > "" " plot.add_tools (HoverTool (تلميحات الأدوات = تلميحات الأدوات ، العارضون =)) open_url = CustomJS (args = dict (source = source) ، code = "" " source.inspected._1d.indices.forEach (الوظيفة (الفهرس) { varname = source.data ، varurl = " + encodeURIComponent (name) ؛ window.open (url) ؛ }) ؛ "" ") plot.add_tools (TapTool (رد الاتصال = open_url ، العارضون = ، السلوك = "تفتيش")) عرض (مؤامرة)

تظهر نتيجة العملية في الشكل 7.

example مثال رمز الشكل 7 تشغيل النتائج

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

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

نبذة عن الكاتب: Qu Xifeng ، كبير المهندسين في Python ، الممارسين الميدانيين لبوكيه والواعظ ، دراسة متعمقة لبوكيه. جيد في Flask ، MongoDB ، Sklearn وغيرها من التقنيات ، ولديه خبرة عملية غنية. بمعرفة مؤلفي أعمدة متعددة (مجتمع Python الصيني ، مبرمجون Python ، تحليل البيانات الضخمة والتعدين) ، جمع العمود أكثر من 100000 مستخدم.

تم اقتباس هذا المقال من "Python Data Visualization: Visual Visual Based Based on Bokeh" ، والذي تم إصداره بموجب تفويض من الناشر.

المحرر: ون جينغ

-إنهاء-

اتبع منصة WeChat العامة التابعة لـ Tsinghua-Qingdao Data Science Research Institute " فطيرة البيانات THU  "ورقم الأخت" فطيرة البيانات  "احصل على المزيد من فوائد المحاضرات وجودة المحتوى.

0108 المشاركة | جيانغسو نسبة الفقر أكثر من 17 شخصا المتبقية 99.99 ليس للخروج من الفقر

التيار الكهربائي دفق مستمر من 20 مشاريع الطاقة الساخنة قبل نهاية استئناف العمل

المتفرجين! الدكتور ستون الأول كبير "سحابة" الرد، عمليا؟ ! ممكنا

الموقع الرسمي CDC الولايات المتحدة، أكد عدد من الدول إلى نعم ولا

2019 قائمة العشرة الأوائل من المؤسسات البحثية الطبيعية مؤشر المنشورة: فازت جامعة هارفارد السوبر أول أكاديمية الصينية للعلوم

البيانات الكبيرة! 2020 مهرجان ربيع تحليل توقعات تدفق الركاب هنا

"الأصفر العنيف" فيديو لرؤية الظل النفسي والتدقيق محتوى AI يمكن أن ينقذ ذلك؟

TMD2019: بايت ضربات عدوانية، مكتوما المجموعة الأمريكية الثروة، وقليلا من الصعب اسم

شمال البالغة من العمر 30 عاما جوائز الإنجاز الإناث الشباب وون الدكتوراه 2019 IEEE والعالم لثلاثة أشخاص فقط

2019 بيانات القناة الصغيرة التقارير حديثا

عن عام 2020 نبوءة سبعة من صناعة الذكاء الاصطناعي

كاميرا الدخن يتم تعطيل جوجل الطوارئ! الدخن رد: شبكة ضعيفة الخلل، لن تتأثر البلاد