Udacity 数据分析入门总结
来源:互联网 发布:合肥网络总监招聘 编辑:程序博客网 时间:2024/05/29 12:13
课程网站:https://classroom.udacity.com/courses/ud170
目录
- 目录
- 学习内容
- 学习感受
- 课程篇
- 内容篇
- 总结回顾
- 读取csv文件
- 数据修正
- 数据探索
- 问题处理
- 数据可视化
- 学习原因及计划
学习内容
*Python数据分析
1.数据读取
2.数据修正(数值和日期格式的转化)
3.数据探索(熟悉数据内容,提出问题)
4.问题处理(异常值、特殊值和特定数据提取)
5.数据可视化(关键数据可视化图表呈现)*Numpy和Pandas处理一维数据
待学习*Numpy和Pandas处理二维数据
待学习
学习感受
课程篇
Udacity的课程总是一如既往的详细,均是从基础开始讲起,最重要的是讲解知识时提出许多具有启发性的问题,加上合理的练习设计,学起来总是事半功倍。
内容篇
第一部分内容比较基础,重点在于对列表、字典和元组的理解和使用。主要通过合理的建立字典和列表,将我们感兴趣的数据放入,而将不感兴趣和异常值去除。
而这个操作一般都是:建立字典——for循环——if条件选择——输出目标值到新字典。
内容的重点在于:熟悉数据内容,提出能从数据中获得的有趣问题,以何种思路去回答问题,以及如何根据问题获得有价值的信息。
总结回顾
按照学习内容依次总结:
1.读取csv文件:
# 用到特殊库文件unicodecsvimport unicodecsvdef read_csv(file): with open(file, 'rb') as f: reader = unicodecsv.DictReader(f) return list(reader)
读取csv格式文件,并返回列表。
2.数据修正
from datetime import datetime as dt# 将字符串格式的时间转为 Python datetime 类型的时间。# 如果没有时间字符串传入,返回 Nonedef parse_date(date): if date == '': return None else: return dt.strptime(date, '%Y-%m-%d')# 将可能是空字符串或字符串类型的数据转为 整型 或 None。def parse_maybe_int(i): if i == '': return None else: return int(i)# 清理文件表格中的数据类型
其中涉及到日期修改,用到datetime库的strptime函数,在使用时格式为dt.strptime(date, “%Y-%m-%d”)。当然其输出格式可以多种选择,可以自行搜索文档查看格式。
数据类型转换可以直接强制转换为对应类型:int(i),其中有部分数据需要将尾数去掉,如课程完成值为1.5,需要转化为1,可利用如下代码:
b = int(float(a))
3.数据探索
提供数据为:
enrollments(第一个项目完成情况(内含学员账号、加入时间、取消时间等))
daily-engagement(每天学习情况(内含学员账号、浏览课程时间、完成课程总数和完成项目总数))
project-submissions(提交项目情况(内含提交项目日期、项目状态等))
提问:
学员花费在课程上时间与学员提交项目关系?(求得数据中学员花费在课程上的总时间)
# 导入 defaultdict ,可输出空列表from collections import defaultdict# 定义在数据 data 中寻找特定项 value 的函数def find_special_value(value, data): engagement_by_account = defaultdict(list) # 在数据中提取 “account_key”,并将对应数据传递给 “engagement_by_account”, 形成字典 “engagement_by_account” for data_point in data: account_key = data_point["account_key"] engagement_by_account[account_key].append(data_point) # 创建空字典,储存结果 total_by_account = {} # 字典 “engagement_by_account” 用两次for循环查找数据中对应 "value" 项,并将其累加,存入字典 “total_by_account”中,注意其中的 "items" for account_key, engagement_by_student in engagement_by_account.items(): total = 0 for engagement_record in engagement_by_student: total += engagement_record[value] total_by_account[account_key] = total # 提取字典中 “value” 值并存入元组 "total_value" 中 total_value = total_by_account.values()
学员完成课程数与学员完成项目数关系?
# 访问次数道理与求累计学习时间相同,将value值改为 "num_courses_visited"即可
学员访问课程教室天数与项目完成关系?
def find_lessons_value(value, data): engagement_by_account = defaultdict(list) for engagement_record in data: account_key = engagement_record["account_key"] engagement_by_account[account_key].append(engagement_record) total_by_account = {} for account_key, engagement_by_student in engagement_by_account.items(): total = 0 for engagement_record in engagement_by_student: # 特别之处在于,访问天数的计算:只能是每天为1或者0,即如果当天有访问次数记录,只记为1次;没有记录,记为0次! if engagement_record[value]: total += 1 total_by_account[account_key] = total total_value = total_by_account.values()
4.问题处理
异常值、特殊值和特定数据提取
数据集daily-engagement中键值问题“acct”:
# 将 "acct" 对应内容 Value 赋值给 "account_key" , 删除 "acct"def engagement in daily-engagement: engagement["account_key"] = engagement["acct"] del engagement["acct"]
数据集中出现重复注册问题:
# 通过 “account_key” 的唯一账号,剔除重复用户def get_unique_student(data): unique_student = set() for data_point in data: unique_student.add(data_point["account_key"]) return unique_student
官方测试账号异常问题:
# 为所有 Udacity 测试帐号建立一组 set udacity_test_accounts = set()for enrollment in enrollments: if enrollment['is_udacity']: udacity_test_accounts.add(enrollment['account_key'])# 通过 "account_key" 找到不是官方测试账号的数据存入 non_udacity_account 中def remove_udacity_accounts(data): non_udacity_data = [] for data_point in data: if data_point["account_key"] not in udacity_accounts: non_udacity_data.append(data_point) return non_udacity_data
5.数据可视化
得到对应结果后,可通过强大、神奇的numpy来处理,比如:
import numpy total_value = total_by_account.values() print "mean:", np.mean(total_value) print "standard Deviation", np.std(total_value) print "Minium", np.min(total_value) print "Maxium", np.max(total_value)
最后再将结果可视化,比如最基本的直方图:
# 关键数据可视化图表呈现def describe_data(data): print 'Mean:', np.mean(data) print 'Standard deviation:', np.std(data) print 'Minimum:', np.min(data) print 'Maximum:', np.max(data) plt.hist(data)
可以非常直观的看到提出数据分布!!!
学习原因及计划
原因
数据分析与处理是进行深度学习必不可少的一门学科,在对大型、复杂数据进行处理时,不仅仅需要熟练的编程技巧,更需要扎实的理论和丰富的经验来分析和理解数据的特性,并根据其特性来进行合适的模型选择。学习完Udacity的深度学习纳米课程已经两个多月了,但在实战项目中,发现对数据的预处理不足,会导致模型的训练效果大打折扣,且Python的基础不扎实,需要一段时间的磨练,决定花一周的时间学习数据分析入门和用 MongoDB 进行数据整理课程,打基础同时锻炼编程能力,更深入的理解编程思想。
计划
写在最后的最后,希望我能坚持到底,享受这个过程,成为更好的自己,得到nice的结果!
- Udacity 数据分析入门总结
- udacity HTML 和 CSS 入门 学习总结
- Udacity机器学习入门-主成分分析(PCA)
- Udacity Python课程总结
- R数据分析入门知识点总结
- Python数据分析入门知识点总结
- 数据分析可视化入门知识点总结
- Udacity-机器学习入门-聚类
- Udacity CS101 结课总结
- Python数据分析入门之pandas总结基础
- hadoop入门笔记 (from udacity)
- Udacity公开课:人工智能入门 全集
- Udacity Linux 命令行基础 Shell 入门
- Udacity-机器学习入门-特征缩放
- 数据分析入门方法
- 数据分析--入门
- Python数据分析入门
- pandas 数据分析入门
- Spring Boot参考教程(九)配置上传下载
- String类的常用方法(附 StringBuilder)
- hdu1501 zipper【记忆化搜索】【动态规划】
- Eclipse反编译插件下载和安装
- ccf刷题记01
- Udacity 数据分析入门总结
- 使用xorm将结构体转为sql文件
- vim配色指南
- 字符型和String类型总结
- BlueBorne 蓝牙漏洞深入分析与PoC
- strtok函数
- 机器学习概念总结笔记(四)——KMeans、混合高斯模型、LDA、PLSA、Apriori、FP-Growth、
- Python与matlab在存储三维数组上的区别
- ######Spring第5天ssh整合(注解版)难理解知识点:【自定义 方法加注解的方式】给dao注入sessionFactory属性+【搞清@Autowared和@Resource含义】