【数据分析入门】Task 01数据加载及探索性数据分析

【数据分析入门】Task 01数据加载及探索性数据分析

  • 第一章:数据加载
    • 1.1 载入数据
      • 1.1.1 导入numpy和pandas
      • 1.1.2 载入数据
      • 1.1.3 通过逐块读取提升处理效率
      • 1.1.4 将表头改成中文,索引改成乘客ID
    • 1.2 初步观察
      • 1.2.1 查看数据的基本信息
      • 1.2.2 查看数据前10行和后15行的数据
      • 1.2.3 判断数据是否为空
    • 1.3 保存数据
    • 1.4 知道你的数据叫什么
      • 1.4.1 pandas主要数据结构
      • 1.4.2 重新载入数据并查看DataFrame数据每列的项
      • 1.4.3 查看“cabin”这列的所有项
      • 1.4.4 删除多余行或列
      • 1.4.5 隐藏部分元素
    • 1.5 筛选的逻辑
      • 1.5.1 筛选数据
      • 1.5.2 筛选并重命名
      • 1.5.3 reset_index()
      • 1.5.4 loc()和iloc()
    • 1.6 进一步了解数据
      • 1.6.1 对数据进行排序
      • 1.6.2 利用pandas对DateFrame数据结果进行计算
      • 1.6.3 利用describe()函数查看数据基本统计信息

第一章:数据加载


1.1 载入数据

kaggle泰坦尼克号获救数据集地址:https://www.kaggle.com/c/titanic/data


1.1.1 导入numpy和pandas

import numpy as np
import pandas as pd

如果加载失败,说明还未安装,安装方法为:
win+r进入cmd控制台

c:\user\admin>pip install pandas
c:\user\admin>python

>>>import pandas(验证是否安装成功)
  • pandas手册:https://www.pypandas.cn/
  • numpy手册:https://www.numpy.org.cn/

1.1.2 载入数据

1.载入数据方法:
(1)使用相对路径

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

结果为
在这里插入图片描述

相对路径载入报错时,可以使用os.getcwd()查看当前工作目录,该命令使用前必须载入import os, sys
(2)使用绝对路径

#使用相对路径载入数据
df=pd.read_csv('/数据分析/train.csv')
df.head(3)

2.pd.read_csv()pd.read_table()区别
【数据分析入门】Task 01数据加载及探索性数据分析_第1张图片

相关参数:https://www.cnblogs.com/mahailuo/p/8325288.html


1.1.3 通过逐块读取提升处理效率

DataFrame是一个重量级的数据结构,当一个dataframe比较大,占据较大内存的时候,同时又需要对这个dataframe做较复杂或者复杂度非O(1)的操作时,会由于内存占用过大而导致处理速度极速下降。

对此,我们的方法是尽量避免直接对过大的dataframe直接操作(当然有时候没有办法,必须对整体的dataframe进行操作,这时就需要从其他方面优化,比如尽量较少不必要的列,以降低内存消耗),以从csv文件读取数据为例,可以通过read_csv方法的chunksize参数,设定读取的行数,返回一个固定行数的迭代器,每次读取只消耗相应行数对应的dataframe的内存

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

相关参考

  • pandas性能提升之利用chunksize参数对大数据分块处理
  • 用Pandas 处理大数据的3种超级方法

1.1.4 将表头改成中文,索引改成乘客ID

对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据

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

【数据分析入门】Task 01数据加载及探索性数据分析_第2张图片

其他更改表头方法python中dataframe更改列名称

  • 使用rename函数更改列名
df2=df1.rename(columns={'name':'stu_name','class':'stu_class'})
print(df2)
  • 直接更改全部的列名称
df1.columns=['id','stu_name','stu_class']

1.2 初步观察

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


1.2.1 查看数据的基本信息

通过info()函数查看数据的类型、个数

df.info()

【数据分析入门】Task 01数据加载及探索性数据分析_第3张图片


1.2.2 查看数据前10行和后15行的数据

head()tail() 用于快速预览 Series 与 DataFrame,默认显示 5 条数据,也可以指定显示数据的数量。

df.head(10) 

【数据分析入门】Task 01数据加载及探索性数据分析_第4张图片

df.tail(15)

【数据分析入门】Task 01数据加载及探索性数据分析_第5张图片


1.2.3 判断数据是否为空

判断数据是否为空并返回前五行内容(为空的地方返回True,其余地方返回False)

df.isnull().head()

【数据分析入门】Task 01数据加载及探索性数据分析_第6张图片


1.3 保存数据

  • 写入csvdf.to_csv('文件名')
  • 写入HDF5df.to_hdf('文件名')
  • 写入exceldf.to_excel('文件名')

相关参考:IO tools (text, CSV, HDF5, …)

此处将改变后的数据在工作目录下保存为一个新文件train_chinese.csv

df.to_csv('train_chinese.csv')

1.4 知道你的数据叫什么

1.4.1 pandas主要数据结构

pandas是基于NumPy构建的模块,pandas包含序列Series(一维数据)和数据框DataFrame(二维数据)两种最主要数据结构,索引Index是跟序列和数据框密切相关的数据结构

  • 序列(Series)的表现形式为:索引在左边,值在右边。由于没有显式为Series指定索引,pandas会自动创建一个从0到N-1的整数型索引。
  • 数据框(DataFrame)是二维的关系表格型数据结构,含有一组有序的列,每列的数据类型是相同的,列与列之间的数据类型可以不同,也可以相同。数据框的逻辑结构是行和列,列有列名(或叫做列索引),行有行索引,还可以为行或列索引设置标签。
  • 序列和数据框之间是密切关联的,可以认为序列(Series)是二维表格中的一列或者一行。实际上,当访问DataFrame的一行时,pandas自动把该行转换为序列;当访问DataFrame的一列时,Pandas也自动把该列转换为序列。
  • Index对象是序列和数据框必不可少的成分,负责管理轴标签,轴名称等元数据,对于数据框,行有行索引,列有列索引;对于序列,行索引是必备的。索引对象是不可修改的,类似一个固定大小的数组
    【例1】创建一个序列,并自定义索引(如果不定义,索引默认从0到N-1)
import numpy as np
import pandas as pd
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1=pd.Series(sdata)
example_1

【数据分析入门】Task 01数据加载及探索性数据分析_第7张图片

相关参考:pandas基础 - 数据结构和数据类型


1.4.2 重新载入数据并查看DataFrame数据每列的项

使用df.columns查看每列列名

import numpy as np
import pandas as pd
df=pd.read_csv('train.csv')
df.head()
df.columns

在这里插入图片描述


1.4.3 查看“cabin”这列的所有项

方法一:

df['Cabin'].head()

方法二:

df.Cabin.head()

【数据分析入门】Task 01数据加载及探索性数据分析_第8张图片


1.4.4 删除多余行或列

(1)删除行
方法一:drop

  • 通过行名称删除,如df.drop(['1', '3'], inplace=True)
  • 通过行号删除,如df.drop(df.index[0], inplace=True)
    方法二:通过各种筛选方法实现删除行

(2)删除列
方法一:del
del df['A'] # 删除A列,会就地修改
方法二:drop

  • 通过列名称删除:df = df.drop(['B', 'C'], axis=1)
  • 使用列数删除,传入参数是int,列表,者切片:df.drop(df.columns[0], axis=1, inplace=True)

参考:pandas删除某些列、行总结


1.4.5 隐藏部分元素

如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用
将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

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

【数据分析入门】Task 01数据加载及探索性数据分析_第9张图片


1.5 筛选的逻辑

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

参考:使用Pandas对数据进行筛选和排序


1.5.1 筛选数据

以“Age”为筛选条件,显示年龄在10岁以下的乘客信息

df[df['Age']<10].head()

【数据分析入门】Task 01数据加载及探索性数据分析_第10张图片


1.5.2 筛选并重命名

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

midage=df[(df['Age']>10)&df['Age']<50]
midage.head()

【数据分析入门】Task 01数据加载及探索性数据分析_第11张图片


1.5.3 reset_index()

reset_index()主要用于重置索引,在获得新的index,原来的index变成数据列,保留在数据框中,不想保留原来的index的话可以使用参数drop=True,默认False

参考:https://www.jianshu.com/p/223de3248f90

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

midage = midage.reset_index(drop=True)
midage.head(10)

在这里插入图片描述

midage.loc[[99],['Pclass','Sex']]

在这里插入图片描述


1.5.4 loc()和iloc()

  • loc 即location, 是按dataframe 的index 名称进行索引。
  • iloc 是按dataframe 的index 位置(0,1,2,… )进行索引。
    分别使用loc和iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
 #因为你主动的延长了行的距离,所以会产生表格形式

【数据分析入门】Task 01数据加载及探索性数据分析_第12张图片

#注意此处列名的表示方法
midage.iloc[[100,105,108],[2,3,4]]

【数据分析入门】Task 01数据加载及探索性数据分析_第13张图片


1.6 进一步了解数据

1.6.1 对数据进行排序

Pandas 支持三种排序方式,按索引标签排序,按列里的值排序,按两种方式混合排序
(1)按索引标签排序df. sort_index()

  • 作用:默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
  • 注意:df. sort_index()可以完成和df. sort_values()完全相同的功能,但python更推荐用只用df. sort_index()对“根据行标签”和“根据列标签”排序,其他排序方式用df.sort_values()。
  • 调用方式:sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
  • 参数说明
参数 说明
by 指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
level 默认None,否则按照给定的level顺序排列
ascending 是否按指定列的数组升序排列,默认为True,即升序排列
inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换
kind 排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。
na_position {‘first’,‘last’},设定缺失值的显示位置

(2)按列中的值进行排序df. sort_values()

  • 作用:既可以根据列数据,也可根据行数据排序。
  • 注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据index名和columns名排序(由.sort_index()执行)
  • 调用方式:DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
  • 参数说明:
参数 说明
by 指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending 是否按指定列的数组升序排列,默认为True,即升序排列
inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position {‘first’,‘last’},设定缺失值的显示位置

(3)按索引与值排序
通过参数 by 传递给 DataFrame.sort_values() 的字符串可以引用列或索引层名。

参考:https://www.jianshu.com/p/f0ed06cd5003

对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
通过观察数据可以发现,票价越高的存活率越高

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

【数据分析入门】Task 01数据加载及探索性数据分析_第14张图片


1.6.2 利用pandas对DateFrame数据结果进行计算

两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN
如有frame1_a
【数据分析入门】Task 01数据加载及探索性数据分析_第15张图片
frame1_b
【数据分析入门】Task 01数据加载及探索性数据分析_第16张图片
frame1_a + frame1_b
【数据分析入门】Task 01数据加载及探索性数据分析_第17张图片
通过泰坦尼克号数据如何计算出在船上最大的家族有多少人
结果为10

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

1.6.3 利用describe()函数查看数据基本统计信息

利用describe()函数将返回如下数据

count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值

查看泰坦尼克号数据各列数据的基本统计数据
可以发现

  • 年龄数据存在缺失,姓名性别等数据由于非数值型所以不会被统计
  • 幸存率仅为0.38+
  • 三等舱的人最多
  • 票价数据平均值约为:32.20, 标准差约为49.69,说明票价波动特别大
text.describe()

【数据分析入门】Task 01数据加载及探索性数据分析_第18张图片

你可能感兴趣的:(数据分析)