售后服务
我们是专业的

Day 38-3:Python基础语法入门 — 为数据分析打基础

开篇:你不需要学完所有Python

很多人学Python时,会买一本厚厚的《Python编程从入门到精通》,从第一章开始啃,学到第三章就放弃了。

为什么?

因为他们试图学习所有Python知识,但其实:

  • 软件开发工程师需要掌握100%的Python知识
  • 数据分析师/运营专家只需要掌握20%的核心语法

这20%的知识,可以解决80%的数据分析工作。

今天,我们只学习最必要、最实用的Python基础语法,让你能够:

  1. 看懂别人的代码
  2. 修改现有脚本
  3. 写出简单的数据处理程序

目标: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一样操作数据
  • 进行复杂的数据分析
  • 生成专业的数据报表

准备好了吗?让我们继续前进! ?

未经允许不得转载:似水流年 » Day 38-3:Python基础语法入门 — 为数据分析打基础