Python数据分析实战——从数据加载到可视化,新手也能上手的全流程解析

简介: 本文以学生成绩分析为案例,手把手讲解Python数据分析全流程:从用Pandas加载CSV/Excel数据,到用NumPy+Pandas清洗缺失值、异常值与重复值;再到分组统计、相关性分析等数据处理;最后用Matplotlib实现直方图、柱状图、热力图等可视化。全程代码实操、口语化讲解,并推荐官方文档与Kaggle等优质学习资源。(239字)

现在数据分析越来越火,不管是互联网行业、金融行业,还是传统行业,都需要用到数据分析来挖掘数据价值,而Python作为数据分析的首选语言,凭借其简洁的语法和丰富的第三方库,深受开发者的喜爱。很多新手想入门Python数据分析,但不知道从哪里开始,今天咱们就从最基础的数据加载开始,一步步讲解Python数据分析的全流程,包括数据清洗、数据处理、数据可视化,每个步骤都结合实际代码示例,口语化讲解,避免专业术语堆砌,同时分享几个实用的学习网址和数据集网址,帮大家快速上手Python数据分析,每一步都讲透,不灌水、不废话。
首先,咱们得明确,Python数据分析的核心库有哪些?其实最核心的就是三个:NumPy、Pandas、Matplotlib。NumPy主要用于数值计算,处理多维数组;Pandas主要用于数据清洗和数据处理,是数据分析的核心工具;Matplotlib主要用于数据可视化,把数据转换成直观的图表。这三个库是入门Python数据分析的必备工具,大家一定要熟练掌握。

在开始之前,咱们需要先安装这三个库,安装方法很简单,用pip命令就可以:pip install numpy pandas matplotlib 。安装完成后,就可以开始咱们的数据分析实战了。今天咱们以学生成绩数据分析为例,讲解从数据加载到可视化的全流程,这个案例比较贴近生活,新手也容易理解。

第一步,数据加载。数据加载是数据分析的第一步,也是最基础的一步。咱们平时接触的数据格式主要有CSV、Excel、TXT等,Pandas提供了专门的函数来加载这些格式的数据,最常用的就是read_csv()和read_excel()。

首先,咱们创建一个模拟的学生成绩CSV文件,包含学号、性别、年级、数学、英语、编程、统计学、缺勤次数等字段,然后用Pandas加载这个数据。代码如下:

import pandas as pd import numpy as np # 生成模拟学生成绩数据(50名学生,4门课程) np.random.seed(42) # 设置随机种子,保证每次生成的数据一致 data = { '学号': [f'S{i:03d}' for i in range(1, 51)], '性别': np.random.choice(['男', '女'], 50), '年级': np.random.choice(['大一', '大二', '大三', '大四'], 50), '数学': np.random.normal(75, 15, 50).round(1), '英语': np.random.normal(70, 18, 50).round(1), '编程': np.random.normal(80, 12, 50).round(1), '统计学': np.random.normal(65, 20, 50).round(1), '缺勤次数': np.random.randint(0, 10, 50) } # 保存为CSV文件 df = pd.DataFrame(data) df.to_csv('student_scores.csv', index=False) # 加载CSV文件 df = pd.read_csv('student_scores.csv') # 查看数据的基本信息 print("数据基本信息:") df.info() print("\n数据前5行:") print(df.head())

这段代码中,我们首先用NumPy生成了50名学生的模拟成绩数据,然后用Pandas的DataFrame保存为CSV文件,再用read_csv()函数加载这个文件。df.info()可以查看数据的基本信息,比如数据类型、非空值数量等;df.head()可以查看数据的前5行,快速了解数据的结构。

这里有几个注意点,大家要记住:第一,如果CSV文件的编码格式有问题(比如中文乱码),可以在read_csv()中添加encoding参数,比如encoding='utf-8'或者encoding='gbk';第二,如果Excel文件有多个工作表,可以用read_excel()的sheet_name参数指定工作表名称或索引;第三,加载数据后,一定要先查看数据的基本信息,了解数据的结构和缺失情况,为后续的数据清洗做准备。

第二步,数据清洗。数据清洗是数据分析中最耗时、也最关键的一步,因为实际工作中的数据往往存在缺失值、异常值、重复值等问题,如果不进行清洗,会影响后续的分析结果。咱们就针对上面的学生成绩数据,进行数据清洗。

首先,处理缺失值。咱们的模拟数据中没有缺失值,但实际数据中很常见。Pandas中查看缺失值的方法是df.isnull().sum(),可以查看每列的缺失值数量。处理缺失值的方法主要有两种:删除缺失值和填充缺失值。删除缺失值用df.dropna(),填充缺失值用df.fillna()。比如,如果数学成绩有缺失值,我们可以用数学成绩的平均值填充:

查看缺失值 print(df.isnull().sum()) # 用数学成绩的平均值填充缺失值 df['数学'] = df['数学'].fillna(df['数学'].mean()) # 删除所有含有缺失值的行 df = df.dropna()

然后,处理异常值。异常值就是不符合常理的数据,比如学生的成绩不可能是负数,也不可能超过100分,缺勤次数也不可能是负数。咱们可以用条件判断来筛选异常值,然后进行处理:

筛选数学成绩异常值(小于0或大于100) math_abnormal = df[(df['数学'] < 0) | (df['数学'] > 100)] print("数学成绩异常值:") print(math_abnormal) # 处理异常值:将异常值替换为数学成绩的平均值 df.loc[(df['数学'] < 0) | (df['数学'] > 100), '数学'] = df['数学'].mean() # 处理缺勤次数异常值(小于0) df.loc[df['缺勤次数'] < 0, '缺勤次数'] = 0

接下来,处理重复值。重复值就是完全相同的行,会影响分析结果的准确性。查看重复值用df.duplicated(),删除重复值用df.drop_duplicates():

查看重复值 print("重复值数量:", df.duplicated().sum()) # 删除重复值 df = df.drop_duplicates()

最后,数据类型转换。有时候加载的数据类型会不符合需求,比如缺勤次数应该是整数类型,但可能被加载成浮点数类型,这时候需要进行数据类型转换:

查看数据类型 print(df.dtypes) # 将缺勤次数转换为整数类型 df['缺勤次数'] = df['缺勤次数'].astype(int)

数据清洗完成后,我们就得到了一份干净、规范的数据,接下来就可以进行数据处理和分析了。

第三步,数据处理与分析。数据处理主要是对数据进行筛选、排序、分组、聚合等操作,挖掘数据中的规律和信息。咱们针对学生成绩数据,进行几个常见的分析:

  1. 各课程成绩的基本统计分析。用df.describe()可以查看各数值型字段的基本统计信息,比如平均值、标准差、最小值、最大值等:

各课程成绩基本统计分析 score_stats = df[['数学', '英语', '编程', '统计学']].describe() print("各课程成绩基本统计:") print(score_stats)

从统计结果中,我们可以看到各课程的平均分、最高分、最低分等信息,比如编程成绩的平均分最高,统计学成绩的标准差最大,说明统计学成绩的波动最大,可能反映了课程难度的差异。

  1. 不同性别学生的成绩对比。我们可以按性别分组,计算各课程的平均分,然后进行对比:

按性别分组,计算各课程平均分 gender_mean = df.groupby('性别')[['数学', '英语', '编程', '统计学']].mean() print("不同性别平均成绩对比:") print(gender_mean)

通过这个分析,我们可以看出男生和女生在不同课程上的优势差异,比如可能男生在编程和数学上平均分更高,女生在英语上平均分更高。

  1. 缺勤次数与成绩的相关性分析。我们可以计算缺勤次数与各课程成绩的相关系数,看看缺勤次数是否会影响成绩:

计算缺勤次数与各课程成绩的相关系数 corr_data = df[['缺勤次数', '数学', '英语', '编程', '统计学']] corr_matrix = corr_data.corr() print("缺勤次数与各课程成绩相关性:") print(corr_matrix['缺勤次数'].drop('缺勤次数'))

相关系数的取值范围是[-1, 1],如果相关系数为负数,说明两者呈负相关,即缺勤次数越多,成绩越低;如果相关系数为正数,说明两者呈正相关;如果接近0,说明两者几乎没有相关性。从实际结果来看,缺勤次数与各课程成绩应该呈负相关,这也符合常理。

  1. 各年级学生的成绩分布分析。我们可以按年级分组,查看各年级学生的成绩分布情况:

按年级分组,计算各课程平均分 grade_mean = df.groupby('年级')[['数学', '英语', '编程', '统计学']].mean() print("各年级平均成绩:") print(grade_mean)

通过这个分析,我们可以看出不同年级学生的成绩差异,比如可能大四学生的成绩平均分更高,因为他们的学习经验更丰富。

第四步,数据可视化。数据可视化是将分析结果转换成直观的图表,让人们更容易理解数据中的规律。Matplotlib是Python中最常用的数据可视化库,我们可以用它绘制直方图、柱状图、热力图、箱线图等多种图表。

  1. 各课程成绩分布直方图。直方图可以展示数据的分布情况,我们用它来展示各课程成绩的分布:

import matplotlib.pyplot as plt # 设置中文字体,避免中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘制各课程成绩分布直方图 plt.figure(figsize=(14, 6)) for i, course in enumerate(['数学', '英语', '编程', '统计学']): plt.subplot(1, 4, i+1) plt.hist(df[course], bins=10, color=f'C{i}', alpha=0.7) plt.title(f'{course}成绩分布') plt.xlabel('分数') plt.ylabel('人数') plt.tight_layout() # 调整子图间距 plt.savefig('course_score_distribution.png') # 保存图片 plt.show()

这段代码中,我们用plt.hist()绘制直方图,bins参数表示分组的数量,alpha参数表示透明度,plt.tight_layout()用于调整子图间距,避免图表重叠。通过这个直方图,我们可以清晰地看到各课程成绩的分布情况,比如编程成绩集中在70-90分,统计学成绩分布比较分散。

  1. 不同性别平均成绩对比柱状图。柱状图适合用于对比不同类别的数据,我们用它来对比男生和女生的平均成绩:

绘制不同性别平均成绩对比柱状图 gender_mean.plot(kind='bar', figsize=(10, 6), color=['#5DA5DA', '#FAA43A']) plt.title('不同性别平均成绩对比') plt.ylabel('平均分') plt.xticks(rotation=0) # 旋转x轴标签,避免重叠 plt.legend(title='课程', bbox_to_anchor=(1.05, 1), loc='upper left') # 调整图例位置 plt.tight_layout() plt.savefig('gender_score_comparison.png') plt.show()

这里我们用了Pandas的plot()方法,kind='bar'表示绘制柱状图,比直接用Matplotlib更简洁。通过这个柱状图,我们可以直观地看到男生和女生在各课程上的平均分差异。

  1. 缺勤次数与成绩相关性热力图。热力图适合用于展示相关性矩阵,我们用它来展示缺勤次数与各课程成绩的相关性:

绘制热力图 plt.figure(figsize=(10, 6)) plt.imshow(corr_matrix, cmap='coolwarm', interpolation='none') plt.colorbar(label='相关系数') plt.xticks(range(len(corr_matrix.columns)), corr_matrix.columns, rotation=45) plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns) # 在热力图上添加相关系数数值 for i in range(len(corr_matrix.columns)): for j in range(len(corr_matrix.columns)): plt.text(j, i, f'{corr_matrix.iloc[i, j]:.2f}', ha='center', va='center', color='black') plt.title('缺勤次数与成绩相关性热力图') plt.tight_layout() plt.savefig('absence_score_correlation.png') plt.show()

热力图的颜色越红,表示正相关性越强,颜色越蓝,表示负相关性越强,通过这个热力图,我们可以清晰地看到缺勤次数与各课程成绩的负相关关系。

  1. 各年级课程成绩箱线图。箱线图可以展示数据的四分位数、异常值等信息,我们用它来展示各年级学生的成绩分布:

绘制各年级课程成绩箱线图 grade_data = pd.melt(df, id_vars=['年级'], value_vars=['数学', '英语', '编程', '统计学'], var_name='课程', value_name='分数') plt.figure(figsize=(12, 7)) plt.boxplot([grade_data[grade_data['年级'] == grade]['分数'] for grade in df['年级'].unique()], labels=df['年级'].unique()) plt.title('各年级课程成绩箱线图') plt.ylabel('分数') plt.xlabel('年级') plt.tight_layout() plt.savefig('grade_score_boxplot.png') plt.show()

通过箱线图,我们可以看到各年级成绩的中位数、四分位数范围,以及是否存在异常值,比如某个年级的统计学成绩存在异常高的分数。

到这里,咱们的Python数据分析全流程就完成了,从数据加载、数据清洗,到数据处理、数据可视化,每一步都有实际的代码示例,大家可以跟着代码一步步操作,很快就能上手。

接下来,咱们分享几个实用的学习网址和数据集网址,帮大家进一步提升:

  1. Pandas官方文档:https://pandas.pydata.org/docs/ ,这是Pandas的官方文档,内容非常全面,从基础的DataFrame操作到高级的数据处理,都有详细的讲解和示例,是学习Pandas的首选网址。

  2. Matplotlib官方文档:https://matplotlib.org/stable/index.html ,Matplotlib的官方文档,包含各种图表的绘制方法,还有很多示例代码,大家可以根据自己的需求查找对应的图表绘制方法。

  3. Kaggle数据集平台:https://www.kaggle.com/datasets ,Kaggle是全球最大的数据分析平台之一,上面有大量的公开数据集,涵盖各行各业,大家可以下载数据集进行实战练习,提升自己的数据分析能力。

最后,咱们总结一下。Python数据分析的核心流程就是“加载数据—清洗数据—处理分析—可视化”,其中数据清洗是最耗时、最关键的一步,只有做好数据清洗,才能保证分析结果的准确性。NumPy、Pandas、Matplotlib这三个核心库,大家一定要熟练掌握,它们是数据分析的基础。

新手入门的时候,不要急于求成,先从基础的函数用法开始,多动手实践,结合实际案例练习,比如学生成绩分析、房价分析、用户行为分析等,这些案例都比较贴近生活,容易理解。另外,遇到问题的时候,多查阅官方文档和学习资料,不要轻易放弃,坚持下去,就能慢慢掌握Python数据分析的技巧。

可能有同学会问,除了这三个核心库,还有没有其他常用的数据分析库?其实还有Seaborn、Scikit-learn等,Seaborn是基于Matplotlib的可视化库,语法更简洁,图表更美观;Scikit-learn是机器学习库,适合进行数据预测分析。大家在掌握了核心库之后,可以再学习这些扩展库,进一步提升自己的数据分析能力。

另外,在实际工作中,数据分析不仅仅是技术层面的操作,还需要结合业务场景,理解数据背后的业务逻辑,这样才能挖掘出有价值的信息,为业务决策提供支持。所以,大家在学习技术的同时,也要注重培养自己的业务思维,这样才能成为一名优秀的数据分析师。

相关文章
|
5天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
419 125
|
8天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
706 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
5天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
410 123
|
3天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
305 108
|
4天前
|
存储 人工智能 数据可视化
别再手动复制 Skill 了:多 Agent 时代的 Skill 管理方案
多 Agent 场景下 Skill 的统一管理与同步。
252 125
|
18天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
12天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
924 0
|
13天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)