使用R语言进行DW检验的步骤与方法
DW数据加载及探索性数据分析)
- 1 数据载入及初步观察
- 1.1 载入数据
- 1.2 初步观察
- 1.3 保存数据
- 1.4 数据查看与删除
- 1.5 筛选的逻辑
- 2 探索性数据分析
- 1.6 数据的排序、计算与描述
1 数据载入及初步观察
通过数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。
1.1 载入数据
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
df=pd.read_csv("train.csv")
df.head()
df1 = pd.read_csv("C:/Users/lenovo/Desktop/DW/hands-on-data-analysis-master/titanic/train.csv")
#要么路径中都是英文名
#要么路径后加上engine='python'
#df1 = pd.read_csv("C:/Users/lenovo/Desktop/DW/hands-on-data-analysis-master/第一单元项目集合/train.csv",engine='python')
df1.head()
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?
table默认分隔符为制表符(’\t’)
让table 和 csv 效果一样加上 sep=’,’
df1 = pd.read_table("C:/Users/lenovo/Desktop/DW/hands-on-data-analysis-master/第一单元项目集合/train.csv",sep=',',engine='python')
df1.head()
【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用google,了解业务逻辑,明白输入和输出是什么。
1.1.3 任务三:每1000行为一个数据模块,逐块读取
chunker = pd.read_csv('train.csv', chunksize=1000)
【思考】什么是逐块读取?为什么要逐块读取呢?
有chunksize参数可以进行逐块加载,它的本质就是将文本分成若干块
for chunk in chunker
1.1.4 任务四:将表头改成中文,索引改为乘客ID
df = pd.read_csv('train.csv',names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数',
'船票信息','票价','客舱','登船港口'],
index_col='乘客ID',header=0)
#header=0将第一行数据作为列名然后又被重命名names覆盖了,也可先读取后改名
df.head()
是否幸存 |
仓位等级 |
姓名 |
性别 |
年龄 |
兄弟姐妹个数 |
父母子女个数 |
船票信息 |
票价 |
客舱 |
登船港口 |
|
乘客ID |
|||||||||||
1 |
0 |
3 |
Braund, Mr. Owen Harris |
male |
22.0 |
1 |
0 |
A/5 21171 |
7.2500 |
NaN |
S |
2 |
1 |
1 |
Cumings, Mrs. John Bradley (Florence Briggs Th... |
female |
38.0 |
1 |
0 |
PC 17599 |
71.2833 |
C85 |
C |
3 |
1 |
3 |
Heikkinen, Miss. Laina |
female |
26.0 |
0 |
0 |
STON/O2. 3101282 |
7.9250 |
NaN |
S |
4 |
1 |
1 |
Futrelle, Mrs. Jacques Heath (Lily May Peel) |
female |
35.0 |
1 |
0 |
113803 |
53.1000 |
C123 |
S |
5 |
0 |
3 |
Allen, Mr. William Henry |
male |
35.0 |
0 |
0 |
373450 |
8.0500 |
NaN |
S |
【思考】所谓将表头改为中文其中一个思路是:将英文额度表头替换成中文。还有其他的方法吗?
# df = pd.read_csv('train.csv')
# df.columns = ['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数',
# '船票信息','票价','客舱','登船港口']
# df.head()
1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
是否幸存 891 non-null int64
仓位等级 891 non-null int64
姓名 891 non-null object
性别 891 non-null object
年龄 714 non-null float64
兄弟姐妹个数 891 non-null int64
父母子女个数 891 non-null int64
船票信息 891 non-null object
票价 891 non-null float64
客舱 204 non-null object
登船港口 889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB
df.describe()
1.2.2 任务二:观察表格前10行的数据和后15行的数据
df.head(10)
df.tail(15)
1.2.3 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull()
1.3 保存数据
df.to_csv('train_chinese.csv')
1.4 数据查看与删除
查看DataFrame数据的每列的项
df.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
查看"cabin"这列的所有项 [有多种方法]
df["Cabin"].head()
df.Cabin.head()
0 NaN
1 C85
2 NaN
3 C123
4 NaN
Name: Cabin, dtype: object
删除多余的列的方式
del df1['a'] #永久删除
df1.head()
"""drop方法的用法:drop(labels, axis=0, level=None, inplace=False, errors='raise')
-- axis为0时表示删除行,axis为1时表示删除列 默认为按行
inplace 接收逻辑型boolean代表操作是否对原数据生效,默认为False
labels代表删除行或列的标签"""
df1.drop('a',axis=1).head()
隐藏列: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
Survived |
Pclass |
Sex |
SibSp |
Parch |
Fare |
Cabin |
Embarked |
|
0 |
0 |
3 |
male |
1 |
0 |
7.2500 |
NaN |
S |
1 |
1 |
1 |
female |
1 |
0 |
71.2833 |
C85 |
C |
2 |
1 |
3 |
female |
0 |
0 |
7.9250 |
NaN |
S |
【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?
【思考回答】
如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用
df.head()
PassengerId |
Survived |
Pclass |
Name |
Sex |
Age |
SibSp |
Parch |
Ticket |
Fare |
Cabin |
Embarked |
|
0 |
1 |
0 |
3 |
Braund, Mr. Owen Harris |
male |
22.0 |
1 |
0 |
A/5 21171 |
7.2500 |
NaN |
S |
1 |
2 |
1 |
1 |
Cumings, Mrs. John Bradley (Florence Briggs Th... |
female |
38.0 |
1 |
0 |
PC 17599 |
71.2833 |
C85 |
C |
2 |
3 |
1 |
3 |
Heikkinen, Miss. Laina |
female |
26.0 |
0 |
0 |
STON/O2. 3101282 |
7.9250 |
NaN |
S |
3 |
4 |
1 |
1 |
Futrelle, Mrs. Jacques Heath (Lily May Peel) |
female |
35.0 |
1 |
0 |
113803 |
53.1000 |
C123 |
S |
4 |
5 |
0 |
3 |
Allen, Mr. William Henry |
male |
35.0 |
0 |
0 |
373450 |
8.0500 |
NaN |
S |
1.5 筛选的逻辑
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
1.5.2任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage=df[(df["Age"]>10) & (df["Age"]<50)]
midage.head()
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage = midage.reset_index(drop=True) #重置索引
midage.head()
PassengerId |
Survived |
Pclass |
Name |
Sex |
Age |
SibSp |
Parch |
Ticket |
Fare |
Cabin |
Embarked |
|
0 |
1 |
0 |
3 |
Braund, Mr. Owen Harris |
male |
22.0 |
1 |
0 |
A/5 21171 |
7.2500 |
NaN |
S |
1 |
2 |
1 |
1 |
Cumings, Mrs. John Bradley (Florence Briggs Th... |
female |
38.0 |
1 |
0 |
PC 17599 |
71.2833 |
C85 |
C |
2 |
3 |
1 |
3 |
Heikkinen, Miss. Laina |
female |
26.0 |
0 |
0 |
STON/O2. 3101282 |
7.9250 |
NaN |
S |
3 |
4 |
1 |
1 |
Futrelle, Mrs. Jacques Heath (Lily May Peel) |
female |
35.0 |
1 |
0 |
113803 |
53.1000 |
C123 |
S |
4 |
5 |
0 |
3 |
Allen, Mr. William Henry |
male |
35.0 |
0 |
0 |
373450 |
8.0500 |
NaN |
S |
midage.loc[[100],['Pclass','Sex']]
Pclass |
Sex |
|
100 |
2 |
male |
【思考】这个reset_index()函数的作用是什么?如果不用这个函数,下面的任务会出现什么情况?
reset_index()是重置索引,因为前面对数据进行了筛选,所以索引不连续,而drop=True是表示把原来的索引index列去掉,默认 False。
1.5.4 任务四:将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
loc方法
midage.loc[[100,105,108],["Pclass","Name","Sex"]]
iloc方法
midage.iloc[[100,105,108],[2,3,4]]