微博@石广智photo
这就是造船工人,在南京,他们每天的工资从80到300不等。
按天算钱。
他们算是中国最底层的技术工人,用青春和血汗换生存。
我是他们中的一员。
++++割割哒++++
换电脑上来答题。
为什么会有这样的问题?我觉得可以分析一下。
1. 大部分需要一定技术的职位工作环境都很差。答主从事的是船舶制造业,从原材料加工厂,设备厂家再到造船厂,整个产业链的相关单位的工作环境基本都差强人意。我们不讨论进城务工人员这部分劳动力的需求。单单就每年的毕业生来说,工厂的工作环境和写字楼是完全不能比的。而同时,他们还要面对人身安全的威胁,因为在重工业,死人是太常见的事情了……
这个社会有这样一个残酷的现实——如果你家里和亲戚朋友乃至相亲对象介绍你的时候说你在工厂工作的时候,大部分人会自动把你放低一等。
人都是有虚荣心的。
发几张船厂的施工区域给大家看看吧。
船体合拢的船坞。
两个在烧电焊的工人,这个高度大概是20米左右。
我站在30高的升降车上朝下拍的照片。
2. 浮夸的制造业。整个制造业都在追求项目的完成率。没有人关心年轻人的培养,整个职业发展都还停留在一种粗放式的”传帮带“模式里。没有相关的教材,资金,以及人员比重倾斜。大家目的都很明确——我招你进来是让你干活的,其他的以后再说。
3. 极端的劳动强度和不成正比的收入。知乎上程序猿比例很大,经常有过劳死出现。但是在制造业尤其是重工业,我想说程序猿真的是很轻松的工作了。我本人在工作第一年的时候,曾经有过连续56个小时不合眼同时还在船上爬上爬下(这个所谓的爬上爬下是指从离地面1米到30米再到1米反复的一个过程)的经历,而且不止一次。长达两个月每天早上7点到晚上11点高密度的工作。每天电话200多个,手机两块电池都不够用。所以知道为什么我们爱用山寨机了吗?因为可以不用频繁充电……我的一个师兄,一年365天休息了3天,工作强度同样是早上7点到晚上11点,没事也要通宵。我的收入转正前是2500,转正后4600,我的师兄9000出头。而且,我们还要面对第1条里恶劣复杂的工作环境。
4. 其他。上面的每一条都可以引申出无数更复杂的话题。工人素质差;劳动力流动量大,相关培训不切实际;国家政策和市场环境不好,等等等等……这些都是制约制造业发展不起来的因素。
所以,用工荒你还觉得奇怪吗?
。。。。。
船厂那个姑娘。。。
你确定要看那些照片吗。。。。
我只是觉得照片得挑好看的po。。。。
先来一摊尿。(真的是尿!不是水!)
机舱来了。
还是机舱。
pm250。
还有更劲爆的,要看吗?
朋友圈晒盐花大赛。
叫船检都是大爷的都是什么鬼。我和你们是在同一个地球上吗?为毛我从来没享受过大爷的待遇。。。。。。
大爷这个梗是没完了。
讲真你们见过这样的大爷?
还有这样的大爷?(衣服干净是因为上午穿的已经湿透了,这件是下午刚换的。)
近年来,随着高校毕业生人数不断增加,大学生就业难成为社会关注的焦点。根据统计数据显示,每年都有大量毕业生进入就业市场,而岗位数量并未相应增长,造成了就业压力的日益增大。
与此同时,社会上存在着与大学生就业形成鲜明对比的"技工荒"。许多技术类工作岗位一直存在一定的需求,但由于人才短缺,导致了技工荒的局面。
面对大学生就业难与技工荒的现状,从根本上看,职业选择仍需因材施教。不同的个体应根据自身兴趣、特长以及未来职业发展前景来选择职业方向。以实际需求为导向,选择适合自己的职业将更有利于个人成长与社会发展。
教育与培训也应顺应职业选择之路。大学教育需要更多地关注实际职业需求,培养符合社会实际需求的人才,而技工类培训也需要更多的支持与推广,使更多人有机会接受相关技术培训。
通过对大学生就业难与技工荒的思考,我们能更好地认识到职业选择的重要性,以及教育与培训的现实需求。希望本文能够引起更多人对职业选择的关注,引导更多人走上适合自己的职业道路。
感谢您阅读本文,希望本文能为您带来对职业选择及教育培训的启发与帮助。
一方面是大量的普通大学生在找工作,另外一方面是大量的企业缺乏有技术的工种,这是一种真实发生的现象。
我觉得要从以下几个方面引导大家让自己的小孩去职业技校上学、就读。
第一,提高技术工种的社会地位和劳动报酬,人往高处走,水往低处走,我们国家要切切实实提高技术工人的各方面待遇,待遇高了,人们选择的也就多了,不会一窝蜂都去读普通大学,你说一个在企业坐办公室的一年5万年薪,而做技术工人能有20万年薪,甚至30万年薪,那么我想很多人会考虑选择技术工人这个职业。
第二,降低政府单位和事业单位的工资待遇,目前政府单位和事业单位工资待遇总体还是偏高,在这全世界范围来看,也是导向不对的,这会导致国内人们全部目光聚焦于公务员和事业编制,考上编制了就是光祖耀祖,待遇好,福利高,大家都趋之若鹜,这应该不是正常现象,所以降低相关人员的待遇应该让大家有更多的选择。一个公务员年薪10万,一个技术工人20万,甚至于30万,50万,让大家觉的做技术工人也是一种引以为豪的职业。
第三,鼓励更多的同学进入技术工人行业,对于考取相关证书的工人,国家应该给予个人的直接补贴,或者给予当地的相关待遇,比如子女入学,购房优惠等等一系列的待遇。
愿望是美好的,但是短期内无法改变,还是期待会有些改变,让技术工人焕发新生,技术的进步才是推动社会的进步。
首先,让我们来看看it技工的发展前景。随着信息技术的飞速发展,it行业的需求也在不断增长。无论是软件开发、网络工程还是数据科学,都需要大量的it技工来支持。此外,随着人工智能、物联网等新兴技术的崛起,it技工的需求还将继续增长。因此,对于有志于从事it行业的年轻人来说,it技工是一个非常有前途的职业选择。
然而,it技工这个职业也面临着一些挑战。首先,技能要求高。it行业的技术更新换代速度非常快,it技工需要不断学习新的技术和工具,才能保持竞争力。其次,工作压力大。it行业的工作节奏快,加班是常态,对于家庭和个人的生活都会有一定影响。最后,职业发展路径相对狭窄。it技工往往需要从初级岗位做起,逐步积累经验,才能晋升到高级岗位,职业发展路径相对较窄。
那么,如何应对这些挑战呢?首先,要不断学习,提升自己的技能水平。其次,要合理安排工作时间和休息时间,保持身心健康。最后,要拓宽自己的职业技能,不仅局限于编程和技术支持,还可以涉猎数据分析和市场营销等领域,为自己的职业发展打下更广泛的基础。
总的来说,it技工是一个充满机遇和挑战的职业。只要我们不断学习、提升自己的技能,积极应对挑战,就一定能够在it行业中取得成功。在现代社会中,技工行业被广泛认可为经济发展的重要组成部分。无论是汽车维修、家庭装修还是电器维护,技工都扮演着重要的角色。然而,要成为一名熟练的技工并非易事,需要系统性的培训和专业的知识。这就是为什么技工驾校成为了越来越多人追求的目标。
技工驾校为有志于从事技工行业的人们提供了宝贵的培训资源和机会。通过参加技工驾校的课程,学员可以获得相关领域的专业知识和实践经验。无论你是想成为一名汽车维修工、木工还是电工,技工驾校都能够根据你的兴趣和目标为你提供专业的培训计划。
技工驾校的培训课程旨在提供高质量的专业化培训,以满足日益增长的技工需求。这些课程结合了理论知识与实际操作,帮助学员建立起扎实的技能基础。无论是学习汽车维修、焊接技术还是电子设备维护,技工驾校都有专门的课程来满足不同学员的需求。
技工驾校的培训教官都是经验丰富、技术娴熟的专家。他们将教授最新的行业标准和最先进的技术,确保学员能够掌握最有效的技工技术。他们会用大量实际案例来帮助学员理解复杂的概念,并提供实用的解决方案。
与传统学院教育不同,技工驾校注重学生的实践能力培养。他们为学员提供了丰富的实践经验机会,使他们能够在真实场景中应用他们所学到的知识。这些实践经验可以是模拟实验、实地考察还是实际项目的参与。
实践经验的机会使学员能够更好地理解和掌握技工技术。通过实践,他们能够了解实际操作中可能遇到的挑战,并学会灵活解决问题。学员还可以与行业专家进行互动,获取宝贵的建议和指导。
技工驾校毕业的学员通常能够受益于广阔的就业机会和职业发展前景。技工行业的需求持续增长,因此对于熟练的技工来说,就业机会非常丰富。
技工驾校通常与相关行业建立紧密的合作伙伴关系,为学员提供就业推荐和实习机会。一些优秀的学员甚至可能获得全额奖学金,受到公司的赞助并直接就业于技术领域的重要企业。
此外,技工驾校还提供职业发展支持。他们会帮助学员制定职业规划,提供就业指导和资源,以帮助学员更好地实现职业目标。
选择技工驾校是成为一名专业技工的绝佳选择。以下是一些选择技工驾校的理由:
在如今竞争激烈的就业市场中,成为一名受到认可的专业技工是能够获得成功的重要因素之一。选择参加技工驾校的培训课程,可以为你打下坚实的职业基础,提高就业竞争力。
无论你是准备进入技工行业,还是希望提升现有技能,技工驾校都能为你提供所需的培训资源和机会。不要等待,走上成为一名专业技工的必经之路!
文案:
冶金装备、矿山装备、电力装备、海工装备……一个泱泱大国,不能没有自己的重型装备工业。
国家重大装备办处长冯啸辰穿越到了1980年,看他如何与同代人一道,用汗水和智慧,铸就大国重工
特点:男主视角,种田,穿越,年代文,感情戏少,重工业,爽文,事业奋斗,强国,2019-03-03完结
字数:284.44万字
(芭莳圈扫文组湁②仴彡湁壹 8.7分评价)文比较长,男主穿七十年代奋斗事业,有cp,但是感情线较少,专业术语较多,与我国重工业相关,喜欢看这种奋斗事业的爽文的小可爱可以读一下。
文案:
小西医谢笙穿成继夫人之子。
前有原配嫡长子风流俊秀,后有庶姐才满京城。
明明是继夫人所出嫡子嫡女,生生被压得没处落脚。
谢笙务必要活出个好模样,才能叫母亲、姐姐有靠。
都说侯门公府金汤匙,谢笙偏偏要寒窗苦读,走一条完全不同的为官之路。
没什么太大的金手指,西医出身就是会背书。
1V1,科举当官。
无所谓极品,只是立场不同。
特点:穿越,种田,男主视角,科举,爽文,平淡日常,胎穿,2019-04-24完结
字数:872192字
(芭莳圈扫文组『空、白』 8.8分评价)本文算是男主文,有点像【本王想静静】,男主,现代西医胎穿,母亲是侯府继室,不被婆母喜欢,甚至不喜欢男主及其姐姐,有一个父亲原配遗留的嫡长兄,不同于一般的兄弟争夺候位的戏码,男主及其母亲将一切让与哥哥,而自己走科举的道路,收获了自己一家和睦的亲情,男主人小却聪慧讨喜,懂分寸知进退,酷爱读书,和皇子也有深厚的友谊!
这篇小说,内容比较积极向上,为了给家人依靠,自己要先立得住,宣扬了一种以真心换真心的理念,喜欢男主的处事态度,能够认清自己的地位,不盲目自大,不恃宠而骄,但也不软弱可欺,处事有章法!男主的家庭氛围是最让人感觉舒心的,全文无虐,走的是平淡叙事路线,从男主出生至男主年老的故事!
但正因为时间跨度太长,文章篇幅又不够长,中间省略较多,很多支线都没有交代清楚,给人一种模模糊糊的感觉,而男主的一些猜测业写的模棱两可,让人弄不大弄懂是啥意思,虽然不影响情节的发展,还是会感觉到稍些别扭!
文章前部分很吸引人,但后劲不足,稍显乏味,对于朝堂的争斗描写的感觉不是很到位!结局有些仓促!
文案
小户人家鸡毛蒜皮热热闹闹的过日子
好脾气的爹,精明的娘,重男轻女的祖母,以及越过越有滋味儿的小日子~~~~
不知为何,石头的文里怎么总是提前就把祖父写死了呢???
特点:穿越,种田,2017.07.20完结
字数:2605250字
(芭莳圈扫文组小甜饼 9.1分点评)何子衿穿越出生于一个小富家庭,母亲舅舅颜值高的,奶奶极度重男轻女,但是是个挺讲道理的老太太。何子衿父亲和母亲很喜欢何子衿,何子衿长大开始和奶奶打闹中关系变好。何子衿的父亲是秀才,姑父舅舅都考了进士当了官。日子过得很如意,舅舅原来喜欢的女人把自己的孩子沈念给舅舅送了过来。希望舅舅可以抚养。但是舅舅把孩子给了何子衿家,沈念很缠着子衿。一次灯会上子衿差点被拐卖,是沈念救了子衿,并且沈念的上一世回来。子衿想让阿念回来,每天和阿念说话。阿念最后和子衿在一起,后面还讲了阿念的身世。超长文挺有趣味性的。
文案:
叶娇一觉醒来,已经坐上了给人冲喜的花轿,眼瞅着就要守活寡
祁昀病歪歪的,八字不好,命格不好,动不动要死要活,吃什么药都不管用
可在叶娇嫁来后,他的身子却越来越好
说好的三十必死,谁知道居然奔着长命百岁去了
这才发现,天下间最好命的原来是自家娘子……
特点:种田,冲喜,妖精穿人,男主腹黑,2019-04-20完结
字数:1096463字
类似小说:《灵素入凡记》
(芭莳圈扫文组尘尘 9.2分点评)文笔9.0 剧情9.0 综合9.2 。书荒中发现的精品,作者文笔细腻流畅,笔力深厚,叙事人物都描写的很好,特别是人物,由浅入深寥寥几笔,人物性格就跃然纸上,再说剧情,这本书剧情和《灵素入凡记》有异曲同工之处,一个是神仙学做人,一个是妖精学做人,不同处就是这本的女主要更懂世故一点,虽说都是纯真得不谙世事,但本书女主更知情识趣些,男主的人设也是比较腹黑的那种,所以相比《灵素》这本更和大众口味一些,但缺点就是后期会有点腻歪,但不影响整体阅读感官,喜欢种田文的值得一看。
文案:
现代高级美容师黎茉一朝穿越,成为一个被卖给乡下汉子的农妇。
看着摇摇欲坠的破草房,腿有残疾的丈夫,还有瘦骨伶殉的小包子,黎茉叹口气,必须要发家致富了啊
特点:种田,穿越,化妆发家,温馨平淡,发家致富,没有金手指,男主残疾,布衣生活,2018.03.21完结
字数:373468字
(芭莳圈扫文组懒猫 8.2分点评)女主穿越,男主种地,只是种地,本文基本都在写女主如何凭精湛的化妆技术发家致富,没有大富大贵,只是小富,男主就只是在背后帮女主打理,男主没权没势,所以在女主被欺压时也是靠男主当兵时认识一个富家公子所帮,没有金手指,没有完美男主,男主长的也一般,没有特长,所以想看霸道总裁的,就别看了,特别平淡的种田文,书荒可看
文案
厌倦争斗的叶木青偏偏穿越到一个极品之家。
娘彪悍又护短,爹老实又窝囊,万事不管。
大姐有扶弟狂魔倾向,二姐爱掐尖争宠。
弟弟眼看就被养成小恶魔,这日子实在让人没法过。
叶木青能否用自己的双商让极品之家走向正常并带着他们脱贫致富奔小康?
特点:种田,穿越,女主经商,家长里短,布衣生活,2017.12.21完结
字数:379249字
(芭莳圈扫文组小甜饼 8.3推荐)女主叶木青穿越农家奶奶嚣张跋扈不讲理, 娘彪悍又护短,爹老实又窝囊,万事不管。 大姐有扶弟狂魔倾向,二姐爱掐尖争宠。 弟弟眼看就被养成小恶魔,这日子实在让人没法过。叶木青穿越过去努力赚钱想办法,做生意鼓励父母分家,慢慢扭转弟弟的性子,在过程中找到自己的幸福的故事。
有一个小 亮点是男主张炎(原朱炎)和男配朱威荣(原张威荣)一个是大户人家的儿子一个是奶娘的儿子,奶娘死了告诉男配离男主远点会克了男主,其实他们的身份互换,女主原来因为男主出身大户不愿意接受男主,反而对多次帮助了她有义气的男配有好感,但是哪想到男配对任何人都有义气。最后身份互换回来男主靠自己努力赚钱生活,男配确在狐朋狗友的影响下出去赌场酗酒,最后虽然改邪归正但还是错过了女主。男主和女主过上了悠闲自在的小日子。
文案
姜玉姝穿越成自杀未遂的新媳妇,婆母冷冷道:“我知道你嫌弃郭家败落了,但昨日你已同弘磊拜堂成亲,生是他的人,死是他的鬼,休想逃离!”
生死攸关,她别无选择,咬牙跟随被流放的丈夫出塞,三千里长路漫漫,险象环生。
道路崎岖、深山密林、野兽横行、废宅破庙、风餐露宿……古代特殊蜜月之旅,敬请围观。
抵达西苍后,她毅然奔向田野,智计百出不屈不挠,硬是将荒凉边塞变为繁华粮仓,终成一方富强!
1v1,he,架空甜宠,请勿考究
字数:1130304字
(芭莳圈扫文组旧年啦 8.4分推荐)女主穿越,有前女主的记忆,与男主认识也是在前女主上吊自杀后,二人之前没有交集,结婚第二天就因男主大哥贪墨被抄家流放,本来要休妻保女主的,但是女主父亲迂腐不同意耽搁一下圣旨就下了,太监当场清查人数,女主跟着流放三千里,大概北京到西藏那种程度,女主农科院毕业,热爱生活,热爱黄土地,性子温柔,自主能力十足,前期猥琐发育是要吐槽一下的,后期噎死人,主修农副产品,边陲对于女主来说就是自家农院,男主前期存在感低,后期打仗升官后才好一些,前期女主审时度势,对男主察言观色后发觉是可以满足一夫一妻制的人选后,敞开心扉谈恋爱。本文女主光环不重,边陲生活艰辛且无奈,女主善农业能扩大产量便是上级谋政途的工具,不知道作者是怎么想的,古代女子怀孕还要完成巡查农田的任务?也是费解的很。是一篇有质量的种田文。
文案
孤儿夏至穿越了,
有父:秀才……妻管严(药不能停)
有母:漂亮能干……重男轻女顾娘家(何弃疗)
夏至:我不嫁傻子!
风格:家长里短
(芭莳圈扫文组四月 推荐)家长里短 爽文 种田文 腹黑 女主因意外穿越到古代正赶上原身被亲娘逼着嫁给自己的傻子表哥,女主的父亲是妥妥的妻奴,母亲用尽各种办法补贴自己娘家:甚至不惜卖掉自己的大女儿,让本该上学的大儿子在家务农,本该过的滋润的秀才之家却连鸡蛋都舍不得吃.......女主穿越过来后先是想方设法不嫁给傻子表哥,然后带着全家致富,最后和男主过上幸福生活。文章篇幅比较长,个人感觉事情发展还是比较符合逻辑的,但是结尾有点太突然,说好的番外也木有看到。
文案
太姥姥:你们这些年轻孩儿们呀……
啥末日?啥丧尸?
那是你们没经过四三年!
(芭莳圈扫文组水晶 推荐)就是报着和末日文比惨来看的,写的不错,把饥荒困难时期都写了,作者全程在一个与世隔绝的小山村中,来影印时代的发展,收养了好几个不是亲生的孩子。成功让自己的太姥姥太姥爷活下去,延续自己的生命。全文无男主,女主就靠自己的哥哥帮忙。
文案
穿越谁不好,偏偏穿越成最悲剧女主角的贴身丫鬟。
她叫雪雁,陪着林黛玉一起长大的贴身侍女,到了荣国府沦为紫鹃的副手,做些跑腿的活计。
作为现代新女性,她怎么能让自己继续悲剧下去?
于是,保护好林黛玉嫁个良人,然后自己脱籍离开,广置田,多存粮,当个小地主。
(芭莳圈扫文组『空、白』 推荐)一个现代人在林黛玉回荣国府时,穿越为林黛玉婢女雪雁知道林黛玉以后的结局,将林黛玉的情况果断告诉林如海,使其对林黛玉再做安排!后期也一直为林黛玉保驾护航,影响林黛玉的观念,避免林黛玉的悲剧结局!
亮点1:在这篇文章中感觉很有原红楼梦的风格,对贾府里众人也都有很深入的描写,没有刻意把人写成反派,保持着原先红楼梦里的众人特征,很自然,感觉即使原红楼梦里也真的就是这个样子的!使人对于红楼梦里面的人物有一个大概清晰的认识!
亮点2:虽然女主是雪雁,但感觉和林黛玉两人是双女主人,两个人的人设都很讨喜!
亮点3:林黛玉的父亲林如海虽然一开始就去世了,但他对林黛玉的安排一直都在文中贯穿,让人感觉这真是一个心思,智谋都及其高深的人!
芭莳圈,专注推荐最好看的网络言情小说。微信公众号:小芭推书(提供在线阅读)/芭莳圈(专注言情推荐)PS:因为有书友常常问推荐的书在哪里读,这里做个小贴士。大部分推荐的文都是起点/晋江的,其他平台的也会在我们芭莳圈网站的单推页面标明。关注上面我们的阅读公众号,部分书籍可快捷在线阅读哦。
之前看了Mahout官方示例 20news 的调用实现;于是想根据示例的流程实现其他例子。网上看到了一个关于天气适不适合打羽毛球的例子。
训练数据:
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
检测数据:
sunny,hot,high,weak
结果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代码调用Mahout的工具类实现分类。
基本思想:
1. 构造分类数据。
2. 使用Mahout工具类进行训练,得到训练模型。
3。将要检测数据转换成vector数据。
4. 分类器对vector数据进行分类。
接下来贴下我的代码实现=》
1. 构造分类数据:
在hdfs主要创建一个文件夹路径 /zhoujainfeng/playtennis/input 并将分类文件夹 no 和 yes 的数据传到hdfs上面。
数据文件格式,如D1文件内容: Sunny Hot High Weak
2. 使用Mahout工具类进行训练,得到训练模型。
3。将要检测数据转换成vector数据。
4. 分类器对vector数据进行分类。
这三步,代码我就一次全贴出来;主要是两个类 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) {
//将训练数据转换成 vector数据
makeTrainVector();
//产生训练模型
makeModel(false);
//测试检测数据
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//将测试数据转换成序列化文件
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参数是,是否递归删除的意思
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);
}
//将序列化文件转换成向量文件
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参数是,是否递归删除的意思
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("序列化文件转换成向量失败!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//将测试数据转换成序列化文件
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参数是,是否递归删除的意思
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);
}
//将序列化文件转换成向量文件
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参数是,是否递归删除的意思
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("序列化文件转换成向量失败!");
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参数是,是否递归删除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean参数是,是否递归删除的意思
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("生成训练模型失败!");
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("检测数据构造成vectors初始化时报错。。。。");
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时表示总文档数
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());
}
}
1. 请介绍一下WebGIS的概念和作用,以及在实际应用中的优势和挑战。
WebGIS是一种基于Web技术的地理信息系统,通过将地理数据和功能以可视化的方式呈现在Web浏览器中,实现地理空间数据的共享和分析。它可以用于地图浏览、空间查询、地理分析等多种应用场景。WebGIS的优势包括易于访问、跨平台、实时更新、可定制性强等,但也面临着数据安全性、性能优化、用户体验等挑战。
2. 请谈谈您在WebGIS开发方面的经验和技能。
我在WebGIS开发方面有丰富的经验和技能。我熟悉常用的WebGIS开发框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能够使用HTML、CSS和JavaScript等前端技术进行地图展示和交互设计,并能够使用后端技术如Python、Java等进行地理数据处理和分析。我还具备数据库管理和地理空间数据建模的能力,能够设计和优化WebGIS系统的架构。
3. 请描述一下您在以往项目中使用WebGIS解决的具体问题和取得的成果。
在以往的项目中,我使用WebGIS解决了许多具体问题并取得了显著的成果。例如,在一次城市规划项目中,我开发了一个基于WebGIS的交通流量分析系统,帮助规划师们评估不同交通方案的效果。另外,在一次环境监测项目中,我使用WebGIS技术实现了实时的空气质量监测和预警系统,提供了准确的空气质量数据和可视化的分析结果,帮助政府和公众做出相应的决策。
4. 请谈谈您对WebGIS未来发展的看法和期望。
我认为WebGIS在未来会继续发展壮大。随着云计算、大数据和人工智能等技术的不断进步,WebGIS将能够处理更大规模的地理数据、提供更丰富的地理分析功能,并与其他领域的技术进行深度融合。我期望未来的WebGIS能够更加智能化、个性化,为用户提供更好的地理信息服务,助力各行各业的决策和发展。
这块您需要了解下stm32等单片机的基本编程和简单的硬件设计,最好能够了解模电和数电相关的知识更好,还有能够会做操作系统,简单的有ucos,freeRTOS等等。最好能够使用PCB画图软件以及keil4等软件。希望对您能够有用。
1.负责区域大客户/行业客户管理系统销售拓展工作,并完成销售流程;
2.维护关键客户关系,与客户决策者保持良好的沟通;
3.管理并带领团队完成完成年度销售任务。
显示全部
收起