使用Python进行数据分析:从基础到实践
在当今大数据时代,数据分析已成为各个领域不可或缺的一部分。无论是金融、医疗、互联网还是制造业,数据驱动的决策能够帮助企业更高效地运营和优化产品。本文将通过一个完整的案例,介绍如何使用 Python 进行数据分析,并展示实际代码实现。我们将使用 pandas
、matplotlib
和 seaborn
等常用的数据分析库,完成从数据加载、清洗、探索性分析到可视化的一整套流程。
环境准备
首先,确保你的环境中安装了以下 Python 库:
pip install pandas matplotlib seaborn
我们将在 Jupyter Notebook 或任意 Python IDE 中运行以下代码。
数据集简介
我们将使用 Kaggle 上的泰坦尼克号乘客数据集,该数据集包含乘客的基本信息(如年龄、性别、船舱等级等)以及是否幸存的信息。目标是通过这些特征预测乘客是否幸存。
下载文件 train.csv
并保存到当前工作目录中。
导入必要的库与数据加载
import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 设置显示样式sns.set(style="whitegrid")# 加载数据df = pd.read_csv("train.csv")# 查看前5行数据print(df.head())
输出结果如下(可能略有不同):
PassengerId Survived Pclass \0 1 0 3 1 2 1 1 2 3 1 3 3 4 1 1 4 5 0 3 Name Sex Age SibSp \0 Braund, Mr. Owen Harris male 22.0 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 2 Heikkinen, Miss. Laina female 26.0 0 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 4 Allen, Mr. William Henry male 35.0 0 Parch Ticket Fare Cabin Embarked 0 0 A/5 21171 7.2500 NaN S 1 0 PC 17599 71.2833 C85 C 2 0 STON/O2. 3101282 7.9250 NaN S 3 0 113803 53.1000 C123 S 4 0 373450 8.0500 NaN S
数据清洗
真实世界的数据往往存在缺失值或格式不一致的问题,我们需要对数据进行预处理。
4.1 检查缺失值
print(df.isnull().sum())
输出示例:
PassengerId 0Survived 0Pclass 0Name 0Sex 0Age 177SibSp 0Parch 0Ticket 0Fare 0Cabin 687Embarked 2dtype: int64
可以看到,Age
和 Cabin
字段存在大量缺失值。
4.2 填充缺失值
我们用平均值填充 Age
,删除 Cabin
列(因为缺失太多),并用众数填充 Embarked
。
# 填充年龄缺失值df['Age'].fillna(df['Age'].mean(), inplace=True)# 删除 Cabin 列df.drop('Cabin', axis=1, inplace=True)# 填充 Embarked 缺失值df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)# 再次检查缺失值print(df.isnull().sum())
探索性数据分析(EDA)
5.1 生还率统计
survival_rate = df['Survived'].value_counts(normalize=True)print(f"生还率:\n{survival_rate}")
输出示例:
生还率:0 0.5796301 0.420370Name: Survived, dtype: float64
约 42% 的乘客幸存。
5.2 性别与生还率关系
plt.figure(figsize=(6, 4))sns.barplot(x='Sex', y='Survived', data=df)plt.title('性别与生还率')plt.show()
可以看出女性的生还率显著高于男性。
5.3 船舱等级与生还率关系
plt.figure(figsize=(6, 4))sns.barplot(x='Pclass', y='Survived', data=df)plt.title('船舱等级与生还率')plt.show()
结果显示,船舱等级越低(数值越大),生还率越低。
特征工程
为了便于模型训练,我们需要将分类变量转换为数值型。
# 将性别映射为 0 和 1df['Sex'] = df['Sex'].map({'female': 1, 'male': 0})# one-hot 编码 Embarkeddf = pd.get_dummies(df, columns=['Embarked'], drop_first=True)# 查看处理后的特征print(df.head())
建模预测(简单逻辑回归)
我们将使用 Scikit-learn 构建一个简单的逻辑回归模型来预测乘客是否幸存。
from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score# 特征选择features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked_Q', 'Embarked_S']X = df[features]y = df['Survived']# 数据划分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型model = LogisticRegression(max_iter=200)model.fit(X_train, y_train)# 预测与评估y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f"模型准确率:{accuracy:.2f}")
输出示例:
模型准确率:0.78
虽然这个模型比较简单,但已经达到了 78% 的准确率。
总结与展望
本文介绍了使用 Python 进行数据分析的基本流程,包括:
数据加载与清洗;探索性数据分析(EDA);特征工程;简单建模与评估。虽然我们仅使用了逻辑回归模型,但在实际项目中可以尝试更复杂的模型,如随机森林、梯度提升树(XGBoost、LightGBM)等,以获得更高的预测精度。
未来,我们可以进一步深入以下方向:
特征构造(Feature Engineering);自动化数据管道构建;使用深度学习进行端到端建模;部署模型为 Web API 服务。希望本文能为你入门数据分析提供一个清晰的路线图和技术实践参考。
完整源码地址:你可以将上述所有代码整合成一个 .py
文件或 Jupyter Notebook 执行。如果你希望获取完整可运行的代码,请联系我获取 GitHub 示例仓库链接。
作者:AI助手 | 技术博客 | Python 数据分析实战