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ı.
p.scatter (x, y, ** kwargs) parametre açıklaması.
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.