Python 大数据分析零基础入门教程
·
下面为你整理了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') # 整数型缩小类型
更多推荐
所有评论(0)