【datawhale打卡】数据加载及探索性数据分析

第一次参加datawhale的打卡学习,在这里发布自己整理的学习笔记,并描述学习历程。

本次学习任务,是以kaggle上泰坦尼克的任务为背景,进行简单的实战数据分析全流程。

数据载入及初步观察

  1. 导入所需的第三方库

import numpy as py
import pandas as pd
  1. 载入数据(选择两种方法:相对路径和绝对路径)

我常用的载入数据方法,都是调用pandas中相关的函数来实现。

#相对路径
dt1=pd.read_csv('train.csv')
dt2=pd.read_csv('test_1.csv')
#绝对路径
pd.read_csv(r'C:\Users\Administrator\Desktop\6th\寒假\数据城堡_数分\第一次学习\train.csv')
pd.read_csv(r'C:\Users\Administrator\Desktop\6th\寒假\数据城堡_数分\第一次学习\test.csv')

训练集数据

测试集数据

探索:pd.read_csv()和pd.read_table()的不同,并如何使两者的效果一样。

pd.read_csv()是默认以分隔逗号为分割,也就是一个数据一个数据的读取。而pd.read_table()则是以"/t"为分割,逐行读取。

探索:'.tsv'和'.csv'两种格式的文件有何不同

'.csv'逗号分隔值。

'.tsv'制表符分隔值,标准TSV格式,字段值之中是不允许出现制表符的。TSV文件的读取,依然使用pd.read_csv('文件名',sep='\t')

  1. 将数据以每1000行为一个数据模块,逐块读取

pd.read_csv('train.csv', chunksize=1000)
pd.read_csv('test_1.csv', chunksize=1000)

读取出来的数据类型:<class 'pandas.io.parsers.readers.TextFileReader'>

在此引用,《利用Python进行数据分析》中对“逐块读取文本”的解释。

它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理。
  1. 将表头改成中文,索引改为乘客ID

之前的数据

以下分别展示两种修改表头和索引的方式,这里先展示,对已经读取的数据进行修改。

dt1.columns = ['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']
dt1.set_index('乘客ID',inplace=True)

接着展示,在读取数据的过程中修改表头和索引。

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

修改后的数据

  1. 查看数据的基本信息

通过info()函数,展示数据集的基本信息,例如:大小,是否有缺失值等基本信息。

  1. 观察表格前5行的数据和后5行的数据

使用dt1.head(n)查看前n行数据;df.tail(n)查看后n行数据。

dt1.head(5)
df.tail(5)
  1. 判断数据是否为空,为空的地方返回True,其余地方返回False

因为在数据分析时,常常需要对缺失数据进行数据预处理。所以,我们需要查看缺失数据的情况。

而展示的方法有很多种,下面列举几种常用且高效的。

dt1.isnull()                   #整体展示
dt1.isnull().sum()                 #各个特征值的缺失的个数情况
dt1.isnull().any()            #各特征向量下是否有缺失值
  1. 将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

dt1.to_csv('train_chinese.csv')

提示:不同的操作系统保存下来可能会有乱码。我们可以加入encoding参数,例如encoding='GBK' 或者 encoding ='utf-8'。

数据载入及初步观察

  1. 写一个关于DateFrame和Series数据类型的小例子

DateFrame数据类型:这就是一个二维的数据结构(类似 excel 或者 mysql 中的查看效果)。

data={'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}
pd.DataFrame(data)

#输出结果
'''
     A    B    C
0    1    4    7
1    2    5    8
2    3    6    9
'''

Series数据类型:

data={'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}
pd.Series(data)

#输出结果
'''
A    [1, 2, 3]
B    [4, 5, 6]
C    [7, 8, 9]
dtype: object
'''
  1. 根据上一节的方法载入"train.csv"文件

dt=pd.read_csv('train.csv')
  1. 查看DataFrame数据的每列的名称

dt.columns
  1. 查看"Cabin"这列的所有值

索引某一列的所有值,一共有多种方法,这里展示我常用的4种方法。

dt['Cabin']
dt.loc[:,'Cabin']
dt.iloc[:,-2]
dt.Cabin
  1. 加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

首先分别加载测试集和训练集,然后列出各个数据的列名,据此看出test_1中哪一列是多出来的。

dt2=pd.read_csv('test_1.csv')
print('train:')
print(dt.columns)
print('test_1:')
print(dt2.columns)

通过以上结果,可以看出test_1的'a'列是多于出来的。接下来,删除多于的那一列。

#方法1
del dt2['a']
dt2.columns
#方法2
dt2=dt2.drop('a',axis =1,inplace=True)      #这里的axis参数,表示在行还是列上索引;此处,'axis=1',表示在行上
#方法3
dt2.drop(columns='a',inplace=True)

可以看到dt2中'a'列已经被删除了。

  1. 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素

df.drop(['PassengerId','Name','Age','Ticket'],axis=1,inplace=False)

探索:对比任务5和任务6,有何不一样。

任务5是指完全删除,而人物6仅仅是隐藏,数据结构并没有发生变化。

任务5和任务6都使用到了drop函数,前后的区别就在于,inplace=True,是指“删除”;inplace=False,是指“隐藏”。

  1. 以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

dt[dt["Age"]<10]
  1. 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

midage=dt[(dt["Age"]>10) & (dt["Age"]<50)]

探索:了解pandas的条件筛选方式以及如何使用交集和并集操作

交集:在两个筛选条件间使用&。

并集:在两个筛选条件间使用|。

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

这里使用到reset_index函数,用于是否保留原有的索引。

midage = midage.reset_index(drop=True)
midage.loc[[100],['Pclass','Sex']]
  1. 使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.loc[[100,105,108],['Pclass','Name','Sex']] 

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

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

探索:对比`iloc`和`loc`的异同

iloc是整数索引,而loc是轴索引。

探索性数据分析

  1. 利用Pandas对示例数据进行排序,要求升序

pd.DataFrame() :创建一个DataFrame对象

np.arange(n).reshape((x, y)) : 生成一个二维数组(x*y),数值[0,n-1)。

index=[],设置类索引值

columns=[],设置行索引值

pd.DataFrame(np.arange(9).reshape((3, 3)), 
                     index=['1', '2','3'], 
                     columns=['a', 'b', 'c'])

对numpy进行排序,需要用到sort_values()函数,参数by是指使用哪一列的值进行排序;参数ascending是指降序还是升序,默认为True值,是指升序;参数axis是指按行or列,默认为0,是指行索引。

data.sort_values(by='b', ascending=True,axis=0)

另外,sort_index()可以实现行索引和列索引的排序。当axis=0表示行索引,axis=1表示列索引。

  1. 对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)

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

通过这个结果,我们可以看出,票价越贵,幸存的概率越大,且中年人更容易逃生。

  1. 利用Pandas进行算术计算,计算两个DataFrame数据相加结果

自行创建了两个dataframe

data1 = pd.DataFrame(np.arange(9).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
data2 = pd.DataFrame(np.arange(12).reshape(4, 3),
                     columns=['a', 'e', 'f'],
                     index=['one', 'two', 'third', 'fourth'])

将data1和data2进行相加,两个DataFrame相加后,会返回一个新的DataFrame,同行名,同列名的数据能够累加,没有对应的会变成空值NaN。

data1 + data2
  1. 通过泰坦尼克号数据如何计算出在船上最大的家族有多少人

通过索引‘堂兄弟/妹个数’和‘父母与小孩个数’,并将两个数据相加,用max函数找出最大值。

max(dt['堂兄弟/妹个数'] + dt['父母与小孩个数'])
  1. 学会使用Pandas describe()函数查看数据基本统计信息

describe()可以展示numpy的基本信息,主要包括最大值,最小值,上四分位数,下四分位数,中位数等。

data3 = pd.DataFrame([[1.4, np.nan,2], 
                       [2, -4.5,3],
                       [np.nan, 1,np.nan], 
                       [0.75,0.2, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two','three'])
data3.describe()
  1. 分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据

dt['票价'].describe()

本次就是datawhale的第一次打卡。不太熟悉笔记流程以及要求,博客内容大致上就是照搬了jupyter笔记本上,自己完成的内容。不过,通过打卡,督促了自己的学习。完成本次打卡后,观摩群内的大佬笔记,在下一次的打卡中不断完善,规范,进步。奥里给!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值