当前位置:首页>python>Python 数据分析入门:从 0 到写出第一条 SQL 自动化脚本

Python 数据分析入门:从 0 到写出第一条 SQL 自动化脚本

  • 2026-10-11 08:01:15
Python 数据分析入门:从 0 到写出第一条 SQL 自动化脚本

你可能会问:"我 SQL 已经写得很好了,为什么还要学 Python?"

三个真实场景:

  1. 1. 每天跑 10 条 SQL,手动复制结果到 Excel,重复劳动 1 小时
  2. 2. 老板说"把最近 30 天的数据做个趋势图",你只能截图 BI 看板
  3. 3. 数据量超过 100 万行,Excel 打不开,SQL 导出也卡死

Python 解决的就是这些问题:自动化、可视化、大数据处理。


第一阶段:环境搭建(30 分钟搞定)

1. 安装 Python

推荐用 Anaconda,一键安装 Python + 常用库:

# 下载地址https://www.anaconda.com/download# 安装后验证python --version# 输出: Python 3.11.x

2. 安装数据分析三剑客

pip install pandas numpy matplotlib
  • • pandas:处理表格数据(类似 Excel,但更强大)
  • • numpy:数值计算
  • • matplotlib:画图

3. 选择编辑器

  • • 新手推荐:Jupyter Notebook(Anaconda 自带)
  • • 进阶推荐:VS Code + Python 插件
# 启动 Jupyterjupyter notebook

第二阶段:Python 基础语法(只学数据分析需要的)

1. 变量和数据类型

# 数字age = 25price = 99.9# 字符串name = "胡萝卜数分"# 列表(类似数组)channels = ['自然搜索', '信息流', '社群']# 字典(类似 JSON)user = {'name': '张三', 'age': 25, 'channel': '信息流'}

2. 条件判断

# 判断用户等级if user['age'] > 30:    level = '资深用户'elif user['age'] > 20:    level = '普通用户'else:    level = '新用户'

3. 循环

# 遍历渠道列表for channel in channels:    print(f'渠道: {channel}')# 输出:# 渠道: 自然搜索# 渠道: 信息流# 渠道: 社群

4. 函数(把重复代码封装起来)

# 定义一个计算转化率的函数def calc_conversion_rate(pay_users, total_users):    if total_users == 0:        return 0    return pay_users / total_users * 100# 调用rate = calc_conversion_rate(1200, 20000)print(f'转化率: {rate}%')  # 输出: 转化率: 6%

记住这 4 个就够了,其他语法用到再学。


第三阶段:pandas 入门(分析师的核心技能)

1. 读取数据

import pandas as pd# 读取 CSVdf = pd.read_csv('user_data.csv')# 读取 Exceldf = pd.read_excel('user_data.xlsx', sheet_name='Sheet1')# 从数据库读取(连接 MySQL)import pymysqlconn = pymysql.connect(    host='localhost',    user='root',    password='password',    database='analytics')df = pd.read_sql('SELECT * FROM user_login WHERE dt = "2026-05-20"', conn)

2. 查看数据

# 查看前 5 行df.head()# 查看数据结构df.info()# 查看统计摘要df.describe()# 查看列名df.columns

3. 数据筛选(类似 SQL 的 WHERE)

# 筛选信息流渠道的用户df_filter = df[df['channel'] == '信息流']# 多条件筛选df_filter = df[    (df['channel'] == '信息流') &     (df['age'] > 25)]# 类似 SQL:# SELECT * FROM df WHERE channel = '信息流' AND age > 25

4. 数据聚合(类似 SQL 的 GROUP BY)

# 按渠道统计用户数result = df.groupby('channel')['user_id'].count()# 多维度聚合result = df.groupby(['channel', 'city']).agg({    'user_id': 'count',    'pay_amount': 'sum',    'age': 'mean'})# 类似 SQL:# SELECT channel, city, #        COUNT(user_id), SUM(pay_amount), AVG(age)# FROM df# GROUP BY channel, city

5. 数据排序(类似 SQL 的 ORDER BY)

# 按支付金额降序df_sorted = df.sort_values('pay_amount', ascending=False)# 取前 10 名df_top10 = df_sorted.head(10)

6. 数据合并(类似 SQL 的 JOIN)

# 两个表合并df_merge = pd.merge(    df_user,      # 左表    df_order,     # 右表    on='user_id', # 关联字段    how='left'    # LEFT JOIN)# 类似 SQL:# SELECT * FROM df_user LEFT JOIN df_order ON df_user.user_id = df_order.user_id

第四阶段:实战案例——自动化日报脚本

场景:每天早上自动跑 SQL 并生成 Excel 日报

import pandas as pdimport pymysqlfrom datetime import datetime, timedelta# 1. 连接数据库conn = pymysql.connect(    host='localhost',    user='root',    password='password',    database='analytics')# 2. 获取昨天的日期yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')# 3. 执行 SQL 查询sql = f"""SELECT     channel,    COUNT(DISTINCT user_id) AS dau,    SUM(pay_amount) AS revenue,    COUNT(DISTINCT user_id) FILTER (WHERE pay_amount > 0) AS pay_usersFROM user_dailyWHERE dt = '{yesterday}'GROUP BY channel"""df = pd.read_sql(sql, conn)# 4. 计算转化率df['conversion_rate'] = df['pay_users'] / df['dau'] * 100# 5. 添加日期列df['dt'] = yesterday# 6. 导出到 Excelfilename = f'daily_report_{yesterday}.xlsx'df.to_excel(filename, index=False)print(f'日报已生成: {filename}')print(df)# 7. 关闭连接conn.close()

输出:

日报已生成: daily_report_2026-05-20.xlsx    channel    dau  revenue  pay_users  conversion_rate         dt0  自然搜索   8000   120000       1440            18.0  2026-05-201   信息流  30000    90000       1800             6.0  2026-05-202    社群   5000    80000        800            16.0  2026-05-20

第五阶段:可视化入门(把数据变成图表)

1. 基础折线图

import matplotlib.pyplot as plt# 准备数据days = ['05-18', '05-19', '05-20', '05-21', '05-22']dau = [85000, 90000, 84600, 92000, 95000]# 画图plt.figure(figsize=(10, 6))plt.plot(days, dau, marker='o', linewidth=2)# 添加标题和标签plt.title('DAU 趋势(最近 5 天)')plt.xlabel('日期')plt.ylabel('DAU')# 显示plt.savefig('dau_trend.png')plt.show()

2. 柱状图(渠道对比)

# 准备数据channels = ['自然搜索', '信息流', '社群']revenue = [120000, 90000, 80000]# 画图plt.figure(figsize=(8, 5))plt.bar(channels, revenue, color=['#4CAF50', '#2196F3', '#FF9800'])plt.title('各渠道收入对比')plt.xlabel('渠道')plt.ylabel('收入(元)')plt.savefig('channel_revenue.png')plt.show()

3. 饼图(占比分析)

# 准备数据labels = ['自然搜索', '信息流', '社群']sizes = [28.6, 57.1, 14.3]# 画图plt.figure(figsize=(8, 8))plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)plt.title('渠道流量占比')plt.savefig('channel_pie.png')plt.show()

第六阶段:进阶方向(从入门到精通)

1. 自动化调度

用 schedule 库实现定时任务:

import scheduleimport timedef daily_job():    # 这里放你的日报脚本    print('执行日报任务...')# 每天早上 9 点执行schedule.every().day.at('09:00').do(daily_job)while True:    schedule.run_pending()    time.sleep(60)

2. 邮件推送

用 smtplib 自动发送邮件:

import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.attachment import MIMEAttachmentdef send_email(to_addr, subject, file_path):    msg = MIMEMultipart()    msg['Subject'] = subject    msg['From'] = 'your_email@gmail.com'    msg['To'] = to_addr    # 添加附件    with open(file_path, 'rb') as f:        attachment = MIMEAttachment(f.read())        attachment.add_header('Content-Disposition', 'attachment', filename=file_path)        msg.attach(attachment)    # 发送    server = smtplib.SMTP('smtp.gmail.com', 587)    server.send_message(msg)    server.quit()

3. 大数据处理

当数据超过 100 万行,用 chunksize 分批处理:

# 分批读取大文件chunk_size = 100000for chunk in pd.read_csv('big_data.csv', chunksize=chunk_size):    # 处理每一批    result = chunk.groupby('channel')['user_id'].count()    print(result)

4. 机器学习入门

用 scikit-learn 做用户流失预测:

from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifier# 准备数据X = df[['age', 'login_days', 'pay_amount']]  # 特征y = df['is_churn']                            # 标签(是否流失)# 训练模型model = RandomForestClassifier()model.fit(X_train, y_train)# 预测predictions = model.predict(X_test)

学习路径总结

阶段
内容
时间
目标
1
环境搭建
30 分钟
能运行 Python
2
基础语法
2 小时
会写简单脚本
3
pandas 入门
4 小时
能处理表格数据
4
实战案例
2 小时
写出自动化脚本
5
可视化
2 小时
能画基础图表
6
进阶方向
按需学习
自动化调度、邮件、机器学习

总计:约 10 小时入门,后续按实际需求深入学习。


给分析师的学习建议

  1. 1. 不要从头学 Python 教程:只学数据分析需要的部分
  2. 2. 边学边用:遇到实际问题再查语法,不要背
  3. 3. 从自动化开始:先解决重复劳动,再学可视化、机器学习
  4. 4. 善用 ChatGPT/Claude:让 AI 你写代码,你只需要理解逻辑

Python 不是替代 SQL,而是 SQL 的延伸——让你的数据能力从"查询"升级到"自动化处理"。

最新文章

随机文章