Pandas 处理 JSON 文件
介绍
本节实验为挑战,你将使用上一节实验中学习到的 Pandas 知识,分析用户学习数据 JSON 文件,并从文件中统计出中指定的数据项。 首先在终端中,通过以下命令下载用户学习数据 JSON 文件 user_study.json:
cd ~/Code
wget http://labfile.oss.aliyuncs.com/courses/764/user_study.json
user_study.json 文件部分内容展示如下:
{"minutes": 30, "created_at": "2016-05-01 00:00:10", "user_id": 199071, "lab": "\u7528\u6237\u53ca\u6587\u4ef6\u6743\u9650\u7ba1\u7406", "course": "Linux \u57fa\u7840\u5165\u95e8\uff08\u65b0\u7248\uff09"}
可以看到,文件中每一项为用户学习记录,代表某用户的某一次学习,其中每一项字段含义如下:
user_id 用户 ID
lab 实验名称
course 课程名称
minutes 学习分钟数
created_at 学习时间
在本挑战中,你需要在 ~/Code/analysis.py Python 文件中编写一个解析并统计学习数据的函数 analysis,analysis 函数接受两个参数。第一个参数为学习数据 JSON 文件名称,其文件内容格式和 user_study.json 文件格式一致,第二个参数为用户 ID。你需要使用 Pandas 读取 JSON 文件,并从中统计出第二个参数指定的用户 ID 的学习次数和总学习分钟数,也就是说函数将返回两个值,第一个为指定用户的学习次数(即数据文件中该用户的数据有多少条),第二个为指定用户的总学习分钟数。 示例代码:
# 需要使用 JSON 包解析 JSON 文件
import json
import pandas as pd
def analysis(file, user_id):
times = 0
minutes = 0
'''
补充代码:
1. 使用 Pandas 读取数据
2. 使用 Pandas 选择数据
'''
return times, minutes
目标
函数名必须是 analysis ;
代码必须写入 ~/Code/analysis.py 文件中;
analysis 函数接受两个参数,第一个参数是 JSON 文件名称,第二个参数是用户 ID;
analysis 函数返回两个值,第一个值是指定用户的学习次数,第二个值是指定用户的学习分钟数;
如果传递给 analysis 函数的文件不存在或者用户 ID 不存在时返回 0 即可;
提示语
Pandas 中的 pandas.read_json 可以读取 JSON 文件;
Pandas 的 DataFrame 数据集可以使用形如 df[df['user_id'] == 5348] 的布尔索引过滤出 user_id 列等于 5348 的所有行;
user_study.json 文件包含的是 JSON 文本,包含了多项用户学习数据;
默认实验环境使用的是 python 3.5,我们的实验均在 Anaconda 包含的 python 3.6.1 下执行。故在调试脚本时使用 /home/shiyanlou/anaconda3/bin/python analysis.py 来执行,避免模块导入出错的问题。
知识点
Pandas 基本用法
JSON 数据文件处理
DataFrame 索引与过滤