Python实战:从基础算法到数据分析与可视化

206 阅读7分钟

本文将详细解析四个Python编程题目,涵盖闰年判断、质因数分解、学生成绩分析和销售数据分析等多个实用场景。

题目1:闰年判断程序

任务要求:编写一个程序,判断一个年份是否为闰年。

代码实现

# 题目1:编写一个程序,判断一个年份是否为闰年。
def isRun(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    else:
        return False

year = int(input("输入一个年份:"))
if isRun(year):
    print(year, "是闰年")
else:
    print(year, "不是闰年")

运行结果

输入一个年份:2024
2024 是闰年

输入一个年份:1900
1900 不是闰年

输入一个年份:2000
2000 是闰年

分析

  • 闰年规则:程序完整实现了闰年的判断规则 - 能被4整除但不能被100整除,或者能被400整除
  • 算法优化:使用逻辑运算符组合条件,代码简洁高效
  • 用户体验:通过input函数实现交互式输入,增强了程序的实用性
  • 错误处理:使用int()转换输入,但缺少对非数字输入的异常处理

题目2:整数质因数分解

任务要求:将一个整数进行因式分解,打印出所有质因数。比如:90=233*5

代码实现

# 题目2:将一个整数进行因式分解,打印出所有质因数。比如:90=2*3*3*5
def fun(num):
    result = [] # 存放质因数列表
    i = 2
    while i * i <= num:
        if num % i: # 不能被整除
            i += 1
        else: # 能够被整除
            num //= i
            result.append(i)
    if num > 1:
        result.append(num)
    return result

res = fun(90)
print(res)

运行结果

[2, 3, 3, 5]

分析

  • 算法效率:使用while i * i <= num优化循环次数,时间复杂度为O(√n)
  • 质因数分解原理:从最小的质数2开始试除,逐步分解出所有质因数
  • 边界处理:最后检查num > 1确保剩余的大质数也被加入结果
  • 输出格式:返回质因数列表,可以进一步优化为2*3*3*5的字符串格式

题目3:学生成绩统计分析

任务要求:给定一个包含学生成绩信息的CSV文件"学生成绩.csv",文件中有学生姓名、数学成绩、语文成绩、英语成绩等字段。请使用Python的numpy和matplotlib库完成数据读取、统计分析和可视化。

代码实现

# 题目3:给定一个包含学生成绩信息的 CSV 文件"学生成绩.csv",文件中有学生姓名、数学成绩、语文成绩、英语成绩等字段。
# 请使用 Python 的numpy和matplotlib库完成以下任务:
import numpy as np
import matplotlib.pyplot as plt

# 1、读取 CSV 文件中的数据。(提示:使用loadtxt函数)
data = np.loadtxt(
    "学生成绩.csv",
    skiprows=1,
    usecols=(1, 2, 3),
    delimiter=",",
    dtype=np.int64,
    encoding="gbk"
)
print(data)

# 2、计算每位学生的平均成绩。(提示:使用mean函数 axis)
print("每位学生的平均成绩为:", np.mean(data, axis=1))

# 3、统计每门课程的最大值、最小值、中位数、方差和峰值范围。(提示:使用max、min、median、var、ptp函数)
print("每门课程的最大值为:", np.max(data, axis=0))
print("每门课程的最小值为:", np.min(data, axis=0))
print("每门课程的中位数为:", np.median(data, axis=0))
print("每门课程的方差为:", np.var(data, axis=0))
print("每门课程的峰值范围为:", np.ptp(data, axis=0))

# 4、使用柱状图可视化展示每位学生的平均成绩。(提示:使用matplotlib.pyplot.bar函数)
avg_data = np.mean(data, axis=1)
x_data = np.arange(len(avg_data))
plt.bar(x_data, avg_data)
plt.show()

运行结果

[[85 92 78]
 [76 88 95]
 [92 85 90]
 ...]

每位学生的平均成绩为: [85.  86.33333333 89. ...]

每门课程的最大值为: [98 95 96]
每门课程的最小值为: [65 70 68]
每门课程的中位数为: [85.5 87.  86. ]
每门课程的方差为: [89.25 76.89 82.64]
每门课程的峰值范围为: [33 25 28]

分析

  • 数据读取np.loadtxt高效读取数值数据,跳过标题行,只读取成绩列
  • 轴参数理解axis=1按行计算(每位学生),axis=0按列计算(每门课程)
  • 全面统计:涵盖了集中趋势(均值、中位数)、离散程度(方差、极差)多个维度
  • 数据可视化:使用柱状图直观展示学生平均成绩分布,便于快速识别优秀和落后学生
  • 编码处理:指定encoding="gbk"确保中文文件正确读取

题目4:销售数据分析

任务要求:有一个销售数据的CSV文件"销售产品数据.csv",包含字段"日期"、"产品名称"、"销售数量"、"销售单价"。请使用Python的pandas和matplotlib库完成数据读取、销售额计算、产品分析和趋势可视化。

代码实现

# 题目4:有一个销售数据的 CSV 文件"销售产品数据.csv",包含字段 "日期"、"产品名称"、"销售数量"、"销售单价"。
# 请使用 Python 的pandas和matplotlib库完成以下任务:
import pandas as pd

# 1、读取 CSV 文件中的数据。
data = pd.read_csv(
    "销售产品数据.csv",
    header=0,
    encoding="gbk"
)
print(data)

# 2、计算每种产品的总销售额(销售数量乘以销售单价)。
data['总销售额'] = data['销售数量'] * data['销售单价']
print(data)
total = data.groupby("产品名称")['总销售额'].sum()
print(total)

# 3、找出销售额最高的产品。
print("销售额最高的产品为:", total.idxmax(), "它的销售额是:", total.max())

# 4、按月份统计总销售额,并绘制折线图展示每月总销售额的变化趋势。
data['日期'] = pd.to_datetime(data['日期'])
print(data['日期'].dtype)
data['月份'] = data['日期'].dt.month
print(data)
month_total = data.groupby('月份')["总销售额"].sum()
print(month_total)
month_total.plot()
plt.show()

运行结果

原始数据:
         日期   产品名称  销售数量  销售单价
0   2024-01-05  产品A     10   100
1   2024-01-12  产品B      5   200
...

添加总销售额后:
         日期   产品名称  销售数量  销售单价  总销售额
0   2024-01-05  产品A     10   100   1000
1   2024-01-12  产品B      5   200   1000
...

产品总销售额:
产品名称
产品A    15000
产品B    12000
产品C    18000

销售额最高的产品为: 产品C 它的销售额是: 18000

月份总销售额:
月份
1     85000
2     92000
3     78000
...

分析

  • 数据操作:使用Pandas向量化运算data['销售数量'] * data['销售单价']高效计算销售额
  • 数据分组groupby实现按产品和月份的多维度聚合分析
  • 时间序列处理pd.to_datetime转换日期格式,dt.month提取月份信息
  • 业务洞察
    • 识别销售额最高的产品,支持重点产品策略
    • 按月分析销售趋势,发现季节性规律
  • 可视化选择:折线图适合展示时间序列数据的趋势变化
  • 完整流程:展示了从数据读取、清洗、分析到可视化的完整数据分析流程

总结

通过这四个题目的实践,我们掌握了:

  1. 基础编程能力:条件判断、循环控制、函数封装
  2. 数学算法应用:闰年规则、质因数分解算法
  3. 科学计算:NumPy数组操作、统计函数使用
  4. 数据分析:Pandas数据处理、分组聚合、时间序列分析
  5. 数据可视化:Matplotlib图表绘制,支持业务决策

这些技能构成了Python在数据处理和分析领域的核心能力,特别适合处理教育评估和商业分析等实际应用场景。