数据分析之旅(四)
来源:互联网 发布:本地电影点播软件 编辑:程序博客网 时间:2024/05/30 02:22
解决数据分析中问题的步骤
1. 确定哪些数据是异常点;
2. 打印出部分的数据异常点;
3. 看看能不能发现什么问题;
话说上一回,学员第一周的上课最长时间(10568.100867332541 minutes)超过了每周的总分钟数(10080 minutes)
首先,要先找到这个拥有异常数据点的学生: 因为字典total_minutes_by_account 的Key值是有顺序的
因此我觉得可以找出该学生在字典total_minutes_by_account 的下标即可
i = 0for each in total_minutes_by_account.values(): i += 1 if each == 10568.100867332541: print(i) # 108 break
接下来,打印出该学生的相关数据:
for each in paid_engagement_in_first_week: account_key = each['account_key'] num_courses_visited = each['num_courses_visited'] if account_key == '108' : print(each)
Output:
错误: 做到这里,我思考时得出了一个错误的结论 - -||,以为因为每个人可以上好几节课(num_courses_visited可以为0,1,2,3……),所以有好几节课的时间累积起来,最终导致的这个数据异常点
分析:
可以从结果看出,应该只包含一周的数据才对而实际上时间跨度从2015.1.7到了 2015.4.26。还记得之前那个within_one_week()函数吗,可能出问题的地方就在这里:
def within_one_week(join_date, engagement_date): time_delta = engagement_date - join_date # time_delta = 参与日期 - 注册日期 return time_delta.days < 7
在这里只检查了注册日期与参与日期是否最多相差7天,那么,如果参与日期在注册日期之前呢?(即有这样一种情况:学生注册后又注销,继而再注册,其第一次注册的数据都会被当做第一周的数据) ,因此需要确保注册日期和参与日期相隔 ≥ 0
Ps: 在这里我的理解是:这种情况下,参与日期 - 注册日期 < 0 < 7
修改within_one_week(join_date, engagement_date) 函数:
def within_one_week(join_date, engagement_date): time_delta = engagement_date - join_date return time_delta.days < 7 and time_delta.days >= 0
再从头运行一下相关的Cell ,结果最大为:3564.7332644989997 minutes ,并打印出拥有数据异常点的学生:
正常啦~
学生在第一周参与的课程情况
任务: 利用上面的求参与度的代码来看一下学生在第一周参与的课程情况,求出平均值,标准差,最大最小值
这里只需对之前的代码加以小小的修改:
from collections import defaultdictdef group_data(data, key_name): grouped_data = defaultdict(list) for data_point in data: key = data_point[key_name] grouped_data[key].append(data_point) return grouped_dataengagement_by_account = group_data(paid_engagement_in_first_week, 'account_key')def sum_grouped_items(grouped_data, field_name): summed_data = {} for key, data_points in grouped_data.items(): total = 0 for data_point in data_points: total += data_point[field_name] summed_data[key] = total return summed_datatotal_minutes_by_account = sum_grouped_items(engagement_by_account, 'total_minutes_visited')import numpy as npdef describe_data(data): data = list(data) print('Mean:', np.mean(data)) print('Standard deviation:', np.std(data)) print('Minimum:', np.min(data)) print('Maximum:', np.max(data))describe_data(total_minutes_by_account.values())lessons_completed_by_account = sum_grouped_items(engagement_by_account, 'lessons_completed')describe_data(lessons_completed_by_account.values())
问题:
describe_data(data)函数里,将data转化为列表list,不然运行代码会出现
TypeError: unsupported operand type(s) for /: 'dict_values' and 'int'
Output:
Mean: 306.708326753Standard deviation: 412.996933409Minimum: 0.0Maximum: 3564.7332645Mean: 1.63618090452Standard deviation: 3.00256129983Minimum: 0Maximum: 36
- 数据分析之旅(四)
- FBReader源码分析(四)---数据之源Model分析
- (大数据之MapReduce) Hadoop作业提交分析(四)
- 数据挖掘之关联分析四(连续属性处理)
- 数据挖掘之关联分析四(连续属性处理)
- 系统分析之四 数据建模和分析
- R语言数据分析系列之四
- 四 大数据分析之 SVD理论
- spark大数据分析(四)
- python数据分析实践(四)
- 利用Python进行数据分析(四)
- 【R语言数据处理】一步一步来分析数据之不知哪位收集的淘宝推荐的数据之四,数据分析(店铺名)
- GIS基本理论之四:空间数据分析基本理论
- 数据分析之旅(一)
- 数据分析之旅(二)
- 数据分析之旅(三)
- 栅格数据空间分析之四基于栅格数据空间分析的选址
- 利用python做数据分析(四)-数据合并
- 2017.2.14 日课
- 某付数据科技公司的一道面试附加题
- 哪种男人对女人最有吸引力
- Android Recyclerview 万能分割线
- springMVC注解@initbinder日期类型的属性自动转换
- 数据分析之旅(四)
- java-Hashtable HashMap
- 第五天、实现一个java小爬虫
- solr的总结
- oCam 中文绿色版 - 免费实用的屏幕录像与截图软件 (制作视频教程/录制直播视频)
- [BZOJ4539][Hnoi2016]树(倍增+LCA+主席树)
- UCOS
- AIZU AOJ 2309 Vector Compression 最小树形图(朱—刘算法)
- 有感于换工作