机器学习笔记:数据处理基础

来源:互联网 发布:企业淘宝开店流程步骤 编辑:程序博客网 时间:2024/06/06 03:02

本文为优达学城机器学习入门课程的mini项目,简单讲述了怎样去认识并简单处理原始数据。

数据与依赖库

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

概览

对于拿到的结构化的数据,首先要做的就是查看数据结构,对数据的组成有个大概的了解。这里预先知道了pkl文件内容为字典结构,但是不知道是否有嵌套,所以打印每一项:

for key in enron_data:    print(key,enron_data.get(key))

其实按理说对数据的概览应该只需要输出几个条目即可,只是目前对字典操作还不了解,而且文件也不大,直接打印全部内容。下图为文件内容的最后一项:

可以看到数据结构为双层字典嵌套,外层字典的key为人名,内层字典的key即为每个人对应的特征值,其中特征值的缺省使用”NaN”表示。

特征值列表

为了方便对各特征值进行统计,把特征值从字典中提取出来存储到列表中,此处提取了人名、person of interest、薪水、总金额与邮箱地址:

persons=[]          #人名列表POI=[]          #person of interestsalarys=[]total_payments=[]email_addresses=[]for person in enron_data:    persons.append(person)    if(enron_data[person]['poi']==1):        POI.append(person)    salarys.append(enron_data[person]['salary'])    total_payments.append(enron_data[person]['total_payments'])    email_addresses.append(enron_data[person]['email_address'])

问题

比如现在需要计算有多少人的邮箱地址是不明确的,可以构造一个函数来进行计算某一特征值下的缺省值:

def num_of_specific_val(feature_list):    num_of_NaN=0    for item in feature_list:        if(item=="NaN"):            num_of_NaN+=1    print(num_of_NaN)num_of_specific_val(email_addresses)

下面这条说错了,应该用max(list)或min(list)方法,排序会破坏数据的顺序。
又或者,现在需要计算”total_payment”特征下的最大值。可以使用排序来解决,不过在排序之前,需要先对缺省值进行处理,因为排序操作是无法处理字符串”NaN”的:

for i in range(0,len(total_payments)):    if(total_payments[i]=='NaN'):        total_payments[i]=0total_payments.sort()print(total_payments[-1])

TXT文件

TXT文件是无结构的,在处理TXT文件时通常需要自己处理来生成结构化的数据。比如这里有一份POI名单,内容如下图所示:

如果需要提取出所有POI的名字,则需要做字符串处理:

fd=open("../final_project/poi_names.txt",'r')#概览数据结构(测试)# for line in fd:#     print(line.strip())POI=[]for line in fd:    if '(' in line:        POI.append(line.split(")")[-1].strip())print(POI)fd.close()
原创粉丝点击