How to Build a Simple Data Analyzer in Python with Pandas

TL;DR · AI 摘要
本文提供了一个使用Python和Pandas构建简单数据分析师的教程,适合初学者入门数据分析。
核心要点
- 使用Pandas的read_csv函数加载CSV数据集
- 通过describe()方法生成统计摘要
- Matplotlib可创建基础数据可视化图表
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 构建数据分析师教程
- 环境设置
- 安装Python/pandas/Matplotlib
- 数据处理流程
- 数据加载
- 统计分析
- 数据可视化
- 实践案例
- 学生绩效数据集分析
金句 / Highlights
值得收藏与分享的关键句。
Pandas的read_csv函数可直接加载CSV文件进行分析
describe()方法能自动生成数值型列的统计摘要
Matplotlib的plot()函数可创建基础折线图

数据分析在初次接触时可能会显得复杂。你可能会想象到大型数据库、高级数学和复杂的机器学习算法。
但许多有用的数据分析任务其实始于更简单的内容:加载数据集、提出问题,并使用 Python 寻找答案。
在本教程中,你将使用 Python 和 Pandas 构建一个简单的数据分析师。你将使用一个虚构的学生表现数据集,并学习如何加载数据、检查数据、计算统计信息、筛选记录、分组信息以及创建基本可视化。
到教程结束时,你将拥有一个可用于分析多种类型 CSV 数据集的可复用基础。
先决条件
在跟随本教程之前,你应该准备好一些基本的 Python 技能和工具。你不需要有高级编程或数据分析经验,但应该熟悉以下内容:
- Python 变量和基本数据类型,如字符串和数字。
- 导入库和调用函数。
- 使用列表和对数据进行基本操作。
如果你是 Python 新手,建议在继续之前先学习这些基础知识。如果你想深入学习,这里有一个交互式 Python 课程可以帮助你入门。
此外,请确保已安装以下内容:
- Python: Python 3 或兼容的 Python 安装。
- pandas: 我们将使用的 Python 库,用于加载、筛选、分组和分析数据。
- Matplotlib: 我们将使用的库,用于创建可视化图表。
- 代码编辑器或 IDE: 如 VS Code、PyCharm 或简单文本编辑器,以及终端访问权限。
你可以通过在终端中运行以下命令安装 pandas 和 Matplotlib:
pip install pandas matplotlib你还需要一个文件夹来保存 Python 脚本和本教程中将创建的 students.csv 数据集。
一切准备就绪后,你就可以使用 Python 开始分析数据了!
我们将涵盖的内容:
设置环境
安装 pandas
如果你尚未安装 pandas,请打开终端并运行:
pip install pandas matplotlib我们将使用 pandas 进行数据分析,使用 Matplotlib 创建简单可视化。
你可以通过以下代码验证安装:
import pandas as pd
import matplotlib.pyplot as plt
print(pd.__version__)如果 Python 输出版本号,说明你已准备就绪。
创建数据集
创建 CSV 文件
我们首先创建一个名为 students.csv 的文件并添加一些数据。
我们在此处使用的数据集是虚构的,包含 9 至 12 年级共 12 条学生记录。每一行代表一个学生,每一列描述不同的属性:
name:学生的姓名。grade:学生当前的年级。study_hours:学生学习的小时数。attendance:学生的出勤率百分比。score:学生的考试成绩,按 0-100 分记录。
例如,Ava在9年级,学习了4.5小时,出勤率为95%,考试成绩为82分。这些示例记录让我们可以探讨诸如学习时间是否与考试成绩相关,以及不同年级的平均成绩如何比较等问题。
由于这些数据是虚构的且样本量较小,我们观察到的任何模式仅具有说明性,不应将其视为对一般学生的证据。
但我们的数据将提供足够的信息来进行几种有用的分析。数据如下:
name,grade,study_hours,attendance,score
Ava,9,4.5,95,82
Liam,9,6.0,98,91
Sophia,10,3.5,89,76
Noah,10,7.0,99,94
Emma,11,5.5,93,88
Oliver,11,8.0,97,96
Mia,12,4.0,91,79
Ethan,12,6.5,96,90
Isabella,9,7.5,100,97
Lucas,10,2.5,85,68
Amelia,11,6.0,94,92
James,12,5.0,90,84使用Pandas加载数据集
读取CSV文件
通过导入pandas开始Python程序:
import pandas as pd然后加载CSV文件:
data = pd.read_csv("students.csv")read_csv()函数会读取CSV文件并将其转换为pandas DataFrame。
DataFrame是一种类似表格的数据结构,包含行和列。你可以将其视为可编程的电子表格。
让我们显示数据集:
print(data)你应该在终端中看到学生记录的输出。
数据探索
在分析数据集之前,了解你正在处理的数据很有用。
查看前几行数据
head()方法会显示前五行:
print(data.head())你也可以指定要显示的行数:
print(data.head(3))检查数据集大小
使用shape来获取行数和列数:
print(data.shape)结果将是:
(12, 5)这意味着我们的数据集包含12行和5列。
查看列名
你可以通过以下方式查看列名:
print(data.columns)在程序后续需要引用列时,这会很有用。
检查数据类型
使用info()来查看每列的信息:
data.info()这有助于你识别列中包含的是整数、小数、文本还是其他类型的数据。
计算基础统计信息
Pandas使得在不手动编写数学公式的情况下计算统计信息变得简单。
计算平均分
我们可以使用以下代码计算平均分:
average_score = data["score"].mean()
print(f"Average score: {average_score:.2f}")mean()方法用于计算算术平均值。
:.2f格式说明告诉Python以两位小数显示结果。
查找最高分和最低分
使用max()和min():
highest_score = data["score"].max()
lowest_score = data["score"].min()
print(f"Highest score: {highest_score}")
print(f"Lowest score: {lowest_score}")你也可以查找中位数:
median_score = data["score"].median()
print(f"Median score: {median_score}")中位数是将分数按顺序排列后的中间值。
生成统计摘要
Pandas还提供了便捷的describe()方法:
print(data["score"].describe())这将生成包括以下统计信息的摘要:
- 数量(Count)
- 平均值(Mean)
- 标准差(Standard deviation)
- 最小值(Minimum)
- 25%分位数(25th percentile)
- 中位数(Median)
- 75%分位数(75th percentile)
- 最大值(Maximum)
你可以为所有数值列生成摘要:
print(data.describe())这通常是探索不熟悉数据集时使用的第一个命令之一。
筛选数据
pandas 最有用的功能之一是根据条件选择行的能力。
查找高分学生
假设我们想找到得分至少为 90 的学生:
high_scores = data[data["score"] >= 90]
print(high_scores)表达式:
data["score"] >= 90为每一行创建一个布尔条件。pandas 会保留条件为 True 的行。
查找学习时间超过五小时的学生
我们可以使用学习时间执行相同的操作:
frequent_studiers = data[data["study_hours"] > 5]
print(frequent_studiers)你也可以组合多个条件。
例如,假设我们想查找学习时间超过五小时且出勤率高于 95% 的学生:
students = data[
(data["study_hours"] > 5) &
(data["attendance"] > 95)
]
print(students)在 pandas 中组合条件时,使用 & 表示 AND,使用 | 表示 OR。每个条件都应放在括号中。
查找特定学生
使用 `idxmax()`
有时候你不仅仅想知道最高值,还想了解包含该值的记录。
例如:
top_student_index = data["score"].idxmax()
top_student = data.loc[top_student_index]
print(top_student)idxmax() 返回包含最大值的行的索引。
我们也可以对学习时间执行相同操作:
most_studious_index = data["study_hours"].idxmax()
most_studious_student = data.loc[most_studious_index]
print(most_studious_student)这使你可以将统计结果与原始记录关联起来。
分组数据
当数据集包含类别时,分组功能变得特别有用。
在我们的数据集中,学生属于不同年级。
按年级计算平均分
我们可以计算每个年级的平均分:
average_by_grade = data.groupby("grade")["score"].mean()
print(average_by_grade)这告诉我们不同年级之间的平均分差异。
我们可以使输出更易于阅读:
average_by_grade = (
data.groupby("grade")["score"]
.mean()
.round(2)
)
print(average_by_grade)多个统计指标
你可以一次计算多个统计指标:
grade_summary = data.groupby("grade")["score"].agg(
["mean", "min", "max", "count"]
)
print(grade_summary)这会为每个年级生成包含平均值、最小值、最大值和学生人数的汇总信息。
分析学习时间
我们还可以研究学习时间和分数之间的关系。
计算相关性
pandas 提供了 corr() 方法:
correlation = data["study_hours"].corr(data["score"])
print(f"Correlation: {correlation:.2f}")相关性值通常在 -1 到 1 之间。
接近 1 的值表示更强的正线性关系,接近 -1 的值表示更强的负线性关系。接近 0 的值表示线性关系较弱。
然而,相关性 并不 能证明一个变量导致另一个变量。例如,如果在这个数据集中学习时间和分数相关,这并不能证明学习更多直接导致分数更高。
创建可视化
数字很有用,但可视化可以帮助更容易地识别模式。
创建散点图
我们将创建一个显示学习时间和考试分数的散点图:
import matplotlib.pyplot as plt
plt.scatter(data["study_hours"], data["score"])
plt.xlabel("Study Hours")
plt.ylabel("Test Score")
plt.title("Study Hours vs. Test Scores")
plt.show()每个点代表一名学生。
x轴表示学习时间,y轴表示测试分数。
你可能会注意到,随着学习时间的增加,点是否呈现出总体向上移动的趋势。
这应该就是呈现的效果:

创建条形图
我们还可以可视化每个年级的平均分:
average_by_grade = data.groupby("grade")["score"].mean()
average_by_grade.plot(kind="bar")
plt.xlabel("Grade")
plt.ylabel("Average Score")
plt.title("Average Score by Grade")
plt.show()条形图使不同组之间的平均值比较更加直观。
这就是条形图应该呈现的效果:

构建完整的分析器
现在让我们将主要思路整合成一个完整的程序。
import pandas as pd
import matplotlib.pyplot as plt
# 加载数据集
data = pd.read_csv("students.csv")
# 基本信息
print("Dataset shape:")
print(data.shape)
print("\nFirst five rows:")
print(data.head())
# 分数统计
average_score = data["score"].mean()
median_score = data["score"].median()
highest_score = data["score"].max()
lowest_score = data["score"].min()
print("\nScore Statistics")
print(f"Average: {average_score:.2f}")
print(f"Median: {median_score:.2f}")
print(f"Highest: {highest_score}")
print(f"Lowest: {lowest_score}")
# 90分及以上的学生
high_scores = data[data["score"] >= 90]
print("\nStudents with scores of 90 or higher:")
print(high_scores[["name", "score"]])
# 按年级的平均分
average_by_grade = (
data.groupby("grade")["score"]
.mean()
.round(2)
)
print("\nAverage Score by Grade:")
print(average_by_grade)
# 学习时间和分数的相关性
correlation = data["study_hours"].corr(data["score"])
print(f"\nStudy Hours vs. Score Correlation: {correlation:.2f}")
# 散点图
plt.scatter(data["study_hours"], data["score"])
plt.xlabel("Study Hours")
plt.ylabel("Test Score")
plt.title("Study Hours vs. Test Scores")
plt.show()现在这个程序能够执行一个完整但小型的数据分析工作流程。
提高分析器的可复用性
下一步有用的改进是将重复的操作转换为函数。
创建分析函数
我们不必将所有内容直接写在主程序中,而是可以创建一个函数:
def analyze_scores(data):
average = data["score"].mean()
median = data["score"].median()
highest = data["score"].max()
lowest = data["score"].min()
print(f"Average score: {average:.2f}")
print(f"Median score: {median:.2f}")
print(f"Highest score: {highest}")
print(f"Lowest score: {lowest}")然后通过以下方式调用:
analyze_scores(data)这使得代码更容易与其他DataFrame复用。
创建获取高分学生函数
我们还可以创建一个返回高分学生的函数:
def get_top_students(data, minimum_score=90):
return data[data["score"] >= minimum_score][
["name", "grade", "score"]
]现在我们可以随时更改阈值:
print(get_top_students(data, 95))处理缺失数据
现实世界的数据集很少像我们的示例那样干净。你可能会偶尔遇到缺失值。
你可以使用以下方法检查缺失值:
print(data.isnull().sum())这会告诉你每列中存在多少个缺失值。
例如,你可以通过以下方式删除包含缺失值的行:
clean_data = data.dropna()或者,根据数据集和缺失值的含义,你可能需要替换缺失值:
data["score"] = data["score"].fillna(data["score"].mean())你不应该自动用平均值替换每个缺失值。适当的方法取决于缺失数据所代表的内容以及你试图分析的内容。
导出结果
分析数据集后,你可能想要保存结果。
例如:
average_by_grade.to_csv("average_scores_by_grade.csv")你也可以保存筛选后的记录:
high_scores.to_csv("high_scoring_students.csv", index=False)index=False参数可以防止pandas将DataFrame的索引作为额外列添加。
需要避免的常见错误
忘记导入库
确保已导入所需的库:
import pandas as pd
import matplotlib.pyplot as plt否则,Python将不知道pd或plt的含义。
使用错误的列名
列名必须与你的数据集匹配。
例如,如果列名为study_hours,以下写法将无效:
data["study time"]你可以始终通过以下方式检查实际的列名:
print(data.columns)混淆相关性与因果关系
相关性可以识别变量之间的关系,但不能证明一个变量导致了另一个变量。
随着你处理更大更复杂的數據集,这种区别变得越来越重要。
在理解数据之前进行分析
立即计算统计信息可能很诱人。但首先应检查数据集。
有用的初始命令包括:
data.head()
data.shape
data.info()
data.describe()
data.isnull().sum()了解数据的结构和质量有助于避免得出错误的结论。
下一步该怎么做
你构建的分析器是故意保持简单的,但相同的流程可以应用于更大的数据集。
你可以将其扩展为:
- 分析销售数据
- 跟踪网站流量
- 研究调查反馈
- 分析营销活动
- 分析体育统计数据
- 探索金融数据集
- 跟踪应用程序或客户数据
你还可以添加更高级的功能,如交互式图表、命令行参数、自动生成报告或机器学习模型。
例如,你可以让用户输入CSV文件名,而不是硬编码文件名:
filename = input("Enter the CSV filename: ")
data = pd.read_csv(filename)
print(data.head())现在,相同的程序可以分析不同的CSV文件。
最后的想法
你不需要复杂的算法就可以开始处理数据。借助Python、pandas和相对较小的数据集,你已经可以执行有意义的分析。
在本教程中,你学习了如何:
- 使用 pandas 加载 CSV 数据
- 探索 DataFrame
- 计算统计信息
- 过滤行
- 查找特定记录
- 对数据进行分组
- 计算相关性
- 创建可视化图表
- 处理缺失值
- 导出分析结果
- 使用函数组织分析
下一步最重要的事情是使用不同的数据集进行练习。一旦你熟悉了使用 pandas 加载、探索、清理和分析数据,就可以开始构建更复杂的分析项目。
编码愉快!
- * *
- * *
免费学习编程。freeCodeCamp 的开源课程已帮助超过 40,000 人成为开发者。立即开始