版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)可視化原理及應(yīng)用
第7章ECharts常用圖表繪制7.1ECharts
繪制柱狀圖和條形圖7.2ECharts
繪制餅圖7.3ECharts
繪制散點(diǎn)圖和折線圖7.4ECharts繪制熱力圖7.5ECharts繪制漏斗圖7.6ECharts繪制雷達(dá)圖7.7ECharts繪制樹狀圖和矩形樹圖7.8ECharts繪制繪制儀表盤7.9ECharts繪制關(guān)系圖7.10ECharts繪制盒須圖和K線圖7.11ECharts繪制詞云圖ECharts圖表ECharts提供了常規(guī)的柱狀圖、折線圖、散點(diǎn)圖、餅圖、雷達(dá)圖,用于統(tǒng)計(jì)的盒形圖,用于地理數(shù)據(jù)可視化的地圖、熱力圖,用于關(guān)系數(shù)據(jù)可視化的關(guān)系圖、樹狀圖,并且支持圖與圖之間的混搭。本章學(xué)習(xí)ECharts常用圖表可視化制作。7.1ECharts繪制柱狀圖和條形圖柱狀圖作為最常見的可視化圖表,用于展示一些比較基礎(chǔ)的數(shù)據(jù),其中分為基本柱狀圖、堆疊柱狀圖。在ECharts中顯示柱狀圖類型的代碼如下:
type:'bar’,前面已經(jīng)學(xué)習(xí)過標(biāo)準(zhǔn)柱狀圖繪制,下面學(xué)習(xí)堆疊柱狀圖和條形圖。7.1.1ECharts繪制堆疊柱狀圖堆疊柱狀圖指的是同一個(gè)柱形上,可能有多個(gè)細(xì)分子類的數(shù)據(jù)。例如把1月和2月銷量數(shù)據(jù)堆疊在一起?!纠?-1】制作ECharts堆疊柱狀圖。圖7-1堆疊柱狀圖7.1.2ECharts繪制條形圖條形圖可以認(rèn)為是橫向顯示的柱狀圖。柱狀圖的橫向與縱向的設(shè)置與x軸和y軸的設(shè)置有關(guān)。將柱狀圖從縱向改成橫向顯示,只需要交換xAxis和yAxis中的設(shè)置即可?!纠?-2】制作ECharts條形圖,對(duì)例7-1代碼如下修改。
yAxis:{data:["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]},xAxis:{},7.2ECharts繪制餅圖餅圖主要是通過扇形的弧度表現(xiàn)不同類目的數(shù)據(jù)在總和中的占比,它的數(shù)據(jù)格式比柱狀圖更簡(jiǎn)單,只有一維的數(shù)值,不需要給類目。因?yàn)椴辉谥苯亲鴺?biāo)系上,所以也不需要xAxis,yAxis。7.2.1ECharts繪制標(biāo)準(zhǔn)餅圖在ECharts中顯示餅圖類型的代碼如下:type:'pie',繪制餅圖最主要的參數(shù)有以下幾個(gè)。(1)center表示圓心坐標(biāo),它可以是像素點(diǎn)表示的絕對(duì)值,也可以是數(shù)組類型。默認(rèn)值為['50%','50%']。百分比計(jì)算時(shí)按照公式min(width,height)*50%進(jìn)行計(jì)算,其中的width和height分別表示div中所設(shè)置的寬度和高度。(2)radius表示半徑,它可以是像素點(diǎn)表示的絕對(duì)值,也可以是數(shù)組類型。默認(rèn)值為[0,'75%'],支持絕對(duì)值(px)和百分比。百分比計(jì)算時(shí)按照公式min(width,height)/2*75%進(jìn)行計(jì)算,其中的width和height分別表示div中所設(shè)置的寬度和高度。如果用形如[內(nèi)半徑,外半徑]數(shù)組表示的話,那么可以繪制一個(gè)環(huán)形圖;如果內(nèi)半徑為0,則可繪制一個(gè)標(biāo)準(zhǔn)的餅圖。(3)clockWise表示餅圖中各個(gè)數(shù)據(jù)項(xiàng)(item)是否按照順時(shí)針順序顯示,它是一個(gè)布爾類型,取值只有false和true。默認(rèn)值為true。7.2.1ECharts繪制標(biāo)準(zhǔn)餅圖在ECharts中顯示餅圖類型的代碼如下:
type:'pie',【例7-3】制作推廣途徑份額的ECharts餅圖。7.2.2ECharts繪制南丁格爾圖可以通過設(shè)置參數(shù)roseType:'angle'把餅圖顯示成如圖7-4的南丁格爾圖。
series:[{name:'訪問來源',type:'pie',radius:'55%',roseType:'angle',data:[{value:235,name:'視頻廣告'},{value:274,name:'聯(lián)盟廣告'},{value:310,name:'郵件營銷'},{value:335,name:'直接訪問'},{value:400,name:'搜索引擎'}]}]陰影的配置。itemStyle參數(shù)可以設(shè)置諸如陰影、透明度、顏色、邊框顏色、邊框?qū)挾鹊取?.2.3ECharts繪制環(huán)形圖環(huán)形圖是在圓環(huán)中顯示數(shù)據(jù),其中每個(gè)圓環(huán)代表一個(gè)數(shù)據(jù)項(xiàng)(item),用于對(duì)比分類數(shù)據(jù)的數(shù)值大小。圓環(huán)圖跟標(biāo)準(zhǔn)餅圖同屬于餅圖這一種圖表大類,只不過更加美觀,也更有吸引力。在繪制環(huán)形圖時(shí),適合利用一個(gè)分類數(shù)據(jù)字段或連續(xù)數(shù)據(jù)字段,但數(shù)據(jù)最好不超過9條。在ECharts中創(chuàng)建圓環(huán)圖非常簡(jiǎn)單,只需要在例73中修改一個(gè)語句,即將語句“radius:'55%',”修改為“radius:['45%','75%'],”,即可由一個(gè)標(biāo)準(zhǔn)餅圖變?yōu)橐粋€(gè)環(huán)形圖,修改后的半徑是有兩個(gè)數(shù)值的數(shù)組,分別代表圓環(huán)的內(nèi)、外半徑。修改后的代碼運(yùn)行結(jié)果如圖7-6所示。7.3ECharts繪制散點(diǎn)圖和折線圖7.3.1ECharts繪制散點(diǎn)圖散點(diǎn)圖是由一些散亂的點(diǎn)組成的圖表。因?yàn)槠渲悬c(diǎn)位置是由其x值和y值確定的,所以也稱為XY散點(diǎn)圖。散點(diǎn)圖又稱散點(diǎn)分布圖,是以一個(gè)變量為橫坐標(biāo),另一變量為縱坐標(biāo),利用散點(diǎn)(坐標(biāo)點(diǎn))的分布形態(tài)反映變量統(tǒng)計(jì)關(guān)系的一種圖形,因此,需要為每個(gè)散點(diǎn)至少提供兩個(gè)數(shù)值。在ECharts中顯示散點(diǎn)圖類型的代碼如下:
type:'scatter'【例7-4】制作ECharts散點(diǎn)圖。7.3ECharts繪制散點(diǎn)圖和折線圖數(shù)據(jù)的相關(guān)關(guān)系主要分為正相關(guān)(兩個(gè)變量值同時(shí)增長(zhǎng))、負(fù)相關(guān)(一個(gè)變量值增加,另一個(gè)變量值下降)、不相關(guān)、線性相關(guān)、指數(shù)相關(guān)、U形相關(guān)等,表現(xiàn)在散點(diǎn)圖上的大致分布如圖7-8所示。那些離點(diǎn)集群較遠(yuǎn)的點(diǎn)我們稱其為離群點(diǎn)或者異常點(diǎn)。圖7-8數(shù)據(jù)的相關(guān)關(guān)系7.3ECharts繪制散點(diǎn)圖和折線圖7.3.2ECharts繪制折線圖折線圖是一種較為簡(jiǎn)單的圖形,通常用于顯示隨時(shí)間變化而變化的連續(xù)數(shù)據(jù)。在折線圖中,類別數(shù)據(jù)沿水平軸均勻分布,所有值數(shù)據(jù)沿垂直軸均勻分布。在ECharts中顯折線圖類型的代碼如下:
type:'line'【例7-5】制作ECharts折線圖。7.4ECharts繪制熱力圖熱力圖是一種密度圖,使用不同顏色和不同顏色深淺程度來表示數(shù)據(jù)量的區(qū)別。在ECharts中顯示熱力圖類型的代碼如下:
type:'heatmap'【例7-6】制作一周每天各時(shí)間段數(shù)據(jù)的ECharts熱力圖。這里以笛卡爾坐標(biāo)系上的熱力圖為例。7.5ECharts繪制漏斗圖斗圖(Funnel)或金字塔是一個(gè)倒(正)三角形的條形圖,適用于業(yè)務(wù)流程比較規(guī)范、周期較長(zhǎng)、環(huán)節(jié)較多的流程分析。漏斗圖又稱倒三角圖,漏斗圖將數(shù)據(jù)呈現(xiàn)為幾個(gè)階段,每個(gè)階段的數(shù)據(jù)都是整體的一部分;從一個(gè)階段到另一個(gè)階段,數(shù)據(jù)占比自上而下下降。與餅圖一樣,漏斗圖呈現(xiàn)的也不是具體的數(shù)據(jù)。此外,漏斗圖還不需要使用任何數(shù)據(jù)軸。在ECharts中顯示雷達(dá)圖類型的代碼如下:
type:'funnel'【例7-7】以表7-1所示用戶從瀏覽選購到下單付款的轉(zhuǎn)化情況,制作一個(gè)典型的漏斗圖。7.5ECharts繪制漏斗圖所處環(huán)節(jié)當(dāng)前人數(shù)整體轉(zhuǎn)化率瀏覽選購1000100.0%添加購物車60060.0%購物車結(jié)算42042.0%核對(duì)訂單信息2525.0%提交訂單909.0%選擇支付方式404.0%完成支付252.5%7.5ECharts繪制漏斗圖把圖表配置項(xiàng)中的series中的sort的取值由'descending'改為'ascending'時(shí),就由漏斗圖變?yōu)榻鹱炙?/p>
series:[//配置數(shù)據(jù)系列
{name:'漏斗圖',type:'funnel',left:'3%',sort:'ascending',//金字塔:'ascending';漏斗圖:'descending'7.6ECharts繪制雷達(dá)圖雷達(dá)圖(Radar)又稱戴布拉圖、蜘蛛網(wǎng)圖,適用于顯示3個(gè)或更多維度的變量,如學(xué)生的各科成績(jī)分析。雷達(dá)圖將多個(gè)維度的數(shù)據(jù)映射到坐標(biāo)軸上,這些坐標(biāo)軸起始于同一個(gè)圓心點(diǎn),通常結(jié)束于圓周邊緣,將同一組的點(diǎn)使用線連接起來就成了雷達(dá)圖。在坐標(biāo)軸設(shè)置恰當(dāng)?shù)那闆r下,雷達(dá)圖所圍面積能表現(xiàn)出一些信息量。雷達(dá)圖把縱向和橫向的分析比較方法結(jié)合起來,可以展示出數(shù)據(jù)集中各個(gè)變量的權(quán)重高低情況,適用于展示性能數(shù)據(jù)。雷達(dá)圖不僅對(duì)于查看哪些變量具有相似的值、變量之間是否有異常值有效,而且可用于查看哪些變量在數(shù)據(jù)集內(nèi)得分較高或較低。此外,雷達(dá)圖也常用于排名、評(píng)估、評(píng)論等數(shù)據(jù)的展示。7.6ECharts繪制雷達(dá)圖圖7-15就是B站(bilibili嗶哩嗶哩網(wǎng)站)對(duì)某作者近一周表現(xiàn)總結(jié)。從4個(gè)維度(投稿量、播放量、點(diǎn)贊數(shù)、新增關(guān)注人數(shù))考查與同類UP主的區(qū)別,便于某作者尋找不足,提高投稿質(zhì)量。在ECharts中顯示雷達(dá)圖類型的代碼如下:type:'heatmap'7.6ECharts繪制雷達(dá)圖【例7-8】利用各教育階段男女人數(shù)統(tǒng)計(jì)數(shù)據(jù)查看男女學(xué)生在各教育階段的人數(shù)高低情況,如圖7-16所示。7.7ECharts繪制樹狀圖和矩形樹圖7.7.1ECharts繪制樹狀圖樹狀圖(Tree)通常用于表示層級(jí)、上下級(jí)、包含與被包含關(guān)系。ECharts提供從左到右的樹狀圖、多棵樹、從下到上的樹狀圖、從右到左的樹狀圖、折線樹狀圖、徑向樹狀圖和從上到下的樹狀圖,如圖7-17所示。7.7ECharts繪制樹狀圖和矩形樹圖【例7-9】利用省份及城市信息使用ECharts繪制樹狀圖,如圖7-17所示。7.7ECharts繪制樹狀圖和矩形樹圖樹形方向分為從左到右,從右到左,從上到下,從下到上。取值分別為'LR','RL','TB','BT'。注意的是只有在layout=‘orthogonal’的時(shí)候orient才生效例如:orient:'RL',//樹形方向,從右到左7.7ECharts繪制樹狀圖和矩形樹圖樹形布局分為orthogonal水平垂直方向和radial徑向布局,水平垂直大家都知道,對(duì)于radial徑向布局可能不是很清楚,radial徑向布局是指以根節(jié)點(diǎn)為圓心,每一層節(jié)點(diǎn)為環(huán),一層層向外。layout:'radial',//樹圖布局,orthogonal水平垂直方向,radial徑向布局在series系列中指定layout:'radial'后,運(yùn)行結(jié)果如圖7-19所示。7.7ECharts繪制樹狀圖和矩形樹圖7.7.2ECharts繪制矩形樹圖矩形樹圖(Treemap)也是層級(jí)布局的擴(kuò)展,根據(jù)數(shù)據(jù)將區(qū)域劃分為矩形的集合。矩形的大小和顏色,都是數(shù)據(jù)的反映。如圖7-20所示。7.7ECharts繪制樹狀圖和矩形樹圖在ECharts中顯示矩陣樹圖類型的代碼如下:
type:'treemap'【例7-10】現(xiàn)以浙江、廣西、江蘇三省份2022年的GDP作為數(shù)據(jù),以GDP大小作為節(jié)點(diǎn)的權(quán)重將其制作成矩陣樹圖。效果如圖圖所示。7.8ECharts繪制繪制儀表盤儀表盤(Gauge)也被稱為撥號(hào)圖表或速度表圖,用于顯示類似于速度計(jì)上的讀數(shù)的數(shù)據(jù),是一種擬物化的展示形式。儀表盤是常用的商業(yè)智能(BI)類的圖表之一,可以輕松展示用戶的數(shù)據(jù),并能清晰地看出某個(gè)指標(biāo)值所在的范圍。為了更直觀地查看項(xiàng)目的實(shí)際完成率數(shù)據(jù),以及汽車的速度、發(fā)動(dòng)機(jī)的轉(zhuǎn)速、油表和水表的現(xiàn)狀,需要在ECharts中繪制單儀表盤和多儀表盤進(jìn)行展示。7.8ECharts繪制繪制儀表盤在ECharts中顯示矩陣樹圖類型的代碼如下:
type:'gauge'儀表盤的配置項(xiàng)主要有儀表盤刻度最大最小值、儀表盤起始角度、儀表盤結(jié)束角度、儀表盤刻度的分割段數(shù)。constoption={tooltip:{//鼠標(biāo)懸浮的提示
formatter:':{c}'},series:[{type:'gauge',min:0,//最小值
max:100,//最大值
startAngle:200,//儀表盤起始角度。正右手側(cè)為0度,正上方為90度
endAngle:-20,//儀表盤結(jié)束角度
splitNumber:5,//儀表盤刻度的分割段數(shù)7.8ECharts繪制繪制儀表盤儀表盤的配置項(xiàng)還有是否顯示進(jìn)度條、是否顯示指針、是否顯示儀表盤軸線、是否顯示刻度、是否顯示分隔線、是否顯示標(biāo)簽,是否顯示詳情等7.9ECharts繪制關(guān)系圖關(guān)系圖(Graph)從字面上可以看出,為關(guān)系的圖形。既然為關(guān)系,那么就需要有點(diǎn)以及關(guān)系,用來表示點(diǎn)與點(diǎn)之間的聯(lián)系。所以關(guān)系圖需要兩個(gè)必要的元素:節(jié)點(diǎn)和關(guān)系,其中關(guān)系需要包含有聯(lián)系的節(jié)點(diǎn)以及節(jié)點(diǎn)聯(lián)系說明。圖7-26是ECharts繪制的關(guān)系圖。7.9ECharts繪制關(guān)系圖繪制關(guān)系圖,首先需要將數(shù)據(jù)設(shè)計(jì)出來。(1)節(jié)點(diǎn)數(shù)據(jù)nodes:[{name:'節(jié)點(diǎn)名',id:'節(jié)點(diǎn)id'}](2)關(guān)系數(shù)據(jù)links:[{relation:{source:'關(guān)系的起點(diǎn)節(jié)點(diǎn)',target:'關(guān)系的目標(biāo)節(jié)點(diǎn)'relationname:'關(guān)系名稱',},}]7.9ECharts繪制關(guān)系圖在ECharts中顯示關(guān)系圖類型的代碼如下:
type:'graph'同時(shí)可以設(shè)置layout布局。layout布局主要有none和force兩種。
layout:'force',force布局就是力導(dǎo)向圖(Force-DirectedGraph)。力導(dǎo)向圖在二維或三維空間里配置節(jié)點(diǎn)(或者頂點(diǎn)),每一個(gè)節(jié)點(diǎn)都受到力的作用而運(yùn)動(dòng)。節(jié)點(diǎn)之間用線連接,稱為連線(或者邊)。各連線的長(zhǎng)度幾乎相等,且盡可能不相交。生活中常見的人物關(guān)系和力導(dǎo)向圖結(jié)合起來(如圖7-27),是比較有趣的。下面制作紅樓夢(mèng)人物關(guān)系力導(dǎo)向圖?!纠?-13】繪制紅樓夢(mèng)人物關(guān)系力導(dǎo)向圖7.10ECharts繪制盒須圖和K線圖7.10.1ECharts繪制盒須圖盒須圖(Boxplot)又稱為盒式圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計(jì)圖。它能顯示出一組數(shù)據(jù)的最大值、最小值、中位數(shù)、下四分位數(shù)及上四分位數(shù)。因形狀如箱子而得名。盒須圖的繪制方法是:先找出一組數(shù)據(jù)的最大值、最小值、中位數(shù)和兩個(gè)四分位數(shù);然后,連接兩個(gè)四分位數(shù)畫出箱體,再將最大值和最小值與箱體相連接,中位數(shù)在箱體中間。ECharts提供的盒須圖如圖7-28所示。ECharts它也支持多個(gè)series在同一個(gè)坐標(biāo)系中。7.10ECharts繪制盒須圖和K線圖在ECharts中顯示盒須圖類型的代碼如下:
type:'boxplot'//系列類型為boxplot以表示箱形圖盒須圖布局方式layout屬性,不設(shè)置時(shí)默認(rèn)取值為null??蛇x值如下:
layout:'horizontal'//水平排布各個(gè)boxlayout:'vertical'//豎直排布各個(gè)boxlayout屬性默認(rèn)值時(shí)會(huì)根據(jù)當(dāng)前坐標(biāo)系狀況決定布局方式:如果category軸為橫軸,則水平排布;否則豎直排布;如果沒有category軸則水平排布。7.10ECharts繪制盒須圖和K線圖盒須圖配置data,例如:data:[[5,7,15,35,39,40,41,42,45,47,48],....]最終每個(gè)數(shù)組數(shù)據(jù)會(huì)渲染成這五個(gè)值[min,Q1,median(Q2),Q3,max]。假如n為數(shù)字的總個(gè)數(shù),則Q1,Q2,Q3:Q1的位置=(n+1)/4 //索引從1開始,即Q1=3,對(duì)應(yīng)數(shù)組中數(shù)據(jù)為15Q2的位置=(n+1)/2Q3的位置=3*(n+1)/4由于需要從原始數(shù)據(jù)計(jì)算得出五個(gè)值[min,Q1,median(Q2),Q3,max],所以需要對(duì)原始數(shù)據(jù)轉(zhuǎn)換才能繪制盒須圖。7.10ECharts繪制盒須圖和K線圖【例7-14】繪制盒須圖,效果如圖7-29所示。7.10ECharts繪制盒須圖和K線圖7.10.2ECharts繪制K線圖股市及期貨市場(chǎng)中的K線圖的畫法包含四個(gè)數(shù)據(jù),即開盤價(jià)、最高價(jià)、最低價(jià)、收盤價(jià),所有的K線都是圍繞這四個(gè)數(shù)據(jù)展開,反映大勢(shì)的狀況和價(jià)格信息。如果把每日的K線圖放在一張紙就能得到日K線圖,同樣也可畫出周K線圖、月K線圖。ECharts提供的K線圖如圖7-30所示。7.10ECharts繪制盒須圖和K線圖在ECharts中顯示K線圖類型的代碼如下:
type:'candlestick'//系列類型為boxplot以表示箱形圖【例7-15】繪制基礎(chǔ)K線圖,效果如圖7-31所示。7.11ECharts繪制詞云圖詞云圖(WordCloud)是對(duì)文本中出現(xiàn)頻率較高的“關(guān)鍵詞”予以視覺化的展現(xiàn),詞云圖是一種非常好的圖形展現(xiàn)方式,這種圖形可以讓人們對(duì)一個(gè)網(wǎng)頁或者一篇文章進(jìn)行語義分析,也就是分析同一篇文章中或者同一網(wǎng)頁中關(guān)鍵詞出現(xiàn)的頻率。詞云圖對(duì)于產(chǎn)品排名、熱點(diǎn)問題或輿情監(jiān)測(cè)是十分有幫助的。在最新版Echarts5.x官網(wǎng)中,已不再支持詞云圖功能,也找不到相應(yīng)的API。若需要進(jìn)行詞云圖開發(fā),則需要引入echarts.js文件后,再通過命令引入echarts-wordcloud.min.js文件。7.11ECharts繪制詞云圖【例7-16】繪制詞云圖,效果如圖7-32所示。本詞云圖以詞語出現(xiàn)頻率作為詞云展示依據(jù)。從詞云展示結(jié)果看出,“花鳥市場(chǎng)”出現(xiàn)頻率高所以這個(gè)詞字體顯示比較大,而“戲曲曲藝”、“給陌生的你聽”等出現(xiàn)的頻率低所以這個(gè)詞字體顯示比較小。
數(shù)據(jù)可視化原理及應(yīng)用
樊銀亭夏敏捷主編清華大學(xué)出版社第8章ECharts高級(jí)應(yīng)用8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)8.2動(dòng)態(tài)切換主題及自定義ECharts主題8.3ECharts
中的事件和行為8.4ECharts
異步加載數(shù)據(jù)和動(dòng)態(tài)更新簡(jiǎn)介ECharts中除了提供常規(guī)的圖表外,還支持多圖表、組件的聯(lián)動(dòng)和混搭展現(xiàn)。本章介紹ECharts的圖表混搭及多圖表聯(lián)動(dòng)、動(dòng)態(tài)切換主題、自定義ECharts主題、ECharts中的事件和行為,以及如何使用異步數(shù)據(jù)加載和顯示加載動(dòng)畫等。8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)為了使圖表更具表現(xiàn)力,可以使用混搭圖表對(duì)數(shù)據(jù)進(jìn)行展現(xiàn)。當(dāng)多個(gè)系列的數(shù)據(jù)存在極強(qiáng)的不可分離的關(guān)聯(lián)意義時(shí),為了避免在同一個(gè)直角系內(nèi)同時(shí)展現(xiàn)時(shí)產(chǎn)生混亂,需要使用聯(lián)動(dòng)的多圖表對(duì)其進(jìn)行展現(xiàn)。8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)8.1.1ECharts的圖表混搭在ECharts的圖表混搭中,一個(gè)圖表包含唯一圖例、工具箱、數(shù)據(jù)區(qū)域縮放模塊、值域漫游模塊和一個(gè)直角坐標(biāo)系,直角坐標(biāo)系可包含一條或多條類目軸線、一條或多條值軸線,類目軸線和值軸線最多上、下、左、右共4條。ECharts中支持任意圖表的混搭,其中常見的圖表混搭有折線圖與柱狀圖的混搭、折線圖與餅狀圖的混搭等?!纠?-1】利用某地區(qū)一年的降水量和蒸發(fā)量數(shù)據(jù)繪制雙y軸的折線圖與柱狀圖混搭圖表,如圖8-1所示。8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)【例8-1】利用某地區(qū)一年的降水量和蒸發(fā)量數(shù)據(jù)繪制雙y軸的折線圖與柱狀圖混搭圖表,如圖8-1所示。圖8-1折線圖與柱狀圖混搭圖表8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)【例8-2】利用ECharts各圖表的在線構(gòu)建次數(shù)、各版本下載的數(shù)據(jù)繪制柱狀圖與餅圖混搭圖表,如圖8-2所示。左側(cè)的柱狀圖表示ECharts各圖表的在線構(gòu)建次數(shù),右邊的餅圖表示ECharts各版本下載情況統(tǒng)計(jì)。圖8-2柱狀圖與餅圖混搭8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)8.1.2ECharts的多圖表聯(lián)動(dòng)當(dāng)需要展示的數(shù)據(jù)比較多時(shí),放在一個(gè)圖表進(jìn)行展示的效果并不佳,此時(shí),可以考慮使用兩個(gè)圖表進(jìn)行聯(lián)動(dòng)展示。ECharts提供了多圖表聯(lián)動(dòng)(connect)的功能,連接的多個(gè)圖表可以共享組件事件并實(shí)現(xiàn)保存圖片時(shí)的自動(dòng)拼接。多圖表聯(lián)動(dòng)支持直角坐標(biāo)系下tooltip的聯(lián)動(dòng)。實(shí)現(xiàn)EChart中的多圖表聯(lián)動(dòng),可以使用以下兩種方法。(1)分別設(shè)置每個(gè)ECharts對(duì)象為相同的group值,并通過在調(diào)用ECharts對(duì)象的connect方法時(shí),傳入group值,從而使用多個(gè)ECharts對(duì)象建立聯(lián)動(dòng)關(guān)系。8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)(2)直接調(diào)用ECharts的connect方法,參數(shù)為一個(gè)由多個(gè)需要聯(lián)動(dòng)的ECharts對(duì)象所組成的數(shù)組,格式如下。echarts.connect([myChart1,myChart2]);若想要解除已有的多圖表聯(lián)動(dòng),則可以調(diào)用disConnect方法,格式如下。echarts.disConnect('group1');【例8-3】利用某學(xué)院2019年和2020年的專業(yè)招生情況繪制柱狀圖聯(lián)動(dòng)圖表,如圖8-3所示。8.1ECharts的圖表混搭及多圖表聯(lián)動(dòng)圖8-3柱狀圖聯(lián)動(dòng)圖表8.2動(dòng)態(tài)切換主題及自定義ECharts主題主題是ECharts圖表的風(fēng)格抽象,用于統(tǒng)一多個(gè)圖表的風(fēng)格樣式。為了順應(yīng)不同的繪圖風(fēng)格需求,需要下載ECharts官方提供default、infographic、shine、roma、macarons、vintage等主題,并利用某大學(xué)各專業(yè)招生數(shù)據(jù)實(shí)現(xiàn)動(dòng)態(tài)主題的切換。此外,為了讓圖表整體換裝,還需要制作自定義主題。8.2.1ECharts中動(dòng)態(tài)切換主題切換ECharts主題的步驟如下。(1)下載主題文件。在使用主題之前需要下載主題.js文件(在ECharts官網(wǎng)上下載官方提供的主題,如macarons.js,或自定義主題)。(2)引用主題文件。將下載的主題.js文件引用到HTML頁面中。注意,如果ECharts主題中需要使用到j(luò)Query,那么還應(yīng)該再在頁面中引用jQuery的.js文件。(3)指定主題名。在ECharts對(duì)象初始化時(shí),通過init的第2個(gè)參數(shù)指定需要引入的主題名。如varmyChart=echarts.init(document.getElementById('main'),主題名)?!纠?-5】利用某大學(xué)各專業(yè)招生情況繪制ECharts的infographic主題柱狀圖,如圖8-5所示。由圖8-5可知,圖形使用了3種不同的灰度表示每個(gè)專業(yè)分別在2021年、2022年、2023年的招生情況。8.2.1ECharts中動(dòng)態(tài)切換主題【例8-5】利用某大學(xué)各專業(yè)招生情況繪制ECharts的infographic主題柱狀圖,如圖8-5所示。由圖8-5可知,圖形使用了3種不同的灰度表示每個(gè)專業(yè)分別在2021年、2022年、2023年的招生情況。8.2.2自定義ECharts主題ECharts除了默認(rèn)主題樣式之外,還可以使用主題在線構(gòu)建工具,根據(jù)需求快速直觀地生成主題配置文件,并在ECharts中使用自定義的主題樣式。自定義主題步驟。(1)打開ECharts的主題構(gòu)建工具(ApacheECharts主題編輯器,/zh/theme-builder.html),如圖8-6所示。(2)選擇和配置主題。(3)配置文件下載。8.3ECharts中的事件和行為事件是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作,如click、mouseover、頁面加載完畢后觸發(fā)load事件,都屬于事件。為了記錄用戶的操作和行為路徑,需要完成鼠標(biāo)事件處理和組件交互的行為事件的處理。8.3.1ECharts中鼠標(biāo)事件的處理響應(yīng)某個(gè)事件的函數(shù)稱為事件處理程序,也可稱為事件處理函數(shù)、事件句柄。鼠標(biāo)事件即鼠標(biāo)操作點(diǎn)擊圖表的圖形(如click、dblclick、contextmenu)或hover圖表的圖形(如mouseover、mouseout、mousemove)時(shí)觸發(fā)的事件。在ECharts中,用戶的任何操作,都可能會(huì)觸發(fā)相應(yīng)的事件。在ECharts中,支持9種常規(guī)的鼠標(biāo)事件,包括click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu。其中,click事件最為常用。常規(guī)的鼠標(biāo)事件及說明如表8-1所示。8.3.1ECharts中鼠標(biāo)事件的處理事件代碼書寫形式如下。myChart.on('click',function(params){//在用戶單擊后控制臺(tái)打印數(shù)據(jù)的名稱
console.log(params);});myChart.on('mouseover',function(params){console.log(params);});//只對(duì)指定的組件的圖形元素的觸發(fā)回調(diào)myChart.on('click','series.line',function(params){console.log(params);});例如:處理單擊事件并且彈出數(shù)據(jù)元素名稱。myChart.on('click',function(params){alert();});8.3.1ECharts中鼠標(biāo)事件的處理【例8-6】利用某學(xué)院2023年專業(yè)招生情況繪制柱狀圖,如圖8-9所示。圖8-9觸發(fā)鼠標(biāo)單擊事件的提示對(duì)話框8.3.2ECharts組件交互的行為事件用戶在使用交互的組件后觸發(fā)的行為事件,即調(diào)用“dispatchAction”后觸發(fā)的事件,如切換圖例開關(guān)時(shí)觸發(fā)legendselectchanged事件(這里需要注意,切換圖例開關(guān)是不會(huì)觸發(fā)legendselected事件的)、數(shù)據(jù)區(qū)域縮放時(shí)觸發(fā)的datazoom事件等。1.組件交互的行為事件在ECharts中,基本上所有的組件交互行為都會(huì)觸發(fā)相應(yīng)的事件。在ECharts中的交互事件及事件說明如表8-3所示。8.3.2ECharts組件交互的行為事件下面是監(jiān)聽一個(gè)圖例開關(guān)事件的示例。//圖例開關(guān)的行為只會(huì)觸發(fā)legendselectchanged事件myChart.on('legendselectchanged',function(params){//獲取單擊圖例的選中狀態(tài)
varisSelected=params.selected[];//在控制臺(tái)中打印
console.log((isSelected?'選中了':'取消選中了')+'圖例'+);//打印所有圖例的狀態(tài)
console.log(params.selected);});8.3.2ECharts組件交互的行為事件2.代碼觸發(fā)ECharts中組件的行為上面只說明了用戶的交互操作,但有時(shí)候也會(huì)需要在程序里調(diào)用方法并觸發(fā)圖表的行為,比如顯示提示框tooltip。ECharts通過dispatchAction({type:''})來觸發(fā)圖表行為,統(tǒng)一管理了所有動(dòng)作,也可以根據(jù)需要去記錄用戶的行為路徑?!纠?-7】利用代碼觸發(fā)ECharts餅圖圖表行為,實(shí)現(xiàn)餅圖區(qū)塊的輪播高亮顯示和出現(xiàn)提示框tooltip,如圖8-10所示。8.4ECharts異步加載數(shù)據(jù)和動(dòng)態(tài)更新ECharts通常數(shù)據(jù)設(shè)置在setOption中,如果需要異步加載從服務(wù)器得到數(shù)據(jù),可以配合jQuery等工具,在異步獲取數(shù)據(jù)后通過setOption填入數(shù)據(jù)和配置項(xiàng)就行。8.4.1實(shí)現(xiàn)異步加載數(shù)據(jù)echarts_test_data.json數(shù)據(jù)如下。{"data_pie":[{"value":235,"name":"視頻廣告"},{"value":274,"name":"聯(lián)盟廣告"},{"value":310,"name":"郵件營銷"},{"value":335,"name":"直接訪問"},{"value":400,"name":"搜索引擎"}]}下面實(shí)例中通過jQuery異步加載服務(wù)器上的echarts_test_data.json數(shù)據(jù)。【例8-8】通過jQuery異步加載json數(shù)據(jù)。這里的json數(shù)據(jù)不是直接寫在data里的,而是異步加載從服務(wù)器獲取得到的。8.4.1實(shí)現(xiàn)異步加載數(shù)據(jù)注意本程序需要在服務(wù)器端運(yùn)行,否則會(huì)出現(xiàn)AccesstoXMLHttpRequestat'/static/js/echarts_test_data.json'fromorigin'null'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispresentontherequestedresource.跨域訪問問題。當(dāng)然可以把json數(shù)據(jù)放在本地服務(wù)器上data文件夾下,則訪問如下:
varmyChart=echarts.init(document.getElementById('main'));$.get('data/echarts_test_data.json',function(data){….},'json')8.4.2實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)更新ECharts由數(shù)據(jù)驅(qū)動(dòng),數(shù)據(jù)的改變驅(qū)動(dòng)圖表展現(xiàn)的改變,因此動(dòng)態(tài)數(shù)據(jù)的實(shí)現(xiàn)也變得異常簡(jiǎn)單。所有數(shù)據(jù)的更新都通過setOption實(shí)現(xiàn),實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)更新只需要定時(shí)獲取數(shù)據(jù),使用setOption填入數(shù)據(jù),而不用考慮數(shù)據(jù)到底產(chǎn)生了那些變化,ECharts會(huì)找到兩組數(shù)據(jù)之間的差異然后通過合適的動(dòng)畫去表現(xiàn)數(shù)據(jù)的變化。【例8-9】動(dòng)態(tài)模擬顯示100天的對(duì)應(yīng)成交數(shù)據(jù)變化動(dòng)圖。例如顯示"2022/10/3"到"2023/1/9"的對(duì)應(yīng)100天成交數(shù)據(jù)后,并不斷持續(xù)更新。運(yùn)行效果如圖8-11所示。8.4.2實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)更新代碼中以"2022/9/3"為基準(zhǔn),產(chǎn)生連續(xù)100天的日期和成交數(shù)據(jù)。將日期數(shù)據(jù)作為x周坐標(biāo),成交數(shù)據(jù)作為y周數(shù)據(jù)。使用定時(shí)器,每隔0.5秒更新顯示圖表。addData(true)產(chǎn)生新的100天的日期和成交數(shù)據(jù),方式是將數(shù)組里原來第一個(gè)元素刪去,尾部加入新的元素。例如"2022/10/3"到"2023/1/9"的對(duì)應(yīng)100天,通過addData(true)后變成"2022/10/4"到"2023/1/10"的對(duì)應(yīng)100天,這樣持續(xù)更新。第9章Python科學(xué)計(jì)算和可視化應(yīng)用主講夏敏捷計(jì)算機(jī)學(xué)院副教授Python語言簡(jiǎn)介Python是一種面向?qū)ο蟆⒔忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,由荷蘭人GuidovanRossum
于1989年底發(fā)明,第一個(gè)公開發(fā)行版發(fā)行于1991年,Python源代碼同樣遵循GPL(GNUGeneralPublicLicense)協(xié)議。Python語法簡(jiǎn)潔而清晰,具有豐富和強(qiáng)大的類庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。正因?yàn)镻ython語言的簡(jiǎn)潔、優(yōu)雅、開發(fā)效率高,它常被用于網(wǎng)站開發(fā),網(wǎng)絡(luò)編程,圖形處理,黑客編程等等。Python由荷蘭的GuidovanRossum設(shè)計(jì)。Python第一個(gè)版本于1991年初公開發(fā)行。。Python2.0于2000年10月發(fā)布,增加了許多新的語言特性。Python3.0于2008年12月發(fā)布,此版本不完全兼容Python2.0,導(dǎo)致Python2.0與Python3.0不兼容。Python3.5在2015年9月發(fā)布Python3.6正式版在2016年12月發(fā)布,主要的新特性包括:async和await關(guān)鍵字可用于生成器和推導(dǎo);改善CPython實(shí)現(xiàn),在不破壞兼容性的情況下降低內(nèi)存占用和提高速度;可插拔支持JIT、跟蹤器和調(diào)試器;引入新的字符串和數(shù)字格式,為變量加入類型注釋,簡(jiǎn)化定制子類創(chuàng)建的方法,等等。Python語言的發(fā)展歷史TIOBE2016年8月編程語言排行榜TIOBE2022年7月編程語言排行榜TIOBE2024年1月編程語言排行榜C#奪冠2023年度編程語言是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語言純粹的自由軟件Python語法簡(jiǎn)潔清晰,用空格(space)作為語句縮進(jìn)Python具有豐富和強(qiáng)大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。Python快速生成程序的原型封裝Python可以調(diào)用的擴(kuò)展類庫跨平臺(tái),程序無需修改在Windows、Linux、Unix、Mac等操作系統(tǒng)上使用Web開發(fā),基于python的優(yōu)秀web框架如Django網(wǎng)絡(luò)編程,網(wǎng)頁解析,如爬蟲程序開發(fā)科學(xué)計(jì)算,各種實(shí)驗(yàn)數(shù)據(jù)的處理以及相關(guān)實(shí)驗(yàn)?zāi)M等,機(jī)器學(xué)習(xí)等數(shù)據(jù)庫應(yīng)用多媒體開發(fā)電子游戲開發(fā)需要什么應(yīng)用就能找到什么庫應(yīng)用領(lǐng)域1.1Python編程模式問題解決:把列表中的所有數(shù)字都加5,得到新列表。(命令式編程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>y=[]>>>fornuminx:y.append(num+5)
>>>y[5,6,7,8,9,10,11,12,13,14]>>>[num+5fornuminx][5,6,7,8,9,10,11,12,13,14]1.1Python編程模式問題解決:把列表中的所有數(shù)字都加5,得到新列表。(函數(shù)式編程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>defadd5(num):returnnum+5>>>list(map(add5,x))[5,6,7,8,9,10,11,12,13,14]>>>list(map(lambdanum:num+5,x))[5,6,7,8,9,10,11,12,13,14]1.2Python編程規(guī)范與代碼優(yōu)化建議(1)縮進(jìn)類定義、函數(shù)定義、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、異常處理結(jié)構(gòu)、with塊,行尾的冒號(hào)表示縮進(jìn)的開始。
python程序是依靠代碼塊的縮進(jìn)來體現(xiàn)代碼之間的邏輯關(guān)系的,縮進(jìn)結(jié)束就表示一個(gè)代碼塊結(jié)束了。同一個(gè)級(jí)別的代碼塊的縮進(jìn)量必須相同。一般而言,以4個(gè)空格為基本縮進(jìn)單位。1.2Python編程規(guī)范與代碼優(yōu)化建議(2)每個(gè)import語句只導(dǎo)入一個(gè)模塊,最好按標(biāo)準(zhǔn)庫、擴(kuò)展庫、自定義庫的順序依次導(dǎo)入。1.2Python編程規(guī)范與代碼優(yōu)化建議(3)最好在每個(gè)類、函數(shù)定義和一段完整的功能代碼之后增加一個(gè)空行,在運(yùn)算符兩側(cè)各增加一個(gè)空格,逗號(hào)后面增加一個(gè)空格。1.2Python編程規(guī)范與代碼優(yōu)化建議(4)如果語句超過屏幕寬度,最好使用續(xù)行符“\”,或者使用圓括號(hào)將多行代碼括起來表示是一條語句。(5)對(duì)于復(fù)雜的表達(dá)式,建議在適當(dāng)?shù)奈恢眉由侠ㄌ?hào)使得各種運(yùn)算的隸屬關(guān)系和順序更加明確、清晰。age=24subject="計(jì)算機(jī)"college="非重點(diǎn)"if(age>25andsubject=="電子信息工程")or\(college=="重點(diǎn)"andsubject=="電子信息工程")or\(age<=28andsubject=="計(jì)算機(jī)"):print("恭喜,你已獲得我公司的面試機(jī)會(huì)!")else:print("抱歉,你未達(dá)到面試要求")1.2Python編程規(guī)范與代碼優(yōu)化建議(6)注釋以#開始,表示本行#之后的內(nèi)容為注釋。包含在一對(duì)三引號(hào)'''...'''或"""..."""之間且不屬于任何語句的內(nèi)容將被解釋器認(rèn)為是注釋。1.3Python編程規(guī)范與代碼優(yōu)化建議>>>importthisTheZenofPython,byTimPetersBeautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplicated.Flatisbetterthannested.Sparseisbetterthandense.Readabilitycounts.Specialcasesaren'tspecialenoughtobreaktherules.Althoughpracticalitybeatspurity.Errorsshouldneverpasssilently.Unlessexplicitlysilenced.Inthefaceofambiguity,refusethetemptationtoguess.Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.Nowisbetterthannever.Althoughneverisoftenbetterthan*right*now.Iftheimplementationishardtoexplain,it'sabadidea.Iftheimplementationiseasytoexplain,itmaybeagoodidea.Namespacesareonehonkinggreatidea--let'sdomoreofthose!1.3Python編程規(guī)范與代碼優(yōu)化建議以動(dòng)手實(shí)踐為榮,以只看不練為恥。
以打印日志為榮,以單步跟蹤為恥。
以空格分隔為榮,以制表分隔為恥。
以單元測(cè)試為榮,以手工測(cè)試為恥。
以代碼重用為榮,以復(fù)制粘貼為恥。
以多態(tài)應(yīng)用為榮,以分支判斷為恥。
以Pythonic為榮,以冗余拖沓為恥。
以總結(jié)思考為榮,以不求甚解為恥。1.4Anaconda3開發(fā)環(huán)境的安裝與使用
默認(rèn)編程環(huán)境:IDLE其他常用開發(fā)環(huán)境:Eclipse+PyDevPyCharmwingIDEEricPythonWinAnaconda3:/downloadzwPythonVisualStudioCode1.5安裝擴(kuò)展庫的幾種方法pip在線安裝pip離線安裝:/~gohlke/pythonlibs/exe安裝,不是每個(gè)擴(kuò)展庫都支持conda在線安裝如果機(jī)器上安裝了多個(gè)Python開發(fā)環(huán)境,那么在一個(gè)環(huán)境下安裝的擴(kuò)展庫無法在另一個(gè)環(huán)境下使用,需要分別安裝。1.5安裝擴(kuò)展庫的幾種方法pip命令示例說明pipdownloadSomePackage[==version]下載擴(kuò)展庫的指定版本,不安裝pipfreeze[>requirements.txt]以requirements的格式列出已安裝模塊piplist列出當(dāng)前已安裝的所有模塊pipinstallSomePackage[==version]在線安裝SomePackage模塊的指定版本pipinstallSomePackage.whl通過whl文件離線安裝擴(kuò)展庫pipinstallpackage1package2...依次(在線)安裝package1、package2等擴(kuò)展模塊pipinstall-rrequirements.txt安裝requirements.txt文件中指定的擴(kuò)展庫pipinstall--upgradeSomePackage升級(jí)SomePackage模塊pipuninstallSomePackage[==version]卸載SomePackage模塊的指定版本1.6標(biāo)準(zhǔn)庫與擴(kuò)展庫對(duì)象的導(dǎo)入與使用>>>importmath#導(dǎo)入標(biāo)準(zhǔn)庫math>>>math.sin(0.5)#求0.5(單位是弧度)的正弦0.479425538604203>>>frommathimportsin#只導(dǎo)入模塊中的指定對(duì)象>>>sin(3)0.1411200080598672>>>frommathimport*#導(dǎo)入標(biāo)準(zhǔn)庫math中所有對(duì)象>>>sin(3)#求正弦值0.1411200080598672>>>gcd(36,18)#最大公約數(shù)182、運(yùn)算符、表達(dá)式與內(nèi)置對(duì)象董付國微信公眾號(hào):Python小屋2.1Python常用內(nèi)置對(duì)象90對(duì)象類型類型名稱示例簡(jiǎn)要說明數(shù)字intfloatcomplex12343.14,1.3e53+4j數(shù)字大小沒有限制內(nèi)置支持復(fù)數(shù)及其運(yùn)算字符串str'swfu',"I'mstudent",'''Python''',r'abc',R'bcd'使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符以字母r或R引導(dǎo)的表示原始字符串字節(jié)串bytesb’helloworld’以字母b引導(dǎo)可以使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符列表list[1,2,3]['a','b',['c',2]]所有元素放在一對(duì)方括號(hào)中其中的元素可以是任意類型元組tuple(2,-5,6),(3,)不可變,所有元素放在一對(duì)圓括號(hào)中如果元組中只有一個(gè)元素的話,后面的逗號(hào)不能省略字典dict{1:'food',2:'taste',3:'import'}所有元素放在一對(duì)大括號(hào)中元素形式為“鍵:值”集合set{'a','b','c'}所有元素放在一對(duì)大括號(hào)中元素不允許重復(fù)常用內(nèi)置對(duì)象2.1Python常用內(nèi)置對(duì)象91對(duì)象類型類型名稱示例簡(jiǎn)要說明布爾型boolTrue,False邏輯值,關(guān)系運(yùn)算符、成員測(cè)試運(yùn)算符、同一性測(cè)試運(yùn)算符組成的表達(dá)式的值一般為True或False空類型NoneTypeNone空值其他可迭代對(duì)象
生成器對(duì)象、range對(duì)象、zip對(duì)象、enumerate對(duì)象、map對(duì)象、filter對(duì)象等等具有惰性求值的特點(diǎn)除range對(duì)象之外,其他對(duì)象中的元素只使用一次續(xù)表2.1.1常量與變量92在Python中,不需要事先聲明變量名及其類型,直接賦值即可創(chuàng)建各種類型的對(duì)象變量。例如語句>>>x=3創(chuàng)建了整型變量x,并賦值為3,再例如語句>>>x='Helloworld.'創(chuàng)建了字符串變量x,并賦值為'Helloworld.'。憑空出現(xiàn)一個(gè)整型變量x新的字符串變量,再也不是原來的x了2.1.1常量與變量賦值語句的執(zhí)行過程是:首先把等號(hào)右側(cè)表達(dá)式的值計(jì)算出來,然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。Python中的變量并不直接存儲(chǔ)值,而是存儲(chǔ)了值的內(nèi)存地址或者引用。Python屬于強(qiáng)類型編程語言,也是一種動(dòng)態(tài)類型語言。932.1.1常量與變量94在Python中,允許多個(gè)變量指向同一個(gè)值,例如:>>>x=3>>>id(x)1786684560>>>y=x>>>id(y)1786684560接著上面的代碼再繼續(xù)執(zhí)行下面的代碼:>>>x+=6>>>id(x)1786684752>>>y3>>>id(y1.2數(shù)字Python支持任意大的數(shù)字。>>>9999**99990148353526723487602263124753282625570559528895791057324326529121794837894053513464422176826916433932586924386677766244032001623756821400432975051208820204980098735552703841362304669970510691243800218202840374329378800694920309791954185117798434329591212159106298699938669908067573374724331208942425544893910910073205049031656789220889560732962926226305865706593594917896276756396848514900989999952.1.2數(shù)字Python內(nèi)置支持復(fù)數(shù)類型及其運(yùn)算。>>>x=3+4j#使用j或J表示復(fù)數(shù)虛部>>>y=5+6j>>>x+y#支持復(fù)數(shù)之間的加、減、乘、除以及冪乘等運(yùn)算(8+10j)>>>x*y(-9+38j)>>>abs(x)#內(nèi)置函數(shù)abs()可用來計(jì)算復(fù)數(shù)的模5.0>>>x.imag#虛部4.0>>>x.real#實(shí)部3.0>>>x.conjugate()#共軛復(fù)數(shù)(3-4j)962.1.3字符串在Python中,沒有字符常量和變量的概念,只有字符串類型的常量和變量,單個(gè)字符也是字符串。使用單引號(hào)、雙引號(hào)、三單引號(hào)、三雙引號(hào)作為定界符(delimiter)來表示字符串,并且不同的定界符之間可以互相嵌套。>>>x='Helloworld.'#使用單引號(hào)作為定界符>>>x="Pythonisagreatlanguage."#使用雙引號(hào)作為定界符>>>x='''Tomsaid,"Let'sgo."'''#不同定界符之間可以互相嵌套>>>print(x)Tomsaid,"Let'sgo.">>>x='good'+'morning'#連接字符串>>>x'goodmorning'972.1.4列表、元組、字典、集合98
列表元組字典集合類型名稱listtupledictset定界符方括號(hào)[]圓括號(hào)()大括號(hào){}大括號(hào){}是否可變是否是是是否有序是是否否是否支持下標(biāo)是(使用序號(hào)作為下標(biāo))是(使用序號(hào)作為下標(biāo))是(使用“鍵”作為下標(biāo))否元素分隔符逗號(hào)逗號(hào)逗號(hào)逗號(hào)對(duì)元素形式的要求無無鍵:值必須可哈希對(duì)元素值的要求無無“鍵”必須可哈希必須可哈希元素是否可重復(fù)是是“鍵”不允許重復(fù),“值”可以重復(fù)否元素查找速度非常慢很慢非??旆浅?煨略龊蛣h除元素速度尾部操作快其他位置慢不允許快快2.2Python運(yùn)算符99運(yùn)算符功能說明+算術(shù)加法,列表、元組、字符串合并與連接,正號(hào)-算術(shù)減法,集合差集,相反數(shù)*算術(shù)乘法,序列重復(fù)/真除法//求整商%求余數(shù),字符串格式化**冪運(yùn)算<、<=、>、>=、==、!=(值)大小比較,集合的包含關(guān)系比較or邏輯或and邏輯與not邏輯非in成員測(cè)試is對(duì)象同一性測(cè)試,測(cè)試是否為同一個(gè)對(duì)象或內(nèi)存地址是否相同|、^、&、<<、>>、~位或、位異或、位與、左移位、右移位、位求反&、|、^集合交集、并集、對(duì)稱差集2.3Python關(guān)鍵字簡(jiǎn)要說明100關(guān)鍵字含義False常量,邏輯假None常量,空值True常量,邏輯真and邏輯與運(yùn)算as在import或except語句中給對(duì)象起別名assert斷言,用來確認(rèn)某個(gè)條件必須滿足,可用來幫助調(diào)試程序break用在循環(huán)中,提前結(jié)束break所在層次的循環(huán)class用來定義類continue用在循環(huán)中,提前結(jié)束本次循環(huán)def用來定義函數(shù)del用來刪除對(duì)象或?qū)ο蟪蓡Telif用在選擇結(jié)構(gòu)中,表示elseif的意思else可以用在選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和異常處理結(jié)構(gòu)中except用在異常處理結(jié)構(gòu)中,用來捕獲特定類型的異常finally用在異常處理結(jié)構(gòu)中,用來表示不論是否發(fā)生異常都會(huì)執(zhí)行的代碼for構(gòu)造for循環(huán),用來迭代序列或可迭代對(duì)象中的所有元素from明確指定從哪個(gè)模塊中導(dǎo)入什么對(duì)象,例如frommathimportsin;還可以與yield一起構(gòu)成yield表達(dá)式2.3Python關(guān)鍵字簡(jiǎn)要說明101關(guān)鍵字含義global定義或聲明全局變量if用在選擇結(jié)構(gòu)中import用來導(dǎo)入模塊或模塊中的對(duì)象in成員測(cè)試is同一性測(cè)試lambda用來定義lambda表達(dá)式,類似于函數(shù)nonlocal用來聲明nonlocal變量not邏輯非運(yùn)算or邏輯或運(yùn)算pass空語句,執(zhí)行該語句時(shí)什么都不做,常用作占位符raise用來顯式拋出異常return在函數(shù)中用來返回值,如果沒有指定返回值,表示返回空值Nonetry在異常處理結(jié)構(gòu)中用來限定可能會(huì)引發(fā)異常的代碼塊while用來構(gòu)造while循環(huán)結(jié)構(gòu),只要條件表達(dá)式等價(jià)于True就重復(fù)執(zhí)行限定的代碼塊with上下文管理,具有自動(dòng)管理資源的功能yield在生成器函數(shù)中用來返回值3、Python序列結(jié)構(gòu)3.1列表列表是包含若干元素的有序連續(xù)內(nèi)存空間。當(dāng)列表增加或刪除元素時(shí),列表對(duì)象自動(dòng)進(jìn)行內(nèi)存的擴(kuò)展或收縮,從而保證相鄰元素之間沒有縫隙,但插入和刪除非尾部元素時(shí)涉及到列表中大量元素的移動(dòng),會(huì)嚴(yán)重影響效率。在非尾部位置插入和刪除元素時(shí)會(huì)改變?cè)撐恢煤竺娴脑卦诹斜碇械乃饕?,這對(duì)于某些操作可能會(huì)導(dǎo)致意外的錯(cuò)誤結(jié)果。1033.1列表在形式上,列表的所有元素放在一對(duì)方括號(hào)[]中,相鄰元素之間使用逗號(hào)分隔。列表支持雙向索引,0表示第1個(gè)元素,1表示第2個(gè)元素,2表示第3個(gè)元素,以此類推;-1表示最后1個(gè)元素,-2表示倒數(shù)第2個(gè)元素,-3表示倒數(shù)第3個(gè)元素,以此類推。1043.1.1列表常用方法105方法說明append(x)將x追加至列表尾部extend(L)將列表L中所有元素追加至列表尾部insert(index,x)在列表index位置處插入x,該位置后面的所有元素后移并且在列表中的索引加1,如果index為正數(shù)且大于列表長(zhǎng)度則在列表尾部追加x,如果index為負(fù)數(shù)且小于列表長(zhǎng)度的相反數(shù)則在列表頭部插入元素xremove(x)在列表中刪除第一個(gè)值為x的元素,該元素之后所有元素前移并且索引減1,如果列表中不存在x則拋出異常pop([index])刪除并返回列表中下標(biāo)為index的元素,如果不指定index則默認(rèn)為-1,彈出最后一個(gè)元素;如果彈出中間位置的元素則后面的元素索引減1;如果index不是[-L,L]區(qū)間上的整數(shù)則拋出異常clear()清空列表,刪除列表中所有元素,保留列表對(duì)象index(x)返回列表中第一個(gè)值為x的元素的索引,若不存在值為x的元素則拋出異常count(x)返回x在列表中的出現(xiàn)次數(shù)reverse()對(duì)列表所有元素進(jìn)行原地逆序,首尾交換sort(key=None,reverse=False)對(duì)列表中的元素進(jìn)行原地排序,key用來指定排序規(guī)則,reverse為False表示升序,True表示降序3.1.2列表對(duì)象支持的運(yùn)算符加法運(yùn)算符+可以用于連接兩個(gè)列表,返回新列表。乘法運(yùn)算符*可以用于列表和整數(shù)相乘,表示序列重復(fù),返回新列表。成員測(cè)試運(yùn)算符in可用于測(cè)試列表中是否包含某個(gè)元素。關(guān)系運(yùn)算符也支持對(duì)列表的操作。1063.1.3內(nèi)置函數(shù)對(duì)列表的操作max()、min()函數(shù)用于返回列表中所有元素的最大值和最小值,sum()函數(shù)用于返回列表中所有元素之和;len()函數(shù)用于返回列表中元素個(gè)數(shù);zip()函數(shù)用于將多個(gè)列表中元素重新組合為元組并返回包含這些元組的zip對(duì)象;enumerate()函數(shù)返回包含若干下標(biāo)和值的迭代對(duì)象;map()函數(shù)把函數(shù)映射到列表上的每個(gè)元素;filter()函數(shù)根據(jù)指定函數(shù)的返回值對(duì)列表元素進(jìn)行過濾;all()函數(shù)用來測(cè)試列表中是否所有元素都等價(jià)于True;any()用來測(cè)試列表中是否有等價(jià)于True的元素。1073.1.4列表推導(dǎo)式列表推導(dǎo)式在邏輯上等價(jià)于一個(gè)循環(huán)語句,只是形式上更加簡(jiǎn)潔。列表推導(dǎo)式語法形式為:[expressionforexpr1insequence1ifcondition1forexpr2insequence2ifcondition2forexpr3insequence3ifcondition3...forexprNinsequenceNifconditionN]>>>fromrandomimportrandint>>>[randint(1,10)foriinrange(10)][7,7,3,4,2,6,1,10,2,4]1083.1.5切片操作在形式上,切片使用2個(gè)冒號(hào)分隔的3個(gè)數(shù)字來完成:[start:end:step]第一個(gè)數(shù)字start表示切片開始位置,默認(rèn)為0;第二個(gè)數(shù)字end表示切片截止(但不包含)位置(默認(rèn)為列表長(zhǎng)度);第三個(gè)數(shù)字step表示切片的步長(zhǎng)(默認(rèn)為1)。當(dāng)start為0時(shí)可以省略,當(dāng)end為列表長(zhǎng)度時(shí)可以省略,當(dāng)step為1時(shí)可以省略,省略步長(zhǎng)時(shí)還可以同時(shí)省略最后一個(gè)冒號(hào)。當(dāng)step為負(fù)整數(shù)時(shí),表示反向切片,這時(shí)start應(yīng)該在end的右側(cè)。1093.2元組從形式上,元組的所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔,如果元組中只有一個(gè)元素則必須在最后增加一個(gè)逗號(hào)。列表和元組都屬于有序序列,都支持使用雙向索引訪問其中的元素,以及使用count()方法統(tǒng)計(jì)指定元素的出現(xiàn)次數(shù)和index()方法獲取指定元素的索引,len()、map()、filter()等大量?jī)?nèi)置函數(shù)和+、in、is等運(yùn)算符也都可以作用于列表和元組。1103.2.1元組與列表的區(qū)別元組屬于不可變(immutable)序列,不可以直接修改元組中元素的值,也無法為元組增加或刪除元素。元組沒有提供append()、extend()和insert()等方法,無法向元組中添加元素;同樣,元組也沒有remove()和pop()方法,也不支持對(duì)元組元素進(jìn)行del操作,不能從元組中刪除元素,而只能使用del命令刪除整個(gè)元組。元組也支持切片操作,但是只能通過切片來訪問元組中的元素,而不允許使用切片來修改元組中元素的值,也不支持使用切片操作來為元組增加或刪除元素。Python的內(nèi)部實(shí)現(xiàn)對(duì)元組做了大量?jī)?yōu)化,訪問速度比列表更快。1113.2.2生成器推導(dǎo)式生成器推導(dǎo)式的語法與列表推導(dǎo)式非常相似,在形式上生成器推導(dǎo)式使用圓括號(hào)作為定界符。生成器推導(dǎo)式的結(jié)果是一個(gè)生成器對(duì)象,具有惰性求值的特點(diǎn)。使用生成器對(duì)象的元素時(shí),可以根據(jù)需要將其轉(zhuǎn)化為列表或元組,也可以使用生成器對(duì)象的__next__()方法或者內(nèi)置函數(shù)next()進(jìn)行遍歷,或者直接使用for循環(huán)來遍歷其中的元素。不管用哪種方法訪問其元素,只能從前往后正向訪問每個(gè)元素,沒有任何方法可以再次訪問已訪問過的元素,也不支持使用下標(biāo)訪問其中的元素。1123.3字典:反映對(duì)應(yīng)關(guān)系的映射類型字典(dictionary)是包含若干“鍵:值”元素的無序可變序列,字典中的每個(gè)元素包含用冒號(hào)分隔開的“鍵”和“值”兩部分,不同元素之間用逗號(hào)分隔,所有的元素放在一對(duì)大括號(hào)“{}”中。字典中元素的“鍵”可以是Python中任意不可變數(shù)據(jù).字典中的“鍵”不允許重復(fù),而“值”是可以重復(fù)的。1133.3.1字典常用方法clear():清空字典,刪除所有元素;get():獲取指定鍵對(duì)應(yīng)的元素值,如果鍵不存在,就返回空值或指定的默認(rèn)值;keys():返回字典中所有的鍵;values():返回字典中所有的值;items():返回字典中所有的元素;pop():刪除并返回指定鍵對(duì)應(yīng)的值;popitem():刪除并返回一個(gè)元素。3.3.2字典應(yīng)用例3-1首先生成包含1000個(gè)隨機(jī)字符的字符串,然后統(tǒng)計(jì)每個(gè)字符的出現(xiàn)次數(shù)。>>>importstring>>>importrandom>>>x=string.ascii_letters+string.digits
+string.punctuation>>>y=[random.choice(x)foriinrange(1000)]>>>d=dict()#使用字典保存每個(gè)字符出現(xiàn)次數(shù)>>>forchiny:d[ch]=d.get(ch,0)+11153.4集合集合(set)屬于Python無序可變序列,使用一對(duì)大括號(hào)作為定界符,元素之間使用逗號(hào)分隔,同一個(gè)集合內(nèi)的每個(gè)元素都是唯一的,元素之間不允許重復(fù)。集合中只能包含數(shù)字、字符串、元組等不可變類型(或者說可哈希)的數(shù)據(jù),而不能包含列表、字典、集合等可變類型的數(shù)據(jù)。1163.4.1集合方法add()方法可以增加新元素,如果該元素已存在則忽略該操作,不會(huì)拋出異常;update()方法用于合并另外一個(gè)集合中的元素到當(dāng)前集合中,并自動(dòng)去除重復(fù)元素。pop()方法用于隨機(jī)刪除并返回集合中的一個(gè)元素,如果集合為空則拋出異常;remove()方法用于刪除集合中的元素,如果指定元素不存在則拋出異常;discard()用于從集合中刪除一個(gè)特定元素,如果元素不在集合中則忽略該操作;clear()方法清空集合刪除所有元素。1173.4.2集合運(yùn)算>>>a_set=set
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 術(shù)后疼痛的多模式管理方案
- 文安鋼鐵招聘試題及答案
- 微眾銀行招聘面試題及答案
- 萬豐奧特集團(tuán)招聘面試題及答案
- 術(shù)后康復(fù)方案對(duì)顱腦修復(fù)效果影響
- 考試模擬大全及答案
- 同程旅行集團(tuán)校招面試題及答案
- 上海一級(jí)工程施工方案
- 風(fēng)格色彩搭配課件
- 防汛防災(zāi)技術(shù)方案范本
- 人工智能大語言模型應(yīng)用教程 課件 模塊8 大模型Chat應(yīng)用
- 2026年山西工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫及答案解析(名師系列)
- GB/T 46749-2025城市軌道交通站臺(tái)屏蔽門系統(tǒng)
- (八年級(jí)上冊(cè))【歷史核心要點(diǎn)復(fù)習(xí)提綱】
- 2026年水利部黃河水利委員會(huì)事業(yè)單位公開招聘高校畢業(yè)生(265人)歷年真題匯編及答案解析(奪冠)
- 支付行業(yè)發(fā)展趨勢(shì)
- 施工單位安全生產(chǎn)責(zé)任制實(shí)施細(xì)則
- 幼兒學(xué)前數(shù)學(xué)能力測(cè)試題與分析
- 社區(qū)工作者社工面試題及答案解析
- 工程造價(jià)指數(shù)管理
- 2024年福建省特殊技能人才錄用公安特警隊(duì)員筆試真題
評(píng)論
0/150
提交評(píng)論