Python veri görselleştirme: Dağılım grafikleri çizmek ve kullanmak için 5 parça kod, toplamaya değer

Kaynak: Büyük Veri DT

Bu makale hakkında 4700 kelime , Okumanız tavsiye edilir 7 dakika

Dağılım grafiği nedir? Sunmak için hangi veri ilişkileri kullanılabilir? Veri analizi sürecinde hangi sorunlar çözülebilir? Python ile dağılım grafiği nasıl çizilir? Bu makale size tek tek cevap verecektir.

01 Genel Bakış

Dağılım dağılım tablosu olarak da bilinen dağılım, bir değişkenin apsis ve diğerinin ordinat olduğu ve dağılım noktalarının (koordinat noktaları) dağılımının değişkenlerin istatistiksel ilişkisini yansıtmak için kullanıldığı bir grafiktir.

Karakteristik, etkileyen faktörler ve tahmin edilen nesne arasındaki ilişkinin genel eğilimini doğrudan gösterebilmesidir. Avantajı, değişkenler arasındaki ilişkinin değişen biçimini sezgisel ve göz alıcı grafikler aracılığıyla yansıtabilmesidir. Değişkenler arasındaki ilişkiyi simüle etmek için hangi matematiksel ifadenin kullanılacağına karar vermek için. Dağılım grafikleri yalnızca değişkenler arasındaki ilişkinin türü hakkında bilgi vermekle kalmaz, aynı zamanda değişkenler arasındaki ilişkinin netliğini de yansıtır.

Dağılım grafiğindeki veri noktalarının dağılımını gözlemleyerek, değişkenler arasındaki korelasyonu çıkarabiliriz. Değişkenler arasında herhangi bir korelasyon yoksa, dağılım grafiği üzerinde rasgele dağıtılmış ayrı noktalar olarak görünecektir.Bazı korelasyon varsa, veri noktalarının çoğu nispeten yoğun olacak ve belirli bir eğilim içinde mevcut olacaktır.

veri ilişki Kabaca şunlara ayrılabilir: pozitif korelasyon (aynı anda iki değişkenin değerleri artar), negatif korelasyon (bir değişkenin değeri artar ve diğer değişkenin değeri azalır), ilgisizlik, doğrusal korelasyon, üstel korelasyon, vb. Dağılım Şekil 1'de gösterilmektedir. Nokta kümesinden uzaktaki noktalara aykırı değerler veya anormal noktalar denir.

Şekil 1 Dağınık verilerin korelasyonu

Python sisteminde, ayrı noktalarda regresyon analizi yapmak, mevcut verileri özetlemek ve tahmine dayalı analiz yapmak için Scipy, Statsmodels veya Sklearn kullanabilirsiniz. Yakın ilişkileri olan, ancak bu ilişkiler matematiksel formüller ve fiziksel formüller kadar doğru bir şekilde ifade edilmeyen değişkenler için dağılım grafikleri, görsel olarak görüntülenebilen iyi bir grafik araçtır. resim 2'de gösterildiği gibi.

Şekil 2 Dağınık veri uydurma (doğrusal)

Bununla birlikte, analiz sürecinde, değişkenler arasındaki korelasyonun belirlenmiş bir nedensel ilişkiye eşdeğer olmadığı ve diğer etkileyen faktörlerin hala dikkate alınması gerektiği unutulmamalıdır.

02 Örnekler

Dağılım grafiği kodunun bir örneği aşağıda gösterilmiştir.

Kod örneği

#veri x = y = #Tuval Boyutu p = şekil (plot_width = 400, plot_height = 400) #Çizim p.scatter (x, y, boyut = 20, # ekran birimi görüntülenen piksel birimi # radius = 1, # data-spaceunits eksen birimleri işaretçi = "daire", renk = "lacivert", alfa = 0,5) # p.circle (x, y, size = 20, color = "lacivert", alfa = 0,5) #Görüntüle göster (p)

Çalışma sonucu Şekil 3'te gösterilmiştir.

Şekil 3 Kod örneği Çalıştırma sonucu

Kod örneğinin 7. satırı dağılım grafiğini çizmek için dağılım yöntemini kullanır; 11. satır dağılım grafiğini çizmek için daire yöntemini kullanır (önerilen). Bu iki yöntemin parametreleri aşağıda açıklanmıştır.

p.circle (x, y, ** kwargs) parametre açıklaması.

  • x (str veya seq): ayrık noktanın x koordinatı, sütun adı veya liste
  • y (str veya seq): ayrık noktanın y koordinatı
  • boyut (str veya liste): ekran piksel birimleri cinsinden ayrık noktaların boyutu
  • işaretleyici (str veya liste): Ayrık nokta işareti türü adı veya ad listesi
  • renk (renk değeri, isteğe bağlı): Dolgu ve anahat rengi
  • kaynak (`~ bokeh.models.sources.ColumnDataSource`): Bokeh özel veri formatı
  • ** kwargs: Diğer özel özellikler; işaretçi türü işaretleyicinin varsayılan değeri "işaretçi =" daire "" dir ve dairenin yarıçapını tanımlamak için "yarıçap" kullanabilirsiniz (birim, eksen birimidir). Bu, Web sayısallaştırmada çok kullanışlıdır ve farklı cihazlar üzerindeki görüntü etkisi, farklı şekillerde biraz farklı olacaktır.

p.scatter (x, y, ** kwargs) parametre açıklaması.

  • x (: sınıf: `~ bokeh.core.properties.NumberSpec`): x koordinatı
  • y (: sınıf: `~ bokeh.core.properties.NumberSpec`): y koordinatı
  • açı (: class: `~ bokeh.core.properties.AngleSpec`): döndürme açısı
  • angle_units (: sınıf: `~ bokeh.core.enums.AngleUnits`): (varsayılan: 'rad') Varsayılan: radyan, derece ('derece') de kullanılabilir
  • fill_alpha (: class: `~ bokeh.core.properties.NumberSpec`): (varsayılan: 1.0) Dolgu saydamlığı, varsayılan: opak
  • fill_color (: sınıf: `~ bokeh.core.properties.ColorSpec`): (varsayılan: 'gri') Dolgu rengi, varsayılan: gri
  • line_alpha (: sınıf: `~ bokeh.core.properties.NumberSpec`): (varsayılan: 1.0) ana hat şeffaflığı, varsayılan: opak
  • line_cap (: sınıf: `~ bokeh.core.enums.LineCap`): (varsayılan: 'popo') Satır sonu (uç)
  • çizgi rengi (: sınıf: `~ bokeh.core.properties.ColorSpec`): (varsayılan: 'siyah') anahat rengi, varsayılan: siyah
  • line_dash (: sınıf: `~ bokeh.core.properties.DashPattern`): (varsayılan :) noktalı çizgi
  • line_dash_offset (: sınıf: `~ bokeh.core.properties.Int`): (varsayılan: 0) noktalı çizgi uzaklığı
  • line_join (: sınıf: `~ bokeh.core.enums.LineJoin`): (varsayılan: 'bevel')
  • hat genişliği (: sınıf: `~ bokeh.core.properties.NumberSpec`): (varsayılan: 1) Çizgi genişliği, varsayılan: 1

Ek olarak, Bokeh'deki "~ bokeh.core.properties.NumberSpec", "~ bokeh.core.properties.ColorSpec" gibi bazı özellikler Jupyter not defterine "import bokeh.core.properties.NumberSpec" aracılığıyla içe aktarılabilir, Ardından ayrıntılı talimatlarını kontrol edin.

Kod örneği

#veri N = 4000 x = np.random.random (size = N) * 100 # rastgele nokta x koordinatı y = np.random.random (size = N) * 100 # Rastgele nokta y koordinatı yarıçap = np.random.random (boyut = N) * 1.5 # Rastgele yarıçap # Araç çubuğu ARAÇLAR = "hover, crosshair, pan, wheel_zoom, box_zoom, reset, tap, save, box_select, poly_select, lasso_select" #RGB rengi, tuval 1, çizim 1 renkler2 = p1 = şekil (genişlik = 300, yükseklik = 300, araçlar = ARAÇLAR) p1.scatter (x, y, radius = radii, fill_color = renkler2, fill_alpha = 0.6, line_color = Yok) #RGB rengi, tuval 2, çizim 2 renkler2 = p2 = şekil (genişlik = 300, yükseklik = 300, araçlar = ARAÇLAR) p2.scatter (x, y, radius = radii, fill_color = renkler2, fill_alpha = 0.6, line_color = Yok) # Doğrudan görüntüleme #show (p1) #show (p2) #Grid ekran frombokeh.layoutsimportgridplot grid = gridplot () ızgarayı göster)

Çalışma sonucu Şekil 4'te gösterilmiştir.

Şekil 4 Kod örneği Run sonucu

Kod örneğinin 11. ve 15. satırları dağılım grafiğini çizmek için dağılım yöntemini kullanın. 7. satırdaki araç çubuğundaki farklı araç tanımları, 9. satırdaki veri noktalarının farklı renk tanımları ve 20. ve 21. satırlardaki ızgara görüntüleme grafikleri, bu teknikleri önceden anlayabilirsiniz ve özel kullanım yöntemleri aşağıda özel olarak tanıtılacaktır.

Kod örneği

frombokeh.sampledata.irisimportflowers # colormap = {'setosa': 'kırmızı', 'versicolor': 'yeşil', 'virginica': 'mavi'} renkler = #tuval p = şekil (title = "IrisMorphology") #Çizim s. daire (çiçekler, çiçekler, renk = renkler, fill_alpha = 0.2, boyut = 10) #diğer p.xaxis.axis_label = 'PetalLength' p.yaxis.axis_label = 'PetalWidth' #Görüntüle göster (p)

Çalışma sonucu Şekil 5'te gösterilmektedir.

Kod örneği , yukarıda bahsedilen iris çiçeği veri setini tekrar analiz eder Şekil 5'te, x ekseni petal uzunluğudur ve y ekseni taç genişliğidir.Buna dayanarak dağınık veriler 3 kategoriye ayrılabilir. Aynı zamanda bu kod, x ve y ekseni etiketleri dahil olmak üzere geleneksel grafiklerin çizim sürecini gösterir.

Şekil 5 Kod örneği Run sonucu

Kod örneği

frombokeh.layoutsimportcolumn, gridplot frombokeh.modelsimportBoxSelectTool, Div #veri x = np.linspace (0,4 * np.pi, 100) y = np.sin (x) # Araç çubuğu ARAÇLAR = "wheel_zoom, kaydet, box_select, lasso_select, sıfırla" #HTML Kodu div = Div (text = "" " < p > Bokeh'deki tuval, çeşitli mizanpaj yöntemleriyle görüntülenebilir; < / p > < p > BoxSelectTool parametresini yapılandırarak, diyagramdaki verileri seçmek ve farklı şekillerde etkileşim kurmak için fareyi kullanın. < / p > "" ") #HTML kodu doğrudan bir katman olarak veya bütün bir HTML belgesi olarak görüntülenebilir #Özellikleri Görüntüle opts = dikte (araçlar = ARAÇLAR, plot_width = 350, plot_height = 350) # Drawing1 p1 = şekil (title = "selectiononmouseup", ** seçenekler) p1.circle (x, y, color = "lacivert", boyut = 6, alfa = 0,6) # Drawing2 p2 = şekil (title = "selectiononmousemove", ** seçenekler) p2.square (x, y, color = "zeytin", boyut = 6, alfa = 0,6) p2.select_one (BoxSelectTool) .select_every_mousemove = Doğru # Drawing3 p3 = şekil (title = "defaulthighlight", ** seçenekler) p3.circle (x, y, color = "ateş tuğlası", alfa = 0,5, boyut = 6) # Drawing4 p4 = şekil (title = "customhighlight", ** seçenekler) p4.square (x, y, renk = "lacivert", boyut = 6, alfa = 0,6, nonselection_color = "turuncu", nonselection_alpha = 0.6) #Yerleşim layout = column (div, gridplot (, toolbar_location = "sağ"), sizing_mode = "scale_width") # sizing_mode, görüntüyü pencere genişliğine göre ölçekler #Çizim göster (düzen)

Bokeh'deki tuval, çeşitli mizanpaj yöntemlerinde görüntülenebilir: görünüm parametrelerini yapılandırarak görünümde etkileşimli görselleştirme. Çalışma sonucu Şekil 6'da gösterilmektedir.

Şekil 6 Kod örneği Run sonucu

Kod örneği Okuyucunun Bokeh'in etkileşimli etkisini deneyimlemesine izin verin Div yöntemi, ayrı bir katman (satır 30) olarak görüntülenen HTML etiketlerini doğrudan kullanabilir. Ayrıca, verileri seçerken dağınık noktaların rengini ve şeffaflığını ayarlamak için "nonselection_", "nonselection_alpha" veya "nonselection_fill_alpha" seçeneklerini kullanabileceğinizi unutmayın.

Kod örneği

frombokeh.modelsimport ( ColumnDataSource, Range1d, DataRange1d, LinearAxis, SingleIntervalTicker, FixedTicker, Etiket, Ok, Normal Kafa, HoverTool, TapTool, CustomJS) frombokeh.sampledata.sprintimportsprint abbrev_to_country = { "USA": "UnitedStates", "GBR": "İngiltere", "JAM": "Jamaika", "CAN": "Kanada", "TRI": "TrinidadandTobago", "AUS": "Avustralya", "GER": "Almanya", "CUB": "Küba", "NAM": "Namibya", "URS": "Sovyet Birliği", "BAR": "Barbados", "BUL": "Bulgaristan", "HUN": "Macaristan", "NED": "Hollanda", "NZL": "Yeni Zelanda", "PAN": "Panama", "POR": "Portekiz", "RSA": "GüneyAfrika", "EUA": "UnitedTeamofGermany", } gold_fill = "# efcf6d" gold_line = "# c8a850" silver_fill = "# cccccc" silver_line = "# b0b0b1" Bronze_fill = "# c59e8a" Bronze_line = "# 98715d" fill_color = {"altın": gold_fill, "gümüş": silver_fill, "bronz": bronz_fill} line_color = {"altın": gold_line, "gümüş": silver_line, "bronz": Bronze_line} defselected_name (ad, madalya, yıl): returnnameifmedal == "altın" andyearinelse "" t0 = sprint.Time sprint = sprint.Country sprint = sprint.Abbrev.map (lambdaabbr: abbrev_to_country) sprint = sprint.Medal.map (lambdamedal: madal.lower ()) sprint = 100.0 / sprint.Time 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 (* değiştirgeler)) source = ColumnDataSource (sprint) xdr = Range1d (start = sprint.MetersBack.max () + 2, end = 0) #XXX: + 2ispoor-man'spadding (otherwisemisseslasttick) ydr = DataRange1d (range_padding = 4, range_padding_units = "mutlak") plot = şekil ( x_range = xdr, y_range = ydr, plot_width = 1000, plot_height = 600, toolbar_location = Yok, anahat_line_color = Yok, y_axis_type = Yok) plot.title.text = "UsainBoltvs.116yearsofOlympicsprinters" plot.title.text_font_size = "14pt" plot.xaxis.ticker = SingleIntervalTicker (aralık = 5, num_minor_ticks = 0) plot.xaxis.axis_line_color = Yok plot.xaxis.major_tick_line_color = Yok plot.xgrid.grid_line_dash = "kesikli" yticker = FixedTicker (ticks =) yaxis = LinearAxis (ticker = yticker, major_tick_in = -5, major_tick_out = 10) plot.add_layout (yaxis, "sağ") madalya = plot.circle (x = "MetersBack", y = "Yıl", yarıçap = dikte (değer = 5, birimler = "ekran"), fill_color = "MedalFill", line_color = "MedalLine", fill_alpha = 0.5, source = source, level = "overlay") plot.text (x = "MetersBack", y = "Yıl", x_offset = 10, y_offset = -5, text = "SeçiliAdı", text_align = "sol", text_baseline = "orta", text_font_size = "9pt", kaynak = kaynak) no_olympics_label = Etiket ( x = 7,5, y = 1942, text = "NoOlympicsin1940or1944", text_align = "center", text_baseline = "orta", text_font_size = "9pt", text_font_style = "italic", text_color = "gümüş") no_olympics = plot.add_layout (no_olympics_label) x = sprint.MetersBack.min () - 0.5 ok = Ok (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 (ok) metre_back = Etiket ( x = 5, x_offset = 10, y = 1900, text = "Metersbehind2012Bolt", text_align = "sol", text_baseline = "orta", text_font_size = "10pt", text_font_style = "kalın") plot.add_layout (meter_back) disclaimer = Etiket ( x = 0, y = 0, x_units = "ekran", y_units = "ekran", text = "Bu çizelge, I.O.C.'nin resmi olarak tanımadığı \" Aracı \ "Oyunların \" Aracı \ "OyunlarındaBirleşik Devletler ve Avustralya için araçlar içerir.", text_font_size = "8pt", text_color = "gümüş") plot.add_layout (sorumluluk reddi, "aşağıda") tooltips = "" " < div > < spanstyle = "font-size: 15px;" > @ İsim < / span > < spanstyle = "yazı tipi boyutu: 10px; renk: # 666;" > (@Abbrev) < / span > < / div > < div > < spanstyle = "font-size: 17px; font-weight: kalın;" > @Zaman {0.00} < / span > < spanstyle = "yazı tipi boyutu: 10px; renk: # 666;" > @Yıl < / span > < / div > < divstyle = "yazı tipi boyutu: 11px; renk: # 666;" > @ {MetersBack} {0.00} metre arkada < / div > "" " plot.add_tools (HoverTool (araç ipuçları = araç ipuçları, oluşturucular =)) open_url = CustomJS (args = dict (kaynak = kaynak), kod = "" " source.inspected._1d.indices.forEach (function (dizin) { varname = kaynak.data; varurl = " + encodeURIComponent (ad); window.open (url); }); "" ") plot.add_tools (TapTool (callback = open_url, renderers =, behaviour = "inspect")) göster (arsa)

İşlemin sonucu Şekil 7'de gösterilmektedir.

Şekil 7 Kod örneği Çalıştırma sonucu

Kod örneği , Olimpiyat Oyunlarının 116 yılında sprinter Bolt ve diğer sprinterlerin performanslarının karşılaştırmasını göstermektedir. Yukarıdaki kod, bu makalenin odak noktası olmayan veri ön işleme, özel çizim öznitelikleri, veri işaretleme, etkileşimli gösterim vb. Gibi daha karmaşık işlemler içerir; okuyucuların yalnızca hangi kodların hangi görselleştirme efektlerini elde edebileceğini bilmeleri gerekir.

Bu makale dağılım grafiklerinin çizim becerilerini 5 kod örneği üzerinden göstermektedir.Çizimin zorluğu giderek artmaktadır.Aynı zamanda ekranın etkisi gittikçe daha iyi hale gelmektedir. Okuyucular öğrenme sürecinde daha fazla düşünebilirler Bu örnekte hangi verilerin interaktif olarak gösterilmesi gerekiyor ve hangi görüntüleme yöntemi daha iyi.

Yazar Hakkında: Qu Xifeng, Python kıdemli mühendisi, Bokeh saha uygulayıcıları ve vaiz, Bokeh'in derinlemesine çalışması. Flask, MongoDB, Sklearn ve diğer teknolojilerde iyi ve zengin pratik deneyim. Birden çok sütunun yazarını (Python Çin topluluğu, Python programcıları, büyük veri analizi ve madencilik) biliyorum ve sütun 100.000'den fazla kullanıcı biriktirdi.

Bu makale, yayıncının yetkisi altında yayınlanan "Python Veri Görselleştirme: Bokeh Tabanlı Görsel Çizim" den bir alıntıdır.

Editör: Wen Jing

-Bitiş-

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

Huawei'in yeni derin öğrenme modeli DeepShift: Çarpma yerine kayma ve olumsuzlama
önceki
Ulusal Bilim ve Teknoloji Ödülleri açıklandı! Tsinghua Üniversitesi, tamamlanan ilk birim olarak ödül sayısında ülkede birinci sırada yer alıyor
Sonraki
0108 Morning Post Jiangsunun yoksulluğu azaltma oranı% 99.99'un üzerinde, sadece 17 kişi kaldı
Sabit bir elektrik ısı kaynağı akışı var ve 20 enerji projesi ay sonundan önce çalışmaya devam edecek
Seyirciler! CSI'da ilk doktora "bulut" savunması için uygun mu? mümkün!
ABD Hastalık Kontrol ve Önleme Merkezlerinin resmi web sitesinde, her eyaletteki tanıların sayısı evet ve hayır oldu
Dünyanın en iyi on bilimsel araştırma kurumunun 2019 Nature Index listesi açıklandı: Çin Bilimler Akademisi, Harvard'ı birinci olmak için geride bıraktı
Büyük veri! 2020 Bahar Şenliği Yolcu Akışı Tahmini ve Analizi burada
"Sarı fırtına" videosu psikolojik gölgeyi gösteriyor, içerik incelemeciler AI tarafından kurtarılabilir mi?
TMD2019: Baytlar radikal bir şekilde atıyor, Meituan sessizlikte bir servet kazanıyor, Didi adını almak için mücadele ediyor
Pekin Üniversitesi'nin 30 yaşındaki kadın doktora danışmanı, dünyada sadece üçü olan 2019 IEEE Gençlik Başarı Ödülü'nü kazandı
2019 WeChat veri raporu yeni yayınlandı
2020'de yapay zeka endüstrisi hakkında yedi tahmin
Mi kamera Google tarafından acilen devre dışı bırakıldı! Xiaomi yanıt veriyor: Zayıf ağda Çin'de etkilenmeyecek bir hata var
To Top