一起学数据分析 task01 数据载入及探索性数据分析

本教程详细介绍了Pandas库在数据加载、观察、处理和分析方面的方法,包括数据载入、查看基本信息、筛选逻辑、数据排序、统计计算等。通过泰坦尼克号数据集,展示了如何查看数据分布、缺失值检查、数据筛选以及对特定列的操作。此外,还涉及到了数据保存、列名修改和删除多余列的操作,为后续深入的数据分析打下基础。
摘要由CSDN通过智能技术生成

学习目录

第一节 数据载入及初步观察

1.1 载入数据

1.1.1 任务一:导入numpy和pandas

import numpy as np
import pandas as pd

1.1.2 任务二:载入数据

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

#导入相对路径数据
df=pd.read_csv('train.csv')

(2) 使用绝对路径载入数据

#绝对路径导入数据
path=os.path.abspath('train.csv')
df = pd.read_csv(path)
扩展

(1)显示表格行列数

#行列数
df.shape

(2)转置表格

#转置
df.T

转置前
转置前
转置后
转置后
(3)read_table默认无分隔

#无分隔数据
pd.read_table(path)

read_csv默认用逗号分隔,table用逗号分隔需设置参数

#以逗号为分割符
pd.read_table(path,sep=',')

1.1.3 任务三:每10行为一个数据模块,逐块读取

#逐块读取
df = pd.read_csv('train.csv',chunksize=10)
df.get_chunk()

在这里插入图片描述
逐块读取是为了将长文件可以截断读取分析。

逐块读取的类型和非逐块读取类型比较:
在这里插入图片描述
逐块读取不可进行head显示。

1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]

PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口

第一种方法:

#将表头改为中文
df.columns = ['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']

在这里插入图片描述
第二种方法:

#其他方法:多加一行
df = pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'])
df

在这里插入图片描述
在读取文件时就改名,最后多加了一列,之前的列表名变为其中的行,一般不采取这种方式。(容易混淆数据)

1.2 初步观察

1.2.1 任务一:查看数据的基本信息

举例:

#1.查看数据基本信息
df.info()

在这里插入图片描述

#2.查看基本信息
df.describe()
#mean平均 std标准差

在这里插入图片描述

1.2.2 任务二:观察表格前10行的数据和后15行的数据

head()和tail()默认显示5列。

#观察表格前10行的数据
df.head(10)

在这里插入图片描述
在这里插入图片描述

#观察表格后15行的数据
df.tail(15)

在这里插入图片描述

1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False

#判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull()

在这里插入图片描述

1.3 保存数据

1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

df.to_csv('train_chinese.csv')

第二节 pandas基础

1.4 知道你的数据叫什么

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]

Series

第一个例子:

#Series带索引一维数组类型,random获取随机数
s=pd.Series(np.random.randn(5),index=['a','b','c','d','e'])

在这里插入图片描述
第二个例子:
在这里插入图片描述
第三个例子:

#字典形式
s=pd.Series({'b':1,'a':0,'e':2})
s

在这里插入图片描述

DataFrame

第四个例子:

#DataFrame二维数组,可用Series生成
d = {'one' : pd.Series([1.,2.,3.],index=['a','b','c']),'two': pd.Series([4.,5.,6.,7.],index=['a','b','c','d'])}
df = pd.DataFrame(d)
df

在这里插入图片描述

1.4.2 任务二:根据上节课的方法载入"train.csv"文件

这里使用相对路径引入。

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

1.4.3 任务三:查看DataFrame数据的每列的名称

df.columns

在这里插入图片描述

1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]

1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]

第一种方法:

df.Cabin

在这里插入图片描述
第二种方法:

df['Cabin']

在这里插入图片描述
类型查看:
在这里插入图片描述
可变成DataFrame类型:

#变成DataFrame类型
df[['Cabin']]

在这里插入图片描述

1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

加载文件"test_1.csv"

test_1 = pd.read_csv('test_1.csv')
test_1.head()

在这里插入图片描述
可以发现a列多余,将多出的a列删除:
第一种方式:

#删除多余的列
del test_1['a']
test_1.head()

第二种方式:

test_1.pop('a')
test_1.head()

第三种方式:

#生成删除列的数组的副本,文件本身未删除列
test_1.drop(['a'],axis=1)

第四种方式:

#不返回副本,直接保存进原文件
test_1.drop(['a'],axis=1,inplace = True)
test_1.head()

在这里插入图片描述

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

#列元素隐藏
test_1.drop(['PassengerId','Name','Age','Ticket'],axis=1)

在这里插入图片描述

1.5 筛选的逻辑

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

#显示年龄在10岁以下的乘客信息
df[df["Age"]<10]

在这里插入图片描述

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

#将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head()

在这里插入图片描述

midage1 = df[(df["Age"]>10)|(df["Age"]<50)]
midage1.head()

在这里插入图片描述
比较&与|筛选数据的区别:
在这里插入图片描述

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

#不加reset_index则会索引错误,寻找到原始数据索引100的,而不是midage中的第100行
midage.loc[[100],['Pclass','Sex','Name']]

在这里插入图片描述

midage1 = midage.reset_index(drop=True)
midage1.head()
midage1.loc[[100],['Pclass','Sex','Name']]

在这里插入图片描述
我们可以对比两种方式的索引,即可看出问题所在:
在这里插入图片描述
我们可以看出,不加reset_index则会索引错误,寻找到原始数据索引号,而而不是设置的midage中的索引号。、

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

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

在这里插入图片描述

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

#iloc用索引
#使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage1.iloc[[100,105,108],[2,3,4]]

在这里插入图片描述
通过对比可知,使用iloc方法时,参数是其列的索引号。

第三节 探索性数据分析

先导入所需包和数据:

在这里插入图片描述在这里插入图片描述

1.6 了解你的数据吗?

1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序

#升序排序
sample= pd.DataFrame(np.random.randn(3, 3), 
                     index=list('213'), 
                     columns=list('bca'))

在这里插入图片描述

#让某一列从小到大排序
sample.sort_values('b')

在这里插入图片描述

# 让行索引升序排序
sample.sort_index()

在这里插入图片描述

# 让列索引升序排序
sample.sort_index(axis=1)

在这里插入图片描述

# 让列索引降序排序
sample.sort_index(axis=1, ascending=False)

在这里插入图片描述

# 让任选两列数据同时降序排序,无法同时时,则优先选by中第一个列优先排序
sample.sort_values(by=['c', 'a'], ascending=False)

在这里插入图片描述

1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么

#对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
text.sort_values(by=['票价','年龄'], ascending=False)

在这里插入图片描述
发现: 优先根据票价排序,然后再根据年龄在票价基础上排序。并且票价越高死亡率越低,其中在票价最高的人里面没有一人死亡。

1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

#利用Pandas进行算术计算,计算两个DataFrame数据相加结果
x= pd.DataFrame(np.random.randn(3, 3), 
                     index=list('213'), 
                     columns=list('bca'))
x

在这里插入图片描述

y= pd.DataFrame(np.random.randn(3, 3), 
                     index=list('413'), 
                     columns=list('bcd'))
y

在这里插入图片描述

#行和列都相同才有计算结果
x+y

在这里插入图片描述

1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

#通过泰坦尼克号数据如何计算出在船上最大的家族有多少人
max(text['堂兄弟/妹个数'] + text['父母与小孩个数'])

在这里插入图片描述

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

#使用Pandas describe()函数查看数据基本统计信息,第一节运行过
text.describe()

在这里插入图片描述
数据显示并不是很直观,我们可以引入直方图来看:

#画直方图
from matplotlib import pyplot as plt
#注意是否有空值,有空值会报错,例如年龄
plt.hist(text['是否幸存'])

在这里插入图片描述
利用直方图,我们可以从图中清楚的看到幸存者人数和死亡人数分别有多少。

1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?

首先来分析一下票价:

text['票价'].describe()

在这里插入图片描述
可得票价平均32元,但最高票价达到512元。我们依旧可以利用图表来进行观察。

plt.hist(text['票价'])

在这里插入图片描述
我们可以发现票价分布具有长尾。

下面分析父母与小孩个数:

text['父母与小孩个数'].describe()

在这里插入图片描述
我们同样可以看出他的分布具有长尾,平均个数0.38.但最大个数为6个。下面是直方图的直观表达:

plt.hist(text['父母与小孩个数'])

在这里插入图片描述
我们可以明显看出独自出游的人占大多数。

【总结】

本章中我们通过对基础函数的操作对数据进行了初步统计查看,并逐渐构建了如何进行数据分析的思维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值