1.基礎(chǔ)工資:中國農(nóng)業(yè)銀行的基礎(chǔ)工資是根據(jù)不同的員工職級來發(fā)放的,初入職的柜員,持本科文憑的參照公務(wù)員二十五級;持碩士學(xué)位的,參照公務(wù)員二十四級;持博士學(xué)位的,參照公務(wù)員二十三級。從柜員升職至大堂經(jīng)理后,月薪調(diào)整為5000元左右;升職至二級支行行長時,月薪調(diào)整為8000元左右;升任至一級支行行長時,月薪調(diào)整為9000元左;升任至分行行長時,月薪調(diào)整為10000元左右;總行工作人員平均月薪5800元左右。
2.福利:
(1)五險(xiǎn)一金(醫(yī)療保險(xiǎn),失業(yè)保險(xiǎn),工傷保險(xiǎn),養(yǎng)老保險(xiǎn),生育保險(xiǎn),住房公積金),這部分是從基礎(chǔ)工資里扣除的,大概會扣掉基礎(chǔ)工資的20%。
(2)節(jié)日慰問金:一般是發(fā)放超市的購物卡或獎金,五一、國慶、中秋、春節(jié)的時候發(fā)放,每次500-3000不等。
3.補(bǔ)貼:平時有交通補(bǔ)貼、電話補(bǔ)貼、飯補(bǔ)、消費(fèi)券等各類吃穿用的實(shí)物獎勵
4.績效獎金:
(1)季度獎:每季度7000~9000
(2)年終獎,不同職位年終獎的多少不同,柜員的年終獎大致為2-3w。
(3)銷售獎金,就是平時銷售各種銀行產(chǎn)品的獎勵,因人而異,差異較大。
(4)績效獎金與每個網(wǎng)點(diǎn)的經(jīng)營業(yè)績緊密相關(guān)。
5.其他
(1)福利保險(xiǎn):除政府規(guī)定的各項(xiàng)保險(xiǎn)外,額外提供補(bǔ)充公積金、企業(yè)年金、補(bǔ)充醫(yī)療計(jì)劃、住房補(bǔ)貼計(jì)劃,如每月的住房補(bǔ)貼約1500-1800元。
(2)教育培訓(xùn):新員工入行培訓(xùn)、崗位資格培訓(xùn)、國外(境外)培訓(xùn)。
(3)職業(yè)規(guī)劃:為新員工提供個性化、全面化、長期化的職業(yè)發(fā)展規(guī)劃。
個人網(wǎng)銀柜臺注冊流程:您可持本人有效身份證件、賬戶憑證原件(借記卡、準(zhǔn)貸記卡)前往全國任一農(nóng)行網(wǎng)點(diǎn)簽約開通個人網(wǎng)銀,其中使用活期存折只能在省內(nèi)辦理,如使用貸記卡(信用卡)注冊網(wǎng)銀還必須提供本人任一借記卡、準(zhǔn)貸記卡或存折作為服務(wù)費(fèi)繳費(fèi)賬戶。該業(yè)務(wù)不允許代辦,不允許使用臨時身份證辦理。
1.如持臺胞證辦理需經(jīng)一級行審批。
2.未滿16周歲,開通個人網(wǎng)銀應(yīng)由監(jiān)護(hù)人代理申請。個人網(wǎng)銀自助注冊流程:您可進(jìn)入農(nóng)行網(wǎng)站(www.95599.cn),點(diǎn)擊個人網(wǎng)銀登錄,在用戶名登錄窗口點(diǎn)擊自助注冊。自助注冊僅支持18位個人居民身份證,尚不支持重號身份證。自助注冊的個人網(wǎng)銀可以辦理查詢類交易,但轉(zhuǎn)賬類交易無法操作。
農(nóng)行手機(jī)銀行怎么交新農(nóng)合具體流程如下:
1.下載農(nóng)業(yè)銀行APP,進(jìn)入首頁后選擇“生活繳費(fèi)”;
2.找到“保險(xiǎn)醫(yī)療服務(wù)”,并點(diǎn)擊里面的“社保”;
3.在搜索框內(nèi)輸入?yún)⒈K诘貐^(qū),之后就會彈出該地區(qū)的居民養(yǎng)老保險(xiǎn)和居民醫(yī)保字樣,選擇居民醫(yī)保就行;
4.來到繳費(fèi)頁面后依次輸入?yún)⒈H说纳矸葑C號、繳費(fèi)地區(qū)、繳費(fèi)檔次等信息;
5.最后完成居民醫(yī)保的付款,就算參保成功了。
目前,新農(nóng)合已經(jīng)和城鎮(zhèn)居民醫(yī)保合并成為了城鄉(xiāng)居民醫(yī)保,所以參保居民醫(yī)保就是參保新農(nóng)合。
2021農(nóng)業(yè)銀行春招報(bào)名時間為2020年8月17日—2020年9月6日。
農(nóng)行云南分行微銀行退款流程如下:1. 客戶申請退款:客戶通過農(nóng)行云南分行微銀行平臺提交退款申請,提供相關(guān)的退款信息。2. 銀行審核:銀行工作人員收到客戶的退款申請后,會進(jìn)行審核。審核內(nèi)容包括客戶的身份驗(yàn)證、退款金額的確認(rèn)等。3. 審核通過:如果審核通過,銀行將準(zhǔn)備開始退款。如果審核未通過,銀行會向客戶說明原因并提供對應(yīng)的解決方案。4. 退款處理:銀行將通過客戶提供的銀行賬戶信息進(jìn)行退款處理。退款金額將直接轉(zhuǎn)入客戶指定的銀行賬戶中。5. 退款完成:客戶在一定的處理時間內(nèi)會收到退款金額。需要注意的是,具體的退款流程可能因?yàn)椴煌你y行政策和規(guī)定而有所不同,上述流程僅供參考。如果需要進(jìn)一步了解農(nóng)行云南分行微銀行的退款流程,建議直接向銀行咨詢。
云南省特崗教師招聘面試是考察候選教師綜合素質(zhì)的重要環(huán)節(jié)。體育作為一門重要的學(xué)科,也是特崗教師面試中常被問及的題目之一。本文將為大家介紹云南省特崗教師面試題中與體育相關(guān)的幾個常見問題。
體育對于學(xué)生的發(fā)展具有重要的作用。首先,體育活動可以增強(qiáng)學(xué)生體質(zhì),培養(yǎng)健康的生活習(xí)慣。通過體育鍛煉,學(xué)生的身體素質(zhì)得到提高,有利于預(yù)防疾病的發(fā)生,增強(qiáng)學(xué)生抵抗力。其次,體育可以促進(jìn)學(xué)生的智力發(fā)展。通過體育運(yùn)動,學(xué)生可以提高思維能力、注意力、反應(yīng)能力等,有助于學(xué)生在學(xué)習(xí)上取得更好的成績。此外,體育還能夠培養(yǎng)學(xué)生的團(tuán)隊(duì)合作精神和領(lǐng)導(dǎo)能力,在培養(yǎng)學(xué)生的社會適應(yīng)能力方面起到積極的作用。
在課堂教學(xué)中融入體育元素是提高學(xué)生學(xué)習(xí)積極性和課堂互動性的有效途徑。我可以通過以下幾種方式來融入體育元素:
通過以上方式,我可以在課堂教學(xué)中融入豐富的體育元素,提高學(xué)生的學(xué)習(xí)效果。
體育項(xiàng)目多樣化對學(xué)生發(fā)展有積極的影響。首先,體育項(xiàng)目多樣化可以滿足學(xué)生個體差異化的需求。不同學(xué)生在體育方面的興趣和擅長項(xiàng)目各有不同,通過提供多樣化的體育項(xiàng)目,可以讓每個學(xué)生都能找到適合自己的項(xiàng)目,從而激發(fā)學(xué)生的興趣和積極性。其次,體育項(xiàng)目多樣化可以促進(jìn)學(xué)生全面發(fā)展。不同的體育項(xiàng)目涉及到不同的身體能力和技能,通過參與多樣化的體育項(xiàng)目,學(xué)生可以全面鍛煉身體各個方面的能力,提高綜合素質(zhì)。此外,體育項(xiàng)目多樣化還能夠培養(yǎng)學(xué)生的協(xié)作精神和競爭意識,為學(xué)生的個人成長和未來的社會適應(yīng)能力奠定基礎(chǔ)。
鼓勵學(xué)生積極參與體育活動是提高體育教學(xué)效果的關(guān)鍵。我會采取以下幾種方式來鼓勵學(xué)生積極參與體育活動:
通過以上方式,我可以有效地鼓勵學(xué)生積極參與體育活動,提高體育教學(xué)的效果。
對學(xué)生在體育方面的評價(jià)應(yīng)綜合考慮學(xué)生的身體素質(zhì)、技能水平以及參與度等方面。我認(rèn)為可以從以下幾個方面對學(xué)生在體育方面的表現(xiàn)進(jìn)行評價(jià):
通過綜合考慮以上幾個方面的評價(jià),可以對學(xué)生在體育方面的表現(xiàn)做出全面和客觀的評價(jià)。
總之,體育在學(xué)生發(fā)展中具有重要的作用,融入體育元素的課堂教學(xué)能夠提高學(xué)生的學(xué)習(xí)積極性和互動性。多樣化的體育項(xiàng)目對學(xué)生全面發(fā)展有積極影響,鼓勵學(xué)生積極參與體育活動是提高體育教學(xué)效果的關(guān)鍵。對學(xué)生在體育方面的評價(jià)應(yīng)從多個方面進(jìn)行綜合考慮。希望以上內(nèi)容能對云南省特崗教師面試中與體育相關(guān)的題目有所幫助。
農(nóng)業(yè)銀行秋招面試通過率?
根據(jù)往年農(nóng)行的面試情況來看,其面試錄取比例為1:3,面試通過率為30%左右,整體上來看難度還是比較大的。
農(nóng)行面試形式為無領(lǐng)導(dǎo)小組討論和半結(jié)構(gòu)化面試。
本文主要講一下農(nóng)行的無領(lǐng)導(dǎo)和半結(jié)構(gòu)化面試如何準(zhǔn)備?
一、農(nóng)行無領(lǐng)導(dǎo)小組討論
(一)無領(lǐng)導(dǎo)小組的流程
無領(lǐng)導(dǎo)小組面試其實(shí)就是一組考生6-9個人,同時進(jìn)入考場,農(nóng)業(yè)銀行無領(lǐng)導(dǎo)小組面試時長在1小時左右。
第一階段:考官給考生同樣的一段材料進(jìn)行準(zhǔn)備,考生先逐一發(fā)表自己的觀點(diǎn)。組內(nèi)考生的觀點(diǎn)一定會有差異和區(qū)別,
第二階段:組內(nèi)考生進(jìn)行討論,最終要求整個小組形成統(tǒng)一意見。
第三階段:一般會要求組內(nèi)推選一個人來做總結(jié)。
(二)無領(lǐng)導(dǎo)小組的題型
無領(lǐng)導(dǎo)小組討論的討論題一般都是智能性的題目,從形式上來分,可以分為以下五種:1、開放式:例如,您認(rèn)為什么樣的領(lǐng)導(dǎo)才是個好領(lǐng)導(dǎo)?
2、兩難式:例如,您認(rèn)為能力和合作精神哪個更重要?
3、排序選擇:例如,若母親、妻子、兒子三人同時落水,該先救誰?
4、資源爭奪:例如,公司只有500萬獎金,不同部門應(yīng)如何分配?
5、實(shí)際操作:針對存在的問題設(shè)計(jì)一個實(shí)際操作方案。
隨著科技的進(jìn)步和互聯(lián)網(wǎng)的普及,人們?nèi)粘I钪械慕鹑诮灰滓仓饾u實(shí)現(xiàn)了線上操作,其中轉(zhuǎn)賬就是一項(xiàng)非常常見的金融操作。然而,不同銀行之間的轉(zhuǎn)賬速度卻有所不同。今天我們來探討一下農(nóng)業(yè)銀行轉(zhuǎn)農(nóng)業(yè)銀行的轉(zhuǎn)賬到賬時間以及一些注意事項(xiàng)。
農(nóng)業(yè)銀行,作為我國重要的商業(yè)銀行之一,服務(wù)了廣大農(nóng)民和城市居民多年。很多人經(jīng)常會有跨行轉(zhuǎn)賬的需求,而對于農(nóng)行轉(zhuǎn)農(nóng)行的到賬時間,很多人都頗有些疑惑。
首先,我們需要明確一點(diǎn),農(nóng)行轉(zhuǎn)農(nóng)行的到賬時間受到多種因素的影響,包括但不限于以下幾個方面:
農(nóng)行提供了多種轉(zhuǎn)賬方式,包括柜面轉(zhuǎn)賬、網(wǎng)銀轉(zhuǎn)賬、手機(jī)銀行轉(zhuǎn)賬等。不同的轉(zhuǎn)賬方式對到賬時間有一定的影響。一般來說,通過柜面轉(zhuǎn)賬的到賬時間較長,可能需要1-2個工作日;而通過網(wǎng)銀轉(zhuǎn)賬或手機(jī)銀行轉(zhuǎn)賬,則更加便捷,一般情況下當(dāng)天即可到賬。
轉(zhuǎn)賬金額也是影響到賬時間的重要因素之一。較小的金額往往能夠更快地到賬,而較大的金額可能需要更長的時間進(jìn)行核實(shí)和處理。這是因?yàn)檩^大金額的轉(zhuǎn)賬涉及到風(fēng)險(xiǎn)控制和合規(guī)性審核,需要更多的時間來確保資金安全。
農(nóng)行轉(zhuǎn)農(nóng)行的到賬時間還與轉(zhuǎn)賬時間有關(guān)。如果您在工作日的工作時間內(nèi)進(jìn)行轉(zhuǎn)賬,一般來說到賬會相對較快,可能在同一天或者第二個工作日就能到賬。但如果您在節(jié)假日或非工作時間進(jìn)行轉(zhuǎn)賬,那可能需要更長的時間來完成處理。
需要注意的是,以上所提到的轉(zhuǎn)賬時間只是一般情況下的估計(jì),實(shí)際到賬時間還可能受到其他因素的影響,如網(wǎng)絡(luò)延遲、節(jié)假日等。如果轉(zhuǎn)賬時間較長或有其他問題,建議您及時聯(lián)系農(nóng)行客服查詢。
對于大部分轉(zhuǎn)賬需求來說,農(nóng)行轉(zhuǎn)農(nóng)行的到賬時間還是相對較短的。農(nóng)業(yè)銀行作為我國的大型銀行之一,擁有完善的網(wǎng)絡(luò)系統(tǒng)和專業(yè)的處理團(tuán)隊(duì),能夠提供快速、安全的轉(zhuǎn)賬服務(wù)。
總而言之,農(nóng)業(yè)銀行轉(zhuǎn)農(nóng)業(yè)銀行的到賬時間是根據(jù)轉(zhuǎn)賬方式、轉(zhuǎn)賬金額和轉(zhuǎn)賬時間等因素綜合決定的。一般情況下,通過網(wǎng)銀轉(zhuǎn)賬或手機(jī)銀行轉(zhuǎn)賬的到賬時間較快,可能當(dāng)天就能到賬。但如果通過柜面轉(zhuǎn)賬或金額較大的轉(zhuǎn)賬,則可能需要1-2個工作日的時間。
無論是農(nóng)業(yè)銀行轉(zhuǎn)農(nóng)業(yè)銀行還是其他銀行之間的轉(zhuǎn)賬,作為用戶我們都需要提前做好規(guī)劃和安排,選擇合適的轉(zhuǎn)賬方式,并留出足夠的時間來處理可能出現(xiàn)的延遲。
希望以上對于農(nóng)行轉(zhuǎn)農(nóng)行到賬時間的解答能夠幫助到您,祝您使用農(nóng)業(yè)銀行的轉(zhuǎn)賬服務(wù)順利愉快!
農(nóng)行對農(nóng)行轉(zhuǎn)賬多久到賬
農(nóng)行作為國內(nèi)最大的商業(yè)銀行之一,在轉(zhuǎn)賬業(yè)務(wù)方面一直備受用戶關(guān)注。尤其是在農(nóng)行對農(nóng)行轉(zhuǎn)賬到賬時間上,許多用戶關(guān)心的問題就是,轉(zhuǎn)賬多久能夠到賬?在本文中,我們將詳細(xì)解答農(nóng)行對農(nóng)行轉(zhuǎn)賬的到賬時間問題。
1. 農(nóng)行對農(nóng)行轉(zhuǎn)賬是什么?
農(nóng)行對農(nóng)行轉(zhuǎn)賬是指在中國農(nóng)業(yè)銀行賬戶之間進(jìn)行轉(zhuǎn)賬的操作。這種轉(zhuǎn)賬方式非常方便,因?yàn)檗r(nóng)行用戶可以通過不同的渠道進(jìn)行操作,例如柜面、ATM、手機(jī)銀行和網(wǎng)銀等。無論是個人用戶還是企業(yè)用戶,都可以選擇這種轉(zhuǎn)賬方式來完成資金的劃轉(zhuǎn)。
2. 農(nóng)行對農(nóng)行轉(zhuǎn)賬的到賬時間
農(nóng)行對農(nóng)行轉(zhuǎn)賬的到賬時間主要受到以下幾個因素的影響:
在一般情況下,小額轉(zhuǎn)賬(例如5000元以下)的到賬時間通常較快,一般可以在當(dāng)日或者最多1個工作日內(nèi)到賬。而大額轉(zhuǎn)賬(例如5000元以上)的到賬時間會相對較長,可能需要2個工作日或更久的時間才能到賬。
此外,不同的轉(zhuǎn)賬方式也會對到賬時間產(chǎn)生影響。例如通過柜面辦理的轉(zhuǎn)賬可能相對較慢,而通過手機(jī)銀行或網(wǎng)銀進(jìn)行操作的轉(zhuǎn)賬能夠更快到賬。
還有一個重要的因素是轉(zhuǎn)賬時間。如果您在農(nóng)行規(guī)定的轉(zhuǎn)賬時間內(nèi)進(jìn)行操作,通常能夠保證較快的到賬時間。但如果您在非工作時間或者節(jié)假日進(jìn)行轉(zhuǎn)賬,那么到賬時間可能會延遲。
最后,農(nóng)行系統(tǒng)的處理時間也是影響到賬時間的重要因素之一。因?yàn)殂y行需要對轉(zhuǎn)賬訂單進(jìn)行審核和處理,所以在高峰期可能會出現(xiàn)一定的延遲。如果您的轉(zhuǎn)賬與其他用戶較多的同時進(jìn)行,那么到賬時間可能會稍有延遲。
3. 如何縮短農(nóng)行對農(nóng)行轉(zhuǎn)賬的到賬時間
如果您希望盡快收到農(nóng)行對農(nóng)行轉(zhuǎn)賬的款項(xiàng),我們提供以下幾點(diǎn)建議:
4. 其他注意事項(xiàng)
在進(jìn)行農(nóng)行對農(nóng)行轉(zhuǎn)賬時,我們還需要注意一些其他事項(xiàng):
結(jié)論
農(nóng)行對農(nóng)行轉(zhuǎn)賬的到賬時間與轉(zhuǎn)賬金額、轉(zhuǎn)賬方式、轉(zhuǎn)賬時間和系統(tǒng)處理時間等因素相關(guān)。一般情況下,小額轉(zhuǎn)賬到賬時間較短,大額轉(zhuǎn)賬到賬時間較長。為了縮短到賬時間,可以選擇合適的轉(zhuǎn)賬方式,并盡量避開非工作時間和節(jié)假日。此外,注意避開高峰期和確認(rèn)轉(zhuǎn)賬信息準(zhǔn)確無誤也能夠提高到賬速度。
如果您在使用農(nóng)行對農(nóng)行轉(zhuǎn)賬過程中遇到問題,建議及時聯(lián)系農(nóng)行客服進(jìn)行咨詢和解決。
之前看了Mahout官方示例 20news 的調(diào)用實(shí)現(xiàn);于是想根據(jù)示例的流程實(shí)現(xiàn)其他例子。網(wǎng)上看到了一個關(guān)于天氣適不適合打羽毛球的例子。
訓(xùn)練數(shù)據(jù):
Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No
檢測數(shù)據(jù):
sunny,hot,high,weak
結(jié)果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實(shí)現(xiàn)分類。
基本思想:
1. 構(gòu)造分類數(shù)據(jù)。
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進(jìn)行分類。
接下來貼下我的代碼實(shí)現(xiàn)=》
1. 構(gòu)造分類數(shù)據(jù):
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進(jìn)行分類。
這三步,代碼我就一次全貼出來;主要是兩個類 PlayTennis1 和 BayesCheckData = =》
package myTesting.bayes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ToolRunner;
import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;
import org.apache.mahout.text.SequenceFilesFromDirectory;
import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
public class PlayTennis1 {
private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";
/*
* 測試代碼
*/
public static void main(String[] args) {
//將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓(xùn)練模型
makeModel(false);
//測試檢測數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數(shù)據(jù)轉(zhuǎn)換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"testinput";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉(zhuǎn)換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉(zhuǎn)換成向量失敗!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測試數(shù)據(jù)轉(zhuǎn)換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"input";
String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉(zhuǎn)換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉(zhuǎn)換成向量失敗!");
System.out.println(2);
}
}
public static void makeModel(boolean completelyNB){
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";
String model = WORK_DIR+Path.SEPARATOR+"model";
String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";
Path in = new Path(input);
Path out = new Path(model);
Path label = new Path(labelindex);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(label, true);
}
TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();
String[] params =null;
if(completelyNB){
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};
}else{
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};
}
ToolRunner.run(tnbj, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生成訓(xùn)練模型失敗!");
System.exit(3);
}
}
}
package myTesting.bayes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.mahout.classifier.naivebayes.BayesUtils;
import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;
import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.math.Vector.Element;
import org.apache.mahout.vectorizer.TFIDF;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
public class BayesCheckData {
private static StandardNaiveBayesClassifier classifier;
private static Map<String, Integer> dictionary;
private static Map<Integer, Long> documentFrequency;
private static Map<Integer, String> labelIndex;
public void init(Configuration conf){
try {
String modelPath = "/zhoujianfeng/playtennis/model";
String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";
String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";
String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";
dictionary = readDictionnary(conf, new Path(dictionaryPath));
documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));
labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);
classifier = new StandardNaiveBayesClassifier(model);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("檢測數(shù)據(jù)構(gòu)造成vectors初始化時報(bào)錯。。。。");
System.exit(4);
}
}
/**
* 加載字典文件,Key: TermValue; Value:TermID
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {
Map<String, Integer> dictionnary = new HashMap<String, Integer>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
String name = path.getName();
return name.startsWith("dictionary.file");
}
};
for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {
dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());
}
return dictionnary;
}
/**
* 加載df-count目錄下TermDoc頻率文件,Key: TermID; Value:DocFreq
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {
Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().startsWith("part-r");
}
};
for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {
documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());
}
return documentFrequency;
}
public static String getCheckResult(){
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String classify = "NaN";
BayesCheckData cdv = new BayesCheckData();
cdv.init(conf);
System.out.println("init done...............");
Vector vector = new RandomAccessSparseVector(10000);
TFIDF tfidf = new TFIDF();
//sunny,hot,high,weak
Multiset<String> words = ConcurrentHashMultiset.create();
words.add("sunny",1);
words.add("hot",1);
words.add("high",1);
words.add("weak",1);
int documentCount = documentFrequency.get(-1).intValue(); // key=-1時表示總文檔數(shù)
for (Multiset.Entry<String> entry : words.entrySet()) {
String word = entry.getElement();
int count = entry.getCount();
Integer wordId = dictionary.get(word); // 需要從dictionary.file-0文件(tf-vector)下得到wordID,
if (StringUtils.isEmpty(wordId.toString())){
continue;
}
if (documentFrequency.get(wordId) == null){
continue;
}
Long freq = documentFrequency.get(wordId);
double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);
vector.setQuick(wordId, tfIdfValue);
}
// 利用貝葉斯算法開始分類,并提取得分最好的分類label
Vector resultVector = classifier.classifyFull(vector);
double bestScore = -Double.MAX_VALUE;
int bestCategoryId = -1;
for(Element element: resultVector.all()) {
int categoryId = element.index();
double score = element.get();
System.out.println("categoryId:"+categoryId+" score:"+score);
if (score > bestScore) {
bestScore = score;
bestCategoryId = categoryId;
}
}
classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";
return classify;
}
public static void printResult(){
System.out.println("檢測所屬類別是:"+getCheckResult());
}
}