当前位置:首页 > Python > 正文

Python数据分析基础统计教程 - 从入门到实践

Python数据分析基础统计教程

使用Pandas、NumPy和Matplotlib进行数据探索与统计分析

DS
数据分析师
最后更新: 2023年10月15日 · 阅读时间: 10分钟

1. Python数据分析简介

Python已成为数据科学领域的主流语言,这得益于其丰富的库生态系统和简洁的语法。在数据分析领域,Python提供了强大的工具集,能够高效地进行数据清洗、转换、统计分析和可视化。

核心优势:

  • Pandas - 数据处理和分析的核心库,提供DataFrame数据结构
  • NumPy - 科学计算基础库,支持大型多维数组和矩阵运算
  • Matplotlib/Seaborn - 数据可视化工具,创建高质量统计图表
  • SciPy - 科学计算库,包含统计、优化等模块

2. 环境配置与库安装

开始之前,确保已安装Python(推荐3.8+版本)。使用pip安装所需库:

# 安装核心数据分析库
pip install pandas numpy matplotlib seaborn scipy

# 安装Jupyter Notebook(可选但推荐)
pip install jupyterlab

在Python脚本或Jupyter Notebook中导入常用库:

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

# 设置图表在Notebook中直接显示
%matplotlib inline

3. 数据加载与查看

Pandas支持多种数据格式的读取,包括CSV、Excel、JSON、SQL数据库等。

3.1 加载CSV数据

# 读取CSV文件
df = pd.read_csv('sales_data.csv')

# 显示前5行
print(df.head())

3.2 数据概览

# 显示数据基本信息
df.info()

# 统计描述(数值型列)
print(df.describe())

# 查看列名
print(df.columns)

# 查看数据维度
print(f"数据集形状: {df.shape}")

4. 数据清洗与预处理

数据清洗是数据分析的关键步骤,确保数据质量。

4.1 处理缺失值

# 检查缺失值
print(df.isnull().sum())

# 填充缺失值
df['Price'].fillna(df['Price'].mean(), inplace=True)

# 删除包含缺失值的行
df.dropna(subset=['CustomerID'], inplace=True)

4.2 处理重复值

# 检查重复行
print(f"重复行数: {df.duplicated().sum()}")

# 删除重复行
df.drop_duplicates(inplace=True)

4.3 数据类型转换

# 转换日期列
df['OrderDate'] = pd.to_datetime(df['OrderDate'])

# 转换分类数据
df['Category'] = df['Category'].astype('category')

5. 基础统计分析

使用Pandas和NumPy进行基础统计分析。

5.1 描述性统计

# 数值列的统计摘要
stats = df.describe()
print(stats)

# 特定统计量
print(f"平均值: {df['Price'].mean()}")
print(f"中位数: {df['Price'].median()}")
print(f"标准差: {df['Price'].std()}")
print(f"最小值: {df['Price'].min()}")
print(f"最大值: {df['Price'].max()}")
print(f"四分位数: \n{df['Price'].quantile([0.25, 0.5, 0.75])}")

5.2 分组统计

# 按类别分组统计
category_stats = df.groupby('Category')['Price'].agg(['sum', 'mean', 'count'])
print(category_stats)

# 多维度分组
region_category = df.groupby(['Region', 'Category'])['Sales'].mean().unstack()
print(region_category)

5.3 相关性与协方差

# 计算相关系数矩阵
correlation_matrix = df[['Price', 'Quantity', 'Sales']].corr()
print(correlation_matrix)

# 单个相关系数
corr_price_sales = df['Price'].corr(df['Sales'])
print(f"价格与销售额相关系数: {corr_price_sales:.2f}")

# 协方差矩阵
cov_matrix = df[['Price', 'Sales']].cov()
print(cov_matrix)

6. 数据可视化

使用Matplotlib和Seaborn创建信息丰富的图表。

6.1 直方图 - 分布分析

plt.figure(figsize=(10, 6))
sns.histplot(df['Price'], bins=30, kde=True)
plt.title('价格分布直方图')
plt.xlabel('价格')
plt.ylabel('频数')
plt.show()

6.2 箱线图 - 异常值检测

plt.figure(figsize=(10, 6))
sns.boxplot(x='Category', y='Sales', data=df)
plt.title('不同类别销售额分布')
plt.xticks(rotation=45)
plt.show()

6.3 散点图 - 关系分析

plt.figure(figsize=(10, 6))
sns.scatterplot(x='Price', y='Sales', 
                hue='Category', data=df)
plt.title('价格与销售额关系')
plt.grid(True)
plt.show()

6.4 条形图 - 类别比较

plt.figure(figsize=(10, 6))
category_sales = df.groupby('Category')['Sales'].sum().sort_values()
category_sales.plot(kind='barh')
plt.title('各类别总销售额')
plt.xlabel('销售额')
plt.ylabel('类别')
plt.show()

7. 进阶分析技巧

7.1 时间序列分析

# 将日期设为索引
df.set_index('OrderDate', inplace=True)

# 按月重采样
monthly_sales = df['Sales'].resample('M').sum()

# 绘制时间序列图
plt.figure(figsize=(12, 6))
monthly_sales.plot()
plt.title('月度销售额趋势')
plt.ylabel('销售额')
plt.grid(True)
plt.show()

7.2 数据透视表

pivot_table = pd.pivot_table(df, 
                            values='Sales',
                            index='Region',
                            columns='Category',
                            aggfunc='sum',
                            fill_value=0)

print(pivot_table)

7.3 假设检验示例

from scipy import stats

# 提取两个类别的数据
cat1 = df[df['Category'] == 'Electronics']['Sales']
cat2 = df[df['Category'] == 'Clothing']['Sales']

# 独立样本t检验
t_stat, p_value = stats.ttest_ind(cat1, cat2)

print(f"T统计量: {t_stat:.2f}")
print(f"P值: {p_value:.4f}")

# 结果解读
alpha = 0.05
if p_value < alpha:
    print("拒绝原假设:两个类别的销售额有显著差异")
else:
    print("无法拒绝原假设:没有足够证据表明销售额有显著差异")

🎯 关键要点总结

数据清洗

处理缺失值和异常值是可靠分析的基础

描述性统计

describe()方法提供数据集的快速概览

分组分析

groupby()揭示不同类别的模式差异

数据可视化

图表比数字更直观地展示数据洞察

发表评论