使用Python进行数据分析:从数据清洗到可视化

36分钟前 2阅读

在当今的大数据时代,数据分析已经成为各个行业不可或缺的一部分。无论是金融、医疗、教育还是互联网,数据分析都能帮助我们发现隐藏的模式、趋势和洞察,从而做出更明智的决策。

本文将介绍如何使用 Python 进行基础的数据分析流程,包括数据获取、数据清洗、数据处理以及数据可视化。我们将使用几个常用的 Python 库,如 pandasnumpymatplotlib/seaborn,并通过一个完整的案例来演示整个过程。


准备工作

首先,我们需要安装一些必要的库。你可以使用以下命令安装:

pip install pandas numpy matplotlib seaborn

导入所需的模块:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns

数据获取

为了演示,我们可以使用一个公开的数据集。这里我们选择 Kaggle 上的泰坦尼克号生存预测数据集,这是一个经典的机器学习入门数据集,也适合做数据分析。

下载 train.csv 文件后,使用 pandas 加载数据:

df = pd.read_csv('train.csv')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

数据清洗

真实世界的数据通常包含缺失值、异常值或者格式不一致的问题。我们来看看这个数据集中有哪些问题。

3.1 检查缺失值

print(df.isnull().sum())

输出示例:

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

可以看到 AgeCabinEmbarked 列有缺失值。

3.2 填充缺失值

对于 Age 列,我们可以用中位数填充:

df['Age'].fillna(df['Age'].median(), inplace=True)

对于 Embarked 列,由于只有两个缺失值,我们可以用众数(出现频率最高的值)填充:

df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

对于 Cabin 列,由于缺失太多,我们可以直接删除这一列:

df.drop(columns=['Cabin'], inplace=True)

数据处理

4.1 类别变量编码

某些列是类别型变量(如 SexEmbarked),我们需要将其转换为数值型才能用于建模或分析。

df = pd.get_dummies(df, columns=['Sex', 'Embarked'])

4.2 特征工程

我们可以从现有特征中提取新的信息。例如,创建一个新的特征 FamilySize 来表示家庭成员数量:

df['FamilySize'] = df['SibSp'] + df['Parch']

数据分析与可视化

5.1 生存率分析

我们可以分析不同性别、舱位等级对生存率的影响。

性别与生存率

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

舱位等级与生存率

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

5.2 年龄分布与生存关系

我们可以绘制年龄分布图,并按是否幸存分组:

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

5.3 家庭大小与生存率

sns.barplot(x='FamilySize', y='Survived', data=df)plt.title('Survival Rate by Family Size')plt.show()

总结与思考

通过上述步骤,我们完成了从原始数据加载、清洗、处理到可视化的全过程。虽然这只是数据分析的基础流程,但已经能够揭示出很多有价值的信息。例如:

女性乘客的生存率显著高于男性;头等舱乘客的生存率更高;年龄较小的儿童和年长者更容易存活;家庭人数适中的乘客生存率较高。

当然,这只是一个起点。实际的数据分析项目往往需要更深入的探索,比如使用聚类、回归、分类等方法进行建模预测,甚至结合机器学习算法来挖掘更深的规律。


完整代码汇总

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 加载数据df = pd.read_csv('train.csv')# 查看前几行数据print(df.head())# 检查缺失值print(df.isnull().sum())# 填充缺失值df['Age'].fillna(df['Age'].median(), inplace=True)df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)# 删除缺失过多的列df.drop(columns=['Cabin'], inplace=True)# 类别变量编码df = pd.get_dummies(df, columns=['Sex', 'Embarked'])# 特征工程df['FamilySize'] = df['SibSp'] + df['Parch']# 可视化部分sns.barplot(x='Sex_female', y='Survived', data=df)plt.title('Survival Rate by Gender')plt.show()sns.barplot(x='Pclass', y='Survived', data=df)plt.title('Survival Rate by Passenger Class')plt.show()g = sns.FacetGrid(df, col='Survived')g.map(plt.hist, 'Age', bins=20)plt.show()sns.barplot(x='FamilySize', y='Survived', data=df)plt.title('Survival Rate by Family Size')plt.show()

拓展方向

如果你希望进一步深入数据分析领域,可以尝试以下方向:

使用机器学习模型(如逻辑回归、随机森林)进行预测;使用交叉验证评估模型性能;使用时间序列分析处理时序数据;使用自然语言处理技术分析文本字段(如乘客姓名);构建交互式仪表盘(如使用 Plotly Dash 或 Streamlit)展示分析结果。

数据分析是一门融合统计学、编程与业务理解的综合性技能,掌握它将极大提升你在职场中的竞争力。希望本文能为你打开数据分析的大门,开启一段有趣的技术旅程!


参考资料:

Pandas 官方文档Seaborn 官方文档Matplotlib 官方文档Kaggle Titanic 数据集

如需进一步交流或获取完整项目代码,请留言或私信我!

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

目录[+]

您是本站第3485名访客 今日有7篇新文章

微信号复制成功

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