【轉載】@Python 程式設計師,如何實現狂拽酷炫的 3D 程式設計技術?
今天給大家介紹一位美麗的姑娘。她的名字叫Pyecharts,打從我第一眼見到她後,就深深地被她迷住,並且愛上了她。
簡單說一下她的來歷:Pyecharts是一款強大的視覺化工具。百度開發了一款基於JS強大的視覺化庫Echarts,可我們在繪圖時,通常並不使用前端的技術來整理資料,而轉換資料結構又非常麻煩。Pyecharts發揮了python膠水語言的特性,可以很好地幫助我們做資料視覺化。
本文圍繞Pyecharts的使用、結果呈現和優缺點,分為以下四個部分:
從2D到3D,不一樣的效果
任何視覺化庫的應用都是從一張簡單的柱狀圖開始。首先匯入一份空氣質量的資料。研究下5個城市的AQI指數。
#基本柱狀圖繪製
data_1 = pd.read_excel('./20180630空氣質量指數.xlsx',sheetname=0)#讀取資料
data_1.head()
資料是這樣的:
Pyecharts對於資料結構的要求非常統一簡單。把資料轉換成列表總沒錯。設定好圖表的標題、副標題、顏色等一些引數,就可以直接出圖了。
發現了pyecharts一大特性麼?圖都是可互動的!
簡單的柱狀圖顯然是不能滿足你們的,我們繼續。接下來匯入一份省會城市快餐店數量的資料。
同樣把資料放入列表中。設定圖表的一些引數,如長寬、背景顏色等,可以做縱向的堆積柱狀圖,可以把直角座標改為極座標,甚至做極座標分類堆疊柱狀圖!大家可以看看不同的圖表下,同樣的資料呈現什麼效果:
留個小思考題:大家可以嘗試用PPT製作上圖。
平面的圖,我們看了好幾個了,來個3D的吧。這裡匯入一份某公司每日銷量資料。資料結構如下,縱座標為一年的52周,橫座標為一週的7天。
這回資料結構調整略複雜,我們要給每一條資料確認空間中的位置,格式如下圖:
具體轉換方式我們看下程式碼,這裡要設定的東西比較多,具體效果大家可以自己試著調整下里面的引數。
x_axis = data_3['week'].tolist() data_3['week'] = data_3['week'].str.replace('week','').map(int)-1 data_3 = data_3.set_index('week') y_axis = data_3.columns.tolist() data_3.columns = range(0,7) data_3 = data_3.stack().reset_index() data_3.columns = ['week','day','amount'] data_3.head() style = Style( title_color="#A52A2A", title_pos = "center", width=900, height=1100, background_color="#ABABAB" ) style_3d = style.add( is_visualmap=True, visual_range=[0,120], visual_range_color=['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'], grid3d_width=200, grid3d_depth=80, xaxis_label_textcolor='#fff', is_grid3d_rotate=True, legend_pos='right' ) bar3d = Bar3D('全年產量情況',**style.init_style) bar3d.add('每日產量',x_axis,y_axis,data_3.values.tolist(),**style_3d) bar3d.render('./參考案例HTML/全年產量情況3D柱狀圖.html') bar3d
見證奇蹟的時刻到了!
好,接著我又有一個小問題,如果我把這一根根高聳的柱子壓扁會是什麼結果呢?
這不就是我們非常熟悉的熱力圖嗎?
如果我們還想再深入的研究下銷量情況,怎麼辦呢?我取了其中第一週的資料,來畫個玫瑰圖:
或者漏斗圖:
過癮吧?!這裡給大家展示的是Pyecharts能展示的不同型別的圖表,實際應用時可以按需選擇。
玩轉Pyecharts:層出不窮的花樣!
我先製作了一個儀表盤圖用來統計我每天加班的概率:
#儀表盤
from pyecharts import Gauge
gauge = Gauge('今日加班概率')
gauge.add('', "可能性", 99.99, angle_range=[225, -45],
scale_range=[0, 100], is_legend_show=False)
gauge.render('./參考案例HTML/今日加班概率儀表盤.html')
gauge
然後圖是這樣的,大家可以清晰看到,那醒目的四個9:
下面是一個水球圖,這個圖蠻有意思的,我們可以自己繪製圖形的形狀,不過你得先明白一個叫SVG的東東。有興趣可以檢視官網的案例。
資料可以畫成圖,文字當然也可以:
#畫畫
from pyecharts import Scatter
scatter = Scatter('學霸是畫出來的')
v1, v2 = scatter.draw('./pic.png')
scatter.add('學霸印章', v1, v2, is_random=True)
scatter.render('./參考案例HTML/學霸是畫出來的散點圖.html')
匯入圖片,看清楚了,我給你畫張散點圖!
看到不,是不是很簡單,想怎麼畫就怎麼畫!(小夥伴們表示很滿意,都覺得我畫出了他們的心聲)
圖表會說話:用圖表體現趨勢變化
先匯入一份生產成本核算的資料,資料為每個月原料價格和產品造價。
可以玩玩組合圖表:
如果有熱愛炒股的小夥伴,還可以畫K線圖:
from pyecharts import Kline
day = data_k['日期'].tolist()
v = data_k[['開盤價','收盤價','最低價','最高價']].values.tolist()
kline = Kline('上證指數K線圖', width=1900, height=800)
kline.add('日K',day, v,
mark_point=['max'], is_datazoom_show=True)
kline.render('./參考案例HTML/上證指數K線圖.html')
kline
*K線圖需要四個引數,開盤價,收盤價,最低價,最高價
圖表會說話:用圖表體現資料分佈關係
還是那份成本核算的資料,我們來研究下原料成本和生產價格之間的關係,先畫個散點圖:
似乎是線性關係,對圖表加工一下看看。
散點圖的進階版——漣漪散點圖
其實這裡的圖案有好多種,大家可以一個個去試試:'rect', 'roundRect', 'triangle', 'diamond','pin', 'arrow'。
有小夥伴會問,散點圖能不能展現空間分佈呢?
能!用一份上海餐飲資料來看:
出圖!這裡點的顏色越深代表人均價格越貴。
分析運動員的身體素質強弱:
採集了8個運動員的身材指數,畫個雷達圖:
雷達圖用的是極座標系,而我們畫的一些常規圖用的是直角座標系,那麼,是不是還有其他座標系呢?
平行座標系。以空氣質量資料為例,再新增一個自定義指示器,我們可以得到這個:
可以同時顯示城市及其空氣質量情況,方便吧!
多樣資料視覺化:文字與地圖的展示
分析某篇文章中的詞頻,可以畫詞雲。看這裡:
from pyecharts import WordCloud
name = data_10['關鍵詞'].tolist()
value = data_10['出現頻率'].tolist()
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud.render('./參考案例HTML/關鍵詞統計詞雲圖.html')
wordcloud
幾行程式碼就可以搞定。
地圖資料能做的就更多了,比如地理軌跡圖:
引用一份中國資本流動的資料,分析北上廣深的投資流向:
就可以分析北上廣深這四個城市資本流出的情況啦。
結果呈現:你的PPT可以亮起來!
Pyecharts的圖表是可以在Jupyter Notebook中直接顯示的,也可以通過render方法渲染出HTML在瀏覽器中顯示,還可以插入PPT使用:
圖表也可以嵌入在web框架中,比如Django、Flask。Pyecharts的官網就是這樣做出來的。
我為什麼選擇Pyecharts?
python有很多繪圖的庫,諸如matplotlib、seaborn、bokeh等等,但是如果讓我只選擇其中一款,pyecharts會是我的不二選擇。它有友好的中文文件和十分簡潔的操作方法,為我們的資料分析工作提供了許多便利,是值得擁有的!
當然,也不是沒有缺點,pyecharts是一款偏結果表達的視覺化庫,在統計分析視覺化上並不出彩。其次,這是一款很年輕的庫,很多功能仍在開發中,但它也給了我們無限期待,相信不久的將來,它將變得越來越強大!
作者:倪家禹,城市資料團特約撰稿人,資料分析師(Python)微專業學員,喜歡用資料探勘生活中的小祕密。對資料研究有著敏銳的洞察力,善於把複雜的問題簡單化,簡單的問題流程化。希望大家通過資料感受生活的魅力。
宣告:本文為作者投稿,版權歸其個人所有。
2018 中國大資料技術大會
◆
BDTC 2018