99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀基于Pyecharts v1.x 的數(shù)據(jù)可視化
基于Pyecharts v1.x 的數(shù)據(jù)可視化
2019-08-22
收藏
基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

作者 | CDA數(shù)據(jù)分析師

1、Pyecharts 簡(jiǎn)介

Echarts是一個(gè)由百度開源的數(shù)據(jù)可視化工具,憑借著良好的交互性,精巧的圖表設(shè)計(jì),得到了眾多開發(fā)者的認(rèn)可。而 Python 是一門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理。當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時(shí),Pyecharts誕生了。

Pyecharts最早只適用于工程領(lǐng)域的可視化開發(fā),但是隨著其對(duì)Jupyter notebook、Jupyter lab等交互式開發(fā)工具的支持不斷加強(qiáng),現(xiàn)在也開始被許多數(shù)據(jù)分析師應(yīng)用到數(shù)據(jù)探索中。

1.1 Pyecharts各個(gè)版本與Python的對(duì)應(yīng)關(guān)系

pyecharts 分為 v0.5.x 和 v1.x 兩個(gè)大版本,v0.5.x 和 v1.x 間不兼容,v1.x 是一個(gè)全新的版本。

Pyecharts各版本與python的對(duì)應(yīng)關(guān)系見下表

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

注:經(jīng)Pyecharts開發(fā)團(tuán)隊(duì)決定,0.5.x 版本將不再進(jìn)行維護(hù)

1.2 Pyecharts v1系列的新特性

  • 全面擁抱 Python3 和 TypeHint

pyecharts v1.0.0 停止對(duì) Python2.7,3.4~3.5 版本的支持和維護(hù),僅支持 Python3.6+。如果還不知道什么是 TypeHint 的同學(xué),勸你盡早入坑,官方入坑指南 typing — Support for type hints。

在編程界,早已流傳著 動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場(chǎng) 這樣的真知灼見,動(dòng)態(tài)語言類型檢查已經(jīng)成為了一種趨勢(shì),Javascript 已經(jīng)有了 Typescript,Python 也在力推 TypeHint,雖然 Python 的 TypeHint 實(shí)際上對(duì)于程序的運(yùn)行并沒有任何影響......,但它配合 IDE 和 mypy,或者 pyright 這樣的工具可以在開發(fā)階段趁早發(fā)現(xiàn)問題。

  • 棄用插件機(jī)制

pyecharts v1.0.0 廢除原有的插件機(jī)制,包括地圖包插件主題插件,插件的本質(zhì)是提供 pyecharts 運(yùn)行所需要的靜態(tài)資源文件(基本都是 .js 文件),所以現(xiàn)在開放了兩種模式提供靜態(tài)資源文件。

online 模式,使用 pyecharts 官方提供的 assets host,或者部署自己的 remote host。

local 模式,使用自己本地開啟的文件服務(wù)提供 assets host(離線模式)。

  • 支持 JupyterLab

對(duì) JupyterLab 的支持一直是很多開發(fā)者關(guān)心的功能,畢竟 JupyterLab 號(hào)稱是下一代的 Notebook。pyecharts 1.0.0 開始支持在 JupyterLab 中渲染圖表啦!

#使用JupytrLab需添加如下代碼

from pyecharts.globals import CurrentConfig,NotebookType

CurrentConfig,NOTEBOOK_TYPE=NotebookType.JUPYTER_LAB

#除了以上代碼,還需在渲染之前執(zhí)行加載JavaScript腳本的代碼,這里以柱狀圖對(duì)象bar為例

bar.load_javascript()

#然后再渲染即可

bar.render_notebook()

  • 代碼風(fēng)格重構(gòu)

所有配置項(xiàng)均 OOP,在新版本的 pyecharts 中,一切皆 Options。配置項(xiàng)種類更多,可操作性更強(qiáng),可以畫出更豐富的圖表,pyecharts 官方畫廊 pyecharts/pyecharts-gallery。

0.5.X 版本寫法

from pyecharts import Bar

attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]

v1 = [5, 20, 36, 10, 75, 90]

v2 = [10, 25, 8, 60, 20, 80]

bar = Bar("柱狀圖數(shù)據(jù)堆疊示例")

bar.add("商家A", attr, v1, is_stack=True)

bar.add("商家B", attr, v2, is_stack=True)

bar.render()

1.0.0 版本寫法,支持鏈?zhǔn)秸{(diào)用

import pyecharts.options as opts

from pyecharts.charts import Bar

attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]

v1 = [5, 20, 36, 10, 75, 90]

v2 = [10, 25, 8, 60, 20, 80]

bar = (

Bar()

.add_xaxis(attr)

.add_yaxis("商家A", v1, stack="stack1")

.add_yaxis("商家B", v2, stack="stack1")

.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

.set_global_opts(title_opts=opts.TitleOpts(title="柱狀圖數(shù)據(jù)堆疊示例"))

)

bar.render()

  • 支持 selenium/phantomjs 渲染圖片

pyecharts 1.0.0 提供兩種模式渲染圖片,selenium 和 phantomjs,分別需要安裝 snapshot-selenium 和 snapshot-phantomjs。

from pyecharts import options as opts

from pyecharts.charts import Bar

from pyecharts.render import make_snapshot

def bar_chart() -> Bar:

c = (

Bar()

.add_xaxis(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])

.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

.set_global_opts(title_opts=opts.TitleOpts(title="Bar-測(cè)試渲染圖片"))

)

return c

def render_chart_by_selenium():

from snapshot_selenium import snapshot

make_snapshot(snapshot, bar_chart().render(), "bar0.png")

def render_chart_by_phantomjs():

from snapshot_phantomjs import snapshot

make_snapshot(snapshot, bar_chart().render(), "bar1.png")

看到新版的種種優(yōu)勢(shì),小伙伴們是不是躍躍欲試了?接下來我們安裝并通過一系列代碼體驗(yàn)Pyecharts。

1.3 安裝 Pyecharts

v1系列版本的Pyecharts僅支持python3.6+ ,即如果你的python是3.6+,則默認(rèn)會(huì)下載最新版的pyecharts。

pip install -i https://pypi.douban.com/simple pyecharts -U #使用國(guó)內(nèi)軟件源下載速度會(huì)快很多

安裝pyecharts v0.5系列版本:

pip install -i https://pypi.douban.com/simple pyecharts==0.5.11

2、Pyecharts繪圖

繪圖前需要導(dǎo)入相關(guān)模塊,根據(jù)繪制的圖形不同,導(dǎo)入的模塊會(huì)有些許差異

from pyecharts import options as opts #引入配置項(xiàng)入口

from pyecharts.charts import Bar,Line #導(dǎo)入相關(guān)圖形的構(gòu)造方法

2.1 pyecharts繪圖步驟

pyecharts繪圖大致是按以下五個(gè)步驟來的

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

這里以繪制柱形圖為例

#1、構(gòu)造柱形圖對(duì)象

bar = Bar()

#2、添加x軸數(shù)據(jù)

bar.add_xaxis(xaxis_data=x_data)

# 添加y軸數(shù)據(jù)

bar.add_yaxis( "系列名稱", #設(shè)置系列名稱

yaxis_data=y_data, #設(shè)置y軸系列數(shù)據(jù)

...... #更多參數(shù)可以查看官網(wǎng)

)

#3、對(duì)系列進(jìn)行配置

bar.set_series_opts( #主要是對(duì)圖元、文字、

...... #標(biāo)簽、線型、標(biāo)記點(diǎn)、標(biāo)記線 等內(nèi)容進(jìn)行配置

)

#4、對(duì)全局進(jìn)行配置

bar.set_global_opts( #可配置內(nèi)容包括:x、y坐標(biāo)軸;初始化配置;

...... #工具箱配置;標(biāo)題;區(qū)域縮放;圖例;

#提示框等參數(shù)配置

)

#5、渲染圖片

bar.render(path) #將圖片渲染為html文件

bar.render_notebook() #直接在jupytr notebook中渲染

基于分類/時(shí)間的數(shù)據(jù)對(duì)比,通常需用到比較型圖表。用戶通過圖表輕松識(shí)別最大/最小值,查看當(dāng)前和過去的數(shù)據(jù)變動(dòng)情況。

常見場(chǎng)景:哪個(gè)地區(qū)的收件量最多?今年的收入和去年相比如何?商品的銷量在不同地區(qū)、時(shí)間維度上的差異……

2.2 柱狀圖的繪制

當(dāng)數(shù)據(jù)量少的時(shí)候我們使用柱狀圖就可以了。pyecharts繪制柱狀圖表灰常簡(jiǎn)單咯,啥也不說了,上代碼。

from example.commons import Faker #調(diào)用官方提供的測(cè)試數(shù)據(jù)

from pyecharts import options as opts #配置入口模塊

from pyecharts.charts import Bar #柱狀圖構(gòu)造方法

bar = Bar()#構(gòu)造bar對(duì)象

bar.add_xaxis(Faker.choose()) #添加x軸數(shù)據(jù)

bar.add_yaxis("商家A", Faker.values()) #添加一個(gè)系列數(shù)據(jù),這里是A商家的數(shù)據(jù)

bar.add_yaxis("商家B", Faker.values()) #添加另一個(gè)系列數(shù)據(jù)

bar.set_global_opts(title_opts=opts.TitleOpts(

title="Bar-基本示例", #設(shè)置主標(biāo)題

subtitle="我是副標(biāo)題" #設(shè)置副標(biāo)題

))

bar.render_notebook() #在jupyter notebook中渲染

效果圖如下:

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.3 條形圖

當(dāng)條目較多,如大于12條,移動(dòng)端上的柱狀圖會(huì)顯得擁擠不堪,更適合用條形圖。一般數(shù)據(jù)條目不超過30條,否則易帶來視覺和記憶負(fù)擔(dān)。

bar = Bar().add_xaxis(Faker.choose()+Faker.choose()+Faker.choose()) #將數(shù)據(jù)生成三份

bar.add_yaxis("", Faker.values()+Faker.values()+Faker.values()) #數(shù)據(jù)生成三份

bar.set_global_opts(title_opts=opts.TitleOpts(title="條形圖"))

bar.reversal_axis() #翻轉(zhuǎn)XY軸,將柱狀圖轉(zhuǎn)換為條形圖

bar.render_notebook()

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.4 折線圖

當(dāng)數(shù)據(jù)X軸為連續(xù)數(shù)值(如時(shí)間)且我們比較注重觀察數(shù)據(jù)變化趨勢(shì)時(shí),折線圖是非常好的選擇。

import pyecharts.options as opts

from pyecharts.charts import Line

line=Line()

line.add_xaxis(["201{}年/{}季度".format(y,z)

for y in range(4)

for z in range(1,5)]) #設(shè)置x軸數(shù)據(jù)

line.add_yaxis(

"電視機(jī)銷量",

[4.80,4.10,6.00,6.50,5.80,5.20,6.80,7.40,

6.00,5.60,7.50,7.80,6.30,5.90,8.00,8.40]

)#設(shè)置y軸數(shù)據(jù)

line.set_global_opts(

xaxis_opts=opts.AxisOpts(

axislabel_opts=opts.LabelOpts(rotate=-40),

),#設(shè)置x軸標(biāo)簽旋轉(zhuǎn)角度

yaxis_opts=opts.AxisOpts(name="銷量(單位/千臺(tái))"),#設(shè)置y軸名稱

title_opts=opts.TitleOpts(title="折線圖")) #設(shè)置圖表標(biāo)題

line.render_notebook() #渲染圖表

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.5 南丁格爾-玫瑰圖

當(dāng)對(duì)比差異不是很明顯的數(shù)據(jù)時(shí),可以使用南丁格爾玫瑰圖,其原理為:扇形的半徑和面積是平方的關(guān)系,南丁格爾玫瑰圖會(huì)將數(shù)值之間的差異放大,適合對(duì)比大小相近的數(shù)值。它不適合對(duì)比差異較大的數(shù)值。

此外,因?yàn)閳A有周期性,玫瑰圖也適于表示周期/時(shí)間概念,比如星期、月份。依然建議數(shù)據(jù)量不超過30條,超出可考慮條形圖。

def pie_rosetype():

from pyecharts.charts import Pie

c = (

Pie()

.add(

"",

[list(z) for z in zip(["201{}年/{}季度".format(y,z)

for y in range(2)

for z in range(1,3)], [4.80,4.10,5.80,5.20])],

radius=["0%", "75%"], #設(shè)置內(nèi)徑外徑

rosetype="radius", #玫瑰圖有兩種類型

label_opts=opts.LabelOpts(is_show=True),

)

.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰圖示例"))

)

return c

pie_rosetype().render_notebook()

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.6 雷達(dá)圖

對(duì)于一些多維的性能數(shù)據(jù),如王者榮耀等游戲中的玩家戰(zhàn)力信息,常用雷達(dá)圖表示。指標(biāo)得分接近圓心,說明處于較差狀態(tài),應(yīng)分析改進(jìn);指標(biāo)得分接近外邊線,說明處于理想狀態(tài)。

from pyecharts import options as opts

from pyecharts.charts import Page, Radar

v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]

v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]

def radar_base() -> Radar:

c = (

Radar()

.add_schema(

schema=[

opts.RadarIndicatorItem(name="KDA", max_=6500),

opts.RadarIndicatorItem(name="輸出", max_=16000),

opts.RadarIndicatorItem(name="經(jīng)濟(jì)", max_=30000),

opts.RadarIndicatorItem(name="生存", max_=38000),

opts.RadarIndicatorItem(name="推進(jìn)", max_=52000),

opts.RadarIndicatorItem(name="打野", max_=25000),

]

)

.add("魯班", v1, #添加系列名稱及數(shù)據(jù)

color="red", #設(shè)置邊框線的顏色

areastyle_opts = opts.AreaStyleOpts(#設(shè)置填充的屬性

opacity = 0.5, #透明度

color="red" #填充顏色

),)

.add("后裔", v2,color="blue",

areastyle_opts = opts.AreaStyleOpts(

opacity = 0.5,#透明度

color="blue"

),)

.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

.set_global_opts(title_opts=opts.TitleOpts(title="英雄成長(zhǎng)對(duì)比"))

)

return c

radar_base().render_notebook()

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.7 餅圖

部分相較于整體,一個(gè)整體被分成幾個(gè)部分。這類情況會(huì)用到構(gòu)成型圖表,如五大產(chǎn)品的收件量占比、公司利潤(rùn)的來源構(gòu)成等。

對(duì)于參與構(gòu)成研究的數(shù)據(jù)不超過9個(gè)時(shí),可以使用餅圖來繪制,如果超過了建議使用條形圖來展示。

def pie_base():

from pyecharts import options as opts

from pyecharts.charts import Page, Pie

v1=["啤酒","可樂","雪碧","咖啡","奶茶"]

v2=[30,19,21,12,18]

c = (

Pie()

.add("", [list(z) for z in zip(v1,v2)])

.set_global_opts(title_opts=opts.TitleOpts(title="銷售收入占比"))

.set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}%"))#格式化標(biāo)簽輸出內(nèi)容

)

return c

pie_base().render_notebook()

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

2.8 pyecharts繪制散點(diǎn)圖

通過分布&聯(lián)系型圖表能看到數(shù)據(jù)的分布情況,進(jìn)而找到某些聯(lián)系,如相關(guān)性、異常值和數(shù)據(jù)集群。

常見使用場(chǎng)景:客戶的分布與哪些因素相關(guān)、身高與體重的相關(guān)性分析等

查看兩個(gè)變量的關(guān)系使用散點(diǎn)圖,以貸款業(yè)務(wù)為例,查看年齡與信用的關(guān)系

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

代碼:

def scatter_render():

from pyecharts.charts import Scatter

from pyecharts import options as opts

from pyecharts.commons.utils import JsCode

import pandas as pd

df = pd.DataFrame({"年齡":[32,28,23,24,21],

"信用分":[771,751,738,726,725],

"姓名":['小明','小花','小麗','小剛','小紅']})

df.sort_values("年齡",inplace=True,ascending=True)# 按年齡對(duì)數(shù)據(jù)做升序排序

c = (

Scatter()

.add_xaxis(df.年齡.values.tolist())

.add_yaxis(

"信用分",

df[["信用分","姓名"]].values.tolist(),#傳入信用分與姓名組合,方便js回調(diào)函數(shù)顯示標(biāo)簽

label_opts=opts.LabelOpts(

formatter=JsCode(

"function(params){return params.value[2];}" #通過定義JavaScript回調(diào)函數(shù)自定義標(biāo)簽

)

)

)

.set_global_opts(

title_opts=opts.TitleOpts(title="Scatter-多維度數(shù)據(jù)"),

xaxis_opts = opts.AxisOpts(

type_="value",#x軸數(shù)據(jù)類型是連續(xù)型的

min_=20 #x軸范圍最小為20

),

yaxis_opts = opts.AxisOpts(

min_=700 #y軸范圍最小為700

)

)

)

return c

scatter_render().render_notebook()

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

我們可以看出,信用分與年齡在圖形所顯示范圍內(nèi)大致是成正比的。

2.9 繪制組合圖

組合圖就是將兩種不同的圖形繪制到同一圖表中,我們以數(shù)據(jù)分析中常常用到的帕累托圖為例,展示pyecharts如何繪制組合圖。

帕累托法則又稱為二八法則,即百分之八十的問題是百分之二十的原因造成的。

帕累托圖(Pareto chart)又叫排列圖、主次圖,是按照發(fā)生頻率大小順序繪制的直方圖,表示有多少結(jié)果是由已確認(rèn)類型或范疇的原因所造成。

帕累托圖在項(xiàng)目管理中主要用來找出產(chǎn)生大多數(shù)問題的關(guān)鍵原因來解決大多數(shù)問題,是將出現(xiàn)的質(zhì)量問題按照重要程度依次排列的一種圖表,從而可以直觀地得出影響質(zhì)量問題的主要因素。

主要特點(diǎn):

1、柱形圖的數(shù)據(jù)按數(shù)值的降序排列,折線圖上的數(shù)據(jù)有累積百分比數(shù)據(jù),并在次坐標(biāo)軸顯示;

2、折線圖的起點(diǎn)數(shù)值為0%,并且位于柱形圖第一個(gè)柱子的最左下角;

3、折線圖的第二個(gè)點(diǎn)位于柱形圖第一個(gè)柱子的最右上角 ;

4、折線圖最后一個(gè)點(diǎn)數(shù)值為100%,位于整張圖形的最右上角

數(shù)據(jù):

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

代碼:

def bar_overlap_line():

from pyecharts import options as opts #引入配置項(xiàng)

from pyecharts.charts import Bar,Line

x_data1 = ["產(chǎn)品價(jià)格優(yōu)勢(shì)不突出","渠道經(jīng)理服務(wù)不到位",

"營(yíng)銷活動(dòng)頻次不夠","區(qū)域消費(fèi)市場(chǎng)不景氣","其他"]

x_data2 = [*range(6)]

y_data1 = [115,99,59,33,23]

y_data2 = [0,35,65,83,93,100]

#######################################################################

bar = Bar()

#添加x軸數(shù)據(jù)

bar.add_xaxis(xaxis_data=x_data1)

bar.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) #設(shè)置x軸系列

bar.add_yaxis( "問題數(shù)量(頻數(shù))", #設(shè)置y軸系列名稱

yaxis_data=y_data1, #設(shè)置y軸系列數(shù)據(jù)

category_gap=0, #設(shè)置柱的間距

color="blue", #設(shè)置柱形的填充顏色

)

bar.extend_axis(

xaxis=opts.AxisOpts( #設(shè)置x軸的參數(shù)

is_show=False,

position="top",

)

)

bar.extend_axis(

yaxis=opts.AxisOpts(

axistick_opts=opts.AxisTickOpts( #刻度

is_inside=True,

),

axislabel_opts=opts.LabelOpts(formatter="{value}%", #格式化刻度輸出

position="right")

)

)

bar.set_global_opts(

xaxis_opts=opts.AxisOpts( #設(shè)置x軸的參數(shù)

is_show=True, #是否顯示坐標(biāo)軸

),

yaxis_opts=opts.AxisOpts( #設(shè)置y軸最大取值范圍

max_=320,

),

title_opts=opts.TitleOpts(title="帕累托圖")

)

##########################################################################

line =Line()

#添加x軸數(shù)據(jù)

line.add_xaxis(x_data2)

#添加y軸數(shù)據(jù)

line.add_yaxis("累計(jì)百分比",

y_data2,

xaxis_index=1, #使用次x坐標(biāo)軸

yaxis_index=1, #使用次y坐標(biāo)軸

label_opts=opts.LabelOpts(is_show=False),

is_smooth=True,

)

bar.overlap(line) #組合柱狀圖折線圖

return bar

bar_overlap_line().render_notebook()

最終效果圖如下所示:

基于Py<a href='/map/echarts/' style='color:#000;font-size:inherit;'>echarts</a> v1.x 的<a href='/map/shujukeshihua/' style='color:#000;font-size:inherit;'>數(shù)據(jù)可視化</a>

以上就是數(shù)據(jù)分析常

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }