DataWhale-动手学数据分析-6月组队学习

文章目录


第一章—数据载入及初步观察

数据来源及背景


这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。
数据链接:https://www.kaggle.com/c/titanic/overview

1.1载入数据

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.1.1 任务一:导入numpy和pandas

#写入代码
import numpy as np
import pandas as pd

1.1.2 任务二:载入数据

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

#写入代码
df = pd.read_csv('train.csv')#使用相对路径
#head()函数用于观察数据
df.head(5)#5表示观察5列数据

在这里插入图片描述

#写入代码
df = pd.read_csv(r'C:\Users\金中茂忠哥\Desktop\数据分析-DataWhale\hands-on-data-analysis-master\第一单元项目集合\train.csv')#这里需要加r转义符,不然可能会报错
df.head(3)

在这里插入图片描述

【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?

#下面使用pd.read_table()读取数据
tf = pd.read_table('train.csv')
tf.head(3)

在这里插入图片描述

#下面使用pd.read_table()读取数据
tf1 = pd.read_table('train.csv',nrows = 5)#只读取5行数据
print(tf1)
print("pd.read_table读取数据行列数为:",tf1.shape)

在这里插入图片描述

#下面使用pd.read_csv()读取数据
df1 = pd.read_csv('train.csv',nrows = 5)#只读取5行数据
print(df1)
print("pd.read_csv读取数据行列数为:",df1.shape)

在这里插入图片描述

read_csv()和read_table()都是是加载带分隔符的数据,每一个分隔符作为一个数据的标志,但二者读出来的数据格式还是不一样的。
read_table是以制表符 \t 作为数据的标志,也就是以行为单位进行存储。
read_csv是以逗号为分隔符。
两者读取出来的数据行列数是不同的,read_table每行所有元素作为一个维度储存在一起,即只有一列;read_csv将每个元素作为一列进行储存。
因此,使用read_csv读取出来的数据格式为(5,12);使用read_table读取出来的数据格式为(5,1)。

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

#写入代码
chunker = pd.read_csv('train.csv',chunksize = 1000)

【思考】什么是逐块读取?为什么要逐块读取呢?
逐块读取:将数据分成小块按块读入,得到的对象指向了多个分块对象,但并没有将实际数据先读入,而是在提取数据时才将数据提取进来。
原因:在处理很⼤的⽂件时,可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源。数据的处理和清洗经常使用分块的方式处理,这能大大降低内存的使用量,但相比会更耗时一些。


【提示】大家可以chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?

 #设置chunksize参数,来控制每次迭代数据的大小
    chunker = pd.read_csv("train.csv",chunksize=300)
    for piece in chunker:
        print(type(piece))
        #<class 'pandas.core.frame.DataFrame'>
        print(len(piece))

在这里插入图片描述
可看到chunker被分块读取

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

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

#写入代码
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df.head()

在这里插入图片描述

1.2 初步观察

导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等

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

#写入代码
df.info()
#info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息,
#包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。

在这里插入图片描述

【提示】有多个函数可以这样做,你可以做一下总结 info()和describe()

#describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;
#类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。
df.describe()

在这里插入图片描述

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

#写入代码
df.head(10)

在这里插入图片描述

#写入代码
df.tail(15)

在这里插入图片描述

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

#写入代码
df.isnull().head()

在这里插入图片描述

1.3 保存数据

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

#写入代码
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’uft-8‘‘`
df.to_csv('train_chinese.csv')

1.4 知道你的数据叫什么

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

#写入代码
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1

在这里插入图片描述

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2

在这里插入图片描述

ndarray是Numpy库中的矩阵模块,可以创建n维的数组对象,所有元素必须是相同的类型,比如你的元素是字符,那就全部都是字符;
series类似于1维数组,由索引+数值组成;
dataframe是非常常见的一个表格型数据结构,每一列可以是不同的数值类型,有行索引、列索引。平常用Python处理xlsx、csv文件,读出来的就是dataframe格式。

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

#写入代码
df = pd.read_csv('train.csv')
df.head()

在这里插入图片描述

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

#写入代码
df.columns

在这里插入图片描述

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

#写入代码
df['Cabin'].head(3)

#写入代码
df.Cabin.head(3)

在这里插入图片描述

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

经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去

#写入代码
test_1 = pd.read_csv('test_1.csv')
test_1.head(3)
#写入代码
del test_1['a']
test_1.head(3)

在这里插入图片描述

【思考】还有其他的删除多余的列的方式吗?

# 思考回答
test_1 = pd.read_csv('test_1.csv')
test_1.pop('a')
test_1.head(3)

1.5 筛选的逻辑

表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。

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

#写入代码
df[df["Age"]<10].head()

在这里插入图片描述

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

#写入代码
midage = midage.reset_index(drop=True)
midage.head(3)
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"的数据显示出来

#写入代码
midage.iloc[[100,105,108],[2,3,4]]

在这里插入图片描述

【思考】对比iloc和loc的异同
loc是根据index来索引,比如下边的df定义了一个index,那么loc就根据这个index来索引对应的行。
iloc并不是根据index来索引,而是根据行号来索引,行号从0开始,逐次加1。

1.6 了解你的数据吗?

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

frame = pd.DataFrame(np.arange(8).reshape((2,4)),
                    index = ['2','1'],
                    columns = ['d','a','b','c'])
frame

在这里插入图片描述

【代码解析】
pd.DataFrame() :创建一个DataFrame对象
np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
index=['2, 1] :DataFrame 对象的索引列
columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的索引行

【总结】下面将不同的排序方式做一个总结
1.让行索引升序排序

#代码
frame.sort_index()

在这里插入图片描述
2.让列索引升序排序

#代码
frame.sort_index(axis=1)

在这里插入图片描述
3.让列索引降序排序

#代码
frame.sort_index(axis=1,ascending = False)

在这里插入图片描述
4.让任选两列数据同时降序排序

#代码
frame.sort_values(by = ['a','c'],ascending = False)

在这里插入图片描述

1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?

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

在这里插入图片描述

【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例。

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

# 具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分

#自己构建两个都为数字的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_a+frame1_b

在这里插入图片描述
两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

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

max(text['兄弟姐妹个数']+text['父母子女个数'])
#10

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

frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2

在这里插入图片描述

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

#代码
text['票价'].describe()

从上面数据我们可以看出, 一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。

text['父母子女个数'].describe()

可看出,75%的人没有父母子女。

总结

数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。
本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值