将收集来数据保存在本地。
如本文使用的数据就是从https://www.kaggle.com/c/titanic/overview中下载的。
1.1.1 导入numpy和pandas库# numpy是一个处理多维矩阵的一个库,里面包含各种数学方法 # pandas是一个强大的分析结构化数据的工具集;他的使用基础Numpy;用于数据挖掘和数据分析,同时也提 # 供数据清洗功能 import numpy as np import pandas as pd1.1.2 载入数据
(1)使用相对路径加载数据
data=pd.read_csv('train.csv) print(data)
(2)使用绝对路径加载数据
#在绝对路径中/和具有相同作用,因为train.csv的首字母为t用/会被误认为换行符t
#若依旧想使用可以在train.csv前加\以示区分
data=pd.read_csv('D:/py代码/hands-on-data-analysis-master_1/train.csv')
print(data)
(3)检验是否正确引入数据
#在检验大量数据是否引入正确时,常用pd.head()查看数据的前几行而不是全部数据。 #pd.head()可以在()里面填写想要查看的行数,如果不填写,默认是n=5 print(pd) print(pd.head())
思考:1.pd.read_csv()与pd.read_table()的不同,通过什么方法可以使的两种效果相同?
2.‘.tsv’和'.csv'的区别,如何加载这两种数据集
回答:1.pd.read_csv()是以“,”为分隔符,pd.read_table()是以“t”换行符为分隔符。两者是通用的。可以通过seq和delimiter参数进行控制2
#两两都是相同表达。
data=pd.read_table('train.csv',seq=',')
# data=pd.read_csv('train.csv')
data=pd.read_csv('train.csv',seq='t')
#data=pd.read_table('train.csv')
2.‘.tsv’和'.csv'都属于文本文件,但两者文件的字段分隔不同,'.tsv'是由制表符隔开,而'.csv'文件是逗号隔开。两种格式的文件都可以通过pd.read_csv()与pd.read_table()进行读取,只是在sep和delimiter参数。
1.1.3 逐块读取,每1000行为一个数据模块chunker = pd.read_csv('train.csv', chunksize=1000)
思考:1.什么是逐块读取?2.为什么要逐块读取呢?
回答:1.遇到大文件,我们读取其中的一部分数据或对文件进行逐块处理。
2.使用逐块读取的原因是因为当使用pandas处理大文件时,通过将文件逐步分成一个小片段来进行处理能够提高pandas处理文件的效率。
1.1.4 将表头改成中文,索引改成乘客ID#方法一:通过data.columns直接进行修改
data.columun=[ names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船价信息', '票价', '客舱'']
#方法二:通过rename进行修改
df.rename(columns={'PassengerId':'乘客ID','Survived': '是否幸存','Pclass':'乘客等级(1/2/3等舱位)','Name':'乘客姓名','Sex': '性别','Age':'年龄','SibSp':'堂兄弟/妹个数','Parch': '父母子女个数','Ticket':'船票信息','Fare':'票价', 'Cabin':'客舱','Embarked':'登船港口'},inplace=True)
#方法三:使用names进行修改
df =pd.read_csv('train.csv', names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船价信息', '票价', '客舱', '登船港口'], index_col='乘客ID', header=0)
1.2 初步观察数据
导入数据,对数据的整体进行概览。
1.2.1 查看数据的基本信息(对于一个数据,还可以从哪些方面来观察?)#查看Dataframe对象的前n行 data.head(n) #查看Dataframe对象的最后n行 data.tail(n) #查看数据的行列数各是多少 data.shape #查看索引、数据类型和内存信息 data.info() #查看数值型列的汇总统计,返回计数、均值、标准差、最小最大值、25%50%75%分位数,percentiles 0.05,0.95分位数 data.describe(percentiles=[.05, .25, .75, .95]) #快速查看数据列有哪些分类内容,类似groupby data.unique() #查看Series对象的唯一值和计数 s.value_counts(dropna=False) #查看Dataframe对象中每一列的唯一值和计数 data.apply(pd.Series.value_counts) #返回所有列的求和值 data.sum() #返回所有列的均值 data.mean() #返回列与列之间的相关系数 data.corr() #返回每一列中的非空值的个数 data.count() #返回每一列的最大值 data.max() #返回每一列的最小值 data.min #返回每一列的中位数 data.median() #返回每一列的标准差 data.std()1.3 保存数据
# 将上述处理完的数据保存
# 在保存数据时,为了防止pandas自己帮助行和列的名称,一般会将index参数设置为Fales
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入encoding='GBK' 或者encoding = utf-8
data.to_csv('train_chinese.csv')
第二部分 pandas基础
1.4 知道你的数据叫什么
思考:我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
回答:pandas读取csv文件后数据,其数据类型为Dataframe类型
1.4.1 任务一:pandas中有两个数据类型Dateframe和Series,他们之间的区别。并举例说明。1.Series和数组numpy.array类似
#输出一个数组 #Series是有索引的,如果没有制定索引,会以数字自动生成。 s1=pd.Series([1,2,3,4,5]) s2=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
2.Series和有定长的有序字典
s3=pd.Series({'a':1,'b':5,'c':6,'d':'7'})
3.Dataframe相当于表格,有行表头和列表头
#构建Dataframe最常用的方法就是直接传入一个等长发列表或者数组组成的字典
data={'name':['jdk','dww','bhjf','fwb'],
'age':[15,68,51,23],
'ins':['fgg','gg','vrb','rbr']}
frame=pd.Dataframe(data)
print(frame)
1.4.2 载入上一章的train.csv文件
data=pd.read_csv('train.csv')
1.4.3 查看Dataframe数据的每列的名称
data.columns1.4.4 查看‘Cabin’列的所有项
data['Cabin'].head() data.Cabin.head()1.4.5 加载‘test_1.csv’,然后对比‘train.csv’,查看是否有多余项,并删除
#读取tset文件并对比是否有多余项
test_data=pd.read_csv('test_1.csv')
#发现‘a’项是多余的
#第一种:使用del
del test_data['a']
#第二种:使用drop,不改变内存,就是再次读取该数据是还是原始数据
trop_test_data=test_data.drop('a',axis=1)
#第三种:使用drop,改变内存,再次读取时是改变后的数据
trop_test_data=test_data.drop('a',axis=1,inplace=True)
1.4.6 将['Passengers','Name','Age','Ticket']这几列元素隐藏
#隐藏使用drop,想删除可以del或在后面添加inplace=True data.drop(['Passengers','Name','Age','Ticket'],axis=1)1.5 筛选逻辑 1.5.1 以‘Age’为筛选条件,显示年龄为10岁以下的乘客信息,显示10岁以上50岁以下乘客信息,并命名为midage
data_age_10down=data[data['Age']<10] mindage=data[(data['Age']>10)&(data['Age']<50)]1.5.2 将midage的数据中的第100行的‘Pclass’和‘Sex’的数据显示出来
midage=midage.reset_index(drop=True) midage.loc[[100],['Pclass','Sex']] #使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来 midage.loc[[100,105,108],['Pclass','Name','Sex']] #使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来 midage.iloc[[100,105,108],[2,3,4]]
思考:1.reset_index()函数的作用
2.如果不用这个函数,下面的任务会出现什么情况?
回答:
1.reset_index()可以重置索引,drop参数为True时,将index列隐藏,否则原来的索引新生成一列名为'index'的列。
2.后面索引容易出现逻辑错误
思考:对比iloc和loc的异同
回答:
loc——通过行标签索引行数据 iloc——通过行号索引行数据
loc按照标签,所以相当于前闭后闭 iloc前闭后开
第三部分 探索性数据分析 1.6 了解数据 1.6.1 利用Pandas对示例数据进行排序,要求升序# by=的参数就是需要排序的列,ascending为True表明为升序,False为降序,默认为升序 # 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7 df=pd.Dataframe(data,index=['2','1'],columns=['d',''a','b','c']) df.arange(8).reshape((2, 4)) df.sort_values(by='a',ascending=True) # Dataframe数据的排序可以通过值排序,也可以通过索引进行排序 #通过索引进行排序 df.sort_index() #通过列索引进行升序排序 df.sort_index(axis=1) #通过列索引进行降序排序 df.sort_index(axis=1,ascending=False) #通过任意选择两列数据同时进行降序排序 df.sort_value(by=['a','d'],ascending=False)1.6.2对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
train_chinese_data.sort_values(by=['票价','年龄'],ascending=False)1.6.3 利用Pandas进行算术计算,计算两个Dataframe数据相加结果
new_frame=frame1_a+frame1_b1.6.4 通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
#还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母#子女个数’),我们该怎么做呢? max(text['兄弟姐妹个数'] + text['父母子女个数'])1.6.5 学会使用Pandas describe()函数查看数据基本统计信息
frame2.describe()



