下面为你整理了Python 大数据分析零基础入门教程,聚焦「数据读取→清洗→分析→可视化→进阶建模」核心流程,基于 Pandas、NumPy、Matplotlib 等主流库,搭配真实数据集(CSV/Excel)实操,新手可直接跟着做。

一、环境准备(必做)

大数据分析依赖的核心库对环境有一定要求,先做好基础配置:

1. 安装 Python 环境
  • 推荐版本:Python 3.8+(兼容所有主流数据分析库)
  • 安装方式:
    • 新手:下载 Anaconda(内置 Pandas/NumPy/Matplotlib,无需手动安装);
    • 进阶:pip install python==3.9(需手动装库)。
2. 安装核心分析库
# 一键安装所有核心库(Anaconda 用户可跳过,已内置)
pip install pandas numpy matplotlib seaborn scipy scikit-learn openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
库名核心作用
Pandas数据读取、清洗、筛选、聚合(核心)
NumPy数值计算、数组操作
Matplotlib基础数据可视化(折线图/柱状图)
Seaborn高级可视化(热力图/箱线图)
Scikit-learn进阶:机器学习建模
Openpyxl读取/写入 Excel 文件
3. 准备测试数据
  • 下载示例数据集:泰坦尼克号乘客数据train.csv),保存到本地(如 ./data/titanic.csv);
  • 也可自己创建简单 CSV 文件测试:
    姓名,年龄,城市,薪资
    张三,25,北京,15000
    李四,30,上海,20000
    王五,28,广州,18000
    

二、核心步骤:大数据分析实操(泰坦尼克号数据集)

步骤 1:数据读取(Pandas 核心)

读取 CSV/Excel/数据库数据是分析的第一步,以 CSV 为例:

# 导入核心库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 设置中文显示(解决可视化中文乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 1. 读取CSV文件
df = pd.read_csv('./data/titanic.csv')  # 替换为你的文件路径

# 2. 查看数据基本信息(必做)
print("数据形状(行×列):", df.shape)       # 输出 (891, 12) 表示891行12列
print("\n前5行数据:")
print(df.head())  # 预览前5行
print("\n数据类型:")
print(df.dtypes)  # 查看各列数据类型(数值/字符串/缺失值)
print("\n缺失值统计:")
print(df.isnull().sum())  # 统计每列缺失值数量(关键:判断是否需要清洗)
步骤 2:数据清洗(分析的核心前提)

大数据往往存在缺失值、异常值、重复值,必须先清洗:

# 1. 处理缺失值(3种常用方式)
# 方式1:删除缺失值过多的列(如Cabin列缺失77%,直接删除)
df = df.drop('Cabin', axis=1)
# 方式2:填充数值型缺失值(用均值/中位数)
df['Age'] = df['Age'].fillna(df['Age'].median())  # 年龄用中位数填充
# 方式3:填充分类型缺失值(用最频繁值)
df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()[0])

# 2. 处理重复值
df = df.drop_duplicates()  # 删除重复行

# 3. 处理异常值(以年龄为例,筛选1-100岁的正常数据)
df = df[(df['Age'] >= 1) & (df['Age'] <= 100)]

# 4. 数据类型转换(如把Pclass从数值转为分类)
df['Pclass'] = df['Pclass'].astype('category')

# 验证清洗结果
print("清洗后缺失值:")
print(df.isnull().sum())  # 所有列缺失值应为0
步骤 3:数据分析(Pandas 核心操作)

基于清洗后的数据做统计、筛选、聚合分析:

# 1. 基础统计分析(数值型字段)
print("数值字段统计摘要:")
print(df.describe())  # 输出均值、中位数、最大值、最小值等

# 2. 分组聚合(核心:按舱位(Pclass)统计平均年龄和存活率)
group_result = df.groupby('Pclass').agg({
    'Age': 'mean',          # 平均年龄
    'Survived': 'mean'      # 存活率(Survived=1表示存活)
}).round(2)  # 保留2位小数
print("\n按舱位分组分析:")
print(group_result)

# 3. 筛选数据(如筛选存活的女性乘客)
female_survived = df[(df['Sex'] == 'female') & (df['Survived'] == 1)]
print(f"\n存活的女性乘客数量:{len(female_survived)}")

# 4. 交叉分析(性别×舱位的存活率)
cross_result = pd.crosstab(df['Sex'], df['Pclass'], values=df['Survived'], aggfunc='mean').round(2)
print("\n性别×舱位存活率交叉表:")
print(cross_result)
步骤 4:数据可视化(直观展示分析结果)

用 Matplotlib/Seaborn 把分析结果绘制成图表:

# 1. 柱状图:不同舱位的存活率
plt.figure(figsize=(8, 5))  # 设置图表大小
group_result['Survived'].plot(kind='bar', color=['#1f77b4', '#ff7f0e', '#2ca02c'])
plt.title('不同舱位的存活率')
plt.xlabel('舱位等级')
plt.ylabel('存活率')
plt.xticks(rotation=0)  # x轴标签不旋转
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.savefig('./result/舱位存活率.png', dpi=300, bbox_inches='tight')  # 保存图片
plt.show()

# 2. 箱线图:不同性别、舱位的年龄分布
import seaborn as sns
plt.figure(figsize=(10, 6))
sns.boxplot(x='Pclass', y='Age', hue='Sex', data=df)
plt.title('不同性别、舱位的年龄分布')
plt.xlabel('舱位等级')
plt.ylabel('年龄')
plt.show()

# 3. 热力图:特征相关性分析(数值型字段)
plt.figure(figsize=(8, 6))
corr = df[['Age', 'Pclass', 'Fare', 'Survived']].corr()  # 计算相关性
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')  # annot显示数值
plt.title('特征相关性热力图')
plt.show()
步骤 5:进阶:简单机器学习建模(预测存活率)
# 1. 数据预处理(把分类特征转为数值)
df_model = df.copy()
df_model['Sex'] = df_model['Sex'].map({'male': 0, 'female': 1})  # 性别数值化
df_model['Embarked'] = df_model['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})  # 登船港口数值化

# 2. 划分特征和标签
X = df_model[['Pclass', 'Sex', 'Age', 'Fare']]  # 特征
y = df_model['Survived']  # 标签(是否存活)

# 3. 训练模型(逻辑回归)
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测并评估
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"\n模型预测准确率:{accuracy:.2f}")

三、大数据分析进阶技巧(处理百万级数据)

如果数据量超过 100 万行,普通 Pandas 操作会卡顿,需优化:

# 1. 分块读取大文件(避免内存溢出)
chunk_size = 10000  # 每次读取1万行
chunks = []
for chunk in pd.read_csv('./data/big_data.csv', chunksize=chunk_size):
    # 对每个块做清洗
    chunk = chunk.dropna(subset=['Age'])
    chunks.append(chunk)
df_big = pd.concat(chunks)  # 合并所有块

# 2. 使用 Dask 处理超大数据(并行计算)
import dask.dataframe as dd
ddf = dd.read_csv('./data/big_data.csv')  # 类似Pandas,但支持分布式
print(ddf['Age'].mean().compute())  # compute() 触发计算

# 3. 数据类型优化(减少内存占用)
df['Age'] = df['Age'].astype('float32')  # 从float64转为float32,节省50%内存
df['Pclass'] = df['Pclass'].astype('int8')  # 整数型缩小类型

更多推荐