Python数据分析入门:Pandas与NumPy实战
引言
在当今数据驱动的时代,数据分析已成为各行各业不可或缺的技能。Python凭借其简洁的语法和强大的数据科学库,成为数据分析领域的首选语言。其中,NumPy 和 Pandas 是两个最核心的库,它们为数据处理、计算和分析提供了坚实的基础。本文将带你从零开始,通过实战案例掌握Python数据分析的基本流程和核心技能。
一、环境搭建:Anaconda + Jupyter
1. 安装 Anaconda
Anaconda 是一个开源的 Python 发行版,集成了大量常用的数据科学包(如 NumPy、Pandas、Matplotlib 等),并自带包管理工具 conda。
- 下载地址:https://www.anaconda.com/products/distribution
- 安装步骤:
- 选择对应操作系统的版本(Windows/macOS/Linux)
- 下载并运行安装程序
- 按照提示完成安装(建议勾选“Add Anaconda to PATH”)
2. 启动 Jupyter Notebook
Jupyter Notebook 是一个交互式开发环境,非常适合数据分析和可视化。
- 打开终端(或 Anaconda Prompt)
- 输入命令:
jupyter notebook - 浏览器将自动打开 Jupyter 界面,点击
New → Python 3创建新笔记本。
二、NumPy:科学计算的基础
NumPy(Numerical Python)是 Python 中用于数值计算的核心库,其核心是 ndarray(N-dimensional array,多维数组)。
1. 创建数组
import numpy as np
# 创建一维数组
arr = np.array([1, 2, 3, 4, 5])
print(arr) # [1 2 3 4 5]
# 创建二维数组(矩阵)
matrix = np.array([[1, 2], [3, 4]])
print(matrix)
2. 数组切片
NumPy 的切片语法与 Python 列表类似,但支持多维:
arr = np.array([10, 20, 30, 40, 50])
# 切片:[start:end:step]
print(arr[1:4]) # [20 30 40]
print(arr[::-1]) # [50 40 30 20 10] 反向
# 二维数组切片
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix[0, :]) # 第一行 [1 2 3]
print(matrix[:, 1]) # 第一列 [2 5 8]
3. 广播机制(Broadcasting)
广播允许不同形状的数组进行算术运算:
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])
# b 被自动“广播”到与 a 相同的形状
result = a + b
print(result)
# [[11 22 33]
# [14 25 36]]
4. 统计函数
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("均值:", np.mean(data)) # 5.5
print("标准差:", np.std(data)) # 2.87
print("最大值:", np.max(data)) # 10
print("最小值:", np.min(data)) # 1
print("总和:", np.sum(data)) # 55
三、Pandas:数据处理的利器
Pandas 提供了强大的数据结构,尤其是 DataFrame,非常适合处理表格型数据。
1. 创建 DataFrame
import pandas as pd
# 从字典创建 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [23, 25, 22, 24],
'Score': [85, 92, 78, 96]
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age Score
0 Alice 23 85
1 Bob 25 92
2 Charlie 22 78
3 David 24 96
2. 缺失值处理
现实数据中常有缺失值(NaN),Pandas 提供了多种处理方式:
# 模拟缺失值
df.loc[1, 'Score'] = np.nan
# 检查缺失值
print(df.isnull())
# 填充缺失值(用平均分)
mean_score = df['Score'].mean()
df['Score'].fillna(mean_score, inplace=True)
# 或者直接删除含缺失值的行
# df.dropna(inplace=True)
3. 数据筛选
# 筛选分数大于90的学生
high_scorers = df[df['Score'] > 90]
print(high_scorers)
# 多条件筛选
result = df[(df['Age'] > 22) & (df['Score'] > 80)]
print(result)
四、常见问题与解决
1. 数据读取编码错误
使用 pd.read_csv() 读取 CSV 文件时,常因编码问题报错:
# 常见错误:UnicodeDecodeError
# df = pd.read_csv('data.csv')
# 解决方法:指定编码
df = pd.read_csv('data.csv', encoding='utf-8')
# 如果仍报错,尝试:
# df = pd.read_csv('data.csv', encoding='gbk') # 中文常用
# df = pd.read_csv('data.csv', encoding='latin1')
# df = pd.read_csv('data.csv', encoding='cp1252')
2. 数据类型转换
确保数据类型正确,避免计算错误:
# 查看数据类型
print(df.dtypes)
# 转换数据类型
df['Age'] = df['Age'].astype(int)
df['Score'] = pd.to_numeric(df['Score'], errors='coerce') # 错误转为 NaN
五、实战案例:学生成绩数据分析
1. 准备数据
假设有一个 students.csv 文件,内容如下:
Name,Math,English,Science
Alice,85,90,88
Bob,78,85,82
Charlie,92,76,90
David,88,94,85
Eve,80,88,84
2. 读取并分析数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('students.csv', encoding='utf-8')
# 查看数据基本信息
print("数据预览:")
print(df.head())
print("\n数据类型:")
print(df.dtypes)
3. 成绩排序
# 按总分排序
df['Total'] = df[['Math', 'English', 'Science']].sum(axis=1)
df_sorted = df.sort_values(by='Total', ascending=False)
print("\n按总分排序:")
print(df_sorted)
4. 平均分统计
# 各科平均分
avg_scores = df[['Math', 'English', 'Science']].mean()
print("\n各科平均分:")
print(avg_scores)
# 全体学生平均分
overall_avg = df['Total'].mean()
print(f"\n全班平均总分:{overall_avg:.2f}")
5. 可视化图表
# 设置中文字体(避免乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制柱状图:各科平均分
avg_scores.plot(kind='bar', title='各科平均分', color=['skyblue', 'lightgreen', 'salmon'])
plt.ylabel('分数')
plt.xticks(rotation=0)
plt.show()
# 绘制饼图:成绩等级分布
def get_grade(score):
if score >= 90: return 'A'
elif score >= 80: return 'B'
elif score >= 70: return 'C'
else: return 'D'
df['Grade'] = df['Total'].apply(get_grade)
grade_count = df['Grade'].value_counts()
grade_count.plot(kind='pie', title='成绩等级分布', autopct='%1.1f%%')
plt.ylabel('')
plt.show()
结语
通过本文的学习,你已经掌握了使用 Python 进行数据分析的基本流程:从环境搭建、数据读取、清洗处理,到统计分析和可视化展示。NumPy 和 Pandas 的强大功能让你能够高效地处理各种数据任务。
关键要点回顾:
- 使用 Anaconda 快速搭建数据分析环境
- NumPy 用于高效数组运算和数学计算
- Pandas 是处理表格数据的首选工具
- 注意编码问题和数据类型转换
- 结合 Matplotlib 实现数据可视化
数据分析是一个不断实践的过程。建议你找一些真实数据集(如 Kaggle、政府开放数据等)进行练习,逐步提升技能。随着经验的积累,你将能够处理更复杂的数据分析任务,挖掘数据背后的深层价值。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)