Python 数据分析实战:从数据读取到可视化的完整指南
在当今数据驱动的时代,Python 凭借其丰富的库和简洁的语法,成为了数据分析领域的热门工具。本文将通过完整的实战案例,带大家领略 Python 数据分析的魅力,内容涵盖数据读取、数据清洗、数据分析及数据可视化等核心环节。同时,会附上相关代码、直观的图片以及实用的链接,帮助大家更好地理解和实践。
1. 数据读取
在进行数据分析之前,我们首先需要将数据读取到 Python 环境中。本次实战将使用经典的鸢尾花数据集(Iris Dataset),该数据集包含 150 条记录,每条记录描述了鸢尾花的 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)以及所属的类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
我们可以使用pandas库来读取数据,pandas是 Python 中用于数据处理和分析的强大库。如果还没有安装pandas,可以使用以下命令进行安装:
pip install pandas
下面是读取鸢尾花数据集的代码:
import pandas as pd
# 从UCI机器学习库官网读取鸢尾花数据集
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
header=None)
# 设置列名
data.columns = ['sepal_length','sepal_width', 'petal_length', 'petal_width','species']
UCI 机器学习库官网链接提供了大量的公开数据集,非常适合用于数据分析和机器学习的练习。
读取数据后,我们可以使用head()方法查看数据的前几行,了解数据的基本结构:
print(data.head())
运行上述代码,得到的数据前几行展示如下:
| sepal_length | sepal_width | petal_length | petal_width | species |
| 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
2. 数据清洗
数据清洗是数据分析中至关重要的一步,它可以帮助我们处理缺失值、异常值以及重复数据等问题,确保后续分析的准确性。
2.1 检查缺失值
使用isnull()方法可以检查数据中是否存在缺失值,然后使用sum()方法统计每列缺失值的数量:
print(data.isnull().sum())
运行结果显示:
sepal_length 0
sepal_width 0
petal_length 0
petal_width 0
species 0
dtype: int64
可以看到,鸢尾花数据集中不存在缺失值。
2.2 检查重复数据
使用duplicated()方法检查数据中是否存在重复行,并使用sum()方法统计重复行的数量:
print(data.duplicated().sum())
运行结果为0,说明数据集中没有重复行。
虽然在本次数据集中没有发现缺失值和重复数据,但在实际项目中,数据清洗环节往往需要花费大量的时间和精力,更多关于数据清洗的方法可以参考pandas官方文档。
3. 数据分析
数据清洗完成后,我们可以开始对数据进行分析,探索数据中的规律和特征。
3.1 描述性统计
使用describe()方法可以快速获取数据的描述性统计信息,包括计数、均值、标准差、最小值、最大值以及分位数等:
print(data.describe())
运行结果如下:
| sepal_length | sepal_width | petal_length | petal_width | |
| count | 150.000000 | 150.000000 | 150.000000 | 150.000000 |
| mean | 5.843333 | 3.057333 | 3.758000 | 1.199333 |
| std | 0.828066 | 0.435866 | 1.764420 | 0.762238 |
| min | 4.300000 | 2.000000 | 1.000000 | 0.100000 |
| 25% | 5.100000 | 2.800000 | 1.600000 | 0.300000 |
| 50% | 5.800000 | 3.000000 | 4.350000 | 1.300000 |
| 75% | 6.400000 | 3.300000 | 5.100000 | 1.800000 |
| max | 7.900000 | 4.400000 | 6.900000 | 2.500000 |
从这些统计信息中,我们可以对数据的分布有一个初步的了解。
3.2 分组统计
我们可以按照species列对数据进行分组,然后计算每组数据的均值:
print(data.groupby('species').mean())
运行结果如下:
| species | sepal_length | sepal_width | petal_length | petal_width |
| Iris-setosa | 5.006 | 3.428 | 1.462 | 0.246 |
| Iris-versicolor | 5.936 | 2.770 | 4.260 | 1.326 |
| Iris-virginica | 6.588 | 2.974 | 5.552 | 2.026 |
通过分组统计,我们可以更清楚地看到不同种类鸢尾花在各个特征上的差异。
4. 数据可视化
数据可视化可以将数据以直观的图表形式展示出来,帮助我们更快速地理解数据中的信息和规律。我们使用matplotlib和seaborn库进行数据可视化,matplotlib是 Python 中最常用的绘图库,seaborn是基于matplotlib的高级绘图库,提供了更美观、更丰富的绘图样式。如果没有安装这两个库,可以使用以下命令进行安装:
pip install matplotlib seaborn
4.1 散点图
我们可以绘制花萼长度和花萼宽度的散点图,观察它们之间的关系:
import matplotlib.pyplot as plt
import seaborn as sns
sns.scatterplot(data=data, x='sepal_length', y='sepal_width', hue='species')
plt.title('Sepal Length vs Sepal Width')
plt.show()
运行上述代码可以得到不同种类的鸢尾花在花萼长度和花萼宽度上存在一定的分布差异。
4.2 箱线图
使用箱线图可以直观地展示数据的分布情况,我们绘制每种鸢尾花在各个特征上的箱线图:
data_melt = pd.melt(data, id_vars=['species'], var_name='measurement', value_name='value')
sns.boxplot(data=data_melt, x='species', y='value', hue='measurement')
plt.title('Box Plot of Iris Measurements by Species')
plt.xticks(rotation=45)
plt.show()
箱线图可以清晰地展示出数据的中位数、四分位数以及异常值,帮助我们更好地了解数据的分布特征。
总结
通过本次 Python 数据分析实战,我们完成了从数据读取、清洗、分析到可视化的整个流程。在实际工作中,数据分析的场景会更加复杂多样,但基本的流程和方法是相通的。希望本文能为大家学习 Python 数据分析提供一些帮助,更多关于 Python 数据分析的知识和案例,可以参考CSDN 数据分析专栏。如果在实践过程中有任何问题,欢迎在评论区交流讨论!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)