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

一起学数据分析 task01 数据载入及探索性数据分析,第1张

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

学习目录
  • 第一节 数据载入及初步观察
    • 1.1 载入数据
      • 1.1.1 任务一:导入numpy和pandas
      • 1.1.2 任务二:载入数据
        • 扩展
      • 1.1.3 任务三:每10行为一个数据模块,逐块读取
      • 1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
    • 1.2 初步观察
      • 1.2.1 任务一:查看数据的基本信息
      • 1.2.2 任务二:观察表格前10行的数据和后15行的数据
      • 1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
    • 1.3 保存数据
      • 1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
  • 第二节 pandas基础
    • 1.4 知道你的数据叫什么
      • 1.4.1 任务一:pandas中有两个数据类型Dateframe和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子[开放题]
        • Series
        • Dataframe
      • 1.4.2 任务二:根据上节课的方法载入"train.csv"文件
      • 1.4.3 任务三:查看Dataframe数据的每列的名称
      • 1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]
      • 1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
      • 1.4.6 任务六: 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素
    • 1.5 筛选的逻辑
      • 1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
      • 1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
      • 1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
      • 1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
      • 1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
  • 第三节 探索性数据分析
    • 1.6 了解你的数据吗?
      • 1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
      • 1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么
      • 1.6.3 任务三:利用Pandas进行算术计算,计算两个Dataframe数据相加结果
      • 1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
      • 1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
      • 1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
  • 【总结】

第一节 数据载入及初步观察 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['父母与小孩个数'])


我们可以明显看出独自出游的人占大多数。

【总结】

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5677775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存