利用python学习数据分析之数据导入
本文为Udacity数据分析入门课程学习笔记,数据源为课程附件资料3个csv表格记录Udacity的学员注册信息,学员每日参与行为数据,项目记录,课程主要目标学习对这3个数据集进行数据分析练习,学习数据分析思维及基本出来方法。
练习环境:Anaconda 下的Jupyter Notebookcsv文件的导入,使用unicodecsv模块读取数据;
加载unicodecsv包并定义一个读取csv文档的函数read_csv,实现传入文件名可返回文件列表:
import unicodecsv
def read_csv(filename):
with open(filename,'rb') as f: #打开传入文件路径文件with
reader = unicodecsv.DictReader(f)
return list(reader)
分别传入3个文件名,读取csv文件(其实读取csv文件,用pandas包的read_csv/read_table
更方便,已有现场方法可以使用。
查看每个表的第一条记录,看到表中字段存储数据类型,分析3个表之间的关联方式。
可看到表中返回的都是文本类型的,要进行下一步的数据处理就需要修正相应转换类型
2.修改表格内数据类型
修改列的数据类型,主要修改将文本形式的时间记录变为时间类型,’整型‘变为变为int,‘bool’的变为bool。
from datetime import datetime as dt #导入一个时间处理包
'''这里定义两个函数,分别将文本类型转换为时间/整型数据,将空值转化为Null'''
def prase_data(data):
if isinstance(data, unicode): #这里加多一层判断,因为数据源了可能有混合文本和时间类型
if data == '':
return None
else:
return dt.strptime( data, '%Y-%m-%d') #datatime的strptime方法出来文本时间为相应格式
else:
if data =='':
return None
else:
return data
def prase_int(i):
if i == '':
return None
else:
return int(i)
然后对表格需要转换的列,都应用相应的函数:
for sub_enr in enr:
sub_enr['cancel_date'] = prase_data(sub_enr['cancel_date'])
sub_enr['days_to_cancel'] = prase_int(sub_enr['days_to_cancel'])
sub_enr['join_date'] = prase_data(sub_enr['join_date'])
sub_enr['is_canceled'] = sub_enr['is_canceled']=='True' #转换bool型用这样方式转化即可
sub_enr['is_udacity'] = sub_enr['is_udacity']=='True'
for sub_pro in pro:
sub_pro['completion_date']=prase_data(sub_pro['completion_date'])
sub_pro['creation_date']=prase_data(sub_pro['creation_date'])
for sub_dai in dai:
sub_dai['lessons_completed']=int(float(sub_dai['lessons_completed'])) #表格中完成课程数为'0.0',需先转化浮动型数字再娶整数
sub_dai['projects_completed']=int(float(sub_dai['projects_completed']))
sub_dai['total_minutes_visited']=float(sub_dai['total_minutes_visited'])
sub_dai['utc_date']=prase_data(sub_dai['utc_date'])
查看转换格式后的每个表:
看到返回结果可以看到,已经修正好非文本类型,转换为相应的数据类型。
不过看到dai表格中’acct‘列名,与其他两个表不一样’account_key‘,都是记录账号的,在此需要对dai中的列进行重命名,统一相同内容的列名;
for sub_dai in dai:
sub_dai['account_key']=sub_dai['acct'] #创建一个新的列名,并将原来acct的值传递给它
del sub_dai['acct']
查看修改后dai[0]
已经完成csv数据的加载和基本数据类型转换,统一了相同的列名。
下一步可以初步探索数据了
总结读取csv文件,可以用unicodecsv包,利用unicode.DictReader方法(返回一个字典)自己定义一个read_csv()函数,传入文件名即可读取【不过直接使用pandas包更便捷,直接使用read_csv/read_table方法】
数据类型转换,加载datetime,使用strptime对文本伪时间类型转换为python的时间类型,同理转换int,灵活转化bool型的技巧
修改表格列名的方式,创建新列名,将原列传递赋值给新列明,删除原来列名
对表格的每行进行巡遍,使用for语句