部分同学在完成「Python 数据分析入门与进阶」训练营挑战的过程中,常会遇到一些相似的问题。我们将 5 个挑战题目的参考答案整理出来,供大家参考。各题目的解法不唯一,你也可以将已经通过的不同解题方法分享出来。
挑战 1、分析统计用户学习数据
# -*- coding: utf-8 -*-
import json
import pandas as pd
def analysis(file, user_id):
times = 0
minutes = 0
# 读取 JSON 文件
with open(file, 'r') as ori_file:
# 读取 JSON 编码格式的数据
ori_json = json.load(ori_file)
# 遍历 JSON 数据
for user_json in ori_json:
if user_json['user_id'] == user_id:
minutes += user_json['minutes']
times += 1
return times, minutes
挑战 2、Pandas 处理 JSON 文件
# -*- coding: utf-8 -*-
import json
import pandas as pd
def analysis(file, user_id):
times = 0
minutes = 0
# 读取 JSON 文件
with open(file, 'r') as ori_file:
# 读取 JSON 编码格式的数据
ori_json = json.load(ori_file)
# 将 JSON 数据转换为 DataFrame
df = pd.DataFrame(ori_json)
# 使用 Pandas 选择相应用户的数据
df_user = df[df['user_id'] == user_id]
# 统计该用户的总学习次数和总学习时间
times = len(df_user)
minutes = df_user['minutes'].sum()
return times, minutes
挑战 3、寻找异常值
# -*- coding: utf-8 -*-
import numpy as np
def find_outlier(data):
outlier = []
data_array = np.array(data)
# 使用 numpy 提供的 percentile 方法计算百分位数
Q1 = np.percentile(data_array, 25) # 上四分位
Q3 = np.percentile(data_array, 75) # 下四分位
# 计算 IQR 值
IQR = Q3 - Q1
outlier1 = Q1 - 1.5 * IQR
outlier2 = Q3 + 1.5 * IQR
# 确定异常值
for i in data:
if i < outlier1 or i > outlier2:
outlier.append(i)
return outlier
挑战 4、分类预测挑战
# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
def test_score(test_feature, test_target):
data = pd.read_csv('credit_card_train.csv', header=0)
# 对 'SEX', 'EDUCATION', 'MARRIAGE' 列独热编码
data = pd.get_dummies(data, columns=['SEX', 'EDUCATION', 'MARRIAGE'])
# 定义列名列表
columns = list(data.columns)
# 将 'DEFAULT' 移到最后
columns.remove('DEFAULT')
columns.append('DEFAULT')
# 重新排布列序
data = data.reindex(columns=columns)
# 定义特征和目标值
feature = data.iloc[:, 1:23].values
target = data['DEFAULT'].values
# 训练随机森林分类器
model = RandomForestClassifier()
model.fit(feature, target)
# 使用 .score() 方法获得准确率
score = model.score(test_feature, test_target)
return score
挑战 5、时间序列分析挑战
# -*- coding: utf-8 -*-
import pandas as pd
def quarter_volume():
data = pd.read_csv('apple.csv', header=0)
# 将 Date 列转换为时间索引
i = pd.to_datetime(data['Date'])
# 读取 Volume 列数据,并添加索引
data_Volume = pd.Series(data['Volume'].values, index=i)
# 使用 Offset='Q' 参数,可以直接按季度重采样
data_Q = data_Volume.resample('Q').sum()
# 对交易数据从大到小排序后,返回第二项数据
second_volume = data_Q.sort_values(ascending=False)[1]
return second_volume
注意:本帖仅供分享优质答案(代码精简规范,测试通过)供其他学员参考,请勿在本帖下方提问,提问请到课程问答区域提问。