趙 帥,薛亞輝
(焦作大學(xué)人工智能學(xué)院 河南 焦作 454000)
在大數(shù)據(jù)時代,數(shù)據(jù)的規(guī)模和復(fù)雜程度不斷增加,“成千上萬”的抽象數(shù)據(jù)正在驅(qū)動著整個經(jīng)濟(jì)社會的發(fā)展,人們也越發(fā)關(guān)注數(shù)據(jù)背后的價值,如何從龐雜的數(shù)據(jù)中提取出有價值的信息,并對這些數(shù)據(jù)進(jìn)行有效的分析和呈現(xiàn),已經(jīng)成為一個重要的研究領(lǐng)域。數(shù)據(jù)可視化是一種重要的數(shù)據(jù)分析和表達(dá)方式,而Python作為目前最流行的編程語言之一,具有強大的數(shù)據(jù)處理能力和豐富的數(shù)據(jù)可視化分析庫[1],支持創(chuàng)建多種類型的可視化圖表,在數(shù)據(jù)挖掘、分析領(lǐng)域應(yīng)用較為廣泛,研究基于Python的數(shù)據(jù)可視化方法可以提高數(shù)據(jù)分析和可視化的效率,幫助人們更好地理解和處理數(shù)據(jù),具有重要的現(xiàn)實意義和研究價值。
數(shù)據(jù)可視化是將抽象的、不易被理解的數(shù)據(jù)通過直觀的、易于理解的圖表、圖像等形式進(jìn)行呈現(xiàn)的過程,以便更好地分析、提取和掌握數(shù)據(jù)信息,發(fā)現(xiàn)數(shù)據(jù)中的規(guī)律和趨勢,能夠幫助用戶更加深入地了解數(shù)據(jù)、更加關(guān)注數(shù)據(jù)背后隱藏的意義和價值[2],是大數(shù)據(jù)分析過程中必不可少的環(huán)節(jié)。
數(shù)據(jù)可視化技術(shù)的發(fā)展最早可以追溯到18世紀(jì)前后應(yīng)用的手工測量繪圖及統(tǒng)計學(xué)圖表[3],如柱狀圖、折線圖、餅圖等。從20世紀(jì)60年代起,伴隨著計算機技術(shù)的快速發(fā)展,數(shù)據(jù)可視化的范圍和形式也在不斷擴展、更新,計算機科學(xué)家們開始嘗試使用圖形和圖表的形式來展示數(shù)據(jù),誕生了許多數(shù)據(jù)可視化工具和軟件,如SPSS、Excel、Tableau、Power BI等。在大數(shù)據(jù)時代,數(shù)據(jù)量急劇增加,展示和分析大規(guī)模數(shù)據(jù)成為數(shù)據(jù)可視化領(lǐng)域研究的重要課題,數(shù)據(jù)可視化技術(shù)已經(jīng)逐漸從二維空間向三維空間、虛擬現(xiàn)實等方向發(fā)展[4]。
目前,數(shù)據(jù)可視化的應(yīng)用涵蓋了各個領(lǐng)域。在金融領(lǐng)域,股票價格走勢圖等金融數(shù)據(jù)可視化可以幫助分析師更直觀、全面地了解市場情況,提升股票投資的準(zhǔn)確性,制定更明智的投資策略。在醫(yī)療領(lǐng)域,醫(yī)療數(shù)據(jù)可視化可以將患者的體溫、血壓、心率等復(fù)雜的生命體征數(shù)據(jù)用圖形化的方式展示,幫助醫(yī)生做出準(zhǔn)確的診斷和治療方案。在教育領(lǐng)域,數(shù)據(jù)可視化可以用于學(xué)生成績分析、評價等方面,幫助教師更好地了解學(xué)生的學(xué)習(xí)情況,發(fā)現(xiàn)教學(xué)中存在的問題,制定更科學(xué)的教學(xué)計劃等。在市場營銷領(lǐng)域,企業(yè)可以使用數(shù)據(jù)可視化技術(shù)分析客戶行為數(shù)據(jù),如購買偏好、消費群體、店鋪商品瀏覽歷史等,從而更充分地了解客戶需求,制定精準(zhǔn)的市場營銷策略。此外,數(shù)據(jù)可視化還可以在科學(xué)研究、政府管理、智慧城市建設(shè)等諸多領(lǐng)域中發(fā)揮作用。
Python是面向?qū)ο蟮慕忉屝统绦蛟O(shè)計語言,具有語法簡潔、即寫即用、編碼效率高等特點,開發(fā)生態(tài)非常完善[4]。具備豐富的數(shù)據(jù)處理、分析和繪圖庫,如NumPy、Pandas等可以幫助用戶快速實現(xiàn)數(shù)據(jù)分析、處理操作。在繪圖庫方面,Matplotlib提供了多種圖形繪制方法,包括折線圖、散點圖、柱狀圖等;而Seaborn是在Matplotlib的基礎(chǔ)上進(jìn)行了更高級的API封裝,代碼編寫更加簡潔,可視化效果更加豐富;Pyecharts是Python結(jié)合百度Echarts開發(fā)的繪圖庫,對中文支持非常友好;Plotly和Bokeh等庫可以實現(xiàn)交互式可視化等。利用這些強大的Python繪圖庫能夠快速地繪制出各種類型的可視化圖形,并提供交互式的數(shù)據(jù)分析和可視化功能,能夠滿足不同層次和領(lǐng)域的數(shù)據(jù)可視化需求。
Matplotlib是Python中最流行的可視化工具之一,可用于生成2 D的圖形。它提供了廣泛的繪圖選項,包括折線圖、散點圖、柱狀圖、雷達(dá)圖等,并且能夠與NumPy等科學(xué)計算庫協(xié)同工作。例如,用Matplotlib通過以下代碼可以繪制一個簡單的正弦曲線折線圖,如圖1所示。
圖1 用Matplotlib庫繪制正弦曲線折線圖
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0, 10, 100)
y=np.sin(x)
plt.plot(x, y)
plt.show()
Seaborn在Matplotlib的基礎(chǔ)上提供了一系列高層次的API接口,使得數(shù)據(jù)可視化圖形變得更加簡單和美觀。Seaborn適用于生成統(tǒng)計圖表、熱圖、分布圖等。例如,用Seaborn通過以下代碼可以繪制一個簡單的數(shù)字熱力圖,如圖2所示。
import seaborn as sns
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.rand(10, 10))
sns.heatmap(df,annot=True,cmap="BuGn")
plt.show()
Plotly是一個交互式Python數(shù)據(jù)可視化工具,它提供了豐富的可視化選項和交互式界面,如圖片的高亮顯示、縮放、旋轉(zhuǎn)等;Plotly還提供了Python、R、Matlab等多種編程語言的接口,可以根據(jù)具體需求選擇合適的微編程語言。例如,用Plotly通過以下代碼可以繪制一個簡單的散點圖,如圖3所示。
圖3 用Plotly庫繪制散點圖
import plotly.graph_objs as go
import numpy as np
x=np.random.randn(500)
y=np.random.randn(500)
trace=go.Scatter(x=x,y=y,mode="markers")
fig=go.Figure(trace)
fig.show()
Pyecharts是Python與百度Echarts相結(jié)合的一個可視化庫,提供了簡單易用的API接口,可以快速創(chuàng)建各種類型的圖表;還提供了多種可定制的功能和實例代碼,包括圖表主題、顏色、字體、標(biāo)記等,便于快速理解和掌握庫的使用方法,實現(xiàn)對圖表的深層次設(shè)計。例如,用Pyecharts通過以下代碼可以繪制一個簡單的餅圖,如圖4所示。
圖4 用Pyecharts庫繪制餅圖
frompyechartsimportPie
pie=Pie()
pie.add(name='飲品銷量占比',attr=['飲料','牛奶','咖啡','奶茶'],value=[15,25,
34,7],is_label_show=True)
pie.render()
數(shù)據(jù)可視化是將數(shù)據(jù)以圖形化的形式呈現(xiàn),使得數(shù)據(jù)更加易于理解和分析的過程。為了實現(xiàn)這個目標(biāo),數(shù)據(jù)可視化利用各種圖表、圖形和其他視覺元素,如顏色、形狀等來展示數(shù)據(jù)的不同方面和關(guān)系。常用的數(shù)據(jù)可視化圖形方法見表1。
表1 數(shù)據(jù)可視化可供選擇的圖形方法表
除了上述方法之外,還有許多其他數(shù)據(jù)可視化方法,如詞云圖、雷達(dá)圖、水平條形圖、氣泡圖等,每種圖形都有其獨特的作用和表達(dá)方式,選擇合適的方法取決于具體的數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)和研究問題的需要等。
數(shù)據(jù)可視化不僅僅是一種呈現(xiàn)數(shù)據(jù)的手段,也是一種藝術(shù)表達(dá)方式,需要具有美感、平衡感和一定的視覺沖擊效果,以吸引讀者的注意力,從而更有效地傳達(dá)信息[5]??梢暬脑O(shè)計需要遵循如下基本的原則。
(1)明確目標(biāo)和受眾。在進(jìn)行數(shù)據(jù)可視化之前,需要明確目標(biāo)和受眾,圖表的設(shè)計和選擇應(yīng)該根據(jù)受眾的需求和理解水平進(jìn)行選擇。例如,對于專業(yè)人士,可以使用更復(fù)雜的圖表類型;而對于普通讀者,則需要使用簡單、直觀的圖表類型。
(2)選擇合適的圖表類型。在選擇圖表類型時,要根據(jù)數(shù)據(jù)的類型、分布和關(guān)系等因素來綜合考量。例如,對于時間序列數(shù)據(jù),可以使用折線圖;對于分類數(shù)據(jù),可以使用條形圖或餅圖;對于關(guān)系數(shù)據(jù),可以使用散點圖或熱力圖。
(3)注重簡潔、重點突出??梢暬瘓D表應(yīng)盡可能簡潔,只需要包含必要的信息,不應(yīng)該過度裝飾或添加不必要的元素,要能夠清晰明了地展示數(shù)據(jù)結(jié)構(gòu)和標(biāo)簽,說明數(shù)據(jù)的含義和單位等,可以使用顏色、形狀、線型等方式來突出重點信息,以便讀者正確、快速地理解數(shù)據(jù)。
(4)數(shù)據(jù)準(zhǔn)確。可視化圖表應(yīng)該反映準(zhǔn)確的數(shù)據(jù),在制作圖表前,要對數(shù)據(jù)可靠性進(jìn)行甄別、處理,以獲取準(zhǔn)確的統(tǒng)計運算結(jié)果、正確的比例、兼容的數(shù)據(jù)類型等;另外可以提供合適的圖片背景及上下文信息,如圖表的標(biāo)題、標(biāo)簽和注釋等,以供讀者理解數(shù)據(jù)。
(5)進(jìn)行交互式可視化。對于復(fù)雜的數(shù)據(jù)可以使用交互式可視化,讓讀者利用交互功能自由地探索數(shù)據(jù)。例如,使用Plotly和Bokeh等工具創(chuàng)建的交互式圖表,可以在圖表中添加滑塊、下拉菜單、鼠標(biāo)懸停提示等交互元素,讓讀者能夠與數(shù)據(jù)進(jìn)行更深入的互動。
(6)參考常見的可視化風(fēng)格??梢詤⒖家恍┏R姷目梢暬L(fēng)格和規(guī)范,例如:Edward Tufte的數(shù)據(jù)可視化原則,包括避免使用不必要的圖形元素、確保圖形元素的比例和大小與數(shù)據(jù)的比例和大小相匹配、保持圖形元素的樣式和排版一致等;還有Ivanovitch Silva的數(shù)據(jù)可視化模式和數(shù)據(jù)驅(qū)動設(shè)計模式等,幫助人們設(shè)計出更有效的數(shù)據(jù)可視化圖表。
數(shù)據(jù)可視化技術(shù)經(jīng)歷了從靜態(tài)圖表到交互式可視化、再到混合可視化的發(fā)展過程,基于Python的數(shù)據(jù)可視化技術(shù)具有開源免費、可擴展性強、可視化庫豐富等優(yōu)點,有利于數(shù)據(jù)的挖掘、清洗、轉(zhuǎn)換和可視化表達(dá),可以用多樣的可視化庫繪制出精美、好看的圖表,滿足各類不同的數(shù)據(jù)可視化需求。但是Python數(shù)據(jù)可視化技術(shù)也存在部分缺點,例如:Python是一種解釋型語言,相對于C++、Java等編譯型語言,其運行效率較低,在處理大規(guī)模的數(shù)據(jù)時可能會面臨性能瓶頸問題;Python數(shù)據(jù)可視化庫與其他第三方庫之間的依賴關(guān)系較強,在使用過程中可能需要花費一些精力解決庫之間的依賴性問題。另外,雖然Python簡單易學(xué),但數(shù)據(jù)可視化還需要具備數(shù)據(jù)分析、統(tǒng)計學(xué)等方面的知識,如果缺乏相關(guān)的知識背景也可能對可視化效果產(chǎn)生一定的影響,基于Python的數(shù)據(jù)可視化技術(shù)還需要繼續(xù)深入研究和探索,不斷提高其性能和可靠性。
在大數(shù)據(jù)背景下,基于Python的數(shù)據(jù)可視化研究還有很大的發(fā)展空間,如結(jié)合深度學(xué)習(xí)技術(shù)的可視化方法研究,通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練和分類等功能,實現(xiàn)更加高效、準(zhǔn)確的數(shù)據(jù)可視化;還可以利用自然語言處理技術(shù),將數(shù)據(jù)轉(zhuǎn)化為可視化故事、動畫等,提供更加生動的數(shù)據(jù)表現(xiàn)形式;另外,更多維度的數(shù)據(jù)可視化技術(shù)研究可以讓人們更好地理解高維度數(shù)據(jù)間的結(jié)構(gòu)和關(guān)系等[6];還有Python可視化技術(shù)的跨平臺和多設(shè)備應(yīng)用研究以及更高效的算法和技術(shù)支持方面的研究等。未來基于Python的數(shù)據(jù)可視化研究、發(fā)展與應(yīng)用將進(jìn)一步滿足大數(shù)據(jù)時代人們?nèi)找嬖鲩L的數(shù)據(jù)呈現(xiàn)需求,更好地發(fā)揮數(shù)據(jù)的價值內(nèi)涵,為經(jīng)濟(jì)社會的發(fā)展注入更多的活力。