动手学数据分析 | Datawhale-8月
参考书籍
《利用python进行数据分析》&《Python for Data Analysis》
百度搜索
Google搜索
任务
利用数据分析技能,完成kaggle上泰坦尼克号任务。
一共分为三部分,分三个章节五个任务完成:
- Task01:数据加载及探索性数据分析(第一章)
- Task02:数据清洗及特征处理(第二章)
- Task03:数据重构(第二章)
- Task04:数据可视化(第二章)
- Task05:数据建模及模型评估(第三章)
Task01:数据加载及探索性数据分析
本文主要介绍Task01,主要是认识数据,加载数据,以及对数据的一些基本操作。
主要也是根据自己的学习流程,发表一些自己学习过程中遇到的问题。
一、导包,载入数据
import numpy as np
import pandas as pd
df = pd.read_csv('train.csv')
#此处遇到的问题:
载入数据的两种方式:
- 采用相对路径
相对路径较好理解,相对路径就是相对于当前文件的路径。
eg:数据文件和本文件在同一目录下
df = pd.read_csv('train.csv')
- 采用绝对路径
绝对路径又分为本地绝对路径和网络绝对路径。本地路径是指文件在硬盘上真正存在的路径。网络路径就是带有网址的路径.(不知道绝对路径的情况下可以使用使用**os.getcwd()**查看当前工作目录。注:使用前一定要import os)
eg:
In [] :path = os.getcwd()
In [] :path
Out[]:'F:\\abc\\hands-on-data-analysis\\第一单元项目集合'
df = pd.read_csv('F:/abc/hands-on-data-analysis/第一单元项目集合/train.csv')
**注:**写绝对路径时正反斜杠的问题:
正反斜杠的区别:在windows读取文件可以用\,但在字符串里面\被作为转义字符使用,那么在描述路径时有两种方式:
1:将反斜杠变换为正斜杠.eg:(‘F:/abc/hands-on-data-analysis/第一单元项目集合/train.csv’)
2:在路径前加r.eg:(r’F:\abc\hands-on-data-analysis\第一单元项目集合\train.csv’)
加载数据方法中pd.read_csv()和pd.read_table()的不同:
答:pd.read_csv()默认分隔符为’,'而pd.read_table()默认分隔符为制表符\t,想让他们效果一样要指定分隔符。
eg:df = pd.read_table('train.csv',sep = ',')
二、读取数据
train.csv
将表头改成中文:
两种方式:
df.rename(columns = {'PassengerId':'乘客ID',…)
df = pd.read_csv('train.csv',names = ['乘客ID', …], index_col= '乘客ID',header = 0)
此处遇到的问题:
index_col= ’None’ ‘0’ ‘乘客ID’的区别:
答:pandas是python中的一个库,read_csv是pandas的读取csv数据的一个函数。而index_col是read_csv中的一个参数。用来指定表格的索引值。
- 在默认为None的时候,pandas会自动将第一列作为索引,并额外添加一列。
- index_col=0,直接将第一列作为索引,不额外添加列。
- index_col= '乘客ID’和index_col=0效果一样
三、初步观察
查看数据基本信息
df.info()
观察某行的数据:
df.head(10)
df.tail(15)
这里head()默认查看前五行的数据
这里遇到的问题:
怎样取中间几行数据:(2-5行)
df.iloc[2:5]
注:
- loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
- iloc函数:通过行号来取行数据(如取第二行的数据)
四、保存数据
df.to_csv('train_chinese.csv')
五、pandas基础
pandas中有两个数据类型DateFrame和Series
创建DateFrame和Series的例子:
Series:
In []:obj1 = pd.Series([1,2,3,4],index = ['a','b','c','d'])
Out[]:
a 1
b 2
c 3
d 4
dtype: int64
DateFrame:
In []: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]}
obj3 = pd.DataFrame(data,index=['one', 'two', 'three', 'four','five', 'six'])
Out[]:
state year pop
one Ohio 2000 1.5
two Ohio 2001 1.7
three Ohio 2002 3.6
four Nevada 2001 2.4
five Nevada 2002 2.9
six Nevada 2003 3.2
按之前的方法加载数据:
df = pd.read_csv(‘train.csv’)
df.head()
六、对数据的增删改查
查看df数据的列:
In []:df.columns
Out[]:Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
查看"Cabin"这列的所有值:
df['Cabin'].head()
此处遇到的问题:
查看行列值的方法:
- 行也可以通过位置或名称的方式进行获取,比如用loc属性或者iloc属性。
- 列值可以直接索引。
删除列值:(删除最后一列‘a’的值)
del df_test1['a']
此处遇到的问题:(还有其他的删除方法吗?)
两种方式(drop和del)
1.drop方式:
参数说明:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
#labels 就是要删除的行列的名字,用列表给定
#axis 默认为0,指删除行,因此删除columns时要指定axis=1;
#index 直接指定要删除的行
#columns 直接指定要删除的列
#inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe;
#inplace=True,则会直接在原数据上进行删除操作,删除后无法返回。
#因此,删除行列有两种方式:
1)labels=None,axis=0 的组合
2)index或columns直接指定要删除的行或列
eg:
In []:df = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
In []:df
Out[]:
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
#Drop columns,两种方法等价
In []:df.drop(['B', 'C'], axis=1)
Out[]:
A D
0 0 3
1 4 7
2 8 11
In []:df.drop(columns=['B', 'C'])
Out[]:
A D
0 0 3
1 4 7
2 8 11
# 第一种方法下删除column一定要指定axis=1,否则会报错
# df.drop(['B', 'C'])
# ValueError: labels ['B' 'C'] not contained in axis
#Drop rows
In []:df.drop([0, 1])
Out[]:
A B C D
2 8 9 10 11
In []: df.drop(index=[0, 1])
Out[]:
A B C D
2 8 9 10 11
2.del方式:
使用del, 一次只能删除一列,不能一次删除多列
del df_test1['PassengerId']
del df_test1['Name']
del df_test1['Age']
del df_test1['Ticket']
df_test1.head()
**注:**使用inplace=True,会将将原数据覆盖。inplace默认为False
七、筛选数据
eg:筛选年龄在10岁以下的乘客信息
df[df["Age"] < 10].head()
筛选10岁以上和50岁以下的乘客信息
midage = df[(df["Age"] > 10) & (df["Age" ]< 50)]
midage.head(10)
筛选出来的数据:(可以看到其中的索引不再是连续的)
此时我们要要用到一个reset_index()方法来重置索引。
注:
当我们在清洗数据时往往会将带有空值的行删除,不论是DataFrame还是Series的index都将不再是连续的索引了,
那么这个时候我们可以使用reset_index()方法来重置它们的索引,以便后续的操作。
然而reset_index()后却会多出一列index列,reset_index(drop=True),删除index列
midage.reset_index().head(10)
八、排序数据
用到pandas中的sort函数:
sort函数主要包含6个参数,columns为要进行排序的列名称, ascending为排序的方式,true为升序,False为降序,默认为true。axis为排序的轴,0表示index,1表示columns,当对数据列进行排序时,axis必须设置为0。inplace默认为False,表示对数据 表进行排序,不创建新实例。
九、对DataFrame进行算术运算
两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
eg:
两者相加:
十、使用Pandas describe()函数查看数据基本统计信息
frame2.describe()
总结
以上便是我对于动手学数据分析第一章节的简单学习流程,第一次写csdn,不足之处见谅,有任何问题留言或者电邮2807011665@qq.com
期待下一次的学习之旅。