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

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)分析之?dāng)?shù)據(jù)挖掘入門指南
數(shù)據(jù)分析之?dāng)?shù)據(jù)挖掘入門指南
2022-10-25
收藏

數(shù)據(jù)分析

探索性數(shù)據(jù)分析(Exploratory Data Analysis,EDA)是指對已有數(shù)據(jù)在盡量少的先驗假設(shè)下通過作圖、制表、方程擬合、計算特征量等手段探索數(shù)據(jù)的結(jié)構(gòu)和規(guī)律的一種數(shù)據(jù)分析方法。

圖片

常用的第三方庫

數(shù)據(jù)科學(xué)庫

  • pandas:用于分組、過濾和組合數(shù)據(jù),還提供了時間序列功能。
  • numpy:處理大型的多維數(shù)組和矩陣
  • scipy:用于解決線性代數(shù)、概率論、積分計算等任務(wù)

數(shù)據(jù)可視化

  • matplotlib:構(gòu)建各種圖表,從直方圖散點圖到非笛卡爾坐標(biāo)圖等
  • seaborn:提供了豐富的可視化圖庫,包括時間序列、聯(lián)合圖和小提琴圖等復(fù)雜的類型。

常用函數(shù)

數(shù)據(jù)簡略觀測

  • head():觀察數(shù)據(jù)讀取是否準(zhǔn)確,常讀取前5行數(shù)據(jù)。
  • shape:讀取數(shù)據(jù)集的維度。

數(shù)據(jù)總覽

  • describe():包含每列的統(tǒng)計量,個數(shù)、平均值、方差、最小值、中位數(shù)、最大值等。
  • 數(shù)據(jù)類型info():了解數(shù)據(jù)每列的type,了解是否存在除了nan以外的特殊符號異常。

數(shù)據(jù)檢測

缺失值檢測

  • 查看每列的存在nan情況
  • 排序函數(shù)sort_values():將數(shù)據(jù)集依照某個字段中的數(shù)據(jù)進(jìn)行排序,該函數(shù)即可根據(jù)指定列數(shù)據(jù)也可根據(jù)指定行的
  • 可視化nan值與缺失值

異常值檢測

  • 3σ原則:拉依達(dá)準(zhǔn)則,該準(zhǔn)則具體來說,就是先假設(shè)一組檢測數(shù)據(jù)只含有隨機(jī)誤差,對原始數(shù)據(jù)進(jìn)行計算處理得到標(biāo)準(zhǔn)差,然后按一定的概率確定一個區(qū)間,認(rèn)為誤差超過這個區(qū)間的就屬于異常值。
  • 箱線圖:依據(jù)實際數(shù)據(jù)繪制,真實、直觀地表現(xiàn)出了數(shù)據(jù)分布的本來面貌,且沒有對數(shù)據(jù)作任何限制性要求(3σ原則要求數(shù)據(jù)服從正態(tài)分布或近似服從正態(tài)分布),其判斷異常值的標(biāo)準(zhǔn)以四分位數(shù)和四分位距為基礎(chǔ)。

預(yù)測分布

總體分布概況:

圖片

很多模型假設(shè)數(shù)據(jù)服從正態(tài)分布,數(shù)據(jù)整體服從正態(tài)分布,樣本均值和方差則相互獨立。當(dāng)樣本不服從正態(tài)分布時,可以做如下轉(zhuǎn)換:

  • 線性變化z-scores:基于原始數(shù)據(jù)的均值(mean)和標(biāo)準(zhǔn)差(standard deviation)進(jìn)行數(shù)據(jù)的標(biāo)準(zhǔn)化。將A的原始值x使用z-score標(biāo)準(zhǔn)化到x’
  • Boxcox變換:一種廣義冪變換方法,是統(tǒng)計建模中常用的一種數(shù)據(jù)變換,用于連續(xù)的響應(yīng)變量不滿足正態(tài)分布的情況。
  • yeo-johnson變換:是冪變換(power transformation)的方法之一,通過構(gòu)建一組單調(diào)函數(shù)對隨機(jī)變量進(jìn)行數(shù)據(jù)變換

查看skeness 和kurtosis

  • skeness:衡量隨機(jī)變量概率分布的不對稱性,是相對于平均值不對稱程度的度量,通過對偏度系數(shù)的測量,我們能夠判定數(shù)據(jù)分布的不對稱程度以及方向。
  • kurtosis:研究數(shù)據(jù)分布陡峭或平滑的統(tǒng)計量,通過對峰度系數(shù)的測量,我們能夠判定數(shù)據(jù)相對于正態(tài)分布而言是更陡峭/平緩。

圖片

預(yù)測值的具體頻數(shù)

當(dāng)某范圍預(yù)測值很少時,可將其當(dāng)作異常值處理填充或刪除。若頻數(shù)很失常,需對數(shù)據(jù)進(jìn)行處理,例如進(jìn)行l(wèi)og變換,使數(shù)據(jù)分布較均勻,可據(jù)處理后的數(shù)據(jù)進(jìn)行預(yù)測,這也是預(yù)測問題常用的技巧。

特征分析

數(shù)字特征

  • 相關(guān)性分析:對兩個或多個具備相關(guān)性的變量元素進(jìn)行分析,從而衡量兩個變量因素之間的相關(guān)密切程度。
  • 特征的偏度和峰度
  • 數(shù)字特征分布可視化
    • pd.melt():處理數(shù)據(jù),透視表格,可將寬數(shù)據(jù)轉(zhuǎn)化為長數(shù)據(jù),以便于后續(xù)分析。形成的數(shù)據(jù)即為,鍵:各特征名稱,值:特征對應(yīng)的值
    • sns.FacetGrid() :先sns.FacetGrid()畫出輪廓,再map()填充內(nèi)容
    • sns.pairplot():展示變量兩兩之間的關(guān)系(線性或非線性,有無較為明顯的相關(guān)關(guān)系)。

類別特征

  • unique分布:對于一維數(shù)組或者列表,unique函數(shù)去除其中重復(fù)的元素,并按元素由大到小返回一個新的無元素重復(fù)的元組或者列表。
  • 可視化:
    • 箱型圖可視化:直觀識別數(shù)據(jù)中的離群點,判斷數(shù)據(jù)離散分布情況,了解數(shù)據(jù)分布狀態(tài)。
    • 小提琴圖可視化:用于顯示數(shù)據(jù)分布及概率密度,這種圖表結(jié)合了箱形圖和密度圖特征,主要用來顯示數(shù)據(jù)的分布形狀
    • 柱形圖可視化類別
    • 每個類別頻數(shù)可視化

數(shù)據(jù)清洗

數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已。俗話說:garbage in, garbage out。分析完數(shù)據(jù)后,特征工程前,必不可少的步驟是對數(shù)據(jù)進(jìn)行清洗。

數(shù)據(jù)清洗作用是利用有關(guān)技術(shù)如數(shù)理統(tǒng)計、數(shù)據(jù)挖掘或預(yù)定義的清理規(guī)則將臟數(shù)據(jù)轉(zhuǎn)化為滿足數(shù)據(jù)質(zhì)量要求的數(shù)據(jù)。主要包括缺失值處理、異常值處理、數(shù)據(jù)分桶、特征歸一化/標(biāo)準(zhǔn)化等流程。

圖片

缺失值處理

關(guān)于缺失值處理的方式, 有幾種情況:

  • 不處理:針對xgboost等樹模型,有些模型有處理缺失的機(jī)制,所以可以不處理;
  • 如果缺失的太多,可以考慮刪除該列;
  • 插值補(bǔ)全(均值,中位數(shù),眾數(shù),建模預(yù)測,多重插補(bǔ)等);
  • 分箱處理,缺失值一個箱。

異常值處理

常用的異常值處理操作包括BOX-COX轉(zhuǎn)換(處理有偏分布),箱線圖分析刪除異常值, 長尾截斷等方式, 當(dāng)然這些操作一般都是處理數(shù)值型的數(shù)據(jù)。

  • BOX-COX轉(zhuǎn)換:用于連續(xù)的變量不滿足正態(tài)的時候,在做線性回歸的過程中,一般需要做線性模型假定。
  • 箱線圖分析:依據(jù)實際數(shù)據(jù)繪制,真實、直觀地表現(xiàn)出了數(shù)據(jù)分布的本來面貌,其判斷異常值的標(biāo)準(zhǔn)以四分位數(shù)和四分位距為基礎(chǔ)。

數(shù)據(jù)分桶

連續(xù)值經(jīng)常離散化或者分離成“箱子”進(jìn)行分析, 為什么要做數(shù)據(jù)分桶呢?

  • 離散后稀疏向量內(nèi)積乘法運算速度更快,計算結(jié)果也方便存儲,容易擴(kuò)展;
  • 離散后的特征異常值更具魯棒性,如 age>30 為 1 否則為 0,對于年齡為 200 的也不會對模型造成很大的干擾;
  • LR 屬于廣義線性模型,表達(dá)能力有限,經(jīng)過離散化后,每個變量有單獨的權(quán)重,這相當(dāng)于引入了非線性,能夠提升模型的表達(dá)能力,加大擬合;
  • 離散后特征可以進(jìn)行特征交叉,提升表達(dá)能力,由 M+N 個變量編程 M*N 個變量,進(jìn)一步引入非線形,提升了表達(dá)能力;
  • 特征離散后模型更穩(wěn)定,如用戶年齡區(qū)間,不會因為用戶年齡長了一歲就變化

當(dāng)然還有很多原因,LightGBM 在改進(jìn) XGBoost 時就增加了數(shù)據(jù)分桶,增強(qiáng)了模型的泛化性?,F(xiàn)在介紹數(shù)據(jù)分桶的方式有:

  • 等頻分桶:區(qū)間的邊界值要經(jīng)過選擇,使得每個區(qū)間包含大致相等的實例數(shù)量。比如說 N=10 ,每個區(qū)間應(yīng)該包含大約10%的實例。
  • 等距分桶:從最小值到最大值之間,均分為 N 等份;
  • Best-KS分桶:類似利用基尼指數(shù)進(jìn)行二分類;
  • 卡方分桶:自底向上的(即基于合并的)數(shù)據(jù)離散化方法。它依賴于卡方檢驗:具有最小卡方值的相鄰區(qū)間合并在一起,直到滿足確定的停止準(zhǔn)則。

數(shù)據(jù)轉(zhuǎn)換

數(shù)據(jù)轉(zhuǎn)換的方式有:

  • 數(shù)據(jù)歸一化(MinMaxScaler);
  • 標(biāo)準(zhǔn)化(StandardScaler);
  • 對數(shù)變換(log1p);
  • 轉(zhuǎn)換數(shù)據(jù)類型(astype);
  • 獨熱編碼(OneHotEncoder);
  • 標(biāo)簽編碼(LabelEncoder);
  • 修復(fù)偏斜特征(boxcox1p)等。

特征工程

特征工程指的是把原始數(shù)據(jù)轉(zhuǎn)變?yōu)槟P陀?xùn)練數(shù)據(jù)的過程,目的是獲取更好的訓(xùn)練數(shù)據(jù)特征。特征工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。

圖片

特征構(gòu)造

特征構(gòu)造的時候需要考慮數(shù)值特征,類別特征,時間特征。

  • 數(shù)值特征,一般會嘗試一些它們之間的加減組合(當(dāng)然不要亂來,根據(jù)特征表達(dá)的含義)或者提取一些統(tǒng)計特征
  • 類別特征,我們一般會嘗試之間的交叉組合,embedding也是一種思路
  • 時間特征,這一塊又可以作為一個大專題來學(xué)習(xí),在時間序列的預(yù)測中這一塊非常重要,也會非常復(fù)雜,需要就盡可能多的挖掘時間信息,會有不同的方式技巧。

特征選擇

特征選擇主要有兩個功能:

通常來說,從兩個方面考慮來選擇特征

  • 特征是否發(fā)散:如果一個特征不發(fā)散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區(qū)分并沒有什么用。
  • 特征與目標(biāo)的相關(guān)性:這點比較顯見,與目標(biāo)相關(guān)性高的特征,應(yīng)當(dāng)優(yōu)選選擇。

根據(jù)特征選擇的形式又可以將特征選擇方法分為3種:

  • 過濾法(Filter):按照發(fā)散性或者相關(guān)性對各個特征進(jìn)行評分,設(shè)定閾值或者待選擇閾值的個數(shù),選擇特征。
  • 包裝法(Wrapper):根據(jù)目標(biāo)函數(shù)(通常是預(yù)測效果評分),每次選擇若干特征,或者排除若干特征。
  • 嵌入法(Embedded):先使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個特征的權(quán)值系數(shù),根據(jù)系數(shù)從大到小選擇特征

降維

數(shù)據(jù)特征維度太高,首先會導(dǎo)致計算很麻煩,其次增加了問題的復(fù)雜程度,分析起來也不方便。但盲目減少數(shù)據(jù)的特征會損失掉數(shù)據(jù)包含的關(guān)鍵信息,容易產(chǎn)生錯誤的結(jié)論,對分析不利。

PCA降維方法,既可以減少需要分析的指標(biāo),而且盡可能多的保持了原來數(shù)據(jù)的信息。

但要注意一點, 特征選擇是從已存在的特征中選取攜帶信息最多的,選完之后的特征依然具有可解釋性,而PCA,將已存在的特征壓縮,降維完畢后不是原來特征的任何一個,也就是PCA降維之后的特征我們根本不知道什么含義了。

建模調(diào)參

特征工程也好,數(shù)據(jù)清洗也罷,都是為最終的模型來服務(wù)的,模型的建立和調(diào)參決定了最終的結(jié)果。模型的選擇決定結(jié)果的上限, 如何更好的去達(dá)到模型上限取決于模型的調(diào)參。

建模的過程需要我們對常見的線性模型、非線性模型有基礎(chǔ)的了解。模型構(gòu)建完成后,需要掌握一定的模型性能驗證的方法和技巧。同時,還需要掌握貪心調(diào)參、網(wǎng)格調(diào)參、貝葉斯調(diào)參等調(diào)參方法。

圖片

回歸分析

回歸分析是一種統(tǒng)計學(xué)上分析數(shù)據(jù)的方法,目的在于了解兩個或多個變量間是否相關(guān)、相關(guān)方向與強(qiáng)度,并建立數(shù)學(xué)模型。以便通過觀察特定變量(自變量),來預(yù)測研究者感興趣的變量(因變量)

長尾分布

這種分布會使得采樣不準(zhǔn),估值不準(zhǔn),因為尾部占了很大部分。另一方面,尾部的數(shù)據(jù)少,人們對它的了解就少,那么如果它是有害的,那么它的破壞力就非常大,因為人們對它的預(yù)防措施和經(jīng)驗比較少。

欠擬合過擬合

欠擬合:訓(xùn)練的模型在訓(xùn)練集上面的表現(xiàn)很差,在驗證集上面的表現(xiàn)也很差。即訓(xùn)練誤差和泛化誤差都很大。原因

  • 模型沒有很好或足夠數(shù)量的訓(xùn)練訓(xùn)練集
  • 模型的訓(xùn)練特征過于簡單

過擬合:模型的訓(xùn)練誤差遠(yuǎn)小于它在測試數(shù)據(jù)集上的誤差。即訓(xùn)練誤差不錯,但是泛化誤差比訓(xùn)練誤差相差太多。原因

  • 模型沒有很好或足夠數(shù)量的訓(xùn)練訓(xùn)練集
  • 訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)有偏差
  • 模型的訓(xùn)練過度,過于復(fù)雜,沒有學(xué)到主要的特征

由此引出模型復(fù)雜度概念模型中的參數(shù),一個簡單的二元線性的函數(shù)只有兩個權(quán)重,而多元的復(fù)雜的函數(shù)的權(quán)重可能會什么上百上千個。

圖片

模型復(fù)雜度太低(參數(shù)過少),模型學(xué)習(xí)得太少,就難以訓(xùn)練出有效的模型,便會出現(xiàn)欠擬合。模型復(fù)雜度太高(參數(shù)很多),即模型可訓(xùn)練空間很大,容易學(xué)習(xí)過度,甚至于也將噪聲數(shù)據(jù)學(xué)習(xí)了,便會出現(xiàn)過擬合。

正則化

損失函數(shù)后面會添加一個額外項,稱作 L1正則化 和 L2正則化,或者 L1范數(shù)和 L2范數(shù)。

L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項。所謂『懲罰』是指對損失函數(shù)中的某些參數(shù)做一些限制。對于線性回歸模型,使用L1正則化的模型建叫做Lasso回歸,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。

正則化說明

  • L1正則化是指權(quán)值向量中各個元素的絕對值之和,通常表示為
  • L2正則化是指權(quán)值向量中各個元素的平方和然后再求平方根(可以看到Ridge回歸的L2正則化項有平方符號)

正則化作用

  • L1正則化可以產(chǎn)生稀疏權(quán)值矩陣,即產(chǎn)生一個稀疏模型,可以用于特征選擇
  • L2正則化可以防止模型過擬合(overfitting)

調(diào)參方法

貪心調(diào)參 (坐標(biāo)下降)坐標(biāo)下降法是一類優(yōu)化算法,其最大的優(yōu)勢在于不用計算待優(yōu)化的目標(biāo)函數(shù)的梯度。與坐標(biāo)下降法不同的是,不循環(huán)使用各個參數(shù)進(jìn)行調(diào)整,而是貪心地選取了對整體模型性能影響最大的參數(shù)。參數(shù)對整體模型性能的影響力是動態(tài)變化的,故每一輪坐標(biāo)選取的過程中,這種方法在對每個坐標(biāo)的下降方向進(jìn)行一次直線搜索(line search)網(wǎng)格調(diào)參GridSearchCV作用是在指定的范圍內(nèi)可以自動調(diào)參,只需將參數(shù)輸入即可得到最優(yōu)化的結(jié)果和參數(shù)。相對于人工調(diào)參更省時省力,相對于for循環(huán)方法更簡潔靈活,不易出錯。貝葉斯調(diào)參貝葉斯優(yōu)化通過基于目標(biāo)函數(shù)的過去評估結(jié)果建立替代函數(shù)(概率模型),來找到最小化目標(biāo)函數(shù)的值。貝葉斯方法與隨機(jī)或網(wǎng)格搜索的不同之處在于,它在嘗試下一組超參數(shù)時,會參考之前的評估結(jié)果,因此可以省去很多無用功。

超參數(shù)的評估代價很大,因為它要求使用待評估的超參數(shù)訓(xùn)練一遍模型,而許多深度學(xué)習(xí)模型動則幾個小時幾天才能完成訓(xùn)練,并評估模型,因此耗費巨大。貝葉斯調(diào)參發(fā)使用不斷更新的概率模型,通過推斷過去的結(jié)果來“集中”有希望的超參數(shù)。

這里給出一個模型可調(diào)參數(shù)及范圍選取的參考:

圖片

模型融合

通過融合多個不同的模型,可能提升機(jī)器學(xué)習(xí)的性能。這一方法在各種機(jī)器學(xué)習(xí)比賽中廣泛應(yīng)用, 也是在比賽的攻堅時刻沖刺Top的關(guān)鍵。而融合模型往往又可以從模型結(jié)果,模型自身,樣本集等不同的角度進(jìn)行融合。

圖片

模型融合是比賽后期一個重要的環(huán)節(jié),大體來說有如下的類型方式

1. 簡單加權(quán)融合:

  • 回歸(分類概率):算術(shù)平均融合(Arithmetic mean),幾何平均融合(Geometric mean);
  • 分類:投票(Voting);
  • 綜合:排序融合(Rank averaging),log融合。

2. stacking/blending:

  • 構(gòu)建多層模型,并利用預(yù)測結(jié)果再擬合預(yù)測。

3. boosting/bagging:

  • 多樹的提升方法,在xgboost,Adaboost,GBDT中已經(jīng)用到。

簡單算術(shù)平均法

Averaging方法就多個模型預(yù)測的結(jié)果進(jìn)行平均。這種方法既可以用于回歸問題,也可以用于對分類問題的概率進(jìn)行平均。

加權(quán)算術(shù)平均法

這種方法是平均法的擴(kuò)展。考慮不同模型的能力不同,對最終結(jié)果的貢獻(xiàn)也有差異,需要用權(quán)重來表征不同模型的重要性importance。

投票法

假設(shè)對于一個二分類問題,有3個基礎(chǔ)模型,現(xiàn)在我們可以在這些基學(xué)習(xí)器的基礎(chǔ)上得到一個投票的分類器,把票數(shù)最多的類作為我們要預(yù)測的類別。

    • 硬投票:對多個模型直接進(jìn)行投票,不區(qū)分模型結(jié)果的相對重要度,最終投票數(shù)最多的類為最終被預(yù)測的類。
      • 絕對多數(shù)投票法:最終結(jié)果必須在投票中占一半以上。
      • 相對多數(shù)投票法:最終結(jié)果在投票中票數(shù)最多。

圖片

  • 軟投票:增加了設(shè)置權(quán)重的功能,可以為不同模型設(shè)置不同權(quán)重,進(jìn)而區(qū)別模型不同的重要度。

圖片

堆疊法(Stacking)

stacking 就是當(dāng)用初始訓(xùn)練數(shù)據(jù)學(xué)習(xí)出若干個基學(xué)習(xí)器后,將這幾個學(xué)習(xí)器的預(yù)測結(jié)果作為新的訓(xùn)練集,來學(xué)習(xí)一個新的學(xué)習(xí)器。對不同模型預(yù)測的結(jié)果再進(jìn)行建模。

圖片

混合法(Blending)

Blending采用了和stacking同樣的方法,不過只從訓(xùn)練集中選擇一個fold的結(jié)果,再和原始特征進(jìn)行concat作為元學(xué)習(xí)器meta learner的特征,測試集上進(jìn)行同樣的操作。

把原始的訓(xùn)練集先分成兩部分,比如70%的數(shù)據(jù)作為新的訓(xùn)練集,剩下30%的數(shù)據(jù)作為測試集。

  • 第一層,我們在這70%的數(shù)據(jù)上訓(xùn)練多個模型,然后去預(yù)測那30%數(shù)據(jù)的label,同時也預(yù)測test集的label。
  • 在第二層,我們就直接用這30%數(shù)據(jù)在第一層預(yù)測的結(jié)果做為新特征繼續(xù)訓(xùn)練,然后用test集第一層預(yù)測的label做特征,用第二層訓(xùn)練的模型做進(jìn)一步預(yù)測。

Bagging

Bagging基于bootstrap(自采樣),也就是有放回的采樣。訓(xùn)練子集的大小和原始數(shù)據(jù)集的大小相同。Bagging的技術(shù)使用子集來了解整個樣本集的分布,通過bagging采樣的子集的大小要小于原始集合。

  • 采用bootstrap的方法基于原始數(shù)據(jù)集產(chǎn)生大量的子集
  • 基于這些子集訓(xùn)練弱模型base model
  • 模型是并行訓(xùn)練并且相互獨立的
  • 最終的預(yù)測結(jié)果取決于多個模型的預(yù)測結(jié)果

Boosting

Boosting是一種串行的工作機(jī)制,即個體學(xué)習(xí)器的訓(xùn)練存在依賴關(guān)系,必須一步一步序列化進(jìn)行。Boosting是一個序列化的過程,后續(xù)模型會矯正之前模型的預(yù)測結(jié)果。也就是說,之后的模型依賴于之前的模型。

其基本思想是:增加前一個基學(xué)習(xí)器在訓(xùn)練訓(xùn)練過程中預(yù)測錯誤樣本的權(quán)重,使得后續(xù)基學(xué)習(xí)器更加關(guān)注這些打標(biāo)錯誤的訓(xùn)練樣本,盡可能糾正這些錯誤,一直向下串行直至產(chǎn)生需要的T個基學(xué)習(xí)器,Boosting最終對這T個學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合,產(chǎn)生學(xué)習(xí)器委員會。

下面給出加州大學(xué)歐文分校Alex Ihler教授的兩頁PPT:

圖片

圖片

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

若不方便掃碼,搜微信號: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)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".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 = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+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); }