今天下午14:00-17:00私董会,12人参与,伟事达教练王育琨老师主持,我负责记录关键信息、拍照、群内文字直播。整体流程为:

1、每人分享过去一年最惊喜、最难过、目前企业最想解决的问题

2、从12个问题中,投票选择所有人最想解决的问题

3、案主介绍问题(此处省略剖析案主成长经历)

4、三轮提问。每个同学针对案主问题进行提问,案主每轮提问结束后,选出印象最深刻的两个问题。

5、每个同学给出1句话建议

6、案主分享本次私董会收获

7、每个同学分享私董会收获

8、胡老师及王老师总结。

案主是一个88年的老板。可以说他极其幸运,中国农大本科毕业后,不知道干什么,周围同学影响下读了中国农大研究生,毕业后上了半年班没意思,于是创业。创业时,硕士时认识的老婆在山西高校任职期间开发出一个独一无二的解毒剂。在销售极烂、队伍一般、斗志不强的情况下,去年业绩增长,今年到现在业绩同比去年全年增长50%。

他最初抛出的问题是“如何提升自己及核心团队的管理能力”,12人中有8人投票。好了,随着问题的深入,问题逐渐浮出水面:

- 他既想把企业做大,又嫌做大太累,现在也挺好

- 既觉得团队不给力,想提升核心管理团队水平,又觉得团队现在的水平还可以

- 既想提升自己的能力,又不知道从哪里提升

- 每个月团队喝酒加深感情,但是喝酒只能管2-3天

在第二轮提问时,胡老师抛出一个问题“你觉得未来三年要做到什么样”,案主答:这个问题没想过,只要每年有增长,就可以。我喜欢呆在公司里,其他人不催我,我也不想主动出差,其他人催我,我连续1个月出差都没有问题。

好了,问题逐渐明晰,一切的根源都在他自己而不是团队的态度、能力、沟通问题。他不知道自己做的产品全国市场容量是多少,自己公司目前占领了多少市场。觉得只要公司有增长就可以。

他过得太舒服了。在我们看来,他还有大片的空白市场没有占领,但囿于个人心态和能力局限,小富即安,没有迅速占领市场。如果有一个更强的产品、更强的团队出现,他的市场份额会被很快蚕食。

企业家要有“野性”,要有不达目标誓不罢休的魄力。这是今下午给他最重要的建议,也是每个参会者最大的收获。其次王老师还给了他两条一个月内改进的建议。

做企业就像斜坡推球,不进则退。你可以选择小富即安,但是一旦上了这条道,你没有退路,只能一往无前。市场永远是适者生存。

本次私董会改进方向:

1、私董会最核心的环节是引导每个人向案主问问题,最好能把案主“扒得精光”。本次前面铺垫过多,影响后面问问题。下次直入主题。

2、优化问问题的方式。流程没问题,问问题需要掌握何时打断,如何引导,如何发问等等技巧。迭代问问题的方式。

3、固定产出。会后每个人最好形成自身改进的建议。

概要

温氏股份前身为1983年成立的簕竹鸡场,最初以养鸡为主,现已发展为以黄羽肉鸡和商品肉猪的养殖和销售为主要业务;兼营肉鸭、奶牛、蛋鸡、鸽子、肉鹅的养殖及其产品的销售,同时围绕畜禽养殖产业链上下游,配套经营屠宰、食品加工、现代农牧装备制造、兽药生产、生鲜食品流通连锁经营以及金融投资等业务,跨地区现代农牧企业集团。

2015年11月温氏股份创业板上市,市值一度突破2000亿元,位居创业板企业榜首。2019年上市肉猪1851.66万头,上市肉鸡9.25亿只,营业收入731亿元,净利润高达139亿元。

null图1 温氏股份业务体系

资料来源:官网

温氏成长的关键节点有哪些?当时是如何决策和选择的?本案例尽可能完整的呈现温氏发展中的关键节点及经营原貌,希望对农牧企业经营管理有所启发。

一、养鸡一体化,搭建经营管理体系(1983-1993年)

1983年到1993年十年间,温氏紧紧围绕养鸡产业链,在簕竹镇发展,形成了“公司+农户”的发展模式,企业文化形成,为后续扩张奠定了基础。

1983年,新兴县食品公司的养鸡技术员温北英停薪留职,联合温鹏程、温木桓等七户八人每人出1000元,共8000元,并向银行借款10万元,以年租金1.5万元承包了簕竹公社的养猪场,开启了养鸡事业。

null

图2 七户八股的关系

1983年到1986年间,养鸡场通过自繁、自育、自养、自销的方式经营。此阶段建立了种鸡场,保证种源稳定,并打开了销售渠道。到1986年底资产扩大到8.8万元,鸡苗产量从1984年的2.4万只增至7.4万只,肉鸡产量由0.8万只增加到5万只,总产值36万元,纯利润5万元。

养鸡场的发展,带动周边越来越多的农户进行养鸡,但单个农户养殖需要解决种鸡、防疫、销售等难题。温北英敏锐的抓住机遇,从1987年下半年开始,簕竹鸡场由自繁自育自销的养鸡体系,逐步向养鸡的社会化服务体系转移。周围农户利用自家劳动力、场地饲养肉鸡,鸡场向农户提供技术、饲料、防疫、管理等产中服务,收购农户的成鸡,进行销售。

1992年温氏设立一体化养殖公司,根据业务需要先后设置了服务部、生产技术部、饲料部、营养部、销售部和财务部等部门。随后扩建饲料厂、建设饲料编织袋厂,并开始加大下游布局,建设现代化肉鸡分割生产线和冷冻厂。温氏开始跨出簕竹镇,到稔村镇成立服务中心。

1993年1月,温北英总结簕竹鸡场办场以来的员工创业精神,制订了温氏人赖以合作的指导思想、工作准则和温氏员工准则,簕竹鸡场更名为新兴温氏食品集团有限公司。

温氏在这十年间的成功离不开以下条件:

对科学技术的高度重视。 温北英本身是养鸡技术专家,建设鸡场之初便科学选址、建设标准化鸡舍、全进全出及严格消毒,1992年,与华南农业大学动物科学系签订长期技术合作协议,派专家长期驻场负贵良种培育、饲料配方等疾病防治,仅饲料配方改进节约成本40余万元。1991年,一次性投资20多万元建设电子网络管理系统, 利用电脑收集储存各种数据和资料,指挥生产经营活动。比如,结帐通过电脑, 无须现金支付,待上交肉鸡后由电脑进行总结算, 打出结算 表, 上面详细登载每一笔收付,同时还提供一些分析数据,等于替养鸡户建立了一本生产经营财务收支帐, 深受养鸡户欢迎。

员工管理方式及积极性调动。 全员实行浮动工资制,50%按股份分配,40%按劳分配, 10%用于集体福利,职工收入与利润直接挂钩,工资按贡献分成3档8等拉开差距。1987年1月开始由部分股东型改为全员股东型,鸡场实行入股自愿,退股自由,股票可以在内部转让,职工既是场主、又是工人,这充分调动了职工生产积极性。在精神文明上,反复强调自愿互利合作,团结拼搏,每月举行一次骨干会议,每周召开一次场员检查生产、学技术、学文化、提要求的例会,不定期请专家作专题讲授等。1992年职工最低工资为600元/月,再加上按资分配的部分,月收入达到1000元,是广东省工业企业职工平均月工资400元的2.5倍。

公司 +农户”合作模式。公司+农户等合作可以降低经营规模扩张的资金压力,但难点是如何保证肉鸡品质?如何与农户确定收购价格?温氏的 “公司+农户”成功之处在于其设计的利益机制。农户愿意跟着温氏干,基础是有利益可图,农户不懂鸡苗、养殖技术、饲料配方,温氏提供指导;鸡价下跌时,温氏保价回收肉鸡,增强了农户抗风险能力。温氏和农户合作则可以利用农户闲散劳动力和资金扩大规模,发挥育种、养殖技术优势,增强产业链上下游的控制能力。1992年,与鸡场挂靠的养殖户年均收入3983元,为广东省农民年均收入1360元的2.9倍。合作农户由1986年的6户,增加至1992年的1500户。

null

图3 “公司+农户”合作机制资料来源:温氏年报

二、多板块布局,走向全国(1994-2004)

1994年温北英逝世,时年32岁的温北英之子温鹏程接手公司后,除巩固原有业务外,加快向其他产业延申,全国化布局加快。

1994年10月正式更名为广东温氏食品集团有限公司,公司运行进一步规范化。

1997年温氏开始大力发展养猪业。温氏发展养猪业,绝非偶然。1997年-1998年发生禽流感,温氏赔了两个多亿,公司差点倒闭,温鹏程看到如果温氏仅以养鸡为主战场,今后会面临同样的风险,并且随着养殖规模的扩大,下次的风险级别可能更高。从历年养猪规模看,1978年到1994年,正是生猪年出栏量增长最快的时间,不知温氏选择进入养猪,是否感知到了当时对猪肉的消费需求。

null

图4 历年猪肉情况

资料来源:USDA 方正中期研究院整理

进入养猪产业,温氏仍然采用“公司+农户”的模式,并开始在全国扩张。2000年起实施的第一个五年计划中,温氏“积极发展养鸡业、大力发展养猪业、探索发展奶牛业、加快上下游产品延伸”。

温氏集团把发展养鸡、养猪业为主导产业,2000年起又把重点投资发展奶牛业作为新的业务增长点;向产业链上下游延申,大力发展育种、饲料生产、药物生产、疾病防治,产品销售和加工等。2001年6月23日,360头澳洲良种奶牛乘飞机抵广州,然后运往温氏鼎湖奶牛场检疫,这批奶牛引进后,温氏的奶牛存栏量达到1000多头。2002成立以种猪和肉猪为主的广东华农温氏畜牧股份有限公司,同时成立乳业公司。

1999年1月,温氏集团成为广东省首批20家农业龙头企业。2002年2月,温氏集团上市肉鸡突破100万只,实际上市肉鸡125万只。2004年5月6日,集团养猪业第二个五年发展规划研讨会于总部五楼会议室召开,基本敲定养猪业未来五年的发展框架。

温氏这十年,由养鸡为主导产业,变为养鸡、养猪为主导产业,奶牛业并重,产业链上下游产品延伸的模式。

1994年-2004年,温氏每年新办一体化养殖公司3-4家,至2004年底,集团下属公司67家,分布于广东、湖北、上海、四川、广西等13个省市、自治区。

公司组织结构变为四级组织架构。

null

图5 公司四级组织结构

三、销售倍增,转型发展(2005-2015)

经历前一阶段的扩张后,温氏开始夯实鸡、猪、牛产业。该阶段总销售额突破100亿大关,并开始谋求国际化布局。这个时间可以划分为两个阶段,第一个阶段是二五计划的实施阶段(2005-2009年),第二个阶段是倍增计划及转型(2010-2015)。

3.1 2005-2009年销售额破百亿

2005-2009年的发展规划,5年内“温氏养猪规模将扩大到400万头以上,其中上市商品肉猪300万头以上,另100万头以种猪对外销售形式覆盖”。2007年,温氏股份全资企业南牧机械成立,农牧设备制造板块实力增强。2009年3月,佳润公司在香港第一家猪肉专卖店——香港土瓜湾店,隆重开业,这是谋求国际化的重要一步。

2007年11月,温氏集团总销售额超过100亿元人民币。

3.2 2010-2015 倍增计划,升级模式

2010年后,中国农业进入新的发展阶段,面临巨大的转型冲击,新农人、家庭农场、农业供给侧结构性改革、“互联网+农业”等出现在中央一号文件中。温氏面对新的挑战,经营策略也开始调整,变革的速度加快。

随着农村劳动力稀缺,2010年温氏启动倍增计划,10月5日,总裁会上,温氏明确“倍增计划”的目标,即通过五年左右时间的努力,将公司合作养鸡户的平均饲养规模从当前的7500只/批,提升到15000只/批的水平,养鸡户的平均养殖效益以当前的户均3万多元为基础再提高一倍或以上,提出“把5~6人养殖1000头猪,升级为1人养殖1000头猪”。

温氏围绕倍增计划,做了系列布局,根据外部环境变化,积极拥抱互联网、拥抱资本市场、应对终端市场的变化。

2011年2月,云浮市物联网研究院成立。3月,广东大华农动物保健品股份有限公司(大华农,300186)在创业板挂牌。

2012年,公司又提出通过3-5年的时间,将“公司+农户”的模式升级成为“公司+家庭农场”的模式,通过提高农户的机械化水平和生产技术,使小规模农户向环境友好的家庭农场转变,扩大养殖规模,提高养殖效率,以科技进步推动“农民收入倍增计划”的实现。

2012年成⽴广东温⽒种猪科技有限公司,构建了种猪公司-育种部-育种室-育种场的四级育种体系。由种猪公司确定育种⽅向,育种部制定具体的育种⽅案和组织育种技术研究,育种室指导监督育种场实施育种⽅案,以市场需求为导向开展育种⼯作。

2012年12月30日,温氏集团成功完成股改,成为广东温氏食品集团股份有限公司,这为温氏的谋求资本市场发展提供了便利。2015年,温氏生鲜深圳德隆广场旗舰店开业,成温氏首家生鲜门店。2015年11月2日,温氏股份在深交所敲钟挂牌,成功登陆创业板。2015年6月23日,温氏集团成立“互联网+”工作领导小组,制定顶层设计方案,统筹推进EAS、物联网系统的深度开发与推广工作。

四、稳步升级,资本驱动(2016-今)

4.1组织结构调整

温氏上市后,开始对组织结构改革,组织之间协同效力不断增强。从2016年到2020年五年间,温氏进行了10次大的组织结构调整,2016年调整1次,2017年调整1次,2018年调整2次,2019年调整3次,2020年调整3次。

温氏股份的组织结构调整有两个特点,第一,事业部式的组织结构不断完善,集团对财务及综合管控能力加强,新设立养猪、种猪、养禽等事业部,在2016年11月与金蝶集团、中兴通讯签署协议,开启温氏财务共享中心建设序幕;第二,向资本发力增强,成立战投部、投资管理事业部。

null

表1 温氏组织架构调整情况(2016-2020)

资料来源:招商证券

另外一方面,智能化、智慧化养猪加快落地,2016年5月30日,南牧公司养猪设备全自动化生产线正式举行启动仪式。

2017年4月6日,温氏股份召开第二届董事会第二十次会议,温鹏程辞去公司董事长、战略委员会主任委员职务,温志芬成为为公司第二届董事会新任董事长,同时担任公司战略委员会主任委员职务。2018年12月,温氏股份第三届董事会第一次会议及第三届监事会第一次会议召开,温志芬当选为集团董事长,严居然被聘任为总裁,伍政维先生当选为监事会主席。

这标志着,温氏股份组织结构调整进入第三个阶段。这一年温鹏程56岁,温志芬48岁。

4.2养猪模式升级

2018年8月开始出现的非洲猪瘟,对中国整个养猪行业带来巨大的冲击,温氏也不例外。2018年温氏销售商品肉猪2229.70万头,营业收入572.36亿元,但受上半年行业周期低迷及下半年非洲猪瘟影响,全年商品肉猪销售价格同比下降14.42%,温氏归属上市公司股东净利润39.57亿元,净利润同比下滑41.38%。

null

图5 2003-2020年中国生猪出栏均价

资料来源:卓创资讯

在养猪行业,牧原股份是唯一一家坚持全程自养的上市公司;温氏股份、新希望、正邦科技等上市公司均采用的是自繁自养和“公司+农户”结合的模式。相比自繁自养一体化的模式的牧原而言,温氏的“公司+农户”发展模式受到投资者的质疑最多,质疑点包括养殖效率低、防疫不力。从图3可以看到,牧原与温氏的营业收入差距在2010年后呈快速下降趋势,由2011年相差27.33倍下降到2019年相差3.62倍。

null

图6 牧原与温氏营收、净利润差距缩小,特别是2019年开始

资料来源:wind

2018年开始尝试养殖小区模式,向“公司+家庭农场+养殖小区”模式转型。养殖⼩区模式即在规模⼤的⼩区引进农户饲养,提升效率;或者引进⼀些⼤的养殖户做成规模较⼤的现代农牧⼩区。

4.3资本驱动+转型食品企业

温氏发展的另一大变化是加强资本板块的投入,2018年把资本驱动确定为温氏第四大驱动力。温氏与资本市场的对接,通过上市、投资、并购等形式,强化在产业链上的地位,2012年大华农上市,2015年温氏吸收合并大华农实现整体上市,2016年成立战略投资部,2019年成立投资管理事业部,2019年完成了京海禽业的股权交易,正式进军白羽鸡行业;与华统股份开展战略合作,开拓了浙江省生猪养殖业务;收购新大牧业,布局河南地区养猪业务。随后,温氏股份在食品加工、肉猪养殖等领域频频发力,资本驱动逐步增强。

2018年12月18日,温氏食品品牌正式发布,宣告了温氏股份由生产型企业向食品服务型企业转型的决心。随后温氏与曲靖市沾益区政府签订了温氏股份西南总部、温氏安居工程及温氏食品产业园项目合作协议,加大西南区域食品领域布局。

五、温氏何以成为温氏

通过梳理温氏股份37年的成长历史,我们发现,温氏股份发展中始终坚持着四大驱动力:紧密型“公司+农户”发展模式、齐创共享的企业文化、重视科技以及2018年后发力的资本驱动。

5.1“公司+农户”发展模式

温氏早期“公司+农户”模式能够取得成功得益于:1)吸收农户前,已经形成了自繁、自育、自养、自销的经营模式,为鸡场向农户提供技术、饲料、防疫、管理等产中服务,收购农户的成鸡,进行销售打下基础;2)敢于承担风险,保本回收农户肉鸡,1997年-1998年,2004-2005年爆发禽流感时,温氏分别赔了 2亿多元、36亿元,保证了合作农户的利益,践行了温北英的“宁可天下人负我,我不负天下人”理念;3)产业属于上升期,温氏有能力应对风险,90年代便通过电脑系统辅助经营管理。2020年上半年合作农户(家庭农场)5.11万户,其中华南区域 46%,华东区域 22%,华中区域 12%,西南区域 15%,华北区域 3%,西北区域 2%,东北区域 1%。

温氏合作的农户峰值出现在2016年,达到5.86万户,2010年后,受农村劳动力流失、环保政策、非洲猪瘟、对食品安全日益重视等因素影响,温氏升级“公司+农户”养殖模式,发展“公司+养殖小区”、“公司+家庭农场”的模式。

null

图7 温氏股份历年合作农户数量

资料来源:公司公告及公开报道 榕石商学

“公司+养殖小区”模式。即公司负责场地租赁、整个养殖小区的基础设施建设、各种手续,通过:1)农户到养殖小区内租赁养殖场,公司从委托养殖费中分批次扣除场地租金,剩余部分为农户收益;2)合作农户自己出资,按照公司标准建设标准化养殖场,与公司合作养殖,这类农户一般为与公司长期合作农户并签订了长期合作协议;3)农业引导基金(一般为扶贫资金)在小区内建设标准化养殖场,农户租用场地与温氏合作养殖。相比于原来“公司+农户”的模式,这种模式优点是统一规划养殖小区,农户相对集中,饲养规模及饲养效率有所提高,利于公司高效管理。

促进农户向现代家庭农场升级。 公司通过委托养殖费用补贴、设置效率提高奖励等方式引导合作农户升级养殖场设施设备,稳步提高养殖集约化、自动化水平,促进合作农户单批次饲养规模扩大。

模式升级背后反应了温氏应对养殖行业市场中小散户退出、头部企业市场集中度不断上升的挑战。

null

图8 全猪生猪规模变化

资料来源:招商证券

5.2齐创共享的企业文化

温氏官方这样描述自己的文化:“公司秉承“精诚合作,齐创美满生活”的企业文化理念,兼顾多方利益,符合全体干部员工工作和生活的诉求,也符合股东、合作农户(或家庭农场)和客户的诉求。因“得道多助”,公司依靠各方支持渡过了一个又一个行业危机,并得到较好地发展”。

从实践上看,早期七人八股,后面不断吸收新的农户入股,把分红投入在生产。1987年1月开始由部分股东型改为全员股东型,实行入股自愿,退股自由,股票可以在内部转让,职工既是场主、又是工人,这充分调动了职工生产积极性。2002年谋求上市时,因股东超过200人,上市进程受阻。2012年,温氏集团变更为股份有限公司时,员工持股人数6789人,员工持股占比49.57%,最大个人股东温鹏程只占3.34%,这点与华为颇类似。

5.3重视科技

温氏创始人温北英本是养殖技术专家,这也奠定了温氏重视技术的基因。养殖行业看似低端,但要取得长远发展,高度依赖科技及精细化管理。温氏牢牢抓住育种、饲料营养、疾病防治、信息化管理等关键技术

重视与高校合作。 早在1992年,簕竹鸡场便与华南农业大学动物科学系签订长期技术合作协议,以技术入股形式赠送10%股份,几十年发展中,一直与华南农大密切合作,2006年温氏与华南农大合作完成的“H5亚型禽流感灭活疫苗的研制及应用”项目,获国家科技进步一等奖,2013年联合联合共建的“国家生猪种业工程技术研究中心”揭牌。截止2018年末,温氏共获国家级科技奖项*_6_ *项,省部级科技奖项52项,畜禽新品种9个(其中猪2个,鸡7个),新兽药证书34项,发明专利124项,实用新型专利222项,国家计算机软件著作权30项。

null图9 温氏专利申请趋势

资料来源:专利巴巴 榕石商学

温氏研发人员比例及投入研发金额占营收占比稳步上升,2019年末温氏研发人员1620人,投入研发金额5.7亿元。

null

图10 温氏研发人员占比及投入研发金额占营收比稳步上升

资料来源:公司年报 榕石商学

重视育种。 以养猪为例,温氏目前已拥有8个育种分公司,分别覆盖华南、华东、华中、华北、西北及西南等地区,纯种猪的年产规模可达12万头。开发的育种数据管理系统建立了大型种猪生产性能数据库据库、多性状BLUP和GBLUP遗传评估模型,实现大数据育种。

null

表2 温氏育种关键成果(部分)

null

图11 温氏育种信息集中系统

资料来源:招商证券

高度重视信息化。 温氏1991年就开始使用电脑辅助经营管理,现已拥有三大信息系统:EAS业务系统、OA办公平台和决策支持平台,以及ERP信息管理系统,三大系统可以完全覆盖温氏的整个核心产业链。建成了财务共享系统、OA办公系统、种猪&种鸡&奶牛&农牧设备管理系统、合作农户(或家族农场)管理系统等多个业务系统,实现对业务全面和高效的管理。目前EAS系统实现了分布于全国23个省、市的170多家成员企业以及5万多户家庭农场的生产、销售和财务信息的实时共享,信息化管理水平处于国内农牧业领先地位。

5.4资本驱动

资本市场是企业竞争的制空权,2018年后,温氏更加积极拥抱资本市场,对外收购、投资步伐加快。依托资本市场,围绕鸡、猪双主业,在养殖、屠宰、食品加工、生鲜营销产业发展上积极布局,促进公司从传统养殖企业向食品企业转型。

六、总结

温氏从养鸡起步,到鸡全产业链布局,再到养猪、养鸭、乳业、生鲜食品等多产业链布局,几乎走过了改革开放的各个阶段,背靠珠三角的崛起而壮大。

温氏经营风格稳健,一直围绕畜牧产业链延伸业务 ,未跨入不相关的化工、房地产等行业,也不把鸡蛋放在一个篮子里,始终牢牢抓住育种、饲料营养、疾病防治、终端渠道这些关键环节,每一步决策都基于已有资源和能力(如进入养猪依然采取“公司+农户”,紧抓育种)。

null

图12 温氏肉猪及肉鸡业务贡献营收93%以上

资料来源:公司年报

创业初期便通过员工持股激发员工积极性,保价回收维护农户利益,授予股票给华南农大并达成长期合作。

null

图13 温氏股份历年营业收入(亿元)

资料来源:公司年报 榕石商学

如今,温氏已经进入新的发展阶段,能否走通“公司+养殖小区+家庭农场”模式,能否在食品销售端打响温氏品牌,能够有效利用资本市场,是否会像前几个阶段一样,不断突破,我们拭目以待。

参考资料

张光辉.发展我国畜牧业的一种好形式——新兴县簕竹养鸡集团的调查

温氏股份各年年报、公告

猪!猪!猪!生猪养殖业图谱_招商证券

温氏VS牧原,商业本质孰优孰劣? _招商证券

农业产业链谱系_和君咨询

本文仅代表个人观点,不代表任何机构。以上内容的完成与「榕石商学」密不可分,在此感谢。

榕石商学(简称榕石)自成立以来,一直深耕农牧行业高级管理人员教育和管理顾问服务,以接地气的课程和实战导向的教学方式,在业内逐渐建立良好口碑,吸引了一大批行业精英。欢迎有志于提升管理能力的企业家朋友报名,招生简章如下:

榕石商学第五期火热招生中(点击直达)

img

1. 认识 R和 RStudio

1.1 R和 RStudio 简介

R是使用广泛的统计计算和绘图分析软件,基于S语言编写,20世纪90年代初,由Ross Ihaka 和 Robert Gentleman 共同编写,2000年发行1.0.0版本。

RStudio是R语言的集成开发环境(IDE),RStudio之于R,相当于Pycharm之于python。RStudio是开源项目。

为什么要使用R :

  • 强大的绘图功能,能轻松绘制你想要的任何图像

  • 免费,开源

  • 强大的技术社区支持

R Markdown用来从 R 中创建文档和网页,Shiny 则是使用 R 创建交互式应用程序。

Style guide · Advanced R.

1.2 RStudio 界面介绍

左上:代码编辑栏。用于编辑代码,点击 run 即可运行。

左下:命令控制台,代码运行后,实时显示结果,如果出错,会进行报错。

右上:显示自定义的对象。

右下:查看文件、显示图像、获取包、获取帮助。

四个界面的大小可以自由拖动。

img

R具有庞大的生态,你在学习和使用R中遇到的问题,都可以通过help获取帮助。你可以点击上方的R help,跳转到右下角搜索想要的答案。

img

1.3 基本操作介绍

赋值

R 有一个最基本的概念——赋值,即把数据、表格等,赋予给一个新的变量,在R中赋值符号为 <-。比如:

1  
2  
3  
4  

|

x <- 2+3*6  
y <- x  
x = 56  
y  
  

—|—

输出结果为:

1  

|

[1] 20  
  

—|—

创建和保存文件

@todo

代码执行

使用Ctrl+Enter (command+return)执行本句代码,Ctrl+Shift+Enter (command+shift+return)执行文件中所有代码。

分隔符

当代码很长时,可以通过Ctrl (command) + shift + R插入像上面foo, bar风格符,增加代码可读性。

2. 向量(vector)

2.1 向量使用

对变量赋值,是R中的基本操作。赋值用符号<-,多个元素赋值可以使用c() (concatenate)函数.

1  
2  

|

x <- 5  
num <- c(1, 4, 6, 19)  
  

—|—

输出结果:

1  
2  

|

> nums  
[1]  1  4  6 19  
  

—|—

查看向量长度:

1  
2  

|

num <- c(1, 4, 6, 19)  
length(num)  
  

—|—

输出结果:

1  

|

[1] 4  
  

—|—

多个向量合并:

1  
2  
3  
4  
5  
6  

|

fruit_1 <- c("Apple","Banana","Carambola')  
fruit_2 <- c("Durian","Haw","Lemon")   
  
fruits <- c(fruit_1, fruit_2, c("Papaya","Persimmon","Strawberry"))  
  
fruits  
  

—|—

输出结果为:

1  
2  
3  

|

> fruits  
[1] "Apple"      "Banana"     "Carambola"  "Durian"     "Haw"         
[6] "Lemon"      "Papaya"     "Persimmon"  "Strawberry"  
  

—|—

2.2 从列表中提取需要的元素

和python一样,R也可以提取需要的元素,但和python不一样的是,R从第一个开始:

看下面一个列表

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  

|

fruits <- c("Apple", "Banana", "Carambola", "Durian", "Haw", "Lemon" , "Papaya" ,  "Persimmon", "Strawberry")  
  
fruits[3] # 提取第三个  
  
fruits[c(2,5,7)] # 提取第2、5、7个  
  
fruits[-c(2,5,7)] # 提取除了第2、5、7个的元素  
  
fruits[c(2,5,7)] <- c("ON", "UP", "DOWN") # 第2,5,7个重新赋值  
  
fruits[c(2:6)] # 提取第2,3,4,5,6个,包含第2个  
  
fruits[2:6] # 提取第2,3,4,5,6个,包含第2个  
  
fruits  
  

—|—

运行结果分别是(注:上面代码必须单独运行,才能得到下面的结果,否则只会显示最后一个)

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  

|

> fruits[3] # 提取第三个  
[1] "Carambola"  
  
> fruits[c(2,5,7)] # 提取第2、5、7个  
[1] "Banana" "Haw"    "Papaya"  
  
> fruits[-c(2,5,7)] # 提取除了第2、5、7个的元素  
[1] "Apple"      "Carambola"  "Durian"     "Lemon"      "Persimmon"   
[6] "Strawberry"  
  
fruits[c(2,5,7)] <- c("ON", "UP", "DOWN") # 第2,5,7个重新赋值  
[1] "Apple"      "ON"         "Carambola"  "Durian"     "UP"          
[6] "Lemon"      "DOWN"       "Persimmon"  "Strawberry"  
  
> fruits[c(2:6)] # 提取第2,3,4,5,6个,包含第2个  
[1] "Banana"    "Carambola" "Durian"    "Haw"       "Lemon"      
  
> fruits[2:6] # 提取第2,3,4,5,6个  
[1] "Banana"    "Carambola" "Durian"    "Haw"       "Lemon"   
  

—|—

2.3 生成器

2.3.1 元素重复

重复某个元素,基本格式如下:

(以下代码,上面是输入,下方为输出结果)

1  
2  

|

> rep(2, 3) # 把2重复3次;或rep(2, times = 3)  
 [1] 2 2 2  
  

—|—

在此基础上,可以延展很多变体:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

> rep(c(1,2,3,4), 4) # 把1,2,3,4重复4次  
 [1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4  
> rep(c(1:10), 2) # 1-10重复10次  
 [1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6  7  8  9 10  
> rep(c(1, 2, 3), each = 3) # 把1, 2,3各重复4遍  
 [1] 1 1 1 2 2 2 3 3 3  
> rep(c(1, 2, 3), c(3, 2, 0)) # 把1, 2, 3分别重复3, 2, 0遍  
 [1] 1 1 1 2 2  
rep(8:15, rep(1:5, rep(1:2, 2:3))) # 把8(含)-15(含)分别重复1、2、3、3、4、4、5、5遍。注意每个元素与重复次数要对应,如8-15有8个元素,rep(1:5, rep(1:2, 2:3))也必须是8个原色  
 [1]  8  9  9 10 10 10 11 11 11 12 12 12 12 13 13 13 13 14 14 14 14 14 15 15 15  
[26] 15 15  
  

—|—

2.3.2 等差数列

1  
2  
3  
4  

|

> seq(0, 15, 2) # 其实是`seq(from = 0, to = 15, by = 2)`的简写,表示0-15中,等差序列为2  
 [1]  0  2  4  6  8 10 12 14  
> seq(0, 20, length.out = 11) # 其实是`seq(from = 0, to = 20, length.out = 10`的简写。表示0-20中,按等差分成10个元素  
 [1]  0  2  4  6  8 10 12 14 16 18 20  
  

—|—

2.3.3 随机数

常见的随机数用runif(n, min, max),n表示生成的随机数数量,min是最小值,max是最大值。默认min=0,max=1。

1  
2  
3  

|

nums_1 <- runif(100000,1,100) # 随机生成10万个,1-100之间的随机数  
  
hist(nums_1) # 画直方图  
  

—|—

img

正态分布的随机数:

使用rnorm(n, mean, sd), 三个参数分别代表数量,平均值,标准差。默认mean为0,sd为1。

1  
2  

|

nums_1 <- rnorm(100000, 250, 20) # 生成10万个随机数,按照平均值为250,标准差为20,进行正态分布  
hist(nums_1) # 画直方图  
  

—|—

img

2.3.4 简单随机抽样

代码格式如下:

1  

|

sample(balls, 20, replace = TRUE) # ball表示总体,20表示抽取的数量, replace = TRUE表示抽取后放回,FALSE表示抽取后不放回(可不写)  
  

—|—

从10个球中随机抽取8个,每次抽取放回:

1  
2  
3  
4  

|

> balls <- letters[1:10]  
> sample(balls, 8, replace = TRUE)  
  
[1] "i" "g" "d" "c" "g" "i" "b" "c"  
  

—|—

2.4 向量的排序

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  

|

> x <- c(10, 45, 2, 8, 12)  
  
> sort(x) # 从小到大排序  
[1]  2  8 10 12 45  
  
> x[order(x)] # 从小到大排序  
[1]  2  8 10 12 45  
  
> order(x) # 返回每个元素从小到大对应的排序,如10是第三小的元素,返回值为3  
[1] 3 4 1 5 2  
  
> rev(sort(x)) # 从大到小排序  
[1] 45 12 10  8  2  
  
> rank(x) # 返回值为每个数值对应的排名  
[1] 3 5 1 2 4  
  
> rev(x) # 表示向量翻转  
[1] 12  8  2 45 10  
  

—|—

2.5 向量的集合运算

交集用intersect(x, y),并集用union(x, y),补集用setdiff(x, y)。作为集合是否相等,用setequal(x, y),确定元素是否是集合的某个元素用is.element(x, y),等价于x %in% y.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  

|

> x <- c(1:15)  
> y <- c(10:25, 5)  
  
> intersect(x,y) # 求交集  
[1]  5 10 11 12 13 14 15  
  
> union(x, y) #求并集  
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20  
[21] 21 22 23 24 25  
  
> setdiff(x, y) #求补集,即不在集合y中的元素  
[1] 1 2 3 4 6 7 8 9  
  
> setequal(x, y) # 是否相等  
[1] FALSE  
  
> is.element(x, y) #确定x是否是y中的元素  
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  
[11]  TRUE  TRUE  TRUE  TRUE  TRUE  
  

—|—

3. 数据和列表

3.1 数据类型及基本运算

3.1.1 数据类型

常见数据类型如下

类型 含义与说明 例子
numeric 浮点数向量 2, 3.14, sqrt(5)
integer 整数向量 1L,3L,5L
character 字符向量;需被引号包围 “@”, “34”, “文本”
logical 逻辑向量 TRUE, FALSE, NA
complex 复数向量 3+5i, i, 4+i

数据基本操作如下:

1  
2  
3  
4  
5  
6  
7  
8  

|

> class(3) # 查询数据类型  
 [1] "numeric"  
  
> is.numeric(6) # 判断属于哪一种数据类型,TRUE则为正确  
[1] TRUE  
  
> as.numeric(6) # 强制转换为另一种数据类型  
[1] 6  
  

—|—

3.1.2 数据运算

符号 描述
  • | 加
  • | 减
  • | 乘
    / | 除以
    ^或** | 乘幂
    %/% | 求整数商,比如7%/%3=2=2
    %% | 求余数,比如7%%3=1

3.1.3 常见的数据运算

e^x和logx(y)函数

1  
2  

|

exp(1) # e^x函数  
log(100,10) # log(x,y),以y为底x的函数  
  

—|—

保留数字位数

1  
2  
3  
4  
5  

|

> signif(12.3456789, 4) # 保留4位数,注意是总共保留4位数,不是保留小数点后面4位  
 [1] 12.35  
   
> round(12.3456789, 3) # 保留3位小数  
 [1] 12.346  
  

—|—

3.1.4 R 中自带的常见函数

img

资料来源: 2.3 数学表达和运算 | R与tidyverse——数据分析入门

3.2 列表

3.2.1 列表基本操作

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  

|

> list(1, 2, 4, NA, 3L, "de")  
  
[[1]]  
[1] 1  
  
[[2]]  
[1] 2  
  
[[3]]  
[1] 4  
  
[[4]]  
[1] NA  
  
[[5]]  
[1] 3  
  
[[6]]  
[1] "de"  
  

—|—

3.2.2 合并与拆开

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  

|

> c(list(1, 2), list(3, 4, list(5,6))) # 使用c来合并列表  
[[1]]  
[1] 1  
  
[[2]]  
[1] 2  
  
[[3]]  
[1] 3  
  
[[4]]  
[1] 4  
  
[[5]]  
[[5]][[1]]  
[1] 5  
  
[[5]][[2]]  
[1] 6  
> unlist(list(1, list(2, list(3, 4)), list(5, 6), 7, 8, 9)) # 一直拆解到无列表  
[1] 1 2 3 4 5 6 7 8 9  
  
> unlist(list(1, list(2, list("a", 4)), list(5, TRUE), 7L, 8, 9+0i))  
[1] "1"    "2"    "a"    "4"    "5"    "TRUE" "7"    "8"    "9+0i"  
  
# unlist(list(A, B)等同于c(A, B)  
  

—|—

3.3 矩阵(matrix)和数组(array)

创建5行8列的数组:

1  
2  
3  

|

A <- 1:40  
dim(A) <- c(5,8)   
A  
  

—|—

输出结果:

1  
2  
3  
4  
5  
6  

|

  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  
[1,]    1    6   11   16   21   26   31   36  
[2,]    2    7   12   17   22   27   32   37  
[3,]    3    8   13   18   23   28   33   38  
[4,]    4    9   14   19   24   29   34   39  
[5,]    5   10   15   20   25   30   35   40  
  

—|—

索引行列数据

1  
2  
3  
4  
5  
6  
7  
8  

|

> A[5,3] # 第5行第3列数据  
 [1] 15  
  
> A[5, ] # 第5行全部数据  
 [1]  5 10 15 20 25 30 35 40  
  
> A[, 7] # 第7列全部数据  
 [1] 31 32 33 34 35  
  

—|—

创建2行8列的3个数组:

1  
2  
3  

|

A <- 1:48  
dim(A) <- c(2, 8, 3)   
A  
  

—|—

结果如下:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  

|

, , 1  
  
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  
[1,]    1    3    5    7    9   11   13   15  
[2,]    2    4    6    8   10   12   14   16  
  
, , 2  
  
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  
[1,]   17   19   21   23   25   27   29   31  
[2,]   18   20   22   24   26   28   30   32  
  
, , 3  
  
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  
[1,]   33   35   37   39   41   43   45   47  
[2,]   34   36   38   40   42   44   46   48  
  

—|—

接下来使用 dimnames() 为每个行、列和每个列表命名

1  
2  
3  
4  
5  
6  
7  
8  

|

A <- 1:48  
dim(A) <- c(2, 8, 3)  
  
dimnames(A) <- list(paste("行数.", 1:2), # 行命名  
                    c("列1", "列2", "列3", "列4", "列5", "列6", "列7", "列8"), # 列命名  
                    c("表1", "表2", "表3")) # 表头命名  
      
A  
  

—|—

结果如下:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  

|

, , 表1  
  
        列1 列2 列3 列4 列5 列6 列7 列8  
行数. 1   1   3   5   7   9  11  13  15  
行数. 2   2   4   6   8  10  12  14  16  
  
, , 表2  
  
        列1 列2 列3 列4 列5 列6 列7 列8  
行数. 1  17  19  21  23  25  27  29  31  
行数. 2  18  20  22  24  26  28  30  32  
  
, , 表3  
  
        列1 列2 列3 列4 列5 列6 列7 列8  
行数. 1  33  35  37  39  41  43  45  47  
行数. 2  34  36  38  40  42  44  46  48  
  

—|—

3.4 循环

循环语句的基本用法:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  

|

for(var in seq) {  
  expr  
}  
m <- 1:100 # 产生一个[1,2,3,...,99,100] # 从1-100依次产生整数  
  
n <- vector("numeric")  
for (i in m) {  
  if (i %% 2 == 0) {   # 如果i是偶数  
    n <- append(n, i^2) # 那么n为i的平方  
  } else if (i == 51) { # 当i等于51,则结束  
    break  
  }  
}  
  
n  
  

—|—

输出结果:

1  
2  

|

 [1]    4   16   36   64  100  144  196  256  324  400  484  576  676  784  900  
[16] 1024 1156 1296 1444 1600 1764 1936 2116 2304 2500  
  

—|—

while循环:

当条件满足cond,重复循环expr。

1  
2  
3  

|

while (cond) {  
  expr  
}  
  

—|—

重复执行使用repeat,直到使用break打断

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

repeat {  
  expr  
}  
i < 1  
repeat {  
  print(i)  
  i = i + 1  
  if (i == 100) {  
    break  
    }  
   }  
  

—|—

for 和 while 区别:

  • while 适用于不知道要运行多少次

  • 知道结束循环的条件

4. 函数

4.1 函数基本操作

1  
2  
3  
4  

|

FuncName <- function (arglist) {  
  expr  
  return(value)  
}  
  

—|—

举例

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

grade <- function(i, k){  
  if(k <= 100) {  
    k = i^2  
    return(k)  
  }  
  else {  
    break  
  }  
}  
  
grade(i<-1:100, 10)  
  

—|—

输出结果:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  

|

> grade(i<-1:100, 10)  
  [1]     1     4     9    16    25    36    49    64    81   100   121   144  
 [13]   169   196   225   256   289   324   361   400   441   484   529   576  
 [25]   625   676   729   784   841   900   961  1024  1089  1156  1225  1296  
 [37]  1369  1444  1521  1600  1681  1764  1849  1936  2025  2116  2209  2304  
 [49]  2401  2500  2601  2704  2809  2916  3025  3136  3249  3364  3481  3600  
 [61]  3721  3844  3969  4096  4225  4356  4489  4624  4761  4900  5041  5184  
 [73]  5329  5476  5625  5776  5929  6084  6241  6400  6561  6724  6889  7056  
 [85]  7225  7396  7569  7744  7921  8100  8281  8464  8649  8836  9025  9216  
 [97]  9409  9604  9801 10000  
  

—|—

遇到层层函数嵌套的情况**h(g(f**(x))),借助% > % :

1  
2  
3  
4  

|

x %>%   
  f() %>%   
  g() %>%   
  h()  
  

—|—

5. tibble

tibble用来替换data.frame的表格型数据结构,tibble是tidyverse的一部分,读写速度更快。

1  
2  

|

library(didyverse)  
mpg # 默认显示前10行  
  

—|—

img

(图片来源:https://tshi.page/r-and-tidyverse-book/tibble-view.html)

基本操作:

1  
2  
3  

|

view(mpg) # 查看所有数据  
head(mpg, 8)  # 开头前8行  
tail(mpg) # 最后8行  
  

—|—

5.1 创建

5.1.1 创建

直接在向量中赋值:

1  
2  
3  
4  
5  
6  
7  
8  

|

library(tibble)  
  
my_tibble_1 <- tibble(  
  nums = c("one", "two", "three"), # 列1  
  chars_1 = c("数1", "数2", "数3"), # 列2  
  chaars_2 = c("数4", "数5", "数6") # 列3  
                )  
my_tibble_1  
  

—|—

输出结果为:

1  
2  
3  
4  
5  
6  

|

# A tibble: 3 × 3  
  nums  chars_1 chaars_2  
  <chr> <chr>   <chr>     
1 one   数1     数4  
2 two   数2     数5      
3 three 数3     数6    
  

—|—

也可以通过向量创建:

1  
2  
3  
4  
5  
6  
7  

|

x <- c("one", "two", "three")  
y <- c("数1", "数2", "数3")  
z <- c("数4", "数5", "数6")  
  
my_tibble_1 <- tibble(nums = x, chars_1 = y, chars_2 = z)  
  
my_tibble_1  
  

—|—

输出结果如下,与第一种方法一样:

1  
2  
3  
4  
5  
6  

|

# A tibble: 3 × 3  
  nums  chars_1 chars_2  
  <chr> <chr>   <chr>    
1 one   数1     数4      
2 two   数2     数5      
3 three 数3     数6     
  

—|—

5.1.2 新增

1  
2  
3  
4  

|

chars_2 <- mutate(my_tibble_1,   
    chars_3 = c("数7", "数8", "数9")  
      
 my_tibble_1  
  

—|—

5.2 抓取行列

5.2.1 抓取列

从整个列表中抓取需要所需的列,可以使用下面三种方法:

1  
2  
3  
4  
5  
6  
7  
8  

|

# 方法1:通过变量名称抓取  
my_tibble_1[["chars_1"]]  
  
# 方法2:使用$  
my_tibble_1$chars_1   
  
# 方法3:使用索引  
my_tibble_1[[2]]  
  

—|—

如果要抓取多列,则可以使用select:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

library(dplyr)  
  
x <- c("one", "two", "three")  
y <- c("数1", "数2", "数3")  
z <- c("数4", "数5", "数6")  
  
my_tibble_1 <- tibble(nums = x, chars_1 = y, chars_2 = z)  
  
shuju <- select(my_tibble_1, 1, 3) # 提取第一列,第三列,也可以使用select(my_tibble_1, -2)  
  
shuju  
  

—|—

运行结果如下:

1  
2  
3  
4  
5  
6  

|

# A tibble: 3 × 2  
  nums  chars_2  
  <chr> <chr>    
1 one   数4      
2 two   数5      
3 three 数6    
  

—|—

5.2.2 抓取行

抓取行的方法和抓取列的方法一样,把select函数换成slice()函数.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

library(dplyr)  
  
x <- c("one", "two", "three")  
y <- c("数1", "数2", "数3")  
z <- c("数4", "数5", "数6")  
  
my_tibble_1 <- tibble(nums = x, chars_1 = y, chars_2 = z)  
  
shuju <- slice(my_tibble_1, 1, 3) # 提取第一行,第三行,也可以使用slice(my_tibble_1, -2)  
  
shuju  
  

—|—

结果如下:

1  
2  
3  
4  
5  

|

# A tibble: 2 × 3  
  nums  chars_1 chars_2  
  <chr> <chr>   <chr>    
1 one   数1     数4      
2 three 数3     数6      
  

—|—

抓取满足某些特定条件的行,使用filter():

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

library(dplyr)  
  
x <- 1:6  
y <- 4:9  
z <- 5:10  
  
my_tibble_1 <- tibble(nums = x, chars_1 = y, chars_2 = z)  
  
shuju <- filter(my_tibble_1, chars_2>=3 & chars_2 <= 6) # 提取chars_2列 满足数字大于等于3小于等于6的元素  
  
shuju  
  

—|—

结果如下:

1  
2  
3  
4  
5  

|

# A tibble: 2 × 3  
   nums chars_1 chars_2  
  <int>   <int>   <int>  
1     1       4       5  
2     2       5       6  
  

—|—

5.2.3 排序

使用arrange

排序:

1  
2  

|

arrange(my_tibble_1, chars_2) # 从小到大排列  
arrange(my_tibble_1, -chars_2) # 从大到小排列  
  

—|—

重命名变量

1  

|

my_tibble <- dplyr::rename(my_tibble_1, 列2 = chars_2) # 把chars_2命名为 列2  
  

—|—

5.2.4 汇总统计

使用summarize

1  

|

summary_temp <- summarize(my_tibble_1, mean(chars_1), sd(chars_1))  
  

—|—

  • mean(): 平均值

  • sd(): 标准差,它是价差的衡量标准

  • min()max():分别为最小值和最大值

  • IQR(): 四分位距

  • sum(): 多个数字相加的总数

  • n(): 每组中的行数

5.2.5 分组

使用groub_by

1  
2  
3  
4  
5  

|

summary_monthly_temp <- weather %>%   
  group_by(month) %>%   
  summarize(mean = mean(temp, na.rm = TRUE),   
            std_dev = sd(temp, na.rm = TRUE))  
summary_monthly_temp  
  

—|—

6. R 包

6.1 包的安装和卸载

R 包是什么?我们可以把RStudio理解为一部手机,R 包则是一个个的APP,把能实现特定功能的程序“打包”在一起,当你调用包时,就可以实现想要的功能。

包的安装有两种方法。

第一种:找到顶部菜单栏Tools—>Install Packages—>输入包的名称,完成安装

第二种:在代码运行区输入

1  

|

install.packages('包的名称')  
  

—|—

安装成功后,显示如下:

img

包的更新:

更新:update.packages()

包的卸载:remove.packages()

6.2 包的使用

在使用包时,需要使用如下代码加载包:

1  

|

library('包的名称')  
  

—|—

如果有多个包,每一个包的加载都输入上面的加载语法麻烦的话,可以使用下面语法,加载多个包,读取成功,会返回TRUE。

1  

|

library(c('包1', '包2', '包3'), require, c = T)  
  

—|—

当载入dplyr时,我们发现:

1  
2  
3  
4  
5  
6  
7  
8  
9  

|

载入程辑包:‘dplyr’  
  
The following objects are masked from ‘package:stats’:  
  
    filter, lag  
  
The following objects are masked from ‘package:base’:  
  
    intersect, setdiff, setequal, union  
  

—|—

为什么会这样?因为R自带了stats、base的包,现在使用的dplyr有同名的 filter(), lag(),intersect(),setdiff(),setequal(), union(),把自带的覆盖了。此时,程序会以最后(近)的包为对象读取。当然,你也可以使用packageName::object调取,先把包名称写出来。不过这种方法,应该不常用。

在R包中,最常用的包有下面四个:

1  
2  
3  
4  

|

library(ggplot2)  
library(dplyr)  
library(readr)  
library(tidyr)  
  

—|—

ggplot2用于数据可视化,dplyr用于数据整理,readr用于将电子表格数据导入 R,tidyr用于转置数据。

而这四个R包,可以通过tidyvers包一并加载出来。

1  
2  
3  
4  
5  
6  
7  
8  

|

> library(tidyverse)  
── Attaching packages ────────────────────────────────────── tidyverse 1.3.1 ──  
✔ tibble  3.1.7     ✔ dplyr   1.0.9  
✔ tidyr   1.2.0     ✔ stringr 1.4.0  
✔ purrr   0.3.4     ✔ forcats 0.5.1  
── Conflicts ───────────────────────────────────────── tidyverse_conflicts() ──  
✖ dplyr::filter() masks stats::filter()  
✖ dplyr::lag()    masks stats::lag()  
  

—|—

7. 数据导入和整理

7.1 数据导入

1  
2  
3  

|

library(readr)  
dem_score <- read_csv("https://moderndive.com/data/dem_score.csv")  
dem_score  
  

—|—

结果如下:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  

|

# A tibble: 96 × 10  
   country    `1952` `1957` `1962` `1967` `1972` `1977` `1982` `1987` `1992`  
   <chr>       <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  
 1 Albania        -9     -9     -9     -9     -9     -9     -9     -9      5  
 2 Argentina      -9     -1     -1     -9     -9     -9     -8      8      7  
 3 Armenia        -9     -7     -7     -7     -7     -7     -7     -7      7  
 4 Australia      10     10     10     10     10     10     10     10     10  
 5 Austria        10     10     10     10     10     10     10     10     10  
 6 Azerbaijan     -9     -7     -7     -7     -7     -7     -7     -7      1  
 7 Belarus        -9     -7     -7     -7     -7     -7     -7     -7      7  
 8 Belgium        10     10     10     10     10     10     10     10     10  
 9 Bhutan        -10    -10    -10    -10    -10    -10    -10    -10    -10  
10 Bolivia        -4     -3     -3     -4     -7     -7      8      9      9  
# … with 86 more rows  
  

—|—

可以看到,变量名两侧加上了引号,那是因为默认情况下,R 中的变量名不允许以数字开头,也不允许包含空格。

导入excel文件方法类似,可以使用路径File--> Import Dateset --> From Excel操作界面如下,观察右下角的代码,也可以使用代码导入。

img

7.2 数据清理

每一个变量为一列,每一个观察为一行,每种类型的数据形成一个单独的表格。

观察 7.1中的数据, country 是变量,应该变成列,时间应该变成行,可以使用下面的代码实现:

1  
2  
3  
4  
5  
6  

|

guat_dem_tidy <- guat_dem %>%   
  pivot_longer(names_to = "year",  # names_to 为把原来数据框中的行变为列  
               values_to = "democracy_score", # values_to 字符串,创建新的列名称  
               cols = -country, # 为不想整理的  
               names_transform = list(year = as.integer))  # 设置变量的数值类型  
guat_dem_tidy  
  

—|—

实际运用中,拿到的数据往往存在缺失值、数据出错等情况,我们称之为脏数据,包括:

  • 缺失值:R中有NA表示,可以使用is.na()判断是否存在缺失值。处理方法

- 删除法:na.omit(),移除所有含有缺失行等列
- 替换法:使用中位数和众数替换

  • 异常值

  • 重复值

7.3 数据挖掘相关包

img

8. 回归分析

8.1 描述性数据分析

数据分析有三种类别:描述性数据分析、预测性数据分析、规范性数据分析。

  • 描述性数据分析:描述数据是什么。常见指标包括平均数、中位数、众数、四分位数等。

  • 预测性数据分析:从数据中预测。

  • 规范性数据分析:从数据中得到判断。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

|

library(tidyverse)  
  
library(readr)  
dem_score <- read_csv("https://moderndive.com/data/dem_score.csv")  
  
guat_dem_tidy <- dem_score %>%   
  pivot_longer(names_to = "year",  # names_to 为把原来数据框中的行变为列  
               values_to = "democracy_score", # values_to 字符串,创建新的列名称  
               cols = -country, # 为不想整理的  
               names_transform = list(year = as.integer))  # 设置变量的数值类型  
  
guat_dem_tidy %>% summarize(  
    year_mean = mean(year), democracy_score_mean = mean(democracy_score),  
    year_median = median(year)  
)  
  

—|—

结果如下:

1  
2  
3  

|

 year_mean democracy_score_mean year_median  
      <dbl>                <dbl>       <dbl>  
1      1972               -0.826        1972  
  

—|—

次数可以使用skim(),一次性计算:

  • missing:缺失值的数量

  • complete:非缺失值或完整值的数量

  • n:值的总数

  • mean: 平均值

  • sd: 标准差

  • p0:最小值

  • p25:1/4分位数

  • p50:1/2分位数

  • p75:3/4分位数

  • p100:最大值

计算相关系数:

1  
2  

|

evals_ch5 %>%   
  get_correlation(formula = score ~ bty_avg)  
  

—|—

8.2 一元线性回归

描述一个自变量和一个因变量之间的关系。

1  
2  
3  
4  
5  

|

x <- c(1, 12, 89, 28, 13, 93, 92, 9, 34)  
y <- c(34, 12, 13, 56, 89, 1, 9, 23, 20)  
  
relation <- lm(y ~ x)  
relation  
  

—|—

得出x y 的相关系数:

1  
2  
3  

|

Coefficients:  
(Intercept)            x    
    44.6890      -0.3914  
  

—|—

8.3 多元线性回归

8.4 R语言分类及预测算法函数

使用R进行数据挖掘时,分类和预测占很大比重,涵盖多个算法模块。主要的算法模型包含神经

9. 抽样

例1:从一个碗中随机抽取50个小球,计算抽取到红色小球的概率。

1  
2  
3  
4  
5  
6  
7  
8  
9  

|

library(tidyverse)  
library(moderndive)  
  
tactile_prop_red  
  
ggplot(tactile_prop_red, aes(x = prop_red)) +  
  geom_histogram(binwidth = 0.05, boundary = 0.4, color = "white") +  
  labs(x = "Proportion of 50 balls that were red",   
       title = "Distribution of 33 proportions red")   
  

—|—

img

例2:从1000个球中随机抽取25个,计算是红色球的概率,并且绘制成条形图。

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  

|

library(tidyverse)  
library(moderndive)  
  
bowl   
  
# 1.a) Virtually use shovel 1000 times  
virtual_samples_25 <- bowl %>%   
  rep_sample_n(size = 25, reps = 1000)  
  
# 1.b) Compute resulting 1000 replicates of proportion red  
virtual_prop_red_25 <- virtual_samples_25 %>%   
  group_by(replicate) %>%   
  summarize(red = sum(color == "red")) %>%  
  mutate(prop_red = red / 25)  
  
# 1.c) Plot distribution via a histogram  
ggplot(virtual_prop_red_25, aes(x = prop_red)) +  
  geom_histogram(binwidth = 0.05, boundary = 0.4, color = "white") +  
  labs(x = "Proportion of 25 balls that were red", title = "25")   
  

—|—

10. 假设检验、置信区间

@todo

11. 数据可视化

11.1 ggplot介绍

ggplot是用于数据可视化的包。

基本操作语法为:

1  

|

ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())  
  

—|—

有3个部分组成:

  • data:数据集。

  • geom: 几何对象,可以在图中观察到的对象类型。例如:点、线和条。

  • aes:描述几何对象,如x/y 位置、颜色、形状和大小。

基本图形

  • 散点图geom_point()

  • 折线图geom_line()

  • 箱线图通过geom_boxplot()

  • 直方图通过gom_histogram()

  • 通过条形图geom_bar()geom_col()

示例:

1  
2  
3  
4  
5  

|

library(nycflights13)  
library(ggplot2)  
  
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay)) +   
  geom_point() # 散点图  
  

—|—

img

12. 实战案例:西雅图房价预测

@todo

感谢

在学习过程中,除了参考官方文档,主要参考了R与tidyverse——数据分析入门 内容,非常感谢!

ChangeLog

20220805 优化案例

20220618 完成初稿

李昌镐8岁学围棋,11岁成为职业棋手,13岁获得职业冠军,一生夺得18次世界赛冠军、13次团体赛冠军(作为主将夺得8次)。李昌镐把自己能取得如此成就,归为天赋、体力、家庭支持。

李昌镐的棋风厚实,全盘无“妙手”,在他看来“围棋竞技的胜利属于少失误的一方” 。他在下棋时,整盘棋几乎没有失误,让对手没有可乘之机,当发现对手失误时,便给予对手致命一击。同时,他擅长把对方拖到自己熟悉的棋路上。他追求不得贪胜、只赢半步。

越是对胜利存有贪念,越得不到胜利。

胜不可求,但求不败。常识是大概率正确的事情,遵守常识并不能保证你胜利,但可以让你避开很多坑。我们的关注点,并不是获胜的结果,而应该是做什么能让我们大概率获胜的过程。

过份关注结果,只会让你浮躁,让你变得眼高手低。所以,不要追求获胜,要去追求如何做得最好。不要只盯着结果,要去盯着实现结果的关键节点。

一位创业者兼围棋爱好者所说“围棋是简单的复杂游戏,而扑克是复杂的简单游戏”,围棋是在明确的规则、明确的结果下(必然产生胜负),可以全盘运筹帷幄,精确计算,最终获胜。但真实世界边界模糊,更像打扑克,要根据牌局(情境),把手中的牌打好,既要理性的计算胜率、赔率,也要相信直觉的重要性。

《华与华正道》这本书是华杉老板发的朋友圈整理而成,最开始看到这个书名时,我还以为是成功学。

结果,华老板看起来讲的是鸡汤,实际上在讲他成事的方法,告诉我们“不要想「高招」,要在最基本的东西上反复下功夫”。 其中,有不少观点引起我的共鸣。

印象最深刻的是下面四点:

  • 找到目标
  • 构建“输入-输出”闭环
  • 压倒性投入
  • 不求胜,求不败

仔细一想,这四点,不就是我们做每一件事都要经历的嘛。

找到目标

志向不是学生时代的事,越是人到中年,越要立志!

立志在这个时代,似乎对很多人越来越陌生了,不妨把立志换成目标。目标越明确,时间利用率越高。 先想清楚需要达到什么目的,然后把最终目标拆解为子目标,并匹配资源和能力把事干成。即目标-差距-解决方法,目标及实现的路径越明确,实现的可能性越大。

很多人会说,不知道最终目标是什么,所以迷茫,要是我知道目标,一定能投入精力,把事情干成。这很正常。人在思考目标时有个特点:时间越长的目标,越去寻找目标的意义,而短期目标则会思考具体怎么干。最怕的就是要干事情时,纠结干这件事情的意义。

解决方法是,先定2个月的目标,或者先定个1个月的目标,迈出第一步,不要老纠结于“假想”的长期目标,“想不明白,就干明白”。

聚焦和专注。没有想明白的不做,主业之外的不做,要做就要做到最好。不少企业家都说过类似的话,你会发现,他们起步阶段,都是先在一个点上建立优势,然后慢慢扩展。人生发展也是一样,要有所成就,离不开聚焦和专注。

人生很短暂,能够把一件事情做好已经很了不起了。

中国最缺的是专业主义,缺乏死磕精神。专业来自专注,要在一个点上做到1米宽,1万米深。

我所在的行业,很多企业都想做全产业链经营,从种子,种养殖,物流,屠宰加工一直到终端零售,但大部分企业摊子铺得太大,资金链断裂。而有一家企业(海大集团)创始人很清醒,19年前就提出“专业化基础上的规模化,核心能力基础上的全产业链延伸”,10年市值翻了10倍,利润翻了几十倍,年复合增长率30%左右。

打造“输入-输出”闭环

1、只有系统学习,才能算无遗策。

知识整体大于碎片。系统学习最快的方式是主题学习。

人类知识组织的最佳方式是树形结构:先有主干,然后分支,分支上在进行分支。

而主题学习是最快建立树形知识结构的方法。 如果想学习某个领域,不要只看一本书,而是要看一堆书。以便快速掌握以下问题:

  • 这个领域在解决什么问题
  • 一级术语是什么,二级术语是什么
  • 这个领域的发展历史如何
  • 有哪些大牛,这些大牛有哪些重要思想
  • 有哪些操作案例

具体操作如下:

  • 学习理论。领域内经典教材,可以买十几本进行目录对比,每本书都出现的,就是该领域最重要的知识。
  • 理清该领域历史脉络。可以对该领域不同阶段进行梳理。
  • 掌握思想流派。挖掘这个领域的大牛,看大牛的思想,找领域内的高手交流。
  • 找实操案例,经典实验。案例和实验是鲜活的,才能建立质感。
  • 下场实干。这是最重要的,因为你不是搞理论研究,而是学以致用,解决实际问题。

主题学习看起来很慢,但是拉长时间周期,却是最快的学习方式。

因为主题学习你掌握的不是零散的知识,而是该领域“人类总智慧”。

在主题学习时,很多人仅仅局限在书本知识。实际上,人类的大部分有用知识,都是隐性的,非言语的,很难用文字表达,这类知识储存在高手的头脑之中。

这就需要多和高手交流、学习。高手之所以是高手,是因为他把这个领域该犯的错误都犯了。比如,观察和模仿高手多习惯、使用的工具,或者和高手共事。

2、只有永续输入,才能有持续输出。

输入决定输出。把大脑类比为电脑,包括“输入信息-在头脑中加工-输出作品并行动”。

输入信息的数量和质量决定了信息的加工深度以及能够产生的作品。日更公众号的前提是,信息的输入大于输出。

用输出倒逼输入。很多人把输入当成目的,其实输出才是目的。你需要从信息/知识的消费者,转变为创造者,输出作品。输出利于深度思考,理清楚头脑中的概念。

不要停留在低水平输入、输出。

提高输入水平的方法:看足够多的高质量信息。关注一手信息,看在某个领域做成事的人的作品,少看评论家的文字。比如,段永平做投资,反复看巴菲特致股东的信。读书多读经典,对经典深度阅读、主题阅读、反复阅读。

提高输出水平的方法:

1)把自己当成专家,模仿专家的输出方式。

2)必要难度,输入信息后,隔几个小时再输出。比如,看完书后,隔6个小时复述学会了什么。

3)压力测试。不要学太多的模型,而是把学到的少数模型和知识,在不同场景下运用,直到内化成本能。比如,你会营销,可以通过向他人分享、在不同平台、不同行业测试你的营销心法。

4)形成作品。作品是你和社会进行价值交换的媒介,要有阶段性的成果。比如,你在学习某个东西,能不能产出一个让大家眼前一亮的东西?

压倒性投入

做一件事情,要么压倒性地投入金钱,要么压倒性地投入时间,要么两者都压倒性投入。

经常听到“大力出奇迹”,之前我对这句话没有太多感觉,直到有一次,我们受邀去一个世界500强做演讲。

我们投入了一周时间打磨课件,查阅大量的数据、PPT里的每个标点符号都认真检查,那个星期几乎天天熬夜。

当天的演讲很成功,对方高度认可我们的专业水平。不到2个星期,对接了一个几十万的合作,目前钱已经到账70%,后期还会有其他合作。而另外一个水平也很高,但是使用通用课件的人,给大家的感觉并不好。

通过这事,我想明白了,要把精力投入到最值得投入的地方。高手平时可能看起来懒洋洋的,但是一到关键时刻,对时间、精力、金钱的投入是无人能敌的。

压倒性投入,不是盲目的All In。 华老板给了一个判断一件事情该放弃还是该坚持的方法:想清楚了,就去干,要压倒性投入;干一段时间,迷茫了,咋办?再坚持一段时间,再过一段时间,还没气色,那就撤。

这个方法的操作难点在于:第一,能不能想得很明白;第二,干了很久没起色,如何判断该不该坚持。

我的解决方式是:

干之前尽可能掌握信息,比如深入调研,和干过这件事的高手交流。干的时候,遇到问题不要自我怀疑,去寻找解决方法。

其次,设定时间,以3个月,18个月,3年,12年为周期。如果是3个月的小项目,那就在3个月产生可量化的结果;如果是大项目(比如18个月的),拆分成多个3个月(2个月一个周期也行),有量化的指标,及时止损。

不求胜,求不败

如果一心想着打败别人,去夺取别人的东西,则心不正,事不成。

正道往往不求能胜,但求不败; 魔道往往激动人心,贪巧求速。

为什么有些平时学习很好的孩子,一到大型考试(如中考、高考),真实水平就发挥不出来?

心理学家研究的结论是:这类孩子平时考试抱着“把考试当成检验知识掌握程度的方式”,但一到大型考试,就担心考不到平时的排名,他们并不会把所有精力全部用在解题上,而是把相当一部分精力分散到思考“怎么避免别人超过我上”。

实际上,胜利并不可求,我们的关注点应该放在“怎么活得久一点”。

赤壁大战时,曹操兵力是孙刘的十倍,孙刘是用奇技淫巧打败曹操的?并不是。是曹操自己打败自己的。曹操疑心太重误杀蔡冒,张允;后决策失误,把船连在一起,才让孙刘有了可乘之机。曹操为了快速获胜,而忽视了如何避免失败,结果大败。

做产品也一样。太关注竞争对手,会影响自己的心态、判断和决策。

你肯定听说过“以客户为中心”,但很少听到“以打败竞争对手为中心”。

可见,关注竞争对手的目的,并不是为了打败竞争对手。而是:1)学习竞争对手的长处;2)发现竞争对手的软肋,找到差异化的机会点;3)从竞争对手视角看客户需求。

很多行业并没有到“要么你死,要么我活”的地步。在一个领域,服务好1000个铁杆粉丝,你也可以活得很滋润,并不需要你去打败谁。我们需要关注的是,如何让客户离不开你。

我们再来回顾一下,这四点成事方法:

  • 找到目标
  • 构建“输入-输出”闭环
  • 压倒性投入
  • 不求胜,求不败

先设定目标,然后围绕目标构建构建“输入-输出”闭环,压倒性投入时间、金钱,让自己不离开牌桌,等待机会,实现目标。

你或许对松下、本田、索尼企业有所耳闻,但对京瓷和KDDI没有听过。这几家公司背后的创始人,被称为日本四大经营之圣,分别是松下幸之助、本田宗一郎、盛田昭夫以及稻盛和夫。

稻盛和夫是谁?为什么被称为“经营之圣”?

稻盛和夫职场早期和创业早期的两个故事,相信能给职场人不少启发。

1

稻盛和夫1932年出生日本鹿儿岛,今年已经有90岁高龄。7个兄弟姐妹中,排名老二,家里开印刷作坊,1945年美军轰炸鹿儿岛,家里的印刷作坊被毁,全家生计难以为继。

小时候患有肺结核,险些丧命;小学、初中、高中、大学成绩平平;大学毕业找工作处处碰壁,险些加入黑社会;在导师的介绍下,加入一家濒临破产的公司,在陶瓷研究上取得众多技术突破,为公司带来大量订单。后来,因与上级在技术开发路线产生分歧,27岁时创办京瓷,52岁时创办KDDI,两个公司均为世界500强,稻盛和夫也是世界上唯一一个成功创办过两家世界500强企业的企业家。78岁临危受命,拯救负债1.5万亿日元的日航,用1年多时间,让日航重获新生。

稻盛和夫早年的困顿,与日后的巨大成就形成鲜明对比,加上盛和塾(1989年成立,2019年关闭)的影响力,著书颇丰等因素,在国内曾掀起了一股学习稻盛和夫经营哲学的浪潮,养活了不少讲授阿米巴经营模式的培训公司和咨询公司。我没有资格评说稻盛和夫的经营理念在中国企业的实际运用,这里不深入探讨经营理念,况且管理大师德鲁克早就说过:”管理是一种实践,其本质不在“知”而在“行”,其验证不在逻辑,而在于成果,其唯一权威就是成就”,做成什么,比说了什么更重要。

2

故事1:稻盛和夫的第一份工作收获了什么?

1954年,22岁的稻盛和夫毕业找工作不顺利,导师帮助下,加入了濒临破产的松风工业。不到半年,一同加入的4个人,抱怨在公司看不到希望,都辞职了。

稻盛和夫也找到了跳槽的单位,但因家人阻难,没有跳槽成功。

没有成功跳槽,总不能躺平。于是,稻盛和夫离开了让自己情绪低落的宿舍,把被褥搬去实验室,整日埋头搞研发。

此时,公司接到了一份来自松下订单,生产电视机电子显像管使用的绝缘陶瓷,稻盛和夫合成了一种新的陶瓷,为公司带来了大单。凭借一系列成果,不到两年,稻盛和夫成了部门的主管。

他每天晚上召集员工开会,和员工说明工作的意义,“人生只有一次,每一天都要不留遗憾的度过”。他把大部分工资寄给父母后,剩余的全部用在和部门年轻人吃饭喝酒上。

稻盛和夫以为自己会一直在松风工业干下去,没想到因与上司在技术开发路线上的分歧,走向了创业道路。而当稻盛和夫辞职不干时,松风公司有8个人愿意追随他。更可贵的是,第一个上级青川先生给他出资了30万日元,并且带领他去说服朋友宫木电机社长宫木男出资130万日元。

这里用人生资本进行分析。人生资本理论是由认知科学家阳志平老师提出,用来衡量一个人的人生发展情况,并指导人生资本积累。最重要的社会资本、文化资本、心理资本和文化资本。

我们用人生资本理论来衡量一下,稻盛和夫的这段职业生涯。

技能资本:稻盛和夫积累了深厚的技术实力,研发多款精密陶瓷。创业第一年,京瓷便实现2600万日元销售额,300万日元净利润。第二年业绩又实现倍增。大部分订单都来自松下,而松下愿意用一个初创公司的产品,是出于稻盛和夫的技术实力。

社会资本:社会资本可以简单理解为人脉。给予稻盛和夫帮助的关键人物来自学校和松风工业。导师为其介绍工作;技术专家内野正夫教授终身为其提供帮助;上级青川先生帮助其筹办公司;松风工业的客户松下公司赏识稻盛和夫的才干,为初创的京瓷提供订单。认识同在松风工业工作的须永朝子,26岁与其结为夫妻。

心理资本:改变工作环境,远离乱糟糟的宿舍,搬去实验室住。学会了不抱怨,热情的工作。

文化资本:鹿儿岛大学毕业,从事陶瓷研究。

稻盛和夫的四种人生资本,都在不断上升。处在一个不那么好的公司,并不是抱怨,而是用热情去创造,取得众多突破性的研发成果,获得同事、上级、客户的认可,由此获得更多机会,逐渐建立在精密陶瓷研发领域的江湖地位。很多人可能忽略了一个细节,稻盛和夫从事的陶瓷研发,赶上日本电子行业大发展,处于快速发展期,公司虽然衰败,但整个行业是向上发展的。

给职场新人的启示。

作品意识。以创造者的姿态,而不是打工者的姿态,尽快在某个领域深耕,做出让人眼前一亮的作品。用作品去链接高手,获得高手认可,输出更多作品,形成正循环。用这种心态,你会发现,抱怨是一种非常“傻”的行为,抱怨不能改变任何事情。如果你有抱怨的情绪,可以换一个环境,去接触积极向上的群体,住在充满阳光的房间,多去亲近自然。

价值创造大于价值分享。公司内部一团和气,把太多时间放在处理人际关系上,并不能为公司带来实际价值,职场中别人更关注你干成了什么。搞定同事搞不定的技术、客户,让公司离不开你,而不是你离不开公司。

做一个靠谱的人。做事积极主动,积极思考,擅于补位,不要只盯着自己手头的活。不要做太多承诺,承诺的必做到,做到的要远远超过别人的预期。

3

故事2:经营哲学的形成

稻盛和夫主张“追求全体员工物质与精神两方面幸福的同时,为人类和社会的进步与发展做出贡献”,采用阿米巴经营。

稻盛经营哲学的形成,与京瓷的创立背景有关。

京瓷创立初期,从松风工业出来的8个人,曾一同立下血誓,”我们团结一心,必将成就为社会、为世人的事业,以此血印为证“。血誓意味着,这8个人和京瓷的关系,早已超出雇佣关系,所以能为公司没日没夜的为公司干,不在乎别人多做了还是少做了,都希望把公司做大。

当公司发展到一定规模后,原有的文化逐渐被稀释。

此时,稻盛和夫发明了阿米巴经营模式。即把公司拆分成独立核算单元,每个核算单元相当于一个小公司,为各自的经营结果负责。这很可能出现,每个核算单元从自身利益出发,忽视公司整体利益。

稻盛和夫为了推动阿米巴落地,不断向员工讲利他之心,讲工作的意义,并用实际行动感染员工。宣称京瓷能做到世界第一,刚开始说时,没人相信,当员工听了几十遍后,员工逐渐被相信。同时,设立固定场所举办联谊会,在联谊会上所有员工坦诚相见,相互吐槽工作、畅谈人生。

稻盛和夫曾经把政府给予的100万日元奖金,全部用于和员工吃喝,而其他获奖的公司则把这笔钱投在了研发上。公司完成10亿日元销售额时,公司1300多人全部去香港旅行。

这一系列的动作,加上日本终身雇佣制的文化,阿米巴经营激活了整个组织。

4

上面两个故事,可以看到,稻盛和夫讲的都是常识,也是按照常识去做,这就是知行合一。

他主张敬天爱人。敬天,即对自然、社会、商业保持敬畏,按照规律办事,付出不亚于任何人的努力;爱人,即利他,为客户创造价值,提升员工的价值。他主张“动机至善,私心了无”。自己为什么做某个决定,想清楚后,全身心的投入其中,当遇到困难时,才能够坚持下去。

稻盛和夫把自己的成功总结为方程式「生活/工作成果=思维方式x热情x能力」。

我们能向他学习什么?

我不禁想起了马奇的一段话:

我认为我们的义务之一,就是如果可能的话,让生活变得更加美丽一些,特别是在我们的平凡生活之中。

用热情去创造,去创造美好的生活。

今天接着聊第二个:聚焦,集中战略资源取得压倒性优势。

1

1993年,福耀公司上市,曹德旺成为亿万富翁,公司开启多元化发展之路,涉及IT、房地产、玻璃、贸易、装饰等。

本想着大干一场,结果繁荣的背后,却暗藏危机。此时,银根收紧,建设楼房的资金出现问题;才建立三年的工业村,由于质量问题成了烂尾楼;参股公司农村信用联社因为政策原因,退出投资;玻璃制造行业涌现几十家企业,竞争加剧。公司负债率飙升至68%。

做的事情变多了,可是利润却不见涨。曹德旺开始调查、访问、请教他人、自我反思,寻找利润不见涨的原因。最终,下定决心把主业聚焦在汽车玻璃制造上,一口气关掉了几百家销售部、引进董事制度完善公司治理机制。此番改革,对福耀成为日后玻璃世界的龙头,打下了基础。

有次,记者问任正非在全球经济不景气的情况下,为何华为逆势增长,任正非谈到了一点——华为28年只对准通信领域这个“城墙口”冲锋。

不管是福耀还是华为,都选择了聚焦主业。

2

多少企业因为胡乱扩张,丢了主阵地,做成了平庸的公司?如果一家公司做了很多与主业不相关的业务,基本可以判断这家公司做不大。

不管是大公司还是小公司,资源都是有限的。捡一堆芝麻,不如聚焦在抱一个西瓜。

敌人对我方形成包围时,分散兵力四处突围,只会造成更多人员伤亡。此时,把优势兵力集中起来,攻击敌人的薄弱点,突围成功的可能性更大。用鞭子打牛,牛没感觉,而用针去扎牛时,牛会跳起来!在一个点上做到足够的深度,才能取得压倒性优势,公司的护城河才能做深。

先把一个区域做好,一个产品做好,然后进行复制。如何衡量是否做到位?可以看产品销量、市场占有率等指标,是否优于同行,品类是否做到了细分市场第一,或者区域市场第一。

3

没有想明白的不做,主业之外的不做,要做就要做到最好。我看到了好多企业家都说过类似的话,查看他们的企业发展轨迹,你会发现,他们起步阶段,都是聚焦在一个点建立优势,然后慢慢打开局面。

在经济环境不好的情况下,更要管好现金流,广积粮,缓称王,聚焦优质客户,砍掉不盈利的产品。

人生发展也是一样,要有所成就,需要做出取舍。你聚焦在哪里?你在聚焦的点上,是否形成了压倒性优势?

0%