本记录为本人参加datawhale数据分析(泰坦尼克号任务项目)学习笔记,不足之处多多指教。
一、数据如何加载读取和数据观察
1、numpy 和 pandas 标准库导入
系统安装的python版本没有安装这个numpy、pandas库先行安装这个两个库
pip install numpy
pip install pandas
因为我使用anaconda作为python运行解释器自动已经安装numpy\pandas库可以直接导入库
import numpy as np
import pandas as pd
2、使用pandas读取数据
(1)相对路径导入数据(如果导入数据同脚本在同一个文件夹里面可以使用相对路径导入)
df = pd.read_csv("train.csv")
df.head()
(2)绝对路径导入数据(如果导入数据同脚本不在同一个文件夹里面基本上是使用绝对路径导入)(路径中将\改成/)
df = pd.read_csv("D:/python/learn/train.csv")
df.head()
补充:
(1)pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?
这两个主要差异为sep的分割符不同 pd.read_csv()的sep=",",而pd.read_table()的sep="\t" 要想实现相同功能修改下sep值.
(2)tsv’和’.csv’的不同,如何加载这两个数据集?
TSV与CSV的区别: 1)从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;
3、按块读取数据
逐块读取:将数据分成小块按块读入,得到的对象指向了多个分块对象,但并没有将实际数据先读入,而是在提取数据时才将数据提取进来。原因:在处理很⼤的⽂件时,可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源。数据的处理和清洗经常使用分块的方式处理,这能大大降低内存的使用量,但相比会更耗时一些。
chunker = pd.read_csv("train.csv",chunksize=1000)
4、将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
names、index_col、header参数值设定
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
二、数据观察需要对数据的整体结构和样例进行概览
1、info()函数用于提供一个数据集的基本信息(或者总结)。通常在读取一个数据表后,我们可以使用该函数来查看数据表的一些基本信息。
df.info()
2、head()函数和tail()函数用于读取数据前、后几行,默认为前、后5行数据,如果想读取前10行就修改下head()函数或tail()函数参数;
df.head(10)
df.tail(10)
3、isnull()函数用于判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull().head()
4、保存数据
将你加载并做出改变的数据,在工作目录下保存为一个新文件train_cny.csv
注意:不同的操作系统保存下来可能会有乱码。大家可以加入encoding='GBK' 或者 encoding = 'utf-8'
df.to_csv("train_cny.csv",encoding="utf-8")
三、pandas 基础知识
1、简单的来说pandas只有两种数据类型Series和DataFrame,Series你可以简单的理解为Excel中的行或者列,DataFrame可以理解为整个Excel表格,当然这只是形象的理解,实际上他们的功能要比Excel灵活的多。
注:
class pandas.Series(data = None,index = None,dtype = None,name = None,copy = False,fastpath = False )
class pandas.DataFrame(data = None,index = None,columns = None,dtype = None,copy = False )
s1 = pd.Series([1,2,3,4,5,6,2])
s2 = pd.Series([2,3,4,5,6,1],index=[1,2,3,4,5,6])
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame=pd.DataFrame(data)
print(frame)
2、载入"train.csv"文件,查看DataFrame数据的每列的名称
因为我文件和数据在同一文件所以采用相对路径载入数据
df = pd.read_csv("train.csv")
df.head()
然后查看每列名称
3、查看指定列名的数据可以使用以下两种方式,例如Cabin这列数据
df['Cabin']
df.Cabin
4、加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
1.del df['columns'] #改变原始数据
2.df.drop('columns',axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据
3.df.drop('columns',axis=1,inplace='True') #改变原始数据
test = pd.read_csv("test_1.csv")
#1、改变原数据
del test["a"]
#2、未改变原数据,产生新筛选数据
test = test.drop('a',axis=1)
df.drop(['PassengerId','Name','Age','Ticket'],axis=1)
#3、改变原数据
test.drop('a',axis=1,inplace=True)
5、表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
下面我们还是用实战来学习pandas这个功能。
pandas中的DataFrame进行条件筛选,即筛选出符合条件的数据条可以是等于(==)小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、不等于(!=)等情况;(&)表示两边同时满足,(|)表示两边或者关系
pandas数据merge功能默认的行为,其实默认下求取的就是两个数据的“交集”。
交集 pd.merge(df1,df2) 等同于 pd.merge(df1,df2,how=‘innter’)
并集 pd.merge(df1,df2,how=‘outer’)
5.1 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
df[df['Age']<10]
df[df.Age<10]
5.2 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
df[(df.Age > 10) & (df.Age < 50)]
5.3 将midage的数据中第100行的"Name"、“Pclass”、“Sex"的数据显示出来.
因为midage数据清洗时,原来的索引值不会变化,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引。
如果不重置将返回原来指定索引值,而非新表格数据重新索引值
loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
5.4 使用loc方法将midage的数据中第100,105,108行的"Pclass”,“Name"和"Sex"的数据显示出来,loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
5.5 使用iloc方法将midage的数据中第100,105,108行的"Pclass”,"Name"和"Sex"的数据显示出来,iloc函数:通过行号来取行数据(如取第二行的数据)
三、探索性数据分析
主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。
1、利用Pandas对示例数据进行排序,要求升序、降序
使用Pandas的.sort函数对数据表进行排序操作,下面是Pandas官方对.sort函数语法和使用方法的说明。sort函数主要包含6个参数,columns为要进行排序的列名称, ascending为排序的方式true为升序,False为降序,默认为true。axis为排序的轴,0表示index,1表示columns,当对数据列进行排序时,axis必须设置为0。inplace默认为False,表示对数据 表进行排序,不创建新实例。Kind可选择排序的方式,如快速排序等。na_position对NaN值的处理方式,可以选择first和last两种方式,默认为last,也就是将NaN值放在排序的结尾。
sort_values()函数和sort_index()函数将sort函数columns改成by参数指向要排列的列名其他参数一样。
#按C列进行降序排列
frmae.sort_values(by="c",ascending=False)
#让行索引升序排序
frmae.sort_index()
#让行索引降序排序
frmae.sort_index(ascending=False)
#让列索引降序排序
frmae.sort_index(axis=1, ascending=False)
#多例进行降序排序
test.sort_values(by=["票价","年龄"],ascending=False)
2、利用Pandas进行算术计算,计算两个DataFrame数据相加结果
基本的算术运算是四则运算(加、减、乘、除)和乘方等。Pandas中都实现了对应的算术运算函数,如add()、sub()、mul()、div()等,常用的算术运算函数见下表。
DataFrame与DataFrame之间的运算,由于DataFrame中的每一元素都由其行列索引唯一确定,也就是说DataFrame中的每一元素都有一个(行索引,列索引)构成的坐标 。因此对于不同的DataFrame,只用索引匹配上的数据,对应元素相关运算,对于没有匹配上的数据,返回的是NaN值 。
frame1_a + frame1_b
frame1_a - frame1_b
frame1_a * frame1_b
frame1_a / frame1_b
3、学会使用Pandas describe()函数查看数据基本统计信息
describe 函数相关基本统计信息
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
#表格每列统计信息
frame2.describe()
#具体某列统计信息
test["票价"].describe()
总结:
通过学习numpy、pandas库导入、数据加载、相关表格基础操作增删改查;pandas基础操作知识,数据筛选排序观察,探索数据分析。