动手学数据分析_task01

动手学数据分析

​ 通过动手学数据分析这门课程来了解数据分析的基本流程以及python的基本使用。

第一部分 数据载入以及初步观察

1.1加载数据

数据集下载地址:https://www.kaggle.com/c/titanic/overview

1.1.1导入numpy和pandas
import numpy as np
import pandas as pd

提示:如果导入第三方库失败,可能python编译器中没有安装该第三方库,通过pip或者conda进行安装,如果出现时间超时等情况,可以通过镜像进行安装

pip install numpy -i https://pypi.douban.com/simple/
pip install pandas -i https://pypi.douban.com/simple/
1.1.2载入数据

(1)使用相对路径加载数据

data = pd.read_csv('train.csv')
data

在这里插入图片描述
(2)使用绝对路径加载数据

data = pd.read_csv(r'C:\Users\Administrator\Desktop\jupyter\train.csv')
data

在这里插入图片描述

思考:pd.read_csv()与pd.read_table()的不同,通过什么方法使得两者效果相同? ‘.tsv’与’.csv’的区别,如何加载这两种数据集?

解析:

  1. pd.read_csv()读取是以’,‘分割的文件到DataFrame的,而pd.read_table()读取是以’/t’分割的文件到DataFrame的。实际上两个函数是通用的,可以通过函数参数中的sep参数来控制对文件的读取。如下:
data = pd.read_table('train.csv')
data

在这里插入图片描述

data = pd.read_table('train.csv',sep = ',')
data

在这里插入图片描述

2.’.tsv’和’.csv’都属于文本文件,但是两者文件的字段分隔不同,’.tsv’文件是由制表符隔开的,而’.csv’文件是由逗号隔开。

两种格式的文件都可以通过pd.read_csv()或者pd.read_table()进行读取,只是在sep参数上进行选择。

1.1.3逐块读取文件,每1000行为一个数据模块
#逐块读取文件通过chunksize参数进行设置
chunker = pd.read_csv('train.csv',chunksize = 1000)
for piece in chunker:
	print(piece)

使用逐块读取的原因是因为当使用pandas处理大文件时,通过将文件逐步分成一个小片段来进行处理能够提高pandas处理文件的效率。

1.1.4将表头改为中文,索引改为乘客ID
#方法一,通过data.columns进行修改
data.columns = ['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母				与小孩个数','船票信息','票价','客舱','登船港口']
#方法二,通过data.rename进行修改
data.rename(columns={'PassengerId':'乘客ID','Survived':'是否幸存','Pclass':'乘客等级(1/2/3等舱位)',
            'Name':'乘客姓名','Sex':'性别','Age':'年龄','SibSp':'堂兄弟/妹个数','Parch':'父母与小孩个数',
            'Ticket':'船票信息','Fare':'票价','Cabin':'客舱','Embarked':'登船港口'},inplace = True)

1.2初步观察数据

导入数据后,对数据的整体进行概览

1.2.1查看数据的基本信息
  1. data.describe(): # 描述性统计信息
  2. data.index: # 标签
  3. data.index: # 标签
  4. data.index.values: # 标签
  5. data.values: # 数据
  6. data.to_numpy(): # 数据 (推荐)
  7. data.head(n): # 前n个
  8. data.tail(n): # 尾n个
  9. data.memory_usage(): # 占用内存(字节B)
  10. data.name: # 名字
  11. data.dtype: # 类型
data.discribe()
data

在这里插入图片描述

1.2.2查看数据的前10行和后15行
data.head(10)

在这里插入图片描述

data.tail(15)

在这里插入图片描述

1.2.3判断数据是否为空,空的地方返回True,其余地方返回False

pandas的空值判断的函数有pd.isnull,pd.isna

其中pd.isnull可以对数值型空值、字符串空值以及python的None进行判断,pd.isna则可以对数值型空值、字符串空值、时间类型空值以及python的None进行判断。

pd.isna(data)

在这里插入图片描述

思考:还可以从哪些方面对数据进行分析

个人解析:可以从数据的变化幅度以及数据对于问题的相关性进行分析。

1.3保存数据

#将中文表头的数据保存
data.to_csv('train_chinese.csv',index = False)

注意:在保存数据时,为了防止pandas自己帮忙加上行和列的名称,一般会将index参数设置为Fales

第二部分 pandas基础

1.4 知道你的数据叫什么

通过第一章使用pandas读取的csv文件后的数据,我们知道读取出来的数据类型为DataFrame类型

1.4.1 pandas中有两种数据类型,分别是DataFrame和Series数据类型,这两种数据类型有什么区别

1.Series和数组numpy.array类似

s1 = pd.Series([1,2,3,4,5,6])

在这里插入图片描述

可以看出Series是有索引的,如果未指定索引,则会以数字自动生成

s2 = pd.Series([1,2,3,4,5,6],index=['a','b','c','d','e','f'])

在这里插入图片描述

2.Seies还可以看成是一个定长的有序字典

s3 = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5,'f':6})

在这里插入图片描述

3.DataFrame相当于有表格,有行表头和列表头

构建DataFrame最常用的方法就是直接传入一个等长列表或者数组组成的字典

data = {'name':['jack','roob','koma','niko'],
		'age':[16,24,32,23],
		'ins':['game','reading','sleeping','game']}
frame = pd.DataFrame(data)
frame

在这里插入图片描述

1.4.2载入上一章的train.csv文件
data = pd.read_csv('train.csv')

在这里插入图片描述

1.4.3查看DataFrame数据的每列的项
data.columns

在这里插入图片描述

1.4.4查看’cabin’列的所有项
data['Cabin'].head(5)

在这里插入图片描述

data.Cabin.head(5)

在这里插入图片描述

1.4.5加载"test_1.csv"文件,然后对比"train.csv",查看是否有多余的列,并删除
test_data = pd.read_csv('test_1.csv')
test_data.head(5)

在这里插入图片描述

可以看出相比于train.csv文件中,test_1.csv文件中多出了一列a,所以要将该列删除

del test_data['a']
test_data.head(5)

在这里插入图片描述

思考:还有其他删除了的方法吗?

解析:除了上面使用del方法删除列以外还可以使用drop方法,drop方法的使用如下:

1.不改变内存,就是再次读取该数据时还是原始数据。

drop_test_data = test_data.drop('a',axis=1)
drop_test_data.head(5)

在这里插入图片描述

2.改变内存,再次读取test_data数据时显示改变后的数据

test_data.drop('a',axis=1,inplace=True)
test_data.head(5)

在这里插入图片描述

1.4.6将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几列元素隐藏

对于隐藏部分列元素,则可以使用上诉的drop函数,但是要使用不修改内存的方式。

data.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(5)

在这里插入图片描述

相比于1.4.5中删除某一列元素的方法,在第二个方法中也是使用的drop方法,但是如果要彻底删除的话,则需要添加参数inplace为True。如果没有使用这个参数的话,原数据就不会覆盖。

1.5筛选逻辑

1.5.1以"Age"为筛选条件,显示年龄为10岁以下的乘客信息
data_age_down_10 = data[data["Age"] < 10]
data_age_down_10.head(5)

在这里插入图片描述

1.5.2以"Age"为筛选条件,显示10岁以上50岁以下的乘客信息,并命名为midage
midage = data[(data["Age"]>10) & (data["Age"]<50)]
midage.head(5)

在这里插入图片描述

1.5.3将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

其中这第100行是针对midage这个数据的,所以要先对这个midage数据重新设置索引。不然在后面索引某行的话容易出现逻辑错误。

midage = midage.reset_index(drop=True)
midage.head(5)

在这里插入图片描述

其中drop=True是将index列隐藏

然后读取100行数据中的Pclass和Sex列,因为要读取的列都是有对应标签的,所以使用loc方法更为合适。

midage.loc[[100],['Pclass','Sex']]

在这里插入图片描述

1.5.4使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]

在这里插入图片描述

1.5.5使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

使用iloc方法,则填入的参数为所要查看数据对应的位置

midage.iloc[[100,105,108],[2,3,4]]

在这里插入图片描述

第三部分 探索性数据分析

导入numpy和pandas库以及"train_chinese.csv"数据

import numpy as np
import pandas as pd
train_chinese_data = pd.read_csv('train_chinese.csv')
train_chinese_data.head(5)

在这里插入图片描述

1.6了解数据

教材《Python for Data Analysis》第五章

1.6.1利用pandas对示例数据进行排序,要求升序
#自己构建一个DataFrame对象
data = np.arange(8).reshape((2,4))
df = pd.DataFrame(data,index=['2','1'],columns=['d','a','b','c'])
df

在这里插入图片描述

根据某一列的值进行升序排列

df.sort_values(by='a',ascending=True)

在这里插入图片描述

其中by=的参数就是针对所要排序的列,ascending为True表明排序为升序,False为降序

对于DataFrame数据的排序,可以通过值排序,也可以通过索引进行排序

1.通过行索引进行升序排序

df.sort_index()

在这里插入图片描述

2.通过列索引进行升序排序

df.sort_index(axis=1)

在这里插入图片描述

3.通过列索引进行降序排序

df.sort_index(axis=1,ascending=False)

在这里插入图片描述

4.通过任意选择两列数据同时降序排序

df.sort_value(by=['a','d'],ascending=False)

在这里插入图片描述

1.6.2对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?
#对票价和年龄进行降序排序,并查看前20数据
train_chinese_data.sort_values(by=['票价','年龄'],ascending=False).head(5)

在这里插入图片描述

思考:对于根据列排序时,如果将票价放在第一位,那么会首先根据票价进行排序,如果将年龄放第一位会根据年龄大小进行排序。

train_chinese_data.sort_values(by=['年龄','票价'],ascending=False).head(5)

在这里插入图片描述

通过这两中不同的排序方式可以看出,票价高的船舱位置可能更好,逃生机会更大,所以存活率更高。年龄过大的,由于身体原因存活率很低,根据票价排序中也可以看出,部分票价高的,但是由于年龄较大二没能存活下来。

1.6.3利用Pandas进行算术计算,计算两个DataFrame数据相加结果
#创建两个DataFrame数据
frame1_a = pd.DataFrame(np.arange(9).reshape(3,3),
						columns=['a','b','c'],
						index=['one','two','three'])
frame1_b = pd.DataFrame(np.arange(12).reshape(4,3),
						columns=['a','e','c'],
						index=['first','one','two','second'])
frame1_a

在这里插入图片描述

frame1_b

在这里插入图片描述

将frame1_a和frame1_b进行相加

new_frame = frame1_a + frame1_b
new_frame

在这里插入图片描述

DataFrame相加是对应的行和列相加,如果没有对应的行和列则变为NaN

1.6.4通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
'''
最大家族人数是兄弟姐妹个数+父母子女个数
'''
family_numbers = train_chinese_data['堂兄弟/妹个数'] + train_chinese_data['父母与小孩个数']
max_family = max(family_numbers)
max_family

在这里插入图片描述

1.6.5 学会使用Pandas describe()函数查看数据基本统计信息

构建一个简单的DataFrame数据

frame2 = pd.DataFrame([[2.5,3,np.nan],
					[3,np.nan,5],
					[5,6,3]],
					index=['a','b','c'],columns=['one','two','three'])
					frame2

在这里插入图片描述

调用describe函数,查看frame2的基本信息

frame2.describe()

在这里插入图片描述

1.6.6分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
'''
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
'''
select_data = train_chinese_data[['票价','父母与小孩个数']]
select_data.describe()

在这里插入图片描述

从这两列数据的基本统计中可以看出票价的标准差很大,最大值为512.32920,有百分之七十五的人票价低于31.通过票价大概能够评估出该乘客所在船舱的好坏,间接反映逃生几率,所以票价能够作为一个有效的特征。而父母与小孩个数这一个特征,标准差为0.806057,其他统计数据中大部分都为0,所以将该特征作为一个输入特征并不理想。

以上便是Datawhale动手学数据分析第一章的内容,新手学习,有错误的请理解理解,哈哈!!

同时感谢Datawhale团队的付出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值