明茨伯格是谁

亨利·明茨伯格(Henry Mintzberg,1939年-),当今世界上最杰出的管理思想家,出生于加拿大,犹太人,美国战略管理协会的创始人及前主席,国际实践管理教育联盟的创始人及前主任。1961年,获得加拿大麦吉尔大学机械工程学士学位,加拿大国家铁路公司的运筹学博士学位(1961-1963年),在此期间,兴趣逐渐转向研究人们如何工作。1965年、1968年分别获得麻省理工学院斯隆管理学院管理学硕士学位和管理学博士学位。博士毕业后,进入麦吉尔大学任教,谷歌学术主业H指数125。

明茨伯格创立了国际经理人硕士课程(impm.org)和国际卫生领导力硕士课程(mcgill.ca/imhl)以及风险投资公司CoachingOurselves.com的,同时是海狸雕塑的户外活动者和收藏家。

明茨伯格出版书籍20余本,发表文章180余篇。先后创立了管理者角色学派、战略过程学派和实践管理教育模式 。曾四次在《哈佛商业评论》上发表文章,其中两次[12]获得“麦肯锡奖”。

思想特点

明茨伯格被称为“离经叛道”的人,他的思想有以下特点:

实践导向,注重归纳。 他对管理咨询也颇为不满,认为传统的MBA毕业生像病毒一样从机体内部摧残管理实践,使企业对其他形式的管理方法视而不见。他强调在实际工作中发展管理能力,并且从1996年创办了IMPM培训课程,改变主流商学院按照战略、组织、营销、财务等职能模块教学的方式,用更贴近真实管理实践的方式培养管理者。IMPM培训内容包括五大模块:管理自我、管理组织、管理环境、管理关系、管理变革。代表作《管理工作的本质》,该书也是明茨伯格的成名作。

人本主义,强调平等、参与和互动。 他把领导力视为管理的一个重要技能,强调管理者应发挥组织中每个人的潜力,管理者为员工提供支持、引导和激励,强调参与式管理。代表作《战略规划的兴衰》。

理论和实践相结合。 认为管理是科学、艺术、技艺三者的融合,反对按照自然学科的研究方式研究管理。管理不是目的,而是为组织目标服务。管理者是思想者,更是行动者,没有行动,一切归于零。代表作《管理者而非MBA》。

注:此部分借鉴了肖知兴老师的归纳

不要高估理性、否定直觉和经验

明茨伯格对西蒙的“管理就是决策”的观点进行了讨论,更对越来越复杂的分析技术进行了批判。

过度理性和进行复杂的分析,会否定很多潜在的可能,丧失对问题本质洞察。决策可以分为程序化、非程序化。程序化的决策容易处理,而非程序化的决策,才是发挥人创造性的部分。

因此,需要把直觉、理性、经验结合,在三者之间找到平衡。“可控的混沌”,“可控的无序“才是真实世界的管理。

同理,现实生活也是一样。不要过度高估理性、否定直觉,人是有限理性,人不是机器。

要承认感性的存在,常识远比理性重要。

规划真的那么有用?

规划有助于整理过去,把过去行为形式化。规划有助于形成微调年度预算系统,同时统一组织内部语言,让组织朝着一致方向前进。

但严谨的规划真的不是那么有用。已经有非常多的证据表明。规划难以处理复杂性,多变的世界。

规划多大程度上会损害直觉思维?过度规划破坏了公司评估外部世界、创建可持续竞争优势的能力。

知行合一

不管说再多,更重要的是行动。一个站在岸上不下水的人,是学不会游泳的。公众号「孤独大脑」里有一个回答,我至今印象深刻,也是我一直与管理咨询行业保持距离的一个原因:

本科后接着读企管方面的研究生,就像婚前上两年性爱课的处子。

在明茨伯格看来通过 实践—自我反思/高人反馈/教学—优化行动,才能提升兼具科学、艺术和实践的管理技能。

end.

张万在外打拼多年,小有积蓄,想着老大不小了,父母也已经年迈了,于是回到家乡所在的省会城市,和之前的合作伙伴李顺一起合伙开了一家火锅店。李顺掌握独门火锅料配方,擅长食材搭配,张万则擅长营销、门店管理。他们的生意红红火火,很快店里面就招了5个服务人员,还计划年底开第二家火锅店。

火锅店每天人来人往,他们本以为赚到了很多钱。可是几个月后一盘算,发现这个月收入60万(数字只是举例,不用纠结),利润却是负的。问题出在哪儿呢?于是,两人对标了市场上做得好的另一个火锅店“香自来“,终于找到了原因:原来火锅店的人流虽然很大,但是菜品采购经常过量,导致大量浪费;菜品的采购成本也远远高于香自来;翻台率远远低于香自来……总之,成本过高。

于是张万围绕降本增效进行了一系列改革:根据近三天的菜品平均购情况,预估当天需要采购的菜品量,节假日参考过往数据;与食材供应商谈判,获取更优价格;根据历史数据,调整菜品的分量;把服务员的收入与店铺的利润挂钩。

很快,调整后有了新的结果。火锅店的利润上升了,成本下降了。

上面所讲的故事,离不开企业的运营管理。

企业运营管理的目的是最大化提升资源利用效率,让资源在单位时间内,创造出更多产出。比如,原来投入1块钱,可以赚回来1.2元,现在通过提升企业的运行效率,赚钱的成本降低了0.2元,周转率提升了20%,企业盈利能力得到了改善。

当下经济不好的大环境下,越来越多的企业注重降本增效,开始减肥,更加注重投入产出比。

那么如何理解企业运营管理,企业运营管理从哪些方面抓起?这就要回到企业运营管理体系分为三个层次:

  • 外层财务指标
  • 中层业务逻辑
  • 内核组织能力

图片

外层:财务指标

用财务指标衡量公司的运营能力

汽车的仪表能够直观反映汽车的运行情况,财务指标是公司运行的仪表盘,能够直观反映公司运营管理管理情况。

衡量一家公司运营能力的好坏关键看四大能力:盈利能力、运营能力、偿债能力、发展能力。每个能力都有一套衡量指标,在财务上成熟的体系,特别是在上市公司中。

下面选取每项能力中最关键的指标进行说明:

盈利能力:用来衡量现在赚不赚钱?包括营业利润率、净利润率、毛利率、总资产报酬率,四个子指标。其中最重要的指标是总资产报酬率(ROE) = 净资产 / 所有者权益。表示每投入1块钱,能够产出多少钱。

营运能力:用来衡量赚钱效率高不高?包括应收账款周转率、存货周转率、流动资产周转率、固定资产周转率、总资产周转率,五个子指标。其中最重要的指标是总资产周转率,表示在一定时间内(比如一年),投入的100块钱,可以从研发、生产、销售整个流程中转几次。转1次,100块 = 100块钱,转10次,则100块 相当于1000块(100 * 10)的效用。

偿债能力:用来衡量欠债还钱能力怎么样?企业负债经营,包括流动比率、速动比率、资产负债率,三个子指标。其中最重要的是资产负债率 = 资产/负债,表示欠款后,手上资产能否偿还银行等债权人、欠供应商的应付账款。

发展能力:用来衡量未来赚钱能力怎么样?包括营业收入增长率、总资产增长率、营业利润增长率、净利润增长率、净资产增长率,五个子指标。表示现在和过去相比,收入、利润、资产等增长情况。

四大能力相关的指标非常多,不同行业、不同企业、不同发展阶段,关注的指标有所不同,企业管理者、财务人员、投资者关注的指标也是有所差别的。所以不能盲目的用这些指标去衡量企业的运营管理情况。比如,在高速成长期的行业和公司,此时的目的是抢占市场、更加关注现金流,资产负债率可能过高。在经济状况不好时,企业更加关注现金流和净利润。

企业经营者最应该关注的四个指标

上面的指标还是太复杂,我们把上面的指标进一步简化,作为一个CEO最需要关注的四个指标是利润率、现金流、周转率、资产收益率。

现金流:现金的净流入-现金的净流出。企业里面的资金有进有出,一端流入,从另一端流出,当流出的比流入的多时,企业现金流就断了。就像水池一样,流出的比流入的多,水池自然会干枯。有的企业看起来账上有利润,但是全是应收,结果现金流断裂,企业破产。

所以,从这个角度去看,现金流比利润重要。现金流入来自企业经营收入、筹资获得的现金。

净利润率:即抛除所有成本、费用和交税后,剩下的部分。利润率反映了投入1块钱,最终“生”出了多少钱。净利润率远比规模重要。有的企业还在盲目追求规模,认为规模足够大,赚到的钱就足够多。同样是100亿元的营业收入,运行效率高,可能有10亿元的净利润,而有的企业可能只有2-3亿元的净利润。在当前的环境下,为什么更应该注重净利润率就不难理解了,净利润率代表了企业经营管理水平。

周转率:用来衡量企业完成购买原材料、生产、出货、回款所需的时间,时间越短,周转率越高。如存货周转率,表示一年中清空每一批存货所需的平均天数。不同行业对周转率要求有所不同,对利润率低的行业,该指标尤为重要,如零售行业、饲料行业,“薄利多销”便是出于此考虑。

从下图可以看出沃尔玛存货周转天数呈下降趋势,应收账款周转天数呈下降趋势,应付账款周转天数呈波动上升,说明周转率在不断改善,净利率则呈上升趋势。

图片

周转率是供应链管理关注的核心指标,相同的时间、相同资金条件下,哪家公司周转率越高,哪家公司就能够赚更多钱。降低库存、降低存货时间、提升产销衔接效率等等动作,都是为了提升周转效率 。

在关注周转率时,还有一个概念——资金的时间价值。同样是60%毛利率的生意,同样是5000万的单子,A公司的应收账款是一年,B公司应收账款是6个月。这意味B公司一年内使用5000万流动资金的时间比A公司多了6个月。君不见很多供应商都是被账期拖死的。

资产收益率:和净资产收益率相似,表示投入产出比,而资产收益率 = 利润率 × 周转率。提升资产收益率,需要提升利润率和周转效率。

从股东的角度看如何改善公司运营

抛开其他因素,从生意的角度看,股东投资创办公司的目的是获取利润——利用自有资金和借来的钱,买一只下蛋的鸡,然后让鸡不断下单。

对股东来说,最关心的指标是净资产收益率。根据净资产收益率的公式:

1  

|

净资产收益率(ROE)=净利润/净资产 = 总资产净利率 × 归属母公司净利润占比 × 权益乘数(财务杠杆)  
  

—|—

下图为某上市公司的净资产收益率计算表。

图片

从净资产收益率的公式看,要想提高净资产收益率,需要让销售净利润率、资产周转率、权益乘数三个指标尽可能大。

我们继续拆分:

总资产净利率 = 营业净利润率 × 总资产周转率 =( 净利润/营业总收入) × (营业总收入/资产总额)。总资产净利率要尽可能大,就要提高净利润率,净利润率提高,需要提高净利润。那如何提高净利润呢?因为净利润 = 收入 - 成本 - 费用,所以要提高收入,降低成本,降低费用。而收入 = 客单价 × 数量 × 复购率,那么要想增加收入,可以提高客单价、卖更多的产品、提高复购率。改善每个指标,就牵涉到企业经营了。

权益乘数 = 1/(1-资产负债率)=负债总额/资产总额。权益乘数代表企业举债经营的能力,是放大企业经营能力的杠杆,权益乘数越大,意味着企业举债经营的能力越强,越能够用别人的钱为自己赚钱,企业负债经营能够提高资金的使用效率。资产负债率为i80%,意味着用于企业经营的100块钱中,有80块钱都是别人的。资产负债率超过100%,意味着资不抵债。

中层:业务逻辑

为什么要关注业务逻辑

外层已经用财务指标反映了企业运营情况,那是不是按照上面提供的指标,一层层拆分,就可以找到企业运营改善的方法?

答案是:远远不够。

仅仅从单个指标上改善,只能改善企业运营管理的某个局部,没办法从整体上提升运营管理效率,遇到棘手的运营管理难题,就更没有 办法解决了。

在同一层级,你永远无法解决本层次问题,这就是向上一层。这一层便是企业的业务流程,更准确的说,是业务逻辑。

企业是为客户提供某种产品或服务的营利性组织。换句话说,企业是组织一帮人生产客户需要的产品或者服务。不同行业,生产产品或服务的方式有所差异。

动物疫苗行业对物流的要求没有饲料行业高,可以在一个厂生产,运输到全国。而饲料企业,则需要就地建厂,不仅要考虑玉米等原料的运输成本,还要考虑饲料的运输成本。两者的业务逻辑是不一样的,疫苗生产需要通过GMP认证,毛利润在60%左右,饲料毛利润则只有几个点,原料采购成本占比非常高。一家教育公司和一家电商公司,产品形态不同,服务客户的方式也有所差异。

这就需要回答业务逻辑上。不了解业务逻辑,你很难知道哪些运营管理指标重要,也不清楚每个运营管理指标背后反映了什么,更难做出运营管理的优化。财务指标是面子,业务逻辑是里子。

把握业务逻辑关键看两点:一盘棋,关键节点。

一盘棋: 理解企业整体业务流程、各个部门的业务流程,知道人、财、务、产、供、销在企业里面是如何组织起来的,即整个供应链是如何组织起来的。知道公司是怎么赚钱的。

关键节点: 找到业务流程中的关键节点,通过关键节点的优化,不断提升运营管理效率。

一盘棋

公司通用的业务流程是股东利用自有资金或者借款,设立公司—>研发(该环节可能没有)—>购买原料—>生产产品—>销售—>一部分钱用于发工资,一部分钱用于扩大再生产。

做业务时,要在头脑中有业务全局,整个流程背后反映了公司是怎么赚钱的——知道产品或者服务是如何组织起来,如何进货的,如何生产产品的,如何成交的。

最典型的如西南航空,把低成本作为核心竞争力,整个业务逻辑也就是围绕着低成本在做。比如不提供商务舱、不提供餐食、不接受选座。很多打工人,盯着自己的一亩三分地,根本没有思考过公司到底是怎么赚钱的,还在抱怨自己是螺丝钉,没有进步的机会。有想法的人,则会把公司当成未来发展的跳板,琢磨公司业务逻辑。

脑中装着业务逻辑,才不至于陷入瞎忙,你才会知道生产、研发、采购、销售应该扮演什么职责,各个环节是如何进行衔接的,比如如何和供应商衔接,采购和生产如何衔接、生产和销售又应该如何衔接。

企业运营效率不高,多半是流程上遇到了阻点,这就需要打通阻点,包括公司层面的业务流程、各个部门的业务流程。产销衔接不畅,是企业里面经常存在的问题,实际的销售订单比销售预估的要少,就导致企业库存增加,有订单没存货,又导致客户丢失。有的企业会建立产销衔接小组来解决这个问题,也有通过柔性生产来解决该问题的。再比如,做短视频账号,要不断梳理获客到变现整个流程,咨询公司要梳理客户服务流程。流程越顺畅,运行效率会越高。

关键节点

仅仅关注全局是不够的,还要关注全局中的关键节点。关键节点在整个业务逻辑中扮演着关键作用,80%的精力放在关键节点上,才能取得好结果。

比如,一家工程咨询公司,关键节点拿项目、项目施工管理、验收,而拿项目的关键是与客户的关系、过往案例,那么拿项目时,就需要围绕着如何与客户建立关系、如何包装过往案例去优化。

运营的工作是繁琐的,但效率提升藏在细节之中。此时,你需要抓住关键节点去优化效率。

企业运营管理会经常听到一个词:标准化。运营就是用标准化,把流程中的不确定变成确定性的事情。比如,生产的产品规格不统一、报废率高,那么把生产的每一个环节标准化后,成品率就可以得到提升(当然,这并不意味着标准化可以解决一切问题,这里只是说明标准化的重要性)

很多人会说,流程标准化后,企业会丧失活力。实际上,对于生产制造来说,标准化操作能够提升效率,保持产品质量稳定。对于知识密集型企业,标准化可以节省人的脑力,从而把注意力放在创造性上。

内核:组织能力

丰田是全球最赚钱的车企——相同的营业收入,比其他车企的利润高出很多。这得益于丰田的精益生产方式,丰田几乎实现零库存,生产中一旦出现问题,全体员工就停下来寻找原因,持续改善每个经营环节。

而丰田精益生产背后是日本文化、经营哲学和组织能力支撑,这就是运营的核心。从生产、采购、仓库、物流、研发、售后等单点改善运营,无法达到1+1>2的效果。最深刻的改善,是从建设组织体系着手。

两家火锅店 ,位置、口味、店铺规模差不多,但是一家火锅店却比另一家火锅店利润高出20%。差距背后体现在一个个细节上面,比如一家对食材采购的预估量更准确、调味料的浪费更少。再往下挖一层,为什么有这种差距?你会发现两家火锅店员工的工作状态是不一样的, 有一家把火锅店当成自己家开的一样,服务客户很上心,点菜、上菜、后厨等紧密配合,看到调味料没有了,还会主动补位。而另一家火锅店的员工,店长没有考核到的地方就不主动去做。

一家火锅店营造坦诚沟通、平等相处的氛围,相信员工的能力,并且每月拿出火锅店利润的20-30%分配给员工,并且承诺表现好的员工有机会成为店长。另一家火锅店则认为员工什么不行,工作沉闷,老想扣员工的工资,员工看不到希望,员工怎么可能安心工作?

两家火锅店经营效率差距背后,正是组织能力的差距:是否以客户为中心、分钱合理性、坦诚透明程度、人岗匹配程度。

是否以客户为中心:这句话听起来很普通,似乎每个企业都能够做到。但现实告诉我并非如此。客户的需求是一切经营活动的起点,离开了客户需求去谈供应链效率提升、生产工艺改造、供应商管理,那就失去了做这些事情的本心。

分钱合理性:分钱决定赚钱,老板舍不得分钱或者分钱不公平,会让员工对公司丧失信心,没有归属感。采购成本高一点,和自己没关;产品报废几个,合格率在考核范围内,和自己没关;人走后,公司空调一直开着,和自己无关。分钱合理,基本的原则是多劳多得,其次是把员工的奖金和公司的利润挂钩。

坦诚透明程度:德鲁克老人家曾说,企业就干两件事——营销和创新。创新是生产产品,营销是把产品卖出去,只有把产品卖出去,才会有利润。所以,对企业而言,内部都是成本。各个部门权责不清、出了问题不及时沟通、下层不只知道上层的想法、上层不知道一线业务员手里的情报…这些问题背后,都说明了组织不透明!组织内的信息流动越慢,组织的运行效率也就越低。组织就像机器一样,各个零部件只有磨合顺畅,才能高效运转。

人岗匹配程度:把合适的人放在合适的岗位上。有的人擅长研发,有的擅长生产管理,有的擅长营销,把每个人放在他最擅长的岗位上,利于提升每个运行节点的专业化水平,进而提升公司整体运营能力。

最后总结一下本文所讲的内容:

企业的运营管理水平,代表了企业资源利用效率。运营管理一是要保证企业正常运转,二是要让企业运转效率尽可能高。谈运营管理,就一定会谈到“效率”。

可以从外层的财务指标、中层的业务流程、内核的组织能力三个层次去剖析运营管理,这也是改善运营管理的方法。

在当前经济疲软、生产过剩情况下,每个企业都值得重新思考一下运营管理。

今天下午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个铁杆粉丝,你也可以活得很滋润,并不需要你去打败谁。我们需要关注的是,如何让客户离不开你。

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

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

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

0%