数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析

动手学数据分析——第一章:数据载入、Pandas基础、探索性分析

      • 0. 前言
      • 1. 数据载入&初步观察
        • 1.1 载入数据
          • 1.1.1 导入库
          • 1.1.2 读取文件
            • (1)方法
            • (2)read_csv()/read_table()函数
            • (3).tsv与.csv文件
          • 1.1.3 逐块读取
          • 1.1.4 将表头改成中文,索引改为乘客ID
        • 1.2 初步观察
        • 1.3 保存数据
        • 1.4 总结
      • 2. Pandas基础
        • 2.1 pandas数据类型
          • 2.1.1 数据类型种类
          • 2.1.2 构建一个DataFrame
          • 2.1.3 查看/删除具体列/列项
        • 2.2 筛选的逻辑
          • 2.2.1 根据column筛选:
          • 2.2.2 根据row筛选:
      • 3. 探索性数据分析
        • 3.1 数据排序:.sort_values()
        • 3.2 数据运算
          • 3.2.1 DataFrame相加
          • 3.2.2 通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
        • 3.3 查看数据基本统计信息:.describe()
          • 3.3.1 看看泰坦尼克号数据集中 票价这列数据的基本统计数据:
      • 4. 总结

0. 前言

这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。

这里有两份资料: 教材《Python for Data Analysis》和 baidu.com & google.com(善用搜索引擎)

1. 数据载入&初步观察

1.1 载入数据

1.1.1 导入库
import numpy as np # 科学计算库
import pandas as pd # 结构化数据(dataframe)处理库
import os # 操作系统交互库(operation system)
1.1.2 读取文件
(1)方法
  • 相对路径(文件必须在.py文件的同一文件夹内):
df = pd.read_csv('train.csv')
  • 绝对路径(位于操作系统中的路径):
df = pd.read_csv('/Users/zephyrin/Desktop/hands-on-data-analysis-master/第一单元项目集合/train.csv')
  • P.S.查看当前工作目录的方法:
print("当前工作目录 : %s" % os.getcwd())
(2)read_csv()/read_table()函数
  • 参数:
    数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第1张图片

  • 区别:

read_csv():默认读取用逗号分隔符的文件,不需要用sep来指定分隔符。如果读的是用非逗号分隔符的文件,必须要用sep指定分割符,不然读出来的是原文件的样子,数据没被分割开。
数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第2张图片

read_table():读取文件时必须要用sep来指定分隔符,否则读出来的数据是原始文件,没有分割开。
数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第3张图片

上图read_table()–>read_csv():

df = pd.read_table('/Users/zephyrin/Desktop/hands-on-data-analysis-master/第一单元项目集合/train.csv', sep = ',')

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第4张图片

(3).tsv与.csv文件

.tsv(Tab-separated values):是用制表符(Tab,’\t’)作为字段值的分隔符;
.csv(Comma-separated values):是用半角逗号(’,’)作为字段值的分隔符;

1.1.3 逐块读取
chunker = pd.read_csv('train.csv', chunksize=1000)
for m in chunker:
	print(len(m))
	print(m)

什么是逐块读取:通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader
为什么要逐块读取:数据太大时需要逐块读取文本数据进行分块

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

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第5张图片

1.2 初步观察

查看数据基本信息:

df.info():          # 打印摘要
df.describe():      # 描述性统计信息
df.values:          # 数据 
df.to_numpy()       # 数据  (推荐)
df.shape:           # 形状 (行数, 列数)
df.columns:         # 列标签 
df.columns.values:  # 列标签 
df.index:           # 行标签 
df.index.values:    # 行标签 
df.head(n):         # 前n行
df.tail(n):         # 尾n行
pd.options.display.max_columns=n: # 最多显示n列
pd.options.display.max_rows=n:    # 最多显示n行
df.memory_usage():                # 占用内存(字节B)
df.isnull(). 		# 判断数据是否为空,空的返回True,其他返回False

1.3 保存数据

将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv:

df.to_csv('train_chinese.csv')

1.4 总结

数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。

2. Pandas基础

数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据。

2.1 pandas数据类型

2.1.1 数据类型种类

pandas中有两个数据类型:DateFrame和Series

  • Series:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1

结果

  • DataFrame:
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]}
example_2 = pd.DataFrame(data)
example_2

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第6张图片

2.1.2 构建一个DataFrame

(1)

import pandas as pd

data = [[1, 2, 3], [4, 5, 6]]
index = ['a', 'b']
column = ['left', 'center', 'right']

df = pd.DataFrame(data=data, index=index, columns=column)

print(df)

输出结果
(2)构建一个都为数字的DataFrame数据:

frame = pd.DataFrame(np.arange(8).reshape((2, 4)), 
                     index=['2', '1'], 
                     columns=['d', 'a', 'b', 'c'])
frame

代码解析:

  • pd.DataFrame() :创建一个DataFrame对象
  • np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
  • index=['2, 1] :DataFrame 对象的索引列
  • columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的索引行

(3)构建一个有数字有空值的DataFrame数据:

frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第7张图片

2.1.3 查看/删除具体列/列项

(1)查看所有列:

df.columns

(2)查看具体某列的所有项:

df['Cabin'] #方法一
df.Cabin    #方法二

(3)删除某一列:

```方法一```
del test_1['a'] #改变原始数据

```方法二```
df = test_1.drop(['a'], axis = 1, inplace = True)  # drop()函数默认隐藏行,隐藏列要加 axis=1;默认不改变原始数据,改变要加 inplace = True

(4)隐藏某一列观察其他元素:

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

2.2 筛选的逻辑

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

下面我们还是用实战来学习pandas这个功能

2.2.1 根据column筛选:

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

midage = df[(df['Age']>10) & (df['Age']<50)]
2.2.2 根据row筛选:

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

midage = midage.reset_index(drop = True) 
midage.loc[[100],['Pclass','Sex']]

输出结果

  • reset_index():重置索引函数,避免出现逻辑错误(drop = True 把原来的索引去掉并重置;drop = False 保留原来的索引并重置)

(2)将midage的数据中第100,105,108行的"Pclass"和"Sex"的数据显示出来:

```方法一```
midage.loc[[100,105,108],['Pclass','Sex']] 
```方法二```
midage.iloc[[100,105,108],[2,4]]

(3) loc()、iloc()、ix()的区别:

  • loc():根据table的行标签获取一行数据
  • iloc():根据table的行索引(位置)获取一行数据
  • ix():根据table的行标签或者行索引获取一行数据,使用该方法输入行标签或者行索引都是可以的

3. 探索性数据分析

在前面我们已经学习了Pandas基础,知道利用Pandas读取csv数据的增删查改,今天我们要学习的就是探索性数据分析,主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。

3.1 数据排序:.sort_values()

具体请看《利用Python进行数据分析》第五章 排序和排名 部分

df.sort_values(by='c', ascending=True) # 根据某一列升序排列
df.sort_index() # 根据行索引升序排序
df.sort_index(axis=1) # 根据列索引升序排序
df.sort_index(axis=1, ascending=False) # 根据列索引降序排序
frame.sort_values(by=['a', 'c'], ascending=False) # 两列同时降序排序
  • sort_values:by参数指向要排列的列,ascending参数指向排序的方式(默认升序)

3.2 数据运算

具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分

3.2.1 DataFrame相加
# 构建DataFrame
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第8张图片
数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第9张图片

# 将frame1_a和frame1_b进行相加
frame1_a + frame1_b

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第10张图片
【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分,多在网络上查找相关学习资料。

3.2.2 通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
max(df['兄弟姐妹个数'] + df['父母子女个数'])

是的,如上,很简单,我们只需找出兄弟姐妹个数和父母子女个数之和最大的数就行,先让这两列相加返回一个DataFrame,然后用max函数求出最大值,当然你还可以想出很多方法和思考角度,欢迎你来说出你的看法。

3.3 查看数据基本统计信息:.describe()

具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计 部分

3.3.1 看看泰坦尼克号数据集中 票价这列数据的基本统计数据:
df['票价'].describe()
'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''

数据分析之Kaggle Titanic竞赛——第一章:数据载入、Pandas基础、探索性分析_第11张图片
分析:从上面数据我们可以看出, 一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。

4. 总结

本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。

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