数据分析之旅(二)

寻找“问题”学生、过滤数据

话接上一回,这个有注册的学生数呀,为1302人;而有记录(学生每天学习的记录)的人数为1237人。这就奇了怪了。难道这些学生还飞了不成?

下面就试试用代码来找找这些“问题学生”:

在《数据分析之旅(一)》中的代码里的函数:

def unique_students(csvlist,keyname):
    s = set()
    for each in csvlist:
        s.add(each[keyname])
    return s

可以返回一个CSV文件中所有不重复的学生的集合(集合里的元素是不重复的)。那这就好办了。只要找到 注册的学生集合 与 有记录的学生集合 的差集不就可以了吗?

unique_engagement_students = unique_students(daily_engagement,"account_key")
for enrollment in enrollments:
    student = enrollment['account_key']
    if student not in unique_engagement_students :
        print(enrollment)
        break

这里首先取到daily_engagement.csv文件里有记录的学生的集合 unique_engagement_students ,(enrollments = read_csv(‘enrollments.csv’) , 是注册文件的内容,一系列的行)。
对于每一行,先获取学生的account_key,然后如果该学生不在unique_engagement_students 中,就打印出来,并找到一个后就先退出(break)看看数据长啥样。
Output:
这里写图片描述

可以看到,输出结果中,有问题的地方有几个:
1. join_date 等于 calcel_date ;
2. 由于 1的原因,is_udacity值为False ; (同一天注册以及取消,系统可能不会有记录。纯属个人猜测)

那么,再打印出其他的数据看看?

num_of_problem_stu = 0
unique_engagement_students = unique_students(daily_engagement,"account_key")
for enrollment in enrollments:
    student = enrollment['account_key']
    if student not in unique_engagement_students and enrollment["join_date"] != enrollment["cancel_date"]:
        print(enrollment)
        num_of_problem_stu += 1

即可找出注册表中注册时间 > 1天而没有出现在参与表(有记录)中的学生

Output:
这里写图片描述

看了好久愣是没找出啥问题。。。、
然后回去看视频讲解,才知道这是测试用的账号。。。(ಥ _ ಥ)亏我看了辣么久,不过可以看到这些账户的 is_udacity 值均为True , = =|| 原来这个属性意思是是不是udacity的账户。。。

接下来,就可以把这些测试账号数据过滤掉啦

因为这里有三个文件,所以可以写个函数,下面上代码:

udacity_test_accounts = set() # 创建集合来保存测试的账号
for enrollment in enrollments:
    if enrollment['is_udacity']:
        udacity_test_accounts.add(enrollment['account_key'])                    

def remove_udacity_accounts(csvlist):
    """定义函数来从原始数据中过滤掉测试账号 """
    non_udacity_data = []
    for each in csvlist:
        if each['account_key'] not in csvlist:
            non_udacity_data.append(each)
    return non_udacity_data    

remove_udacity_accounts(enrollments)
remove_udacity_accounts(daily_engagement)
remove_udacity_accounts(project_submissions)

遇到的问题及感想
首先是要找出数据里的问题,可以打印出来看一下问题是什么样的—-比如这里是先打印出一个问题数据,发现是同一天注册以及取消,因此在参与表中没有记录;
继而可以深入探究出现问题的原因,亦或者是寻找看看有没有其他问题;
在这些过程中要寻找合适的、充分利用一些数据结构,如set集合,dict字典等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值