文章目录

  • 安然数据集介绍
  • 数据集获取
  • 数据集预处理
  • 读取数据集
  • 获取安然数据集中的人数
  • 每个人有多少特征:
  • E+F 数据集中有多少 POI?
  • 总共有多少 POI
  • James Prentice 名下的股票总值是多少
  • 我们有多少来自 Wesley Colwell 的发给嫌疑人的电子邮件?
  • Jeffrey Skilling 行使的股票期权价值是多少?
  • 谁卷走了最多的钱
  • 此数据集中有多少雇员有量化的工资?已知的邮箱地址是否可用?
  • 字典到数组的转换
  • (当前的)E+F 数据集中有多少人的薪酬总额被设置了“NaN”?数据集中这些人的比例占多少?
  • E+F 数据集中有多少 POI 的薪酬总额被设置了“NaN”?这些 POI 占多少比例?

安然数据集分析

下载的安然数据集(E+F数据集)是以字典的形式存储的,这里将处理过程记录下来,也算是对python处理字典数据的一个记录,方便查阅和分享。

数据集来源于uadacity的分享。 以下代码是在python 3.6下运行。

安然数据集介绍

本篇文章旨在通过对安然事件数据集的分析教会大家面对一个数据集,应该如何下手

安然事件造成有史以来最大的公司破产。在2000年度,安然是美国最大的能源公司,然而被揭露舞弊后,它在一年内就破产了。

我们之所以选择使用安然事件的数据集来做机器学习的项目,是因为我们已经有安然的电子邮件数据库,它包含150名前安然员工之间的50万封电子邮件,主要是高级管理人员。这也是唯一的大型公共的真实邮件数据库。

感兴趣的可以看一下安然的纪录片,也是非常令人唏嘘的一部经典纪录片:【纪录片】安然:房间里最聪明的人
或者阅读安然事件文章

数据集获取

数据集来源于uadacity的github.

git clone https://github.com/udacity/ud120-projects.git

克隆之后进入 tools/ 目录,运行 startup.py。该程序首先检查 python 模块(看你的numpy,scikit-learn等的包是否成功安装)然后下载并解压缩我们在后期将大量使用的大型数据集。下载和解压缩需要一些时间,但是你无需等到全部完成再开始第一部分。

数据集下载地址:
http://zoo.cs.yale.edu/classes/cs458/lectures/sklearn/ud/ud120-projects-master/enron_mail_20150507.tgz

数据集预处理

由于下载下来的数据集是基于python2.x生成的,本机用的是python3.6,所以直接读取时会报错:_pickle.UnpicklingError: the STRING opcode argument must be quoted

这是由于操作系统不同,Unix 的 “\n” 和 DOS 的 “\r\n”
处理方法:重新生成一个新的文件.

original = "final_project_dataset.pkl"
destination = "final_project_dataset_unix.pkl"content = ''
outsize = 0
with open(original, 'rb') as infile:content = infile.read()
with open(destination, 'wb') as output:for line in content.splitlines():outsize += len(line) + 1output.write(line + str.encode('\n'))print("Done. Saved %s bytes." % (len(content)-outsize))

读取数据集

import pickleenron_data = pickle.load(open("../final_project/final_project_dataset_unix.pkl", "rb"))

数据集中的数据是以字典的形式存放的,随机选取一个字典,可以看到形式如下:

print(enron_data['METTS MARK'])
'salary': 365788, 'to_messages': 807, 'deferral_payments': 'NaN', 'total_payments': 1061827, 'loan_advances': 'NaN', 'bonus': 600000, 'email_address': 'mark.metts@enron.com', 'restricted_stock_deferred': 'NaN', 'deferred_income': 'NaN', 'total_stock_value': 585062, 'expenses': 94299, 'from_poi_to_this_person': 38, 'exercised_stock_options': 'NaN', 'from_messages': 29, 'other': 1740, 'from_this_person_to_poi': 1, 'poi': False, 'long_term_incentive': 'NaN', 'shared_receipt_with_poi': 702, 'restricted_stock': 585062, 'director_fees': 'NaN'}

获取安然数据集中的人数

print("number of the person in AnRanData: ",len(enron_data) )
#number of the person in AnRanData:  146

每个人有多少特征:

numFeature = 0
for i in  enron_data['METTS MARK']:    numFeature += 1print("number of the feature / person: ",numFeature)#number of the feature / person:  21

E+F 数据集中有多少 POI?

numPOI = 0for i in  enron_data.keys():if enron_data[i]['poi'] == 1:numPOI += 1
print("number of the E+F POI is: ",numPOI)//number of the E+F POI is:  18

总共有多少 POI

我们编辑了一个包含所有 POI 姓名的列表(在 …/final_project/poi_names.txt 中)并附上了相应的邮箱地址(在 …/final_project/poi_email_addresses.py 中)。
总共有多少 POI?(使用姓名列表,不要用邮箱地址,因为许多雇员不止一个邮箱,而且其中少数人员不是安然的雇员,我们没有他们的邮箱地址。)

countPOI = 0
for line in context:if line.startswith('(y)') or line.startswith('(n)'):countPOI += 1print("sum of the POI is: ",countPOI)//sum of the POI is:  35

James Prentice 名下的股票总值是多少

print (enron_data["PRENTICE JAMES"]['total_stock_value'])
1095040

通过keys()可以查看他名下的所有参数:

print (enron_data["PRENTICE JAMES"].keys())dict_keys(['salary', 'to_messages', 'deferral_payments', 'total_payments', 'loan_advances', 'bonus', 'email_address', 'restricted_stock_deferred', 'deferred_income', 'total_stock_value', 'expenses', 'from_poi_to_this_person', 'exercised_stock_options', 'from_messages', 'other', 'from_this_person_to_poi', 'poi', 'long_term_incentive', 'shared_receipt_with_poi', 'restricted_stock', 'director_fees'])

我们有多少来自 Wesley Colwell 的发给嫌疑人的电子邮件?

print (enron_data["COLWELL WESLEY"]['from_this_person_to_poi'])
# 11

Jeffrey Skilling 行使的股票期权价值是多少?

print (enron_data["SKILLING JEFFREY K"]['exercised_stock_options'])
19250000

谁卷走了最多的钱

安然的CEO:Jeffrey Skilling
安然董事会主席:Kenneth Lay
安然CFO:Andrew Fastow
那么这三个人里面,谁卷走了最多的钱?

print (enron_data["SKILLING JEFFREY K"]['total_payments'])
print (enron_data["LAY KENNETH L"]['total_payments'])
print (enron_data["FASTOW ANDREW S"]['total_payments'])maxPay = 0
maxpay_person = ''
s1 = enron_data["SKILLING JEFFREY K"]['total_payments']
if s1 > maxPay:maxPay = s1maxpay_person = 'SKILLING JEFFREY K'
s2 = enron_data["LAY KENNETH L"]['total_payments']
if s2 > maxPay:maxPay = s2maxpay_person = 'LAY KENNETH L'
s3 = enron_data["FASTOW ANDREW S"]['total_payments']
if s3 > maxPay:maxPay = s3maxpay_person = 'SFASTOW ANDREW S'print(maxpay_person, maxPay)// #LAY KENNETH L 103559793

此数据集中有多少雇员有量化的工资?已知的邮箱地址是否可用?

num_salary = 0
num_email = 0
for i in  enron_data.keys():if enron_data[i]['salary'] != 'NaN':num_salary += 1if enron_data[i]['email_address'] != 'NaN':num_email +=1print(num_salary,num_email)
//# 95, 111

字典到数组的转换

import numpy as npdef featureFormat( dictionary, features, remove_NaN=True, remove_all_zeroes=True, remove_any_zeroes=False, sort_keys = False):""" convert dictionary to numpy array of featuresremove_NaN = True will convert "NaN" string to 0.0remove_all_zeroes = True will omit any data points for whichall the features you seek are 0.0remove_any_zeroes = True will omit any data points for whichany of the features you seek are 0.0sort_keys = True sorts keys by alphabetical order. Setting the value asa string opens the corresponding pickle file with a preset keyorder (this is used for Python 3 compatibility, and sort_keysshould be left as False for the course mini-projects).NOTE: first feature is assumed to be 'poi' and is not checked forremoval for zero or missing values."""return_list = []# Key order - first branch is for Python 3 compatibility on mini-projects,# second branch is for compatibility on final project.if isinstance(sort_keys, str):import picklekeys = pickle.load(open(sort_keys, "rb"))elif sort_keys:keys = sorted(dictionary.keys())else:keys = dictionary.keys()for key in keys:tmp_list = []for feature in features:try:dictionary[key][feature]except KeyError:print ("error: key ", feature, " not present")returnvalue = dictionary[key][feature]if value=="NaN" and remove_NaN:value = 0tmp_list.append( float(value) )# Logic for deciding whether or not to add the data point.append = True# exclude 'poi' class as criteria.if features[0] == 'poi':test_list = tmp_list[1:]else:test_list = tmp_list### if all features are zero and you want to remove### data points that are all zero, do that hereif remove_all_zeroes:append = Falsefor item in test_list:if item != 0 and item != "NaN":append = Truebreak### if any features for a given data point are zero### and you want to remove data points with any zeroes,### handle that hereif remove_any_zeroes:if 0 in test_list or "NaN" in test_list:append = False### Append the data point if flagged for addition.if append:return_list.append( np.array(tmp_list) )return np.array(return_list)def targetFeatureSplit( data ):""" given a numpy array like the one returned fromfeatureFormat, separate out the first featureand put it into its own list (this should be the quantity you want to predict)return targets and features as separate lists(sklearn can generally handle both lists and numpy arrays as input formats when training/predicting)"""target = []features = []for item in data:target.append( item[0] )features.append( item[1:] )return target, features

(当前的)E+F 数据集中有多少人的薪酬总额被设置了“NaN”?数据集中这些人的比例占多少?

num_total_pay = 0
for i in  enron_data.keys():if enron_data[i]['total_payments'] == 'NaN':num_total_pay += 1proportion = num_total_pay/float(len(enron_data))
print(num_total_pay, proportion)
#21,0.14

E+F 数据集中有多少 POI 的薪酬总额被设置了“NaN”?这些 POI 占多少比例?

numPOI = 0
num_POI_total_pay = 0
for i in  enron_data.keys():if enron_data[i]['poi'] == 1:numPOI += 1if enron_data[i]['total_payments'] == 'NaN':num_POI_total_pay += 1proportion_poi = num_POI_total_pay/float(numPOI)
print(num_POI_total_pay,numPOI, proportion_poi)//#0,18,0

机器学习(7)——安然数据集分析相关推荐

  1. 机器学习安然数据集分析报告

    项目背景 安然曾是 2000 年美国最大的公司之一.辉煌时期,市值高达700亿美元.2002 年,由于其存在大量的企业欺诈行为,这个昔日的大集团以极快的速度土崩瓦解. 在随后联邦进行的调查过程中,大量 ...

  2. 机器学习案例——鸢尾花数据集分析

        前几天把python基础知识过了一遍,拿了这个小例子作为练手项目,这个案例也有师兄的帮助,记录完,发现代码贴的很多,文章有点长,为了节省篇幅,有一些说明就去掉了,毕竟鸢尾花数据集比较经典,网上 ...

  3. 优达(Udacity)-机器学习基础-数据集与问题(安然数据集)

    优达(Udacity)-机器学习基础-数据集与问题(安然数据集) 课程全部代码: #!/usr/bin/python # -*- coding: utf-8 -*- """ ...

  4. 机器学习深度学习数据集大汇总

    寻找一个好用的数据集需要注意一下几点: 数据集不混乱,否则要花费大量时间来清理数据: 数据集不应包含太多行或列,否则会难以使用: 数据越干净越好,清理大型数据集可能非常耗时: 应该预设一个有趣的问题, ...

  5. ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略

    ML/DL之预测分析类:利用机器学习算法进行预测分析的简介.分析.代码实现之详细攻略 目录 机器学习算法进行预测的简介 机器学习算法进行预测的分析 机器学习算法进行预测的代码实现 机器学习算法进行预测 ...

  6. [当人工智能遇上安全] 7.基于机器学习的安全数据集总结

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

  7. 《R语言机器学习:实用案例分析》——1.2节R的数据结构

    本节书摘来自华章社区<R语言机器学习:实用案例分析>一书中的第1章,第1.2节R的数据结构,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sark ...

  8. 从入门到入土:机器学习part01|python|代码分析|初步学习

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

    后面对Sklearn的学习主要以<Python机器学习基础教程>和<机器学习实战基于scikit-learn和tensorflow>,两本互为补充进行学习,下面是开篇的学习内容 ...

  10. 【大数据实战项目八】使用机器学习算法进行预测分析并进行网上部署

    使用机器学习算法进行预测分析并进行网上部署 9 使用机器学习算法进行预测分析 9.1 数据探索式分析 9.1.1 环境配置与数据读入 9.1.2 探究延误航班有多少数据量 9.1.3 探究出发延期到达 ...

最新文章

  1. win10 无法打开 APICloud Studio 2 的解决方案
  2. 无法使用JDK 8卸载JavaFX SceneBuilder 1.0
  3. 存储过程里调用另一个存储过程的值
  4. 分享一个非常 nice 的工具
  5. php 控制器 模板,php学习笔记(一)php模板与控制器
  6. php查询锁表情况,MySQL update where in 子查询导致锁表
  7. postfix 过滤中文内容
  8. php树形结构数组转化
  9. Ghost还原的时候,显示A:GHOSTERR.TXT或CRC32错误的解决方案
  10. 为什么acdsee服务器怎在运行,为何打开网页时会出现安装acdsee 5.0.1 powerpack
  11. Android中侧滑菜单效果实现(主界面和菜单界面实现平移、缩放、滚动动画)
  12. PgMP项目集管理专家认证培---艾威PgMP培训机构
  13. 2.7UiPath Flowchart的介绍和使用
  14. codeforces 1520E. Arranging The Sheep(1400)
  15. Excel文件格式和扩展名不匹配
  16. IIS 服务器启动和关闭
  17. 去除字符串首尾空格(全角半角)
  18. Python的一个图片识别工具-PyTesseract(Win10)
  19. cpj-swagger分别整合struts2、spring mvc、servlet
  20. 唯美MACD-完全版

热门文章

  1. ESP8266-Arduino编程实例-TEMT6000环境光传感器驱动
  2. jsv8引擎 垃圾回收机制
  3. 干货!图像集分类大杀器--混合黎曼度量学习
  4. Ubuntu扩展系统根目录磁盘空间
  5. TVP大佬组队,吐槽鹅厂数据库?!
  6. 第二章 随机变量及其分布 2.3 随机变量的分布函数
  7. CCF-CSP201809-4 再卖菜
  8. 通过将OC编译成C++ 一探究竟(边学编写,帮忙点评)
  9. 腾讯校招笔试题之贪吃的小Q
  10. html伸缩布局,HTML-CSS:伸缩布局