动手学数据分析 | Datawhale-8月 | Task01:数据加载及探索性数据分析

参考书籍

《利用python进行数据分析》&《Python for Data Analysis》
百度搜索
Google搜索

任务

利用数据分析技能,完成kaggle上泰坦尼克号任务。
一共分为三部分,分三个章节五个任务完成:

  1. Task01:数据加载及探索性数据分析(第一章)
  2. Task02:数据清洗及特征处理(第二章)
  3. Task03:数据重构(第二章)
  4. Task04:数据可视化(第二章)
  5. Task05:数据建模及模型评估(第三章)

Task01:数据加载及探索性数据分析

本文主要介绍Task01,主要是认识数据,加载数据,以及对数据的一些基本操作。
主要也是根据自己的学习流程,发表一些自己学习过程中遇到的问题。

一、导包,载入数据

import numpy as np
import pandas as pd

df = pd.read_csv('train.csv')

#此处遇到的问题:
载入数据的两种方式:

  1. 采用相对路径
    相对路径较好理解,相对路径就是相对于当前文件的路径。
    eg:数据文件和本文件在同一目录下
df = pd.read_csv('train.csv')
  1. 采用绝对路径
    绝对路径又分为本地绝对路径和网络绝对路径。本地路径是指文件在硬盘上真正存在的路径。网络路径就是带有网址的路径.(不知道绝对路径的情况下可以使用使用**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
train.csv
将表头改成中文:
两种方式:

  1. df.rename(columns = {'PassengerId':'乘客ID',…)
  2. 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中的一个参数。用来指定表格的索引值。

  1. 在默认为None的时候,pandas会自动将第一列作为索引,并额外添加一列。
  2. index_col=0,直接将第一列作为索引,不额外添加列。
  3. index_col= '乘客ID’和index_col=0效果一样

三、初步观察

查看数据基本信息

df.info()

观察某行的数据:

df.head(10)
df.tail(15)

这里head()默认查看前五行的数据

这里遇到的问题:
怎样取中间几行数据:(2-5行)

df.iloc[2:5]

注:

  1. loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
  2. iloc函数:通过行号来取行数据(如取第二行的数据)

四、保存数据

df.to_csv('train_chinese.csv')

五、pandas基础

pandas中有两个数据类型DateFrameSeries
创建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()
pd.read_csv('train.csv')

六、对数据的增删改查

查看df数据的列:

In []:df.columns
Out[]:Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

查看"Cabin"这列的所有值:

df['Cabin'].head()

此处遇到的问题:
查看行列值的方法:

  1. 行也可以通过位置或名称的方式进行获取,比如用loc属性或者iloc属性。
  2. 列值可以直接索引。

删除列值:(删除最后一列‘a’的值)
test_1.csv

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)

筛选出来的数据:(可以看到其中的索引不再是连续的)
midage
此时我们要要用到一个reset_index()方法来重置索引。
注:
当我们在清洗数据时往往会将带有空值的行删除,不论是DataFrame还是Series的index都将不再是连续的索引了,
那么这个时候我们可以使用reset_index()方法来重置它们的索引,以便后续的操作。
然而reset_index()后却会多出一列index列,reset_index(drop=True),删除index列

midage.reset_index().head(10)

midage.reset_index()

八、排序数据

用到pandas中的sort函数:
sort函数官方描述
sort函数主要包含6个参数,columns为要进行排序的列名称, ascending为排序的方式,true为升序,False为降序,默认为true。axis为排序的轴,0表示index,1表示columns,当对数据列进行排序时,axis必须设置为0。inplace默认为False,表示对数据 表进行排序,不创建新实例。

九、对DataFrame进行算术运算

两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

eg:
frame1_a
frame1_b
两者相加:
两者相加

十、使用Pandas describe()函数查看数据基本统计信息

frame2.describe()

frame2.describe()

总结

以上便是我对于动手学数据分析第一章节的简单学习流程,第一次写csdn,不足之处见谅,有任何问题留言或者电邮2807011665@qq.com
期待下一次的学习之旅。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值