Python数据分析全栈指南:Pandas+NumPy+Matplotlib实战
本文系统介绍了Python数据分析三大核心库:NumPy(数值计算)、Pandas(数据处理)和Matplotlib(数据可视化)的使用方法。内容涵盖环境搭建、数组操作(NumPy)、DataFrame基础与数据清洗(Pandas)、基础图表绘制与高级可视化技巧(Matplotlib),并通过销售数据分析实战案例展示完整应用流程。文章还提供了性能优化建议,包括向量化操作和内存优化技巧,并对比了各库
·
目录
Python作为数据科学领域的主流语言,其强大的数据分析生态系统备受青睐。本文将深入探讨三大核心库:Pandas(数据处理)、NumPy(数值计算)、Matplotlib(数据可视化)的完整使用指南。

二、环境搭建与库安装
首先确保安装必要的库:
# 安装核心数据分析库
pip install pandas numpy matplotlib seaborn jupyter
# 或者使用conda安装
conda install pandas numpy matplotlib
三、NumPy:科学计算基础
3.1 数组创建与操作
import numpy as np
# 创建数组
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
arr3 = np.linspace(0, 1, 5) # [0., 0.25, 0.5, 0.75, 1.]
# 多维数组
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
zeros = np.zeros((3, 3)) # 3x3零矩阵
ones = np.ones((2, 4)) # 2x4单位矩阵
print("数组形状:", arr1.shape)
print("数组维度:", arr1.ndim)
3.2 数组运算与广播
# 基本运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print("加法:", a + b)
print("乘法:", a * b)
print("点积:", np.dot(a, b))
# 广播机制
matrix = np.array([[1, 2, 3], [4, 5, 6]])
result = matrix + np.array([10, 20, 30]) # 广播加法
print("广播结果:\n", result)
四、Pandas:数据处理利器
4.1 DataFrame基础操作
import pandas as pd
import numpy as np
# 创建DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 35, 28],
'城市': ['北京', '上海', '广州', '深圳'],
'薪资': [15000, 20000, 18000, 22000]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
4.2 数据清洗与预处理
# 处理缺失值
df_with_na = df.copy()
df_with_na.loc[2, '薪资'] = np.nan
# 填充缺失值
df_filled = df_with_na.fillna({'薪资': df_with_na['薪资'].mean()})
print("填充后数据:")
print(df_filled)
# 数据筛选
high_salary = df[df['薪资'] > 18000]
beijing_people = df[df['城市'] == '北京']
print("高薪资人员:\n", high_salary)
print("北京人员:\n", beijing_people)
4.3 数据分组与聚合
# 按城市分组统计
city_stats = df.groupby('城市').agg({
'年龄': ['mean', 'min', 'max'],
'薪资': ['mean', 'sum', 'count']
})
print("城市统计信息:")
print(city_stats)
五、Matplotlib:数据可视化
5.1 基础图表绘制
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 柱状图
axes[0, 0].bar(df['姓名'], df['薪资'], color='skyblue')
axes[0, 0].set_title('薪资分布')
axes[0, 0].set_ylabel('薪资')
# 饼图
city_count = df['城市'].value_counts()
axes[0, 1].pie(city_count.values, labels=city_count.index, autopct='%1.1f%%')
axes[0, 1].set_title('城市分布')
# 折线图
axes[1, 0].plot(df['姓名'], df['年龄'], marker='o', linestyle='-', color='orange')
axes[1, 0].set_title('年龄趋势')
axes[1, 0].set_ylabel('年龄')
# 散点图
axes[1, 1].scatter(df['年龄'], df['薪资'], alpha=0.7)
axes[1, 1].set_xlabel('年龄')
axes[1, 1].set_ylabel('薪资')
axes[1, 1].set_title('年龄与薪资关系')
plt.tight_layout()
plt.show()
5.2 高级可视化技巧
# 使用Seaborn增强可视化
plt.figure(figsize=(10, 6))
# 箱线图
plt.subplot(1, 2, 1)
sns.boxplot(data=df, x='城市', y='薪资')
plt.title('各城市薪资分布')
# 热力图
plt.subplot(1, 2, 2)
correlation = df[['年龄', '薪资']].corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.title('相关性热力图')
plt.tight_layout()
plt.show()
六、实战案例:销售数据分析
6.1 数据准备
# 模拟销售数据
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
sales_data = {
'日期': dates,
'产品类别': np.random.choice(['A', 'B', 'C'], 100),
'销售额': np.random.normal(1000, 200, 100),
'数量': np.random.randint(1, 50, 100)
}
sales_df = pd.DataFrame(sales_data)
sales_df['销售额'] = sales_df['销售额'].clip(lower=0) # 确保非负
print("销售数据前5行:")
print(sales_df.head())
6.2 数据分析与可视化
# 按产品类别分析
category_analysis = sales_df.groupby('产品类别').agg({
'销售额': ['sum', 'mean', 'std'],
'数量': 'sum'
}).round(2)
print("产品类别分析:")
print(category_analysis)
# 时间序列分析
sales_df['月份'] = sales_df['日期'].dt.month
monthly_sales = sales_df.groupby('月份')['销售额'].sum()
plt.figure(figsize=(12, 8))
# 月度销售额趋势
plt.subplot(2, 2, 1)
monthly_sales.plot(kind='line', marker='o')
plt.title('月度销售额趋势')
plt.ylabel('销售额')
# 产品类别销售额占比
plt.subplot(2, 2, 2)
category_sales = sales_df.groupby('产品类别')['销售额'].sum()
plt.pie(category_sales.values, labels=category_sales.index, autopct='%1.1f%%')
plt.title('产品类别销售额占比')
# 销售额分布
plt.subplot(2, 2, 3)
plt.hist(sales_df['销售额'], bins=20, alpha=0.7, color='green')
plt.title('销售额分布')
plt.xlabel('销售额')
# 类别销售额箱线图
plt.subplot(2, 2, 4)
sns.boxplot(data=sales_df, x='产品类别', y='销售额')
plt.title('各类别销售额分布')
plt.tight_layout()
plt.show()
七、性能优化技巧
7.1 向量化操作
# 不推荐的循环方式
def slow_calculation(df):
result = []
for i in range(len(df)):
result.append(df.iloc[i]['销售额'] * 1.1)
return result
# 推荐的向量化方式
def fast_calculation(df):
return df['销售额'] * 1.1
# 性能对比
%timeit slow_calculation(sales_df)
%timeit fast_calculation(sales_df)
7.2 内存优化
# 查看数据类型
print("数据类型信息:")
print(sales_df.info())
# 优化数据类型
def optimize_dtypes(df):
# 转换数值类型
df['数量'] = df['数量'].astype('int32')
df['销售额'] = df['销售额'].astype('float32')
return df
optimized_df = optimize_dtypes(sales_df.copy())
print("优化后内存使用:")
print(optimized_df.info(memory_usage='deep'))
八、核心功能对比表
| 库名称 | 主要功能 | 优势 | 适用场景 |
|---|---|---|---|
| NumPy | 数值计算、数组操作 | 高性能、内存效率高 | 科学计算、矩阵运算 |
| Pandas | 数据处理、数据分析 | 灵活的数据结构、丰富API | 数据清洗、统计分析 |
| Matplotlib | 数据可视化 | 高度可定制、图表类型丰富 | 数据展示、报告生成 |
九、总结
本文全面介绍了Python数据分析三大核心库的使用方法,从基础操作到实战应用,涵盖了数据处理、分析和可视化的完整流程。掌握这些工具将极大提升您的数据分析能力。
十、参考文献
- Pandas官方文档:https://pandas.pydata.org/docs/
- NumPy官方文档:https://numpy.org/doc/stable/
- Matplotlib官方文档:https://matplotlib.org/stable/contents.html
- Python数据分析最佳实践:https://realpython.com/tutorials/data-science/
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)