python进阶训练营_「Python 数据分析入门与进阶」训练营挑战参考答案

部分同学在完成「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

注意:本帖仅供分享优质答案(代码精简规范,测试通过)供其他学员参考,请勿在本帖下方提问,提问请到课程问答区域提问。

你可能感兴趣的:(python进阶训练营)