开篇:你不需要学完所有Python
很多人学Python时,会买一本厚厚的《Python编程从入门到精通》,从第一章开始啃,学到第三章就放弃了。
为什么?
因为他们试图学习所有Python知识,但其实:
- 软件开发工程师需要掌握100%的Python知识
- 数据分析师/运营专家只需要掌握20%的核心语法
这20%的知识,可以解决80%的数据分析工作。
今天,我们只学习最必要、最实用的Python基础语法,让你能够:
- 看懂别人的代码
- 修改现有脚本
- 写出简单的数据处理程序
目标:2-3小时掌握核心概念,立即能上手写代码。
第一部分:变量与数据类型
1. 什么是变量?
用一个故事理解变量:
想象你是一个仓库管理员,仓库里有很多货架(变量),每个货架上可以放东西(数据)。你需要给每个货架起个名字,方便找到它。
# 创建变量,就像给货架起名字并放上东西
店铺名称 = "北京朝阳区4S店"
月度营收 = 1250000
客户满意度 = 92.5
是否达标 = True
print(店铺名称) # 输出:北京朝阳区4S店
print(月度营收) # 输出:1250000
关键点:
- 变量名可以用中文,但建议用英文(更专业)
- 等号表示赋值,把右边的值放到左边的变量里
- print() 函数用来显示内容
2. Python的核心数据类型
类型1:整数(int)
门店数量 = 30
今日工单数 = 156
技师人数 = 12
print(type(门店数量)) # 输出:<class 'int'>
使用场景:计数、排名、数量等
类型2:浮点数(float)
NPS评分 = 85.6
工位利用率 = 0.78
平均客单价 = 1580.50
print(type(NPS评分)) # 输出:<class 'float'>
使用场景:小数、百分比、价格等
类型3:字符串(str,string的缩写)
门店名称 = "北京朝阳店"
店长姓名 = '张伟'
客户评价 = """服务很好,
环境整洁,
维修质量高。"""
print(type(门店名称)) # 输出:<class 'str'>
关键点:
- 单引号
'和双引号"都可以 - 三引号
"""可以写多行文本
字符串常用操作:
# 字符串拼接
姓 = "张"
名 = "伟"
全名 = 姓 + 名
print(全名) # 输出:张伟
# 字符串格式化(重要!)
门店 = "北京朝阳店"
NPS = 85.6
报告 = f"{门店}的NPS评分为{NPS}分"
print(报告) # 输出:北京朝阳店的NPS评分为85.6分
# 字符串切片
工单号 = "WO20240315001"
日期部分 = 工单号[2:10] # 从第2位到第10位
print(日期部分) # 输出:20240315
类型4:布尔值(bool,boolean的缩写)
是否达标 = True
是否超时 = False
print(type(是否达标)) # 输出:<class 'bool'>
使用场景:判断条件、开关标志
3. 列表(list)— 最常用的数据结构
用故事理解列表:
列表就像一个购物清单,你可以往里面添加东西、删除东西、查看某一项。
# 创建列表
门店列表 = ["北京朝阳店", "上海浦东店", "深圳南山店"]
NPS列表 = [85.6, 92.3, 78.9, 88.5]
# 访问列表元素(注意:从0开始计数!)
print(门店列表[0]) # 输出:北京朝阳店
print(门店列表[1]) # 输出:上海浦东店
# 列表长度
print(len(门店列表)) # 输出:3
# 添加元素
门店列表.append("广州天河店")
print(门店列表) # ['北京朝阳店', '上海浦东店', '深圳南山店', '广州天河店']
# 删除元素
门店列表.remove("深圳南山店")
print(门店列表) # ['北京朝阳店', '上海浦东店', '广州天河店']
实战案例:计算平均NPS
NPS列表 = [85.6, 92.3, 78.9, 88.5, 90.2]
# 方法1:手动计算
总分 = sum(NPS列表)
平均分 = 总分 / len(NPS列表)
print(f"平均NPS:{平均分:.1f}") # 输出:平均NPS:87.1
# 方法2:找出最高分和最低分
最高分 = max(NPS列表)
最低分 = min(NPS列表)
print(f"最高分:{最高分},最低分:{最低分}")
4. 字典(dict,dictionary的缩写)— 键值对存储
用故事理解字典:
字典就像通讯录,你通过人名(键)找到电话号码(值)。
# 创建字典
门店信息 = {
"门店名称": "北京朝阳店",
"店长": "张伟",
"NPS评分": 85.6,
"月度营收": 1250000,
"是否达标": True
}
# 访问字典元素
print(门店信息["门店名称"]) # 输出:北京朝阳店
print(门店信息["NPS评分"]) # 输出:85.6
# 修改字典元素
门店信息["NPS评分"] = 88.0
print(门店信息["NPS评分"]) # 输出:88.0
# 添加新元素
门店信息["技师人数"] = 12
print(门店信息)
# 获取所有键
print(门店信息.keys()) # dict_keys(['门店名称', '店长', 'NPS评分', ...])
# 获取所有值
print(门店信息.values()) # dict_values(['北京朝阳店', '张伟', 88.0, ...])
实战案例:多门店数据管理
# 用列表套字典,管理多个门店
门店数据 = [
{"门店": "北京朝阳店", "NPS": 85.6, "营收": 1250000},
{"门店": "上海浦东店", "NPS": 92.3, "营收": 1580000},
{"门店": "深圳南山店", "NPS": 78.9, "营收": 980000}
]
# 访问第一个门店的NPS
print(门店数据[0]["NPS"]) # 输出:85.6
# 遍历所有门店(下一部分会详细讲)
for 门店 in 门店数据:
print(f"{门店['门店']}的NPS为{门店['NPS']}")
第二部分:流程控制
1. 条件判断(if语句)
用故事理解if:
就像你给自己定规则:"如果NPS低于80分,就要重点关注;如果高于90分,就要表扬。"
基础语法:
NPS = 85.6
if NPS >= 90:
print("优秀!继续保持!")
elif NPS >= 80:
print("良好,还需努力")
else:
print("警告!需要立即改进!")
# 输出:良好,还需努力
关键点:
if= 如果elif= else if = 否则如果else= 否则- **缩进很重要!**Python通过缩进判断代码块
实战案例1:门店评级
def 评估门店(NPS, 营收, 客户投诉数):
"""
根据多个指标评估门店等级
"""
评级 = ""
# 综合判断
if NPS >= 90 and 营收 >= 1500000 and 客户投诉数 <= 2:
评级 = "A级门店"
elif NPS >= 85 and 营收 >= 1200000 and 客户投诉数 <= 5:
评级 = "B级门店"
elif NPS >= 80 and 营收 >= 1000000:
评级 = "C级门店"
else:
评级 = "D级门店(需重点关注)"
return 评级
# 测试
门店A评级 = 评估门店(92.3, 1580000, 1)
print(f"门店A评级:{门店A评级}") # 输出:门店A评级:A级门店
门店B评级 = 评估门店(78.5, 950000, 8)
print(f"门店B评级:{门店B评级}") # 输出:门店B评级:D级门店(需重点关注)
实战案例2:预警系统
def 检查异常(门店名称, 当日NPS, 历史平均NPS):
"""
NPS异常预警
"""
下降幅度 = 历史平均NPS - 当日NPS
if 下降幅度 >= 10:
print(f"? 严重预警!{门店名称}的NPS下降{下降幅度:.1f}分")
print("建议:立即联系门店负责人,了解情况")
elif 下降幅度 >= 5:
print(f"⚠️ 轻度预警:{门店名称}的NPS下降{下降幅度:.1f}分")
print("建议:关注近期客户反馈")
else:
print(f"✅ {门店名称}运营正常")
# 测试
检查异常("北京朝阳店", 75.2, 86.5)
# 输出:
# ? 严重预警!北京朝阳店的NPS下降11.3分
# 建议:立即联系门店负责人,了解情况
2. 循环(for和while)
for循环 — 遍历列表
用故事理解for:
就像你要检查每一家门店的情况,一家一家看过去。
基础语法:
门店列表 = ["北京朝阳店", "上海浦东店", "深圳南山店"]
# 遍历列表
for 门店 in 门店列表:
print(f"正在检查:{门店}")
# 输出:
# 正在检查:北京朝阳店
# 正在检查:上海浦东店
# 正在检查:深圳南山店
实战案例1:批量数据处理
门店数据 = [
{"门店": "北京朝阳店", "NPS": 85.6, "营收": 1250000},
{"门店": "上海浦东店", "NPS": 92.3, "营收": 1580000},
{"门店": "深圳南山店", "NPS": 78.9, "营收": 980000},
{"门店": "广州天河店", "NPS": 88.5, "营收": 1320000}
]
# 统计总营收
总营收 = 0
for 门店 in 门店数据:
总营收 += 门店["营收"]
print(f"区域总营收:{总营收:,}元") # 输出:区域总营收:5,130,000元
# 找出NPS最高的门店
最高NPS = 0
最佳门店 = ""
for 门店 in 门店数据:
if 门店["NPS"] > 最高NPS:
最高NPS = 门店["NPS"]
最佳门店 = 门店["门店"]
print(f"NPS最高的门店:{最佳门店},得分:{最高NPS}")
# 输出:NPS最高的门店:上海浦东店,得分:92.3
实战案例2:数据筛选
# 筛选出NPS低于85的门店
需要关注的门店 = []
for 门店 in 门店数据:
if 门店["NPS"] < 85:
需要关注的门店.append(门店["门店"])
print(f"需要重点关注的门店:{需要关注的门店}")
# 输出:需要重点关注的门店:['深圳南山店']
# 更简洁的写法(列表推导式)
需要关注的门店 = [门店["门店"] for 门店 in 门店数据 if 门店["NPS"] < 85]
print(需要关注的门店)
while循环 — 条件循环
基础语法:
# 当NPS低于目标值时,持续改进
当前NPS = 75.0
目标NPS = 85.0
改进次数 = 0
while 当前NPS < 目标NPS:
当前NPS += 2.5 # 每次改进提升2.5分
改进次数 += 1
print(f"第{改进次数}次改进后,NPS提升至{当前NPS}")
print(f"达成目标!共进行了{改进次数}次改进")
注意:while循环要小心"死循环",确保条件最终会变为False。
第三部分:函数
1. 什么是函数?
用故事理解函数:
函数就像一个"黑盒子",你给它输入(原材料),它给你输出(成品)。比如一个"计算NPS"的函数,你输入评分数据,它输出NPS分数。
为什么需要函数?
- 避免重复代码:写一次,到处用
- 提高可读性:复杂逻辑封装成一个函数名
- 方便维护:修改只需改一处
2. 定义和使用函数
基础语法:
def 函数名(参数1, 参数2):
"""
函数说明文档
"""
# 函数体
结果 = 参数1 + 参数2
return 结果 # 返回值
# 调用函数
结果 = 函数名(10, 20)
print(结果) # 输出:30
实战案例1:NPS计算函数
def 计算NPS(推荐者数量, 中立者数量, 贬损者数量):
"""
计算净推荐值(NPS, Net Promoter Score)
参数:
推荐者数量: 评分9-10分的客户数
中立者数量: 评分7-8分的客户数
贬损者数量: 评分0-6分的客户数
返回:
NPS分数(-100到100之间)
"""
总人数 = 推荐者数量 + 中立者数量 + 贬损者数量
if 总人数 == 0:
return 0
推荐者比例 = 推荐者数量 / 总人数
贬损者比例 = 贬损者数量 / 总人数
NPS = (推荐者比例 - 贬损者比例) * 100
return round(NPS, 1) # 保留1位小数
# 使用函数
门店A_NPS = 计算NPS(推荐者数量=150, 中立者数量=80, 贬损者数量=20)
print(f"门店A的NPS:{门店A_NPS}") # 输出:门店A的NPS:52.0
门店B_NPS = 计算NPS(推荐者数量=200, 中立者数量=50, 贬损者数量=10)
print(f"门店B的NPS:{门店B_NPS}") # 输出:门店B的NPS:73.1
实战案例2:数据验证函数
def 验证门店数据(门店名称, NPS, 营收, 工单数):
"""
验证门店数据的合理性
返回:
(是否有效, 错误信息列表)
"""
错误信息 = []
# 检查NPS范围
if NPS < 0 or NPS > 100:
错误信息.append(f"NPS数值异常:{NPS}(应在0-100之间)")
# 检查营收
if 营收 < 0:
错误信息.append(f"营收数值异常:{营收}(不能为负数)")
# 检查工单数
if 工单数 < 0:
错误信息.append(f"工单数异常:{工单数}(不能为负数)")
# 逻辑校验:营收和工单数的关系
if 工单数 > 0:
平均客单价 = 营收 / 工单数
if 平均客单价 < 100 or 平均客单价 > 10000:
错误信息.append(f"平均客单价异常:{平均客单价:.0f}元")
是否有效 = len(错误信息) == 0
return 是否有效, 错误信息
# 测试
有效1, 错误1 = 验证门店数据("北京朝阳店", 85.6, 1250000, 800)
print(f"数据有效:{有效1}") # 输出:数据有效:True
有效2, 错误2 = 验证门店数据("异常门店", 105, -1000, 50)
print(f"数据有效:{有效2}") # 输出:数据有效:False
print(f"错误信息:{错误2}")
# 输出:错误信息:['NPS数值异常:105(应在0-100之间)', '营收数值异常:-1000(不能为负数)']
实战案例3:数据格式化函数
def 格式化营收报告(门店名称, 本月营收, 上月营收):
"""
生成格式化的营收对比报告
"""
增长额 = 本月营收 - 上月营收
增长率 = (增长额 / 上月营收) * 100 if 上月营收 > 0 else 0
# 判断增长趋势
if 增长率 > 10:
趋势 = "? 大幅增长"
elif 增长率 > 0:
趋势 = "? 小幅增长"
elif 增长率 > -10:
趋势 = "? 小幅下降"
else:
趋势 = "⚠️ 大幅下降"
报告 = f"""
{'='*50}
{门店名称} - 营收月度对比
{'='*50}
上月营收:¥{上月营收:,.0f}
本月营收:¥{本月营收:,.0f}
环比增长:¥{增长额:,.0f} ({增长率:+.1f}%)
趋势评估:{趋势}
{'='*50}
"""
return 报告
# 使用函数
print(格式化营收报告("北京朝阳店", 1350000, 1250000))
实战综合案例:门店运营自动分析脚本
让我们把所学的知识串起来,写一个完整的门店数据分析脚本:
def 分析门店运营数据(门店数据列表):
"""
综合分析多个门店的运营数据
"""
print("\n" + "="*60)
print("门店运营数据分析报告")
print("="*60)
# 1. 基础统计
门店总数 = len(门店数据列表)
总营收 = sum([门店["营收"] for 门店 in 门店数据列表])
平均NPS = sum([门店["NPS"] for 门店 in 门店数据列表]) / 门店总数
print(f"\n【总体概况】")
print(f"门店总数:{门店总数}家")
print(f"总营收:¥{总营收:,.0f}")
print(f"平均NPS:{平均NPS:.1f}分")
# 2. 找出最佳和最差门店
最佳门店 = max(门店数据列表, key=lambda x: x["NPS"])
最差门店 = min(门店数据列表, key=lambda x: x["NPS"])
print(f"\n【NPS排名】")
print(f"最佳门店:{最佳门店['门店']} (NPS: {最佳门店['NPS']}分)")
print(f"最差门店:{最差门店['门店']} (NPS: {最差门店['NPS']}分)")
# 3. 门店分级
A级门店 = []
B级门店 = []
C级门店 = []
D级门店 = []
for 门店 in 门店数据列表:
if 门店["NPS"] >= 90:
A级门店.append(门店["门店"])
elif 门店["NPS"] >= 85:
B级门店.append(门店["门店"])
elif 门店["NPS"] >= 80:
C级门店.append(门店["门店"])
else:
D级门店.append(门店["门店"])
print(f"\n【门店分级】")
print(f"A级门店({len(A级门店)}家):{', '.join(A级门店) if A级门店 else '无'}")
print(f"B级门店({len(B级门店)}家):{', '.join(B级门店) if B级门店 else '无'}")
print(f"C级门店({len(C级门店)}家):{', '.join(C级门店) if C级门店 else '无'}")
print(f"D级门店({len(D级门店)}家):{', '.join(D级门店) if D级门店 else '无'}")
# 4. 预警信息
需要关注 = [门店["门店"] for 门店 in 门店数据列表 if 门店["NPS"] < 85]
if 需要关注:
print(f"\n⚠️ 【重点关注】")
print(f"以下{len(需要关注)}家门店NPS低于85分,需要重点关注:")
for 门店名 in 需要关注:
print(f" - {门店名}")
else:
print(f"\n✅ 所有门店NPS均达标!")
print("\n" + "="*60)
# 测试数据
门店数据 = [
{"门店": "北京朝阳店", "NPS": 85.6, "营收": 1250000},
{"门店": "上海浦东店", "NPS": 92.3, "营收": 1580000},
{"门店": "深圳南山店", "NPS": 78.9, "营收": 980000},
{"门店": "广州天河店", "NPS": 88.5, "营收": 1320000},
{"门店": "成都高新店", "NPS": 91.2, "营收": 1450000}
]
# 运行分析
分析门店运营数据(门店数据)
运行结果:
============================================================
门店运营数据分析报告
============================================================
【总体概况】
门店总数:5家
总营收:¥6,580,000
平均NPS:87.3分
【NPS排名】
最佳门店:上海浦东店 (NPS: 92.3分)
最差门店:深圳南山店 (NPS: 78.9分)
【门店分级】
A级门店(2家):上海浦东店, 成都高新店
B级门店(2家):北京朝阳店, 广州天河店
C级门店(0家):无
D级门店(1家):深圳南山店
⚠️ 【重点关注】
以下1家门店NPS低于85分,需要重点关注:
- 深圳南山店
============================================================
学习小结与下一步
恭喜!你已经掌握了Python数据分析的核心基础:
✅ 变量与数据类型:整数、浮点数、字符串、布尔值
✅ 数据结构:列表、字典
✅ 流程控制:if条件判断、for/while循环
✅ 函数:定义函数、调用函数、返回值
这些知识,已经可以让你:
- 编写简单的数据处理脚本
- 批量处理门店数据
- 自动生成分析报告
下一步学习:Day 38-4 - Pandas数据处理基础
在下一节中,我们将学习Pandas库,这是Python数据分析的核心工具。有了Pandas,你可以:
- 轻松读取Excel文件
- 像操作Excel一样操作数据
- 进行复杂的数据分析
- 生成专业的数据报表
准备好了吗?让我们继续前进! ?