由Datawhale组织的数据分析学习分为三个章节:

1.数据加载,Pandas基础与探索性数据分析;
2.数据清洗及特征处理,数据重构,数据可视化;
3.模型搭建,模型评估。

本篇文章为数据分析第一章的学习笔记,数据来源于kaggle竞赛的Titanic数据,记录笔记以备复习参考。

目录

  • 一、数据加载
    • 1.1. 载入数据
      • 1.1.1 导入numpy和pandas
      • 1.1.2 载入数据
      • 1.1.3 逐块读取数据模块
      • 1.1.4 修改表头语言类型,设置索引列
    • 1.2.初步观察
      • 1.2.1 查看数据基本信息
      • 1.2.2 查看前后指定行数的数据
      • 1.2.3 判断数据是否有空值
    • 1.3.保存数据
  • 二、Pandas基础
    • 2.1.找到数据集并花式查看
      • 2.1.1 DataFrame与Series数据类型
      • 2.1.2 载入csv文件
      • 2.1.3 查看DataFrame数据每列的项
      • 2.1.4 查看某列所有项
      • 2.1.5 对比训练集与测试集文件,删除多余列
      • 2.1.6 只显示指定列信息
    • 2.2.花式筛选
      • 2.2.1 显示年龄在某范围内的数据
      • 2.2.2 显示指定行列的多个数据
        • 一行多列
        • 多行多列
  • 三、探索性数据分析
    • 3.1.导入np、pd包及数据
    • 3.2.描述性分析
      • 3.2.1 数据升降序排列
        • 按索引升(降)序
        • 按两列降序
      • 3.2.2 DataFrame相加计算
        • 简单案例
        • 计算Titanic船上最大家族规模
      • 3.2.3 查看数据基本统计信息
        • 简单案例
        • 分析Titanic某数值列的基本统计信息

一、数据加载

1.1. 载入数据

1.1.1 导入numpy和pandas

import numpy as np
import pandas as pd
import os

1.1.2 载入数据

#df=pd.read_csv('train.csv')  #相对路径
#df.head(3)
os.getcwd() #由于相对路径运行失败,故查找其当前工作目录,发现只有把train.csv用在desktop下才能正常运行,故使用下面的绝对路径df=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/train.csv')
df.head(3) #只输出三行

1.1.3 逐块读取数据模块

chunker=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/train.csv',chunksize=1000)

分块读取可以减少内存、IO的消耗,提高效率

1.1.4 修改表头语言类型,设置索引列

df=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/train.csv',names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)#header=0是从乘客ID第0个的下一个开始
df.head() #第一行看作列名

将表头改为中文,有利于表格以我们更熟悉的方式显示

1.2.初步观察

初步观察表格数据的基本信息,有利于后续的探索性研究。

1.2.1 查看数据基本信息

df.info()

1.2.2 查看前后指定行数的数据

df.head(10)

df.tail(15)

1.2.3 判断数据是否有空值

df.isnull().head()

客舱列存在空值

1.3.保存数据

df.to_csv('train_chinese.csv')

二、Pandas基础

2.1.找到数据集并花式查看

2.1.1 DataFrame与Series数据类型

先举个小例子:

import numpy as np
import pandas as pd
sdata={'Ohio':35000,"Texas":71000,'Oregon':16000,'Utah':5000}
example_1=pd.Series(sdata)  #时间序列数据
example_1

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

2.1.2 载入csv文件

重回我们的Titanic数据集,载入之前的“train.csv”文件,用df.head(3)显示表格前三行,也可用print(df)显示所有行。

df=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/train.csv')
df.head(3)
#print(df)

2.1.3 查看DataFrame数据每列的项

df.columns #查看DataFrame数据每列的项

2.1.4 查看某列所有项

查看Cabin(客舱)这列的所有项,有两种方法可以实施

df['客舱'].head(3) #查看“cabin”这列的所有项
#df.Cabin.head(3)

2.1.5 对比训练集与测试集文件,删除多余列

显示以下测试集,与训练集进行对比,看各列是否一一对应

test_1=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/test.csv')
test_1.head(3)

因为下载数据集是没有多余列的,所以不进行删列操作,若要进行需要输入以下行:

#没有多余的列 所以暂时不需要删除
#del test_1['a'] #a为多余那列的列名
#test_1.head(3) #再查看以下是否删除

2.1.6 只显示指定列信息

将某几列进行隐藏,只显示感兴趣的几列信息,这里输入代码的是待删除列名:

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


用以下方法也可以只显示感兴趣的信息,只是思路不在于隐藏,而在于显示:

pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/test.csv',usecols=['Name','Age','Ticket']).head(3)
#d=pd.read_csv('/Users/Administrator/LC python/datawhale/data analysis/unit 1/Titanic-dataset/test.csv',usecols=['Name','Age','Ticket'])
#print(d)

最终还是得到上述结果:

在此要强调一下inplace与drop的区别:

  • inplace=True将原数据覆盖,删除了原来的数据结构,保留的是删除某几列之后的数据;inplace=False时原数据不变。
  • drop只是隐藏某几列,显示感兴趣的几列,原数据结构保持不变。

可以看一下在drop和read操作之后,原数据结构是没变的:

df.head(3)

2.2.花式筛选

2.2.1 显示年龄在某范围内的数据

首先筛选十岁以下的乘客信息:

#筛选 显示在十岁以下的乘客信息
df[df['Age']<10].head(3)

接着筛选年龄在十岁到五十岁之间的乘客信息,并将这个数据命名为midage:

#筛选 显示在10到50之间的乘客信息(不包括10和50) 并命名为midage
midage=df[(df["Age"]>10)&(df["Age"]<50)]
midage.head(3)

2.2.2 显示指定行列的多个数据

一行多列

将midage数据中第100行的"Pclass"和"Sex"数据显示出来,在此之前需要重置索引,因为对DataFrame的一系列操作会令索引发生混乱,所以需重置:

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

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

多行多列

1)使用loc方法将midage数据的第100,105,108行的Pclass,Name,Sex的数据显示出来:

#使用loc方法将midage数据的第100,105,108行的Pclass,Name,Sex的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]

2)使用iloc方法也得到了同样的输出,这是因为用表格的索引“乘客ID”是从1(而非0)开始计数的,所以输出相同:

midage.iloc[[100,105,108],[2,3,4]] #iloc方法也可以达到如上操作

此处强调以下loc与iloc的不同之处:

  • df.loc()是根据标签(索引)名称确定的单行或多行。
  • df.iloc()是根据整数位置(第几行索引)选择的单行获多行。

也就是说,如果上述DataFrame的索引名称是从0开始,则df.iloc()会输出索引名称为99,104,107的三行(对应的行数才是100,105,108)。

三、探索性数据分析

在本节将利用Pandas进行排序、算术计算,并着手使用describe()函数。

3.1.导入np、pd包及数据

import numpy as np
import pandas as pdtest=pd.read_csv('train_chinese.csv')
test.head()

3.2.描述性分析

下面对数据进行描述性分析,包括数据的排序、对两个数据框进行相加操作、对数据的基本统计(概括性数字度量)信息进行查看。

3.2.1 数据升降序排列

我们先构建一个简单的纯数字型DataFrame数据

#自己构建一个都为数字的DataFrame
frame=pd.DataFrame(np.arange(8).reshape(2,4),index=['2','1'],columns=['d','a','b','c'])#注意最后的小括号,这三行都是在定义这个frame,容易失误
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 对象的索引行

代码运行如下:

import pandas as pd
frame.sort_values(by='c',ascending=False)
#frame.sort_values(by='c',ascending=False,inplace=True) #如果上述代码运行失败,可以尝试加个inplace=True

可以看到sort_values这个函数中by参数指向要排列的列,ascending参数指向排序的方式(升序True还是降序False)。

按索引升(降)序

#让行索引升序排序
frame.sort_index()

#让列索引升序排序
frame.sort_index(axis=1)

#让列索引降序排序
frame.sort_index(axis=1,ascending=False)

#让行索引降序排序
frame.sort_index(ascending=False)

按两列降序

1)对刚刚的简单例子进行两列排序:

#让任选两列数据同时降序排序
frame.sort_values(by=['a','c'],ascending=False)

2)对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),票价写在前面,就先按照票价降序、再按照年龄降序:

test.sort_values(['票价','年龄'],ascending=False).head(3)

排序后,仅观察年龄和票价两列:发现票价越高的应该客舱越好,因为票价前20的乘客中存活的有14人,这是相当高的一个比例;年龄和存活之间我是真没得出什么规律,还得跟小伙伴探讨一下。
(还可以考虑一下性别、父母子女个数及客舱数)

3.2.2 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'])
frame1_a

frame1_b

frame1_a + frame1_b #两个DataFrame相加时返回一个新的df,对应的行列值会相加,没有对应的会变成空值

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

计算Titanic船上最大家族规模

#计算出船上最大的家族有多少人,用train_chinese.csv
max(df['SibSp']+df['Parch'])    #计算训练集最大家族人数
#或者max(test['兄弟姐妹个数']+test['父母子女个数']),是计算测试集最大家族人数

此处输出为“10”。

3.2.3 查看数据基本统计信息

简单案例

frame2=pd.DataFrame([[1.4,np.nan],   #学习如何写一个几行几列的表格,其中有空值NaN,标记索引与列标题[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3],], index=['a','b','c','d'],columns=['one','two'])
frame2

frame2.describe()
"""
count:样本数据大小
mean:样本数据均值
std:标准差
min:最小值
25%,50%,75%:几个四分位点
max:最大值"""


第一列一共有3个数据,其平均值为3.08,标准差为3.49,证明波动有点大,25%的数据低于1.07,50%低于1.40,75%低于4.25,最大值为7.1,最小值为0.75;第二列同样进行分析。

分析Titanic某数值列的基本统计信息

#数据中票价和父母子女这列的发现
test['票价'].describe()

从上述数据我们可以发现:

一共有891个票价数据,其平均值为32.204208,标准差为49.69,证明票价波动特别大,25%的人票价低于7.91,50%低于14.45,75%低于31,票价最大值为512.33,最小值为0。

到这里第一章节就结束啦,通过第一章节的学习,了解了如何查看数据、设置索引、对数据做出修改,筛选及排列数据、列数据作简单数学运算,得到数据的统计特征值,最后根据以上操作对数据进行初步的探索分析。

数据分析——探索性分析相关推荐

  1. 数据探索性分析_探索性数据分析

    数据探索性分析 When we hear about Data science or Analytics , the first thing that comes to our mind is Mod ...

  2. python数据分析的四阶段以及电商数据描述性分析和探索性分析

    目录 数据分析的四阶段 1 需求 数据情况 需求 产出 2 数据规整(数据预处理,数据清洗,数据重构) 2.1 数据预处理 2.1.1 发现错误的对策 2.1.2 修正缺失值 2.2 修正错误数据 方 ...

  3. spss数据分析(频数分析、描述性统计分析、探索性分析、连列表分析)

    1频数分析 对平均数.四分位数.百分位数.标准差.方差.偏度等统计量进行分析 原始数据 分析-描述统计-频率 输出:   2描述性统计分析 分析-描述统计-描述 输出: 勾选了将标准化得分另存为变量后 ...

  4. 数据的探索性分析(EDA)

    数据的探索性分析(EDA) 1.EDA要做些什么 2.fork from Datawhale 零基础入门数据挖掘-Task2 数据分析 个人收获 (1)要养成看数据集的head()以及shape的习惯 ...

  5. #数据挖掘--第1章:EDA数据探索性分析

    #数据挖掘--第1章:EDA数据探索性分析 一.序言 二.EDA的意义 三.EDA的流程 一.序言   本系列博客面向初学者,只讲浅显易懂易操作的知识.包含:数据分析.特征工程.模型训练等通用流程.将 ...

  6. 《权力的游戏》Python探索性分析

    一:简介 <权力的游戏>(Game of Thrones),是美国HBO电视网制作推出的一部中世纪史诗奇幻题材的电视剧.该剧改编自美国作家乔治·R·R·马丁的奇幻小说<冰与火之歌&g ...

  7. RNA-seq工作流程:基因水平的探索性分析和差异表达

    RNA-seq工作流程:基因水平的探索性分析和差异表达 迈克尔·爱1,西蒙·安德斯3,弗拉迪斯拉夫·金4和沃尔夫冈·胡贝尔4 1美国北卡罗莱纳州教堂山UNC-Chapel Hill生物统计学系 2美国 ...

  8. 北太平洋西部热带气旋快速增强的上层海洋热含量和海面温度的探索性分析

    第一篇: <Exploratory Analysis of Upper-Ocean Heat Content and Sea Surface Temperature Underlying Tro ...

  9. cs109-energy+哈佛大学能源探索项目 Part-3(探索性分析)

    博主前期相关的博客见下: cs109-energy+哈佛大学能源探索项目 Part-1(项目背景) cs109-energy+哈佛大学能源探索项目 Part-2.1(Data Wrangling) c ...

最新文章

  1. OnTimer定时器使用踩坑实例和使用方法
  2. 【响应式Web前端设计】Viewport解析
  3. eclipse+MapReduce
  4. 工程打包是什么意思_承包工程是什么意思
  5. 我用这个框架拿了Kaggle大赛冠军
  6. java filter教程_Java Web Filter 过滤器学习教程(推荐)
  7. mysql数据库 set类型_MYSQL数据库数据类型
  8. SQL 四舍五入 同时取规定小数位的数值
  9. 股票群的骗术 ,几乎99%的QQ群
  10. Windows10中同时安装MySQL5和MySQL8
  11. NXP MC9S12中断寄存器配置说明
  12. 皮尔逊(Pearson)相关系数 - 公式和代码实现
  13. RS485转OPC UA
  14. 合并算法详解原理和代码
  15. qml创建无边框带阴影的模态窗口
  16. 【百练】护林员盖房子
  17. 前端安全须知(淘宝)
  18. 轻量级网络——MobileNet系列学习(理论篇)
  19. 人民币大写转阿拉伯数字的java实现
  20. 资料分享|HC-05蓝牙模块资料

热门文章

  1. Excel操作:使用日期函数
  2. 北京二号卫星遥感影像解译数据多少费用经费
  3. 超星项目最终答辩总结2023.5.18
  4. HTML5 标签大全笔记,用到的时候翻一下,百度都省了!
  5. C语言维特比算法,viterbi维特比算法
  6. 声网下一代视频引擎架构探索与实践
  7. 绥北人民法院:用宜搭打造“线上法庭”,让群众少跑腿
  8. 智能网关与服务器连接简介
  9. MySql数据库相关小知识
  10. springboot --spring.profiles.active=test 不生效