杰瑞科技汇

Python数据分析代码怎么写?

  1. 数据加载:从 CSV 文件加载数据。
  2. 数据探索:初步查看数据,了解其结构和内容。
  3. 数据清洗:处理缺失值、异常值等。
  4. 数据分析与可视化:通过统计和图表来发现数据中的模式和洞察。

场景设定

假设我们是一家电商公司的分析师,我们手头有一份销售数据,我们希望通过分析来了解:

Python数据分析代码怎么写?-图1
(图片来源网络,侵删)
  • 哪些产品卖得最好?
  • 哪个地区的销售额最高?
  • 用户的消费习惯是怎样的?(他们倾向于在什么时间购物?)

第1步:准备工作(安装库和数据)

1 安装必要的 Python 库

在进行数据分析之前,请确保您已经安装了以下核心库,如果尚未安装,请在您的终端或命令提示符中运行以下命令:

pip install pandas numpy matplotlib seaborn
  • pandas: 用于数据处理和分析,是数据分析的瑞士军刀。
  • numpy: 用于科学计算,提供了高性能的多维数组对象。
  • matplotlib: 一个基础的绘图库,可以创建静态、动态和交互式可视化。
  • seaborn: 基于 matplotlib 的高级绘图库,能创建更美观、信息量更丰富的统计图表。

2 准备数据文件

我们将创建一个名为 sales_data.csv 的示例数据文件,请将以下内容复制并保存到一个名为 sales_data.csv 的文件中,并将其与您的 Python 脚本放在同一个文件夹下。

OrderID,Date,Product,Category,Region,Sales,Quantity,Discount
101,2025-01-15,Laptop,Electronics,North,1200,1,0.0
102,2025-01-16,Mouse,Electronics,South,25,2,0.1
103,2025-01-17,Desk Chair,Furniture,East,150,1,0.0
104,2025-01-18,Desk Lamp,Furniture,North,45,1,0.2
105,2025-01-19,Headphones,Electronics,West,100,1,0.0
106,2025-01-20,Keyboard,Electronics,South,75,1,0.1
107,2025-01-21,Coffee Mug,Household,North,15,3,0.0
108,2025-01-22,Blender,Household,West,80,1,0.15
109,2025-01-23,Desk Chair,Furniture,East,155,1,0.0
110,2025-01-24,Book,Books,North,20,2,0.0
111,2025-02-05,Laptop,Electronics,South,1250,1,0.05
112,2025-02-06,Mouse,Electronics,West,30,2,0.1
113,2025-02-07,Desk Chair,Furniture,North,160,1,0.0
114,2025-02-08,Headphones,Electronics,East,110,1,0.0
115,2025-02-09,Book,Books,South,25,1,0.0
116,2025-02-10,Blender,Household,North,90,1,0.1
117,2025-02-11,Desk Lamp,Furniture,West,50,1,0.2
118,2025-02-12,Coffee Mug,Household,East,18,4,0.0
119,2025-02-13,Laptop,Electronics,North,1300,1,0.0
120,2025-02-14,Keyboard,Electronics,South,80,1,0.1

第2步:完整的 Python 代码分析

下面是完整的 Python 代码,包含了从加载数据到得出结论的全过程,请将此代码保存为一个 .py 文件(analysis.py)并运行。

# -*- coding: utf-8 -*-
"""
利用Python进行数据分析示例
分析电商销售数据,找出销售趋势和热门产品。
"""
# --- 1. 导入必要的库 ---
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 为了在Jupyter Notebook或某些IDE中直接显示图表,可以取消下面这行的注释
# %matplotlib inline 
# 设置seaborn样式,让图表更美观
sns.set_style("whitegrid")
# --- 2. 数据加载 ---
# 使用pandas的read_csv函数读取数据文件
# 如果文件不在当前目录,请提供完整路径, 'data/sales_data.csv'
try:
    df = pd.read_csv('sales_data.csv')
    print("数据加载成功!")
except FileNotFoundError:
    print("错误:找不到 'sales_data.csv' 文件,请确保文件与脚本在同一目录下。")
    exit()
# --- 3. 数据探索 ---
# 初步检查数据
print("\n--- 数据概览 ---")
# 显示前5行数据
print("数据前5行:")
print(df.head())
# 显示数据的基本信息(列名、非空值数量、数据类型等)
print("\n数据基本信息:")
df.info()
# 显示描述性统计信息(均值、标准差、最小值、最大值等)
print("\n描述性统计:")
print(df.describe())
# 检查缺失值
print("\n缺失值统计:")
print(df.isnull().sum())
# --- 4. 数据清洗 ---
# 在这个示例中,数据相对干净,但我们可以演示一个常见的操作:
# 假设 'Discount' 列有一些缺失值,我们用0来填充
# df['Discount'].fillna(0, inplace=True) 
# print("\n填充缺失值后的 'Discount' 列:")
# print(df.isnull().sum())
# 将 'Date' 列从字符串转换为datetime对象,以便进行时间序列分析
df['Date'] = pd.to_datetime(df['Date'])
print("\n将 'Date' 列转换为日期时间格式后的数据类型:")
print(df.info())
# --- 5. 数据分析与可视化 ---
# --- 问题1: 哪些产品类别的销售额最高? ---
print("\n--- 分析1: 各产品类别的销售额 ---")
# 按 'Category' 分组,计算 'Sales' 的总和
category_sales = df.groupby('Category')['Sales'].sum().sort_values(ascending=False)
print("各产品类别销售额排名:")
print(category_sales)
# 可视化
plt.figure(figsize=(10, 6))
sns.barplot(x=category_sales.index, y=category_sales.values, palette='viridis')'各产品类别总销售额', fontsize=16)
plt.xlabel('产品类别', fontsize=12)
plt.ylabel('总销售额', fontsize=12)
plt.xticks(rotation=45)
plt.tight_layout() # 自动调整布局,防止标签重叠
plt.show()
# --- 问题2: 哪个地区的销售额最高? ---
print("\n--- 分析2: 各地区的销售额 ---")
# 按 'Region' 分组,计算 'Sales' 的总和
region_sales = df.groupby('Region')['Sales'].sum().sort_values(ascending=False)
print("各地区销售额排名:")
print(region_sales)
# 可视化
plt.figure(figsize=(8, 8))
# 使用饼图来展示各地区的销售占比
plt.pie(region_sales, labels=region_sales.index, autopct='%1.1f%%', startangle=140, colors=sns.color_palette('pastel'))'各地区销售额占比', fontsize=16)
plt.axis('equal') # 保证饼图是圆的
plt.show()
# --- 问题3: 用户的消费习惯是怎样的?(月度销售趋势) ---
print("\n--- 分析3: 月度销售趋势 ---")
# 从 'Date' 列中提取月份
df['Month'] = df['Date'].dt.to_period('M')
# 按 'Month' 分组,计算 'Sales' 的总和
monthly_sales = df.groupby('Month')['Sales'].sum()
# 可视化
plt.figure(figsize=(12, 7))
# 使用折线图来展示趋势
monthly_sales.plot(kind='line', marker='o', color='b')'月度销售趋势', fontsize=16)
plt.xlabel('月份', fontsize=12)
plt.ylabel('总销售额', fontsize=12)
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# --- 问题4: 哪些是畅销产品?(按销售量) ---
print("\n--- 分析4: 畅销产品排行(按销售数量) ---")
# 按 'Product' 分组,计算 'Quantity' 的总和
top_products = df.groupby('Product')['Quantity'].sum().sort_values(ascending=False).head(5)
print("最畅销的5个产品:")
print(top_products)
# 可视化
plt.figure(figsize=(10, 6))
sns.barplot(x=top_products.values, y=top_products.index, orient='h', palette='plasma')'最畅销的5个产品(按数量)', fontsize=16)
plt.xlabel('总销售数量', fontsize=12)
plt.ylabel('产品名称', fontsize=12)
plt.tight_layout()
plt.show()
# --- 6. 结论总结 ---
print("\n--- 结论总结 ---")
print("1. 销售额最高的产品类别是 'Electronics'(电子产品)。")
print("2. 'North'(北部)地区的销售额最高,占总销售额的很大一部分。")
print("3. 从1月到2月,销售额呈现明显的增长趋势,说明业务在扩张。")
print("4. 'Laptop'(笔记本电脑)是所有产品中最畅销的。")
print("\n基于以上分析,建议公司可以加大对电子产品,特别是笔记本电脑的库存投入,并重点关注北部市场的营销活动。")

第3步:代码分步详解

导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

我们首先导入了数据分析的核心库。pandas 用于处理数据,matplotlibseaborn 用于绘图。

Python数据分析代码怎么写?-图2
(图片来源网络,侵删)

数据加载

df = pd.read_csv('sales_data.csv')

pd.read_csv()pandas 中用于读取 CSV 文件的函数,它将数据加载到一个名为 DataFrame 的二维表格数据结构中,这是 pandas 最核心的数据结构。

数据探索

  • df.head(): 快速查看数据的前几行,了解数据的列名和大概内容。
  • df.info(): 提供数据集的概览,包括列名、非空值的数量、每列的数据类型(如 int64, object, datetime)等,这对于检查数据类型是否正确非常有用。
  • df.describe(): 计算数值型列的描述性统计信息,如计数、均值、标准差、最小值、最大值等,这能帮助我们快速了解数据的分布情况。
  • df.isnull().sum(): 检查每一列的缺失值数量,这是数据清洗的关键步骤。

数据清洗

df['Date'] = pd.to_datetime(df['Date'])

原始数据中的 Date 列是字符串类型,为了进行时间相关的分析(比如按月统计),我们需要使用 pd.to_datetime() 将其转换为 datetime 对象。pandas 会自动识别 YYYY-MM-DD 格式。

数据分析与可视化

这是数据分析的核心部分,我们通过“提出问题 -> 代码分析 -> 可视化”的模式进行。

  • 问题1: 各产品类别的销售额

    Python数据分析代码怎么写?-图3
    (图片来源网络,侵删)
    • 代码: df.groupby('Category')['Sales'].sum().sort_values(ascending=False)
    • 解释:
      • groupby('Category'): 按照 Category 列对数据进行分组。
      • ['Sales']: 选择要计算的列,这里是 Sales
      • .sum(): 对每个分组内的 Sales 值求和。
      • .sort_values(ascending=False): 将结果按降序排序,方便看出哪个类别销售额最高。
    • 可视化: 使用 seabornbarplot(条形图)来直观地展示不同类别的销售额差异。
  • 问题2: 各地区的销售额

    • 代码: df.groupby('Region')['Sales'].sum()
    • 解释: 与问题1类似,只是分组依据变成了 Region
    • 可视化: 使用 matplotlibpie(饼图)来展示各地区的销售占比,非常适合展示部分与整体的关系。
  • 问题3: 月度销售趋势

    • 代码:
      df['Month'] = df['Date'].dt.to_period('M')
      monthly_sales = df.groupby('Month')['Sales'].sum()
    • 解释:
      • df['Date'].dt.to_period('M'): 从 datetime 类型的 Date 列中提取出月份,并创建一个新列 Month
      • 然后按照新的 Month 列进行分组求和。
    • 可视化: 使用 plot(kind='line') 生成折线图,是观察时间序列趋势的最佳选择。
  • 问题4: 畅销产品

    • 代码: df.groupby('Product')['Quantity'].sum().sort_values(ascending=False).head(5)
    • 解释: 这次我们关注的是销售 Quantity(数量),并且用 .head(5) 只取排名前5的产品。
    • 可视化: 使用水平条形图 (orient='h') 来展示产品名称,这样名称可以完整显示,不会重叠。

结论总结

我们将分析得出的关键发现和商业建议整理成文字,这是数据分析的最终目的——为决策提供依据。


如何运行和进阶

  1. 运行:将上述代码保存为 analysis.py,确保 sales_data.csv 在同一目录下,然后在终端运行 python analysis.py,您将看到控制台输出的分析结果,并弹出多个图表窗口。
  2. 进阶
    • 处理更复杂的数据:学习如何使用 mergejoin 来合并多个数据表。
    • 更深入的数据清洗:学习如何处理异常值、进行数据标准化等。
    • 更高级的统计:使用 scipystatsmodels 库进行假设检验、回归分析等。
    • 交互式可视化:尝试使用 PlotlyBokeh 库创建可交互的图表。
    • 自动化报告:使用 Jupyter NotebookSphinx 等工具将代码、图表和分析结果整合成一份自动化的报告。

这个示例为您提供了一个坚实的起点,希望能帮助您开启 Python 数据分析之旅!

分享:
扫描分享到社交APP
上一篇
下一篇