本章核心议题:现金流分析与企业价值评估
各位同学,欢迎来到《商业大数据分析与应用》的全新章节。
今天,我们将深入探讨商业分析和投资决策中的一个至关重要的领域——现金流分析 。
核心理念:‘利润是观点,现金是事实’
Profit is an opinion, cash is a fact.
这句话是理解本章所有内容的第一块基石。
一家公司可能在账面上看起来盈利丰厚,但如果无法产生健康的现金流,它依然可能陷入困境。
我们的目标:为企业绘制’现金流画像’
本章我们将学习如何运用Python
和Tushare
财经数据接口,系统地分析企业的现金流状况。
最终目标是:为一家企业绘制出精准的’现金流画像’,并将其与同行业竞争者进行横向对比。
学习成果:理论与实践的结合
通过本章的学习,你将能够:
掌握 关键财务指标的计算和解读。
熟练运用 Python
进行数据获取、处理、计算和可视化。
结合 理论知识与实践操作,为商业决策和价值投资打下坚实基础。
基础回顾:三大财务报表的关系
在开始分析前,我们必须理解三大财务报表是如何相互关联的。
三大财务报表关系图
展示利润表、现金流量表和资产负债表之间的关联。
利润表
现金流量表
资产负债表
净利润 -> 留存收益
期末现金 -> 现金资产
非现金项目调整
核心会计原则:权责发生制 vs. 收付实现制
理解这两个概念是理解现金流分析的钥匙 。
权责发生制 (Accrual Basis) :
核心 : 收入和费用在其’发生’时确认,而不管现金是否收付。
应用 : 利润表。
例子 : 公司卖出商品,即使客户还没付款(形成应收账款),也确认收入。
收付实现制 (Cash Basis) :
核心 : 收入和费用在现金’实际收付’时确认。
应用 : 现金流量表。
例子 : 只有当客户的钱真正打到公司账上时,才记录现金流入。
指标一:经营活动现金流量净额 / 净利润
现在,我们来看第一个,也是最重要的指标:盈利质量 的’试金石’。
什么是盈利质量?
Definition 1 盈利质量 (Quality of Earnings) 盈利质量是指公司财报中利润的真实性、稳定性和可持续性。高质量的盈利应主要由可持续的主营业务驱动,并且有充足的现金流 作为支撑。
指标剖析:分子与分母
\[ \Large{ \text{盈利质量比率} = \frac{\text{经营活动产生的现金流量净额 (NCFO)}}{\text{净利润 (Net Income)}} } \]
分子 (NCFO) : 来自现金流量表,遵循收付实现制 。
分母 (Net Income) : 来自利润表,遵循权责发生制 。
这个比率直接对比了’赚到的钱’和’账面上的利润’。
如何解读该比率?
> 1
每1元利润,有超过1元的现金流入支撑
非常健康
≈ 1
利润基本都转化为现金
健康
< 1
部分利润未转化为现金(如应收账款)
需关注
<< 1 或为负
利润’含金量’低,可能存在风险
危险信号
案例分析:贵州茅台 (600519.SH)
接下来,我们以A股市场的知名企业——贵州茅台为例,利用Python
来计算并分析其2019年至2023年这五年的盈利质量。
步骤一:准备分析环境
首先,导入必要的Python库,并初始化Tushare Pro
接口。
Tushare
是一个提供丰富财经数据的Python
库,非常适合进行量化分析。
import pandas as pd
import tushare as ts
import numpy as np
import time
import matplotlib.pyplot as plt
# 设置matplotlib正常显示中文和负号
plt.rcParams['axes.unicode_minus' ] = False
plt.rcParams['font.sans-serif' ] = ['SimHei' ]
# 输入你的Tushare Pro API Token
# 同学们可以去Tushare官网注册获取自己的Token
pro = ts.pro_api('ba1646815a79a63470552889a69f957f5544bef01d3f082159bf8474' )
步骤二:获取经营活动现金流数据
我们定义要分析的时间范围,并使用循环从Tushare
获取贵州茅台每年的现金流量表数据。
我们需要的字段是’经营活动产生的现金流量净额’ (n_cashflow_act
)。
# 需要获取的年份
years = ['20191231' , '20201231' , '20211231' , '20221231' , '20231231' ]
# 创建一个空的DataFrame用于存放现金流量数据
df1 = pd.DataFrame()
# 循环获取每年的数据
for i in years:
df1 = df1.append(pro.cashflow(ts_code= '600519.SH' , period= i, fields= 'ts_code,n_cashflow_act,end_date' ),ignore_index= True )
步骤三:数据清洗与去重
金融数据API有时可能会返回重复的数据行。一个好的编程习惯是在获取数据后进行去重处理。
df1 = df1.drop_duplicates(ignore_index= True )
drop_duplicates()
方法会移除重复的行,ignore_index=True
会重新生成一个干净的索引。
步骤四:获取净利润数据
同样地,我们从利润表中获取同期的’净利润’ (n_income
) 数据。
df2 = pd.DataFrame()
for i in ['20191231' , '20201231' , '20211231' , '20221231' , '20231231' ]:
df2 = df2.append(pro.income(ts_code= '600519.SH' , period= i, fields= 'ts_code,n_income,end_date' ), ignore_index= True )
df2 = df2.drop_duplicates(ignore_index= True )
步骤五:合并数据
现在我们有两份数据:df1
包含现金流,df2
包含净利润。我们需要将它们合并到一个DataFrame中以便计算。
df = pd.concat([df1, df2['n_income' ]], axis= 1 )
pd.concat
函数可以拼接数据框,axis=1
表示按列(横向)拼接。
步骤六:计算指标
数据准备就绪,我们就可以计算核心指标了。
# 计算指标1:“经营活动产生的现金流量净额/净利润”,结果保留2位小数
df['ratio1' ] = round (df['n_cashflow_act' ] / df['n_income' ], 2 )
我们新建一列ratio1
,存放计算结果,并使用round()
函数保留两位小数。
茅台盈利质量分析结果
最终得到的数据表如下:
ratio1
列直观地展示了二者的比率。
步骤七:可视化分析
为了更直观地理解数据趋势,我们将使用matplotlib
库进行可视化。
趋势图解读(1): 稳健增长
从趋势图中可以发现:
贵州茅台的净利润 (橙色线)呈现出非常稳健的增长态势 。
这是企业基本面优秀的第一层体现。
趋势图解读(2): 现金流高于利润
经营活动现金流量净额 (蓝色线)在绝大多数年份都高于净利润 。
其5年均值线(绿色虚线)也高于净利润的5年均值线(红色虚线)。
这充分说明了贵州茅台的利润基本上都是以现金形式实现的,盈利质量极高 。
趋势图解读(3): 2022年的特殊情况
值得注意的是,2022年其现金流量净额出现了一个明显的下降,甚至低于当年的净利润。
查阅年报可知,这主要由于当年支付的税费 和存放同业款项 大幅增加所致。
这属于特定年份的特殊情况,而非经营恶化。
比率条形图:更直观的对比
我们直接将ratio1
指标绘制成条形图,更直观地观察其每年的波动。
条形图解读
该图清晰地显示:
除了2022年(比率为0.56),其他所有年份的比率都大于1 。
这再次印证了其优秀的盈利质量。
案例小结:贵州茅台的启示
贵州茅台的案例告诉我们:
一家顶级公司 的财务数据,往往能清晰地展现出其强大的经营能力和健康的财务状况。
我们的分析方法,成功地验证了这一点。
指标二:销售商品、提供劳务收到的现金 / 营业收入
探讨完利润的质量,我们现在把目光投向利润的源头——收入 。
这个比率是衡量企业营业收入质量 的核心指标。
为什么关心收入质量?
同样基于权责发生制 ,企业只要提供了商品或服务,就可以确认收入。
但这引出了一个问题:
账面上的高收入,背后是真的’财源滚滚’,还是堆积如山的’白条’(应收账款)?
指标剖析:分子与分母
\[ \Large{ \text{收入质量比率} = \frac{\text{销售商品、提供劳务收到的现金}}{\text{营业收入}} } \]
分子 : 现金流量表中的c_fr_sale_sg
,是实实在在收回的现金。
分母 : 利润表中的revenue
,是按会计准则确认的收入。
如何解读该比率?
比率 > 1 : 非常健康。收到的现金超过了当期收入,可能还收回了以前的欠款。体现了强大的议价能力(先款后货)。
比率 ≈ 1 : 健康。大部分营业收入都转化为了现金。
比率 < 1 : 需关注。可能意味着回款能力较弱,对下游客户议价能力不强,或采取了宽松的信用政策。有坏账风险。
案例分析:贵州茅台的收入质量
我们继续以贵州茅台为例,看看这家公司的收入质量如何。
数据获取与计算
我们采用与上一节类似的方法,分别从现金流量表和利润表中获取所需数据,然后合并计算比率。
结果解读:极强的议价能力
从表格结果可以看到:
茅台公司每年的ratio2
都大于1.1 。
这说明它收到的现金甚至超过了当期确认的营业收入。
这体现了极强的品牌力 和对下游经销商的议价能力,通常意味着’先款后货’的销售模式,是非常健康的信号。
可视化:销售收现 vs. 营业收入
我们同样将这两个核心数据进行可视化对比。
趋势图解读:现金流的有力证明
这张图再次有力地证明了我们的判断。
代表’销售收现’的蓝色线始终稳稳地压在 代表’营业收入’的橙色线之上,显示出极高的收入质量。
比率条形图:稳定且优秀
我们再将比率ratio2
单独用条形图展示。
从图中可以看出,比率非常稳定,且始终在1.1以上。
实践环节:分析苏宁易购 (002024.SZ)
我们已经学习了如何分析贵州茅台这样的优质范例。
现在,我们来看一个不同行业的公司——苏宁易购,应用我们学到的知识进行对比分析。
苏宁易购:盈利质量分析
我们重复之前的步骤,对苏宁易购进行盈利质量分析。
苏宁易购盈利质量解读
苏宁易购的净利润和经营现金流近年来都为负数 ,且波动巨大。
净利润(橙线)在2020年后持续为负,显示公司处于亏损状态。
经营现金流(蓝线)与净利润走势不一致,二者比率缺乏稳定性和可比性。这反映了公司近年来面临的经营困境。
指标三:期末现金及现金等价物余额 vs. 有息负债
评估了盈利和收入质量后,我们需要进一步考察其财务的稳健性 ,即偿债能力和风险水平。
指标剖析:资产与负债的直接对话
我们直接比较企业账上的’活钱’和需要支付利息的’债务’。
期末现金及现金等价物余额 : 企业可以立即动用的资金,是抵御风险的第一道防线 。
有息负债 (Interest-bearing Debt) :
短期借款 (st_borr
)
长期借款 (lt_borr
)
应付债券 (bond_payable
)
如何解读该指标?
现金 > 有息负债 : 财务状况非常健康,几乎没有偿债压力。公司可以用自己的现金还清所有带息债务。
现金 < 有息负债 : 存在一定的财务压力。需要关注债务结构和盈利能力是否能覆盖利息支出。
现金 << 有息负债 : 财务风险较高。企业依赖外部融资,利息负担重,在经济下行周期中可能尤为脆弱。
案例分析:贵州茅台的财务风险
我们来检验一下贵州茅台的财务风险状况。
数据获取与计算
我们从现金流量表获取’期末现金’,从资产负债表获取三项有息负债。
结果解读:零有息负债的’优等生’
结果令人印象深刻:
贵州茅台在过去五年中,所有的有息负债项目均为0 。
这是一家完全没有有息负债经营 的公司,财务风险极低。
可视化:现金储备 vs. 有息负债
通过可视化图表可以更清晰地看到这一点。
趋势图解读:坚如磐石的财务状况
代表有息负债 的橙色线完全贴合在0刻度上 。
代表现金余额 的蓝色线则高高在上 ,且持续增长。
这直观地表明,贵州茅台拥有极为充裕的现金储备,无需通过借债来发展业务。
实践分析:苏宁易购的财务风险
零售行业通常需要大量资金支持库存和扩张,我们来看苏宁易购的情况。
苏宁易购财务风险解读
与茅台形成鲜明对比,苏宁易购的有息负债 (橙线)远高于 其期末现金余额 (蓝线)。
近年来,现金余额持续下降,而有息负债维持高位,显示出公司面临较大的偿债压力和财务风险 。
指标四:自由现金流 (Free Cash Flow)
自由现金流 (FCF) 是公司价值评估中最重要的概念之一,尤其是在使用贴现现金流(DCF)模型时。
什么是自由现金流?
通俗地讲,自由现金流就是企业在’养活自己’并为’未来发展’投入必要资金后,真正剩下的、可以自由支配的钱 。
自由现金流的用途
这些’自由的钱’可以用来:
偿还债务
向股东分红
回购股票
进行非核心业务的投资或并购
它是企业为所有资本供应者(股东和债权人)创造的真实价值。
如何解读自由现金流?
持续为正且增长 : 企业健康,具有投资价值的强烈信号 。公司能自我造血支持发展和回报股东。
时正时负 : 可能处于周期性行业或大规模投资期,需要结合具体情况分析。
持续为负 : 危险信号。企业经营产生的现金不足以覆盖投资,需要持续依赖外部融资’输血’。
案例分析:贵州茅台的自由现金流
我们来计算贵州茅台的自由现金流。
数据获取与计算
我们需要从现金流量表中同时获取n_cashflow_act
和stot_out_inv_act
。
结果解读:强大的价值创造能力
从计算结果看,贵州茅台每年的自由现金流都为非常可观的正数 。
这说明其强大的经营现金流在覆盖了所有投资需求后仍有大量剩余。
可视化:自由现金流趋势
将自由现金流的变化趋势绘制成图表。
趋势图解读:充沛且增长
贵州茅台的自由现金流十分充沛 。
虽然在2022年有所下降(与经营现金流下降原因一致),但整体依然保持在极高水平,并呈现上升趋势 ,表现良好。
实践分析:苏宁易购的自由现金流
重资产的零售企业,投资活动会消耗大量现金。我们来分析其自由现金流。
苏宁易购自由现金流解读
苏宁易购的自由现金流在过去五年中大部分时间为负 。
这表明公司的经营活动产生的现金不足以支撑其投资活动,需要依赖外部融资(如借款或股权融资)来维持运营和扩张,商业模式面临挑战。
指标五:现金流画像
现在,我们将进入一个更综合、更有趣的分析层面——为企业绘制’现金流画像’。
画像方法:正负组合的解读
这三项现金流的净额有正有负,它们的组合能够像一幅素描,勾勒出企业当前所处的发展阶段。
我们用 +
表示流入,-
表示流出,可以得到8种企业类型。
八种现金流画像解读
奶牛型
+
-
-
最佳 :主业强劲,持续投资,并回报股东/还债
蛮牛型
+
-
+
成长型 :主业良好,大规模投资,并外部融资支持扩张
老母鸡型
+
+
-
成熟型 :主业稳定,变卖资产,并回报股东/还债
妖精型
+
+
+
需警惕 :经营良好,但同时卖资产又融资,动机不明
赌徒型
-
-
+
极高风险:主业亏损,烧钱投资,依赖融资续命
骗吃骗喝型
-
+
+
危险:主业不振,靠卖资产和融资为生
混吃等死型
-
+
-
困境:主业不振,卖资产还债
大出血型
-
-
-
濒危:所有活动都在失血
最佳画像:奶牛型 (+, -, -)
经营活动 +
: 主营业务能创造大量现金。
投资活动 -
: 用赚来的钱进行再投资,扩大生产。
筹资活动 -
: 有余力偿还债务或向股东分红。
结论 : 这是最健康、最优质的成长型企业。
成长画像:蛮牛型 (+, -, +)
经营活动 +
: 主营业务良好。
投资活动 -
: 大规模投资扩张。
筹资活动 +
: 经营现金流不足以支持庞大的投资,需要外部融资。
结论 : 典型的成长型企业,机遇与风险并存。
案例分析:贵州茅台的现金流画像
我们来为贵州茅台绘制2019至2023年的年度现金流画像。
数据获取与准备
我们需要获取三项活动的现金流量净额。
数据初步解读
从原始数据可以清晰看到:
经营活动现金流
: 始终为正
投资活动现金流
: 始终为负
筹资活动现金流
: 始终为负
画像分析与解读
我们通过代码自动判断每年的画像类型。
茅台画像结论:持续的’奶牛’
分析结果显示,贵州茅台在过去五年中,每年都属于’奶牛型’企业 。
这是一个非常优秀的画像,证明了它是一家典型的优质成长型企业 。
实践分析:苏宁易购的现金流画像
我们再来看苏宁易购的画像,洞察其战略重点和财务状况。
苏宁易购画像分析
苏宁易购的画像在不同类型间切换,且多次出现经营现金流为负的情况,反映了其经营的波动性和挑战。
最终环节:行业横向对比分析
对单个企业进行纵向分析固然重要,但横向对比 才能真正评估其市场地位和竞争力。
什么是同行分析 (Peer Analysis)?
其核心目的在于:
建立基准 : 了解行业平均水平和领先水平。
识别优劣 : 发现目标公司在哪些指标上优于或劣于竞争对手。
验证模式 : 一家公司是否显著偏离行业常规?是优势还是风险?
实践:白酒行业大比拼
我们将综合运用前面学到的所有指标,对A股白酒行业 的所有上市公司进行一次全面的横向对比分析。
数据准备:获取所有白酒公司名单
首先,我们从Tushare
获取所有A股上市公司名单,然后筛选出industry
字段为’白酒’的公司。
# 获取上交所和深交所所有股票信息
code_sheet1 = pro.stock_basic(exchange= 'SSE' )
code_sheet2 = pro.stock_basic(exchange= 'SZSE' )
# 合并两张表
code_sheet = pd.concat([code_sheet1, code_sheet2])
# 筛选出行业为“白酒”的企业名单
code_bj = code_sheet[code_sheet['industry' ] == '白酒' ]
数据处理:循环获取所有公司数据
接下来,我们循环遍历白酒公司列表,获取每家公司最新的财务数据,并计算我们需要的五个指标。
这是一个综合性的数据处理过程。
对比一:盈利质量 (NCFO/NI)
大部分白酒公司的盈利质量都很好,比率普遍在1附近或以上。
对比二:收入质量 (销售收现/营收)
白酒行业普遍具有强大的议价能力,多数公司的收入质量比率都大于1,体现了’先款后货’的商业模式。
对比三:自由现金流
行业龙头(贵州茅台、五粮液等)创造了绝大部分的自由现金流,马太效应明显。
对比四:现金流画像
df = merged_df.rename(columns= {'n_cashflow_act' : '经营活动现金流' , 'n_cashflow_inv_act' : '投资活动现金流' , 'n_cash_flows_fnc_act' : '筹资活动现金流' })
print ('2023年白酒行业现金流画像:' )
for comp in range (len (df)):
profile_str = '未知'
if df['经营活动现金流' ][comp] > 0 :
if df['投资活动现金流' ][comp] < 0 and df['筹资活动现金流' ][comp] < 0 :
profile_str = '奶牛型 (+,-,-)'
elif df['投资活动现金流' ][comp] < 0 and df['筹资活动现金流' ][comp] > 0 :
profile_str = '蛮牛型 (+,-,+)'
elif df['投资活动现金流' ][comp] > 0 and df['筹资活动现金流' ][comp] < 0 :
profile_str = '老母鸡型 (+,+,-)'
elif df['投资活动现金流' ][comp] > 0 and df['筹资活动现金流' ][comp] > 0 :
profile_str = '妖精型 (+,+,+)'
else :
profile_str = '经营现金流为负'
print (df['name' ][comp] + ': ' + profile_str)
大部分头部白酒企业都呈现出’奶牛型’或’老母鸡型’的优质画像。
核心思想再回顾
利润是观点,现金是事实。
通过本章的学习,我们掌握了如何透过复杂的会计报表,抓住现金 这条主线,去伪存真,看清一家企业的真实经营状况和内在价值。