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

熱線電話:13121318867

登錄
首頁精彩閱讀在Twitter“玩”數(shù)據(jù)科學是怎樣一種體驗
在Twitter“玩”數(shù)據(jù)科學是怎樣一種體驗
2016-03-13
收藏

在Twitter“玩”數(shù)據(jù)科學是怎樣一種體驗

關于如何成為一名數(shù)據(jù)科學家的討論有很多很多。盡管這些探討信息量都很大(我便是眾多受益者之一),人們總是傾向于過分強調(diào)技術、工具和技巧的重要性。我以為,對于那些有志成為數(shù)據(jù)科學家的人來說,充分了解數(shù)據(jù)科學家的實戰(zhàn)操作是怎樣一番體驗,是同等重要的。

因此,在我在Twitter工作兩周年之際,我希望以這次回顧為契機來分享我的個人經(jīng)歷,同時希望數(shù)據(jù)科學行業(yè)的同事們也能加入到這個行列中!

分析型數(shù)據(jù)科學家V.S.構建型數(shù)據(jù)科學家

來Twitter之前,我以為數(shù)據(jù)科學家都是“珍稀動物”——做數(shù)學/統(tǒng)計/計算機/機器學習/ 算法/數(shù)據(jù)可視化等等出身。另外,寫作技巧和溝通能力與專業(yè)技能同等重要。進一步講,在執(zhí)行任務的過程中,理清項目環(huán)節(jié)中的輕重緩急、領導團隊、管理項目的能力是最最重要的。除此以外,你還應該向大眾傳播一下由數(shù)據(jù)驅動的文化是多么美好。Good luck!

在Twitter工作了幾個月后,我發(fā)現(xiàn)“珍稀動物”們確實存在,但對于大多數(shù)努力躋身于“珍稀動物”行列的數(shù)據(jù)工作者來說,一下子掌握那么多學科是不現(xiàn)實也不可能的。也就是說,幾乎所有和數(shù)據(jù)沾邊的東西都和“數(shù)據(jù)科學”這個概念是相關的。那時,還是菜鳥一枚的我,尋找自己定位的時候感覺怯生生的。

久而久之,我意識到數(shù)據(jù)科學家可以被分為對立的兩類。這種分類有些過于簡單粗暴,卻十足精準。Quora用戶Michael Hochster將我想表達的這種分類方法漂亮地總結如下:

A型數(shù)據(jù)科學家:A,即Analysis(分析)。分析型數(shù)據(jù)科學家主要致力于尋找數(shù)據(jù)背后的含義,或是以一種靜態(tài)的方式使用這些數(shù)據(jù)。分析型數(shù)據(jù)科學家類似于統(tǒng)計學家(他們很可能本來就是搞統(tǒng)計的),但他們還懂得統(tǒng)計課程里不涉及的與數(shù)據(jù)工作相關的具體的實際操作,比如數(shù)據(jù)清理、大型數(shù)據(jù)集、數(shù)據(jù)可視化、對某一領域的深度了解和如何用數(shù)據(jù)講一個漂亮的故事,等等。

B型數(shù)據(jù)科學家:B,即Building(構建)。構建型數(shù)據(jù)科學家和分析型分局科學家的共同點是都有統(tǒng)計學背景,但前者還是編程高手,抑或是訓練有素的軟件工程師。構建型數(shù)據(jù)科學家的關注點是把數(shù)據(jù)“投入生產(chǎn)”。他們建立的模型通常以“推薦”的方式與用戶互動,比如產(chǎn)品、你可能認識的人、廣告、電影、搜索結果等。

真希望自己早些知道這兩種數(shù)據(jù)科學家的分別。如果你想成為一名數(shù)據(jù)科學家,留意這種分別——這對你選擇職業(yè)道路以及做取舍是非常有幫助的。

個人而言,我是學數(shù)學、操作研究和統(tǒng)計出身的。我認為我是一名分析型數(shù)據(jù)科學家,但我非常享受用到編程設計的構建型項目!

不同類型公司,數(shù)據(jù)科學家工作的異同

技術型人才找工作時往往要考慮,是去大企業(yè)任職,還是加入小型企業(yè)。雖然關于這種選擇的討論有很多,但針對數(shù)據(jù)科學家的討論就很少了——即,企業(yè)的發(fā)展階段與規(guī)模各有不同,那么數(shù)據(jù)科學家在這些企業(yè)里扮演的角色會有什么不同呢?

處于不同發(fā)展階段的企業(yè)所產(chǎn)生的數(shù)據(jù)的速度、種類和量級是不同的。對于一個正在探索產(chǎn)品定位的創(chuàng)業(yè)公司,他們多半用不到Hadoop這樣的軟件,因為這種公司并沒有那么多數(shù)據(jù)可處理。成長性創(chuàng)業(yè)公司通常會產(chǎn)生更密集的數(shù)據(jù),但對他們來講,PostgreSQL和Vertica這樣的數(shù)據(jù)庫管理系統(tǒng)就足夠了。但是像Twitter這種規(guī)模的公司,就必須使用Hadoop和MapReduce來處理數(shù)據(jù)了。

我在Twitter學到了重要的一課——數(shù)據(jù)科學家從數(shù)據(jù)中提煉、創(chuàng)造價值的能力與企業(yè)數(shù)據(jù)平臺的成熟度是高度相關的。如果你想保證達到企業(yè)和個人之間雙向選擇的最優(yōu)化,做到以下是機智而關鍵的:搞清自己到底想做什么類型的數(shù)據(jù)科學工作,然后下功夫衡量這個企業(yè)的體制設施能不能幫你實現(xiàn)你的目標。

發(fā)展初期的創(chuàng)業(yè)公司:數(shù)據(jù)分析主要致力于執(zhí)行記錄(log),建立ETL過程(Extract-Transform-Load 的縮寫,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、轉換(transform)、加載(load)至目的端的過程——譯者注),模擬數(shù)據(jù),設計一個框架來追蹤并儲存數(shù)據(jù)。這種公司的工作重點在于打好分析數(shù)據(jù)的基礎,而不是分析數(shù)據(jù)本身。

發(fā)展中期的創(chuàng)業(yè)公司:企業(yè)在成長,相應地,企業(yè)的數(shù)據(jù)也會增長。數(shù)據(jù)平臺需要適應增長的數(shù)據(jù),但由于數(shù)據(jù)的“地基”已經(jīng)建好了,公司會自然地從單純收集數(shù)據(jù)轉向從數(shù)據(jù)中形成觀點、提煉價值。除非這個企業(yè)本來對數(shù)據(jù)的戰(zhàn)略用途就是非常規(guī)的,大多數(shù)分析型工作主要涉及定義關鍵績效指標、促進業(yè)績增長、尋找增長的下個契機。

達到一定規(guī)模的公司:企業(yè)規(guī)模增長,數(shù)據(jù)規(guī)模會跟著增長。這時,企業(yè)需要利用數(shù)據(jù)創(chuàng)造或保持它的競爭優(yōu)勢,比如:搜索結果要更加優(yōu)化、推薦內(nèi)容的相關性要更高、物流與企業(yè)運作要更加高效。機器學習工程師、企業(yè)運營優(yōu)化專家、實驗設計者之類的專家能夠有效幫助企業(yè)實現(xiàn)以上各種訴求。

我入職的時候,Twitter的數(shù)據(jù)平臺已經(jīng)非常成熟了,基礎設施也非常穩(wěn)定。數(shù)據(jù)倉庫干凈而穩(wěn)定,ETL過程可以日常性、毫無壓力地處理無數(shù)MapReduce任務。最重要的是,在這里,有一群優(yōu)秀的數(shù)據(jù)科學家們致力于數(shù)據(jù)平臺、產(chǎn)品洞悉、Growth、實驗、檢索/相關性以及許許多多其他方面的工作。

我的心路歷程

我是第一個專攻Growth的數(shù)據(jù)科學家。告訴你一個真實的故事:產(chǎn)品部門、工程部門和數(shù)據(jù)科學部門花了好幾個月才共同認識到數(shù)據(jù)科學在Growth中扮演著至關重要的角色。根據(jù)與產(chǎn)品部門密切合作的經(jīng)歷,我的工作內(nèi)容可以分為以下四大類:


  1. 產(chǎn)品洞見
  2. 數(shù)據(jù)流水線
  3. A/B測試
  4. 建模


下面我會分別我做這幾類工作的經(jīng)歷與心得。

1.產(chǎn)品洞見

產(chǎn)品洞見

在消費者技術公司做數(shù)據(jù)科學有個獨特之處:我們可以利用數(shù)據(jù)來理解并推測用戶的意見和偏好。當用戶與產(chǎn)品互動時,我們能記錄到有價值的數(shù)據(jù)與元數(shù)據(jù)(描述其他數(shù)據(jù)并提供相關信息的數(shù)據(jù)集),把它們儲存起來以便日后分析。

這個過程叫做“記錄日志”或“測量”,而且在不斷升級。數(shù)據(jù)科學家們經(jīng)常會因為數(shù)據(jù)不正常、數(shù)據(jù)不匹配或數(shù)據(jù)缺失而難以開展某一項分析。這時候,和工程師建立良好的工作關系就顯得很重要了:數(shù)據(jù)科學家可以幫助工程師識別系統(tǒng)中的bug和意外行為。反過來,工程師可以幫數(shù)據(jù)科學家縮小數(shù)據(jù)斷層,讓數(shù)據(jù)變得更豐富、相關性更強、更精確。

以下是我在Twitter做的幾個典型的產(chǎn)品分析


  1. 推送消息分析——多少用戶適用推送消息?這個比例是用戶組維度的嗎?還是客戶端維度?各種類型的推送消息點擊率是多少?
  2. 短信投放率——如何計算不同移動運營商下Twitter的短信投放率?新興國家用戶的投放率更低嗎?如何提高這一比率呢?
  3. 多個賬戶——為什么某些國家的用戶擁有多個Twitter號的比例更高?人們使用多個Twitter號的動機是什么?


具體分析形式多種多樣——對簡單的數(shù)據(jù)行為(推送分析)給出直白的解釋;創(chuàng)造新生(卻重要的)業(yè)務指標的計算方法;最后,你可能會負責深入分析用戶行為(小號)。

通過產(chǎn)品分析進而形成洞見是一個迭代過程。想做到這一點,你需要質疑以上問題的答案,理解產(chǎn)品所處的業(yè)務環(huán)境,找到合適的數(shù)據(jù)集來解決問題。久而久之,你將能夠熟練地定位你需要的那組數(shù)據(jù)并對其含義了如指掌。你將能夠準確地估算做一項分析需要多長時間。更重要的是,你會逐漸從被動轉為主動,提出新穎有趣的分析角度——產(chǎn)品負責人可能都沒想到,因為他們根本不知道某組數(shù)據(jù)的存在,抑或是不知道截然不同的數(shù)據(jù)源可以以某種方式互補結合。

涉及的技能:


  1. 記錄日志和測量。識別數(shù)據(jù)斷層。與工程師建立良好的工作關系。
  2. 定位、識別并使用相關數(shù)據(jù)集。
  3. 理解類型的分析,準確估算各種分析的耗時或難易程度。
  4. 玩轉查詢語言。能用R或Python做典型的數(shù)據(jù)處理。


2.數(shù)據(jù)流水線

數(shù)據(jù)流水線

雖然分析型數(shù)據(jù)科學家不怎么寫直接面對用戶的代碼,為了處理數(shù)據(jù)流水線,我們還是會經(jīng)常向代碼庫貢獻一些代碼。

如果你對Unix公司的Pipe(一個運行一系列指令的操作)有所耳聞,數(shù)據(jù)流水線就很好理解了——不過是一系列操作,整合在一起以后能夠自動捕捉數(shù)據(jù),循環(huán)地處理并整合數(shù)據(jù)。

我在Twitter以前的公司任職時,所做的分析工作大多是Ad-Hoc(Ad-Hoc結構是一種省去了無線中介設備AP而搭建起來的對等網(wǎng)絡結構)。我一般只在自己的電腦上跑程序,也就跑個一兩次、兩三次。幾乎沒有人來檢查我的代碼寫的怎么樣;運行的時候也不會控制代碼的版本。寫數(shù)據(jù)流水線的時候,一系列問題就出現(xiàn)了:依賴關系管理、計劃安排、資源配置、監(jiān)測、錯誤報告,甚至還有警報。

下面是創(chuàng)建數(shù)據(jù)流水間的典型過程示例:


  1. 首先,你認識到,循環(huán)性地生產(chǎn)數(shù)據(jù)集將會是一件功德無量的事。
  2. 確認了這個需求以后,你先設計出最終產(chǎn)品,例如設計輸出數(shù)據(jù)集的數(shù)據(jù)架構。
  3. 根據(jù)數(shù)據(jù)所在環(huán)境用Pig, Scalding或SQL寫代碼。
  4. 把代碼提交至code review(代碼評審),準備改代碼。也許你的商業(yè)邏輯有問題,或者你的代碼沒能做到速度與效率的最優(yōu)化。
  5. 也許你需要測試程序,空運行(不帶數(shù)據(jù)跑代碼——譯者注)一下,看看代碼是否運行正常。
  6. 整合代碼。把代碼配置好,安排好每一個事項。
  7. 設置監(jiān)控、錯誤報告、警報機制,以防代碼運行出錯。


數(shù)據(jù)流水線顯然比臨時性分析復雜得多,但數(shù)據(jù)流水線的好處是,它可以自動運轉,生產(chǎn)出來的數(shù)據(jù)可以被儀表板所利用,這樣更多的用戶就可以使用你的數(shù)據(jù)或結果。更重要(但往往被忽視)的一點是,簡歷數(shù)據(jù)流水線的過程是個軟件工程實操的絕佳機會。你可以為日后建立專業(yè)化流水線打好基礎,比如機器學習模型(本文最后一部分會對此進行詳細說明)、A/B測試平臺。

涉及的技能:

版本控制。一般來講,最常用的工具是Git(軟件開發(fā)時用到的源代碼管理系統(tǒng)——譯者注)。

學會做code review,迅速地給出反饋。

程序出錯時,知道該怎么測試、空運行、找bug。

掌握依賴管理、計劃安排、資源配置、監(jiān)測、錯誤報告,以及給出提示信息。

3.A/B測試

3.A/B測試

此時此刻,你用的Twitter APP很有可能和我的有所不同,很可能你有的功能我沒有。從內(nèi)部工作人員的角度講,Twitter的用戶非常多,因此Twitter可以抽出一小部分流量來體驗尚未面世的新功能,以便將這部分實驗組用戶對新功能的反饋情況與控制組用戶(即未體驗新功能的用戶——譯者注)作對比——這就是A/B測試,即用來測試變量A與變量B哪個效果更好。

個人認為,A/B測試是在大型消費者技術公司工作的特殊福利。數(shù)據(jù)科學家可以通過使用真實隨機樣本的控制實驗來研究因果關系(用觀測值是很難做到這一點的)。在Twitter,“幾乎每天都要做至少一個實驗——Alex Roetter,高級工程師”。A/B測試已經(jīng)深深烙在Twitter的數(shù)據(jù)科學家心里,也是產(chǎn)品開發(fā)環(huán)節(jié)不可或缺的一環(huán)。

典型的A/B測試過程是這樣的:收集樣本-用戶分組-開始測試-衡量結果-對比分析。聽上去很簡單對吧?然而,我認為A/B測試是最被低估、相當棘手的分析工作,而且學校一般不教你這種技能。為了說明這一點,讓我們來回顧一下一上五個步驟以及實戰(zhàn)過程中的常見問題:


  1. 收集數(shù)據(jù):樣本量需要多少?每組應該分配多少用戶?能不能保證實驗效果足夠明顯?
  2. 用戶分組:哪些用戶適用于這個測試?應該在程序的哪個階段開始分組并對用戶展示測試的新功能?這種分組是否會造成數(shù)據(jù)稀釋(比如某些測試組的用戶在使用過程中根本用不到我們測試的新功能)?
  3. 開始測試:有沒有其他項目組和我們用同一批樣本做測試?如果和他們發(fā)生樣本沖突,如何確保我們的數(shù)據(jù)沒有被污染?
  4. 衡量結果:實驗結果的預期是什么?衡量實驗成功與否的標準是什么?衡量標準可追蹤嗎?如何追蹤?需要額外記錄哪些信息?
  5. 對比分析:假如在線用戶激增,這是來自其他變量的干擾嗎?如何判斷結果是否統(tǒng)計顯著?如果確實是統(tǒng)計顯著的,實際上用戶組之間的差別真的明顯嗎?


處理好以上問題需要很強的統(tǒng)計學功底。即使你自己設計實驗的時候思維足夠嚴謹,你的隊友也有可能掉鏈子。產(chǎn)品經(jīng)理會比較喜歡對數(shù)據(jù)先睹為快,或者挑幾個自己想要的結果(這是人的天性)。工程師可能會忘記記錄數(shù)據(jù)科學家用來計算成敗指標的某些數(shù)據(jù),或者實驗代碼“姿勢”不對,造成偏誤。

對于數(shù)據(jù)科學家來說,故意唱唱反調(diào)、幫助團隊完善實驗是極其重要的,因為浪費在運行設計不合理的測試上的時間會一去不復返。更有甚者,根據(jù)不良數(shù)據(jù)做出的不良決策會造成非常嚴重的后果。

涉及的技能:

假設檢驗:統(tǒng)計檢驗、p值、統(tǒng)計顯著、統(tǒng)計力、效應值、多重檢驗

實驗缺陷:滯后效應、指標選擇、數(shù)據(jù)稀釋、分組異常

4.預測模型與機器學習

4.預測模型與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>

我在Twitter做的第一個大型項目是對現(xiàn)有的郵箱通知產(chǎn)品增設一套繁瑣的規(guī)則,進而減少對用戶的騷擾。雖然這一舉措十分圣母,我們其實也清楚郵件通知是留住用戶的最有效的手段之一(我們曾對此進行試驗,驗證了這一點),所以找到一個合適的度是關鍵。

針對這個關鍵點,我旋即決定研究觸發(fā)性郵件——當用戶在Twitter上有活動時,這種郵件會像雪片一樣飛進用戶的郵箱。作為一個正在努力證明自己的價值的野心勃勃的新晉數(shù)據(jù)科學家,我決定建立一個高端機器學習模型來預測用戶水平上的郵件點擊率。我用Pig收集了一大堆用戶特征,建立了隨機森林模型來預測郵件點擊率。我的思路是,如果一個用戶的點擊率長期保持在很低的值,我們就可以安心撤銷該用戶的觸發(fā)性郵件。

其他的都好說,只有一個問題——我的程序都是用本地電腦上的R寫的。別人承認我很努力,但他們無法利用我的模型來創(chuàng)造價值,因為我的沒有被產(chǎn)品化,公司的組織架構無法和我的局部模型交互。多么慘痛的教訓!

一年后,我得到了與兩名來自Growth的數(shù)據(jù)科學家一起建立顧客流失預測模型的寶貴機會。這一次,有了足夠的建立數(shù)據(jù)流水線的經(jīng)驗,我知道建立機器學習流水線其實是類似的——在訓練階段,我們可以用Python在線下做循環(huán)模型更新;在預測部分,我們可以每日收集用戶特征,用預測公式(大多數(shù)只是“點產(chǎn)品”)生成每個用戶的流失率評分。

我們花了幾個禮拜建起來流水線,確認其具有良好的預測能力,全面部署,將用戶流失率評分輸入到Vertica、Hadoop文件分散系統(tǒng),以及我們的內(nèi)部鍵值存儲“Manhattan”。我們把這些scores涉及的非常便于分析師、數(shù)據(jù)科學家和工程師查詢。這一點大大幫助我們宣傳并促進這個模型的使用。這是我在建造生產(chǎn)模型時學到的最重要的一課。

我故意沒有提及建立機器學習模型的步驟——建立問題框架,定義標簽,手機訓練數(shù)據(jù),設計特征,建立樣品,客觀地測試模型的可行性。這些步驟顯然都很重要,但我認為這些步驟前人都已經(jīng)講得很明白了,無需我來提供相關建議。

我覺得大多數(shù)優(yōu)秀的數(shù)據(jù)科學家,特別是分析型數(shù)據(jù)科學家,都不存在不會建模的問題。他們的困惑在于,知道該怎么建模,但不清楚怎么把自己的模型融入到整體生態(tài)環(huán)境里。我對此的建議是,多和經(jīng)驗豐富的構建型數(shù)據(jù)科學家交流,搞清你需要掌握什么技能,潛心修煉,屆時自然能得心應手地接管相關項目。 請允許我引用以下這段話來為本章畫上句號:

機器學習并不等同于R編程。機器學習是以數(shù)學為根基,用代碼表達,整合到軟件里的。你需要掌握電腦工程師的技能,學著寫可讀、可重復使用的代碼:別人讀你的代碼的次數(shù)將遠遠多于你自己,所以你要寫得能讓別人看懂。”——Ian Wong,于哥倫比亞大學數(shù)據(jù)科學課程客座講座

這里所涉及的技能:


  1. 模式識別:識別可以用模型解決的問題。
  2. 建模和機器學習的基本功:探索式數(shù)據(jù)分析、簡歷特征、特征選擇、模型選擇、訓練/驗證/測試、模型評估
  3. 生產(chǎn)化:掌握上文提到和數(shù)據(jù)流水線相關的一切知識。建立索引標志以便他人查詢。


一些感想

數(shù)據(jù)科學家的工作確實非常令人興奮,那種忽然窺到天機的興奮感堪比腎上腺素爆發(fā)。從零開始構建數(shù)據(jù)管道和機器學習模型會令你成就感滿滿,做A/B測試時,那種翻手為云覆手為雨的上帝姿態(tài)也非常有樂趣。數(shù)據(jù)科學家這條路有苦又累,沿途九九八十一難,但聰明努力的人會迅速克服的。

數(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(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 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); }