使用Python进行数据分析:从数据加载到可视化

今天 4阅读

在当今大数据时代,数据分析已经成为各行各业不可或缺的技能。Python凭借其简洁、易读的语法和强大的第三方库(如NumPy、Pandas、Matplotlib、Seaborn等),成为了数据分析领域的首选语言之一。

本文将通过一个完整的案例,展示如何使用Python进行数据分析,包括数据加载、清洗、处理以及可视化。我们将使用Kaggle上经典的“泰坦尼克号”数据集作为分析对象,来演示整个流程。


环境准备与数据加载

首先,我们需要安装必要的Python库。如果你还没有安装这些库,可以使用以下命令进行安装:

pip install pandas numpy matplotlib seaborn scikit-learn

接下来,我们开始导入所需的库并加载数据:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 加载训练集和测试集train_df = pd.read_csv('train.csv')test_df = pd.read_csv('test.csv')# 显示前几行数据print(train_df.head())

输出示例:

   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked0            1         0       3  ...   7.2500   NaN         S1            2         1       1  ...  71.2833   C85         C2            3         1       3  ...   7.9250   NaN         S3            4         1       1  ...  53.1000  C123         S4            5         0       3  ...   8.0500   NaN         S[5 rows × 12 columns]

我们可以看到,训练集中包含乘客ID、是否生还、舱位等级、姓名、性别、年龄、兄弟姐妹数量、父母/子女数量、船票编号、票价、客舱号和登船港口等字段。


数据探索与初步分析

在进行建模之前,我们需要了解数据的基本情况,包括缺失值、分布、相关性等。

2.1 查看缺失值

print(train_df.isnull().sum())

输出示例:

PassengerId      0Survived         0Pclass           0Name             0Sex              0Age            177SibSp            0Parch            0Ticket           0Fare             0Cabin          687Embarked         2dtype: int64

可以看到,AgeEmbarked 字段存在缺失值,而 Cabin 缺失非常严重。

2.2 基本统计信息

print(train_df.describe())

输出略...

2.3 生存率与各特征的关系

我们可以绘制一些图表来观察不同特征对生存率的影响。

性别与生存率

sns.barplot(x='Sex', y='Survived', data=train_df)plt.title('Survival Rate by Gender')plt.show()

舱位等级与生存率

sns.barplot(x='Pclass', y='Survived', data=train_df)plt.title('Survival Rate by Class')plt.show()

年龄与生存率

g = sns.FacetGrid(train_df, col='Survived')g.map(plt.hist, 'Age', bins=20)plt.show()

数据预处理

为了后续建模,我们需要对数据进行预处理,包括填补缺失值、编码分类变量、构造新特征等。

3.1 填补缺失值

# 填补年龄缺失值为中位数train_df['Age'].fillna(train_df['Age'].median(), inplace=True)# 填补登船港口缺失值为众数train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace=True)# 删除Cabin列,因为缺失太多train_df.drop('Cabin', axis=1, inplace=True)

3.2 编码分类变量

# 将性别映射为0和1train_df['Sex'] = train_df['Sex'].map({'male': 0, 'female': 1})# 对Embarked进行独热编码train_df = pd.get_dummies(train_df, columns=['Embarked'])

3.3 构造新特征

我们可以根据名字提取头衔(Title)作为一个新特征:

train_df['Title'] = train_df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)train_df['Title'] = train_df['Title'].replace(['Lady', 'Countess','Capt', 'Col',                                               'Don', 'Dr', 'Major', 'Rev', 'Sir',                                               'Jonkheer', 'Dona'], 'Rare')train_df['Title'] = train_df['Title'].replace('Mlle', 'Miss')train_df['Title'] = train_df['Title'].replace('Ms', 'Miss')train_df['Title'] = train_df['Title'].replace('Mme', 'Mrs')title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}train_df['Title'] = train_df['Title'].map(title_mapping).astype(int)

建模与预测

我们可以使用Scikit-learn中的模型来进行预测。这里我们以随机森林为例:

from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# 准备特征和标签features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Title']X = train_df[features]y = train_df['Survived']# 划分训练集和验证集X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)# 验证模型y_pred = model.predict(X_val)accuracy = accuracy_score(y_val, y_pred)print(f'模型准确率为:{accuracy:.2f}')

输出示例:

模型准确率为:0.83

与展望

通过本文的演示,我们完成了从数据加载、探索、预处理到建模预测的完整流程。使用Python进行数据分析不仅高效而且灵活,尤其适合快速迭代和实验。

未来你可以尝试:

引入更多特征工程方法;使用更复杂的模型如梯度提升树(XGBoost、LightGBM);进行交叉验证优化超参数;提交结果到Kaggle进行排名。

完整代码汇总

以下是本文所有步骤的完整代码整合版本:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# 加载数据train_df = pd.read_csv('train.csv')# 缺失值处理train_df['Age'].fillna(train_df['Age'].median(), inplace=True)train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace=True)train_df.drop('Cabin', axis=1, inplace=True)# 特征编码train_df['Sex'] = train_df['Sex'].map({'male': 0, 'female': 1})train_df = pd.get_dummies(train_df, columns=['Embarked'])# 构造新特征 - Titletrain_df['Title'] = train_df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)train_df['Title'] = train_df['Title'].replace(['Lady', 'Countess','Capt', 'Col',                                               'Don', 'Dr', 'Major', 'Rev', 'Sir',                                               'Jonkheer', 'Dona'], 'Rare')train_df['Title'] = train_df['Title'].replace('Mlle', 'Miss')train_df['Title'] = train_df['Title'].replace('Ms', 'Miss')train_df['Title'] = train_df['Title'].replace('Mme', 'Mrs')title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}train_df['Title'] = train_df['Title'].map(title_mapping).astype(int)# 可视化sns.barplot(x='Sex', y='Survived', data=train_df)plt.title('Survival Rate by Gender')plt.show()# 准备特征和标签features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Title']X = train_df[features]y = train_df['Survived']# 拆分数据集X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)# 预测与评估y_pred = model.predict(X_val)accuracy = accuracy_score(y_val, y_pred)print(f'模型准确率为:{accuracy:.2f}')

总结:

本文介绍了如何使用Python进行端到端的数据分析流程,涵盖了数据加载、清洗、探索、建模等多个环节,并附有完整的可运行代码。希望读者能够通过这篇文章掌握数据分析的基本方法,并在实际项目中加以应用。

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第3851名访客 今日有14篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!