Python编程与数据分析实战:从基础算法到数据处理

71 阅读3分钟

掌握字符串处理、数值计算与数据分析的综合应用

数字运算与字符串处理

题目

输入一个整数n,计算该整数各位数字之积与各位数字之和的差。

代码

# 题目 1:输入一个整数n,计算该整数各位数字之积与各位数字之和的差。
# 例如:n = 234, result = 15
nums_sum = 0  # 存放各位数的和
nums_prod = 1  # 各位数的积
num = input("输入一个整数:")
if len(num) == 0:  # 如果是空字符串
    print("输入有误")
nums_sum = sum([int(char) for char in num])  # 计算各位数字之和
# 计算各位数字之乘积
for char in num:
    nums_prod *= int(char)
print(f"{num}的各位数之和为{nums_sum}")
print(f"{num}的各位数之积为{nums_prod}")
print(f"{num}的各位数之积与各位数之和的差为{nums_prod-nums_sum}")

运行结果

输入一个整数:234
234的各位数之和为9
234的各位数之积为24
234的各位数之积与各位数之和的差为15

字符串处理应用

题目

给定一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。

代码

# 题目 2:给定一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
def last_word_length(s):
    s = s.strip() # 去除掉字符串前后的空格
    if s == "":# 如果为空字符串
        return 0
    ls = s.split()# 对字符串进行分割
    return len(ls[-1])

s1 = "Hello World"
s2 = "luffy is still joyboy"
print(f"{s1}最后一个单词的长度为{last_word_length(s1)}")
print(f"{s2}最后一个单词的长度为{last_word_length(s2)}")

共享单车骑行数据分析

题目

"共享单车数据.csv"包含字段:"日期""时段(早/中/晚)""骑行次数""平均骑行时长(分钟)""天气(晴/雨/阴)"。请使用pandas和matplotlib完成数据分析任务。

代码

# 题目 3:共享单车骑行数据分析
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(
    "共享单车数据.csv",
    encoding="utf-8"
)
df['日期'] = pd.to_datetime(df['日期'])
print(df['日期'].dtype)

# 2. 按 "天气" 和 "时段" 双重分组,计算不同天气、不同时段的平均骑行次数
temp = df.groupby(["天气(晴/雨/阴)", "时段(早/中/晚)"])['骑行次数'].mean().reset_index()
print(temp)

# 3. 提取 "日期" 中的月份,统计每个月的总骑行次数,绘制柱状图展示月度差异
df['月份'] = df['日期'].dt.month  # 月份
print(df)
month_counts = df.groupby('月份')['骑行次数'].mean()
print(month_counts)
plt.bar(month_counts.index, month_counts)
plt.show()

# 4. 计算 "平均骑行时长" 与 "骑行次数" 的相关系数
corr = df['平均骑行时长(分钟)'].corr(df['骑行次数'])
print('"平均骑行时长" 与 "骑行次数" 的相关系数为', corr)

# 5. 找出 "骑行次数" 最多的前 5 条记录
top5 = df.nlargest(5, '骑行次数')
print(top5)

学生体测数据统计分析

题目

"学生体测数据.csv"包含字段:"学号""姓名""性别""身高(cm)""体重(kg)""800米成绩(秒)""立定跳远(m)"。请使用pandas、numpy和matplotlib完成体测数据分析。

代码

# 题目 5:学生体测数据统计分析
data = pd.read_csv(
    "学生体测数据.csv",
    encoding="utf-8",
    index_col="学号"
)
print(data)

# 2. 计算每位学生的 BMI 指数
data["BMI指数"] = data["体重(kg)"] / data["身高(cm)"] * 50
print(data)

# 3. 按 "性别" 分组,计算各项指标的均值和方差
mean_data = data.groupby("性别").agg({
    "身高(cm)": "mean",
    "体重(kg)": "mean",
    "800米成绩(秒)": "mean",
    "立定跳远(m)": "mean"
})
var_data = data.groupby("性别").agg({
    "身高(cm)": "var",
    "体重(kg)": "var",
    "800米成绩(秒)": "var",
    "立定跳远(m)": "var"
})
print(mean_data)
print(var_data)

# 4. 筛选出 BMI 指数正常的学生
normal_student = data[(data["BMI指数"] >= 18.5) & (data["BMI指数"] <= 23.9)]
print(normal_student)
normal_student.to_csv("正常BMI学生.csv", index=False)

# 5. 绘制男生和女生的立定跳远折线图
male_jump = data[data["性别"] == "男"].sort_values("学号")["立定跳远(m)"]
female_jump = data[data["性别"] == "女"].sort_values("学号")["立定跳远(m)"]
plt.plot(male_jump.index, male_jump, "r--", label="male")
plt.plot(female_jump.index, female_jump, "g--", label="female")
plt.legend()
plt.show()