动手数据分析笔记

第一章

第一节 数据载入及初步观察

数据载入

df = pd.read_csv('file_path')df2 = pd.read_table('file_path')
read_csv 函数

见CSDN 博客: https://blog.csdn.net/weixin_39175124/article/details/79434022

问:read_csv 和 read_table 区别?
函数 说明
read_csv 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
read_table 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(’\t’)
read_fwf 读取定宽列格式数据(也就说,没有分隔符)
read_clipboard 读取剪贴板中的数据,可以看作read_table的剪贴板,在将网页转换为表格时很有用。
问:什么是逐块读取?为什么要逐块读取呢?
chunker = pd.read_csv('train.csv', chunksize=1000)

chunksize参数可以进行逐块加载。经测试,它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象

chunker = pd.read_csv("data.csv",chunksize=5)for piece in chunker:print(type(piece))#<class 'pandas.core.frame.DataFrame'>print(len(piece))

查看数据基本信息

相关函数
函数 说明
df.info() df.info():查看索引、数据类型和内存信息
df.head(m) 查看表格前m行数据
df.tail(n) 查看表格后n行数据
df.isnull().head() 判断数据是否为空,有空的地方返回True, 其余地方返回False
df.shape() 查看数据列数和行数
df.describe() 查看数值型列的汇总统计
df["列名"].unique() 得到Series中的唯一值数组
df["列名"].value_counts() 计算各值出现的次数
df.apply(pd.value_counts) 唯一值,及其计数

预修改数据

函数
函数 说明
df = pd.read_csv('url', names=[''], ``index_col='', header=0) 通过names,修改表头,index_col为行标签,header=0 ,以第0行为表头
df.insert(i,'c','data') 在第i个位置,c为列名,data为数据
df['C'] = data 在最后一列, C为列名,data为数据

保存数据

函数
函数 说明
df.to_csv('train_chinese.csv') 在工作目录下新建一个’train_chinese.csv’文件 (修改后的)

第二节 Pandas基础

Pandas 中的两种数据类型

DateFrame

二维的表格型数据结构,可以将DataFrame理解为Series的容器。

例:

df = {'Years':[2001,2002,2003,2004,2005],'boold':[true,false,true,true,false],'strd':'1','2','3','4','5'}
Series

一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

例:

sdata = {'boold':true,'year':2002,'strd':'Series'}

操作数据

任务 函数
查看每一列的项(查看表头) df.columns
查看某一列 df['列名'].head()/ df.列名.head()
删除某行 df.drop(['行名','行名'])
df.drop(df.index[0], inplace=True) #删除第一行
df.drop(df.index[0:3], inplace=True) #删除前三行
删除某列 del df[A] #就地修改
df = df.drop(['B', 'C'], axis=1) #不会就地修改,创建副本返回
df.drop(['B', 'C'], axis=1, inplace=True)#就地修改
df.drop(df.columns[0], axis=1, inplace=True) # 删除第1列
隐藏某列 df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head()
筛选操作(通过名称筛选) df.loc["行1","行2"] df.loc[:,"列1":"列2"] df.loc[:,["列名"]]
df[df.年龄 > 20].head() #筛选楚年龄大于20的并展示
筛选操作 (通过序号) df.iloc[[100,105,108],2:5] #筛选行编号,列编号
布尔筛选 & --> and | --> or ~ --> not #逻辑符号对应
df [ (条件1) 逻辑符号 (条件二) 逻辑符号 (条件三)]
df[df.年龄>20,["年龄"]] #筛选出年龄大于二十,只显示年龄字段
重置索引 reset_index(drop=True) #drop=True 不保留原来index
reindex 参数说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVE2u03z-1627401371817)(https://i.loli.net/2020/08/18/VoMRsav6qWArX9h.png)]

第三节 探索性数据分析

了解数据

数据排序
函数 说明
df.sort_index(axis=0) 对行索引升序排列
df.sort_index(axis=1, ascending=False) 对列索引降序排列
df['列名'].sort_values() 按值对Series进行排序
df.sort_values(by=['列名1','列名2']) 根据某列的值进行排序
df['列名'].rank(methods='' , ascending=True) Series对原数据进行平均排名
df.rank(axis='columns') 在列上进行平均排名
rank函数methods参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5WqC7rCd-1627401371819)(https://i.loli.net/2020/08/18/9uNFM4WBxPnIDSG.png)]

对于泰坦尼克号数据,数据与存活率的思考
#对家庭成员进行分析
family = df['堂兄第/妹个数']+df['父母与小孩个数']
df.insert(6,'家庭人数', family)
df.head()
df.sort_values(by=["家庭人数"],ascending = False).head(10)
plt.plot(plttest["家庭人数"],plttest["是否幸存"],'ko--')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNXYqQKU-1627401371820)(/home/xingyu/.config/Typora/typora-user-images/image-20200817225613356.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7I9OXOo-1627401371822)(https://i.loli.net/2020/08/18/YWXvxJE4Q9gz8q2.png)]

  1. 票价越高且年龄较小的,基本全部存活
  2. 家庭人数越多,存活率几乎为0

第二章

第一节 数据清洗及特征处理

数据处理

缺失值处理
缺失值观察
函数 说明
df.isnull()
df.isnull().sum() [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mXo5BaF-1627401373038)(https://i.loli.net/2020/08/20/MyChYLmnGec8Ro1.png)]
df.info() [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WD7fLhB-1627401373040)(https://i.loli.net/2020/08/20/1RWodQNxCpaElmt.png)]
处理缺失值
函数 说明
df.dropna() 根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对确实值的容忍度
df.fillna() 用指定值或插值方法(ffill or bfill) 填充缺失数据
df.isnull() 返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值/NA, 该对象的类型与源类型一样
notnull isnull的否定式
dropna()

参数:

axis: default 0指行,1为列

how: {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的

thresh: int,保留含有int个非空值的行

subset: 对特定的列进行缺失值删除处理

inplace: 这个很常见,True表示直接在原数据上更改

fillna()

参数 :

inplace: True of False

method : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None

pad/ffill:用前一个非缺失值去填充该缺失值

backfill/bfill:用下一个非缺失值填充该缺失值

None:指定一个值去替换缺失值(缺省默认这种方式)

limit:限制填充个数

axis:修改填充方向

问:检索空缺值用np.nan要比用None好,这是为什么?
type(np.nan)  # <class 'float'>
type(None)    #<class 'NoneType'>

数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan

对年龄(Age)缺失值处理

对年龄采用均值处理:

df['Age'].fillna(df['Age'].describe()['mean'], inplace = True)
对舱位(Cabin)处理

查看舱位基本信息

import matplotlib.pyplot as plt
x = list(k_Cabin['Cabin'].unique())
y =[]
Cabin_k = np.array([df.Cabin.isnull() & df.Survived == 1])
for i in x:tmp = 0all_people = k_Cabin['Cabin'][k_Cabin['Cabin'] == i].count()arrived_people = k_Cabin['Cabin'][(k_Cabin.Cabin == i) & (k_Cabin.Survived == 1)].count()y.append(arrived_people / all_people)
x.append('No Cabin')
y.append(np.sum(Cabin_k !=0) / Cabin_k.shape[1])
plt.plot(x,y)
plt.ylabel('Survived rate')
plt.show()

综上,客舱缺失值是无舱位,属正常现象。

客舱除T客舱外,其余存活率均维持在0.6上下,但T客舱只有一人,所以客舱无需考虑。

无客舱人数出

计算无客舱人数存活率踩坑

初步思路

#初步思路
df.Cabin[df.Cabin.isnull() & df.Survived == 1].count()
##得出结果 0     发现数据为NaN时,count()得出结果始终为0

@型 from KDD

Hands-on-data-analysis 动手数据分析相关推荐

  1. R语言统计入门课程推荐——生物科学中的数据分析Data Analysis for the Life Sciences

    Data Analysis for the Life Sciences是哈佛大学PH525x系列课程--生物医学中的数据分析(PH525x series - Biomedical Data Scien ...

  2. R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集

    R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录

  3. R探索新数据分析(Exploratory Data Analysis,EDA)

    R探索新数据分析(Exploratory Data Analysis,EDA) 目录 R探索新数据分析(Exploratory Data Analysis,EDA) str方法进行数据概览及类型查看

  4. python进行探索性数据分析EDA(Exploratory Data Analysis)分析

    python进行探索性数据分析EDA(Exploratory Data Analysis)分析 show holy respect to python community, for there ded ...

  5. 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)

    # -*- coding: utf-8 -*- ''' Created on 2018年1月24日 @author: Jason.F @summary: 有监督回归学习-探索式数据分析(EDA,Exp ...

  6. 数据分析---《Python for Data Analysis》学习笔记【04】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  7. 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘

    http://cos.name/cn/topic/102130 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘. 在对访谈内容或剧本 ...

  8. 拓扑数据分析-Topological data analysis

    一.拓扑概念 拓扑主要研究的对象为几何图形或空间结构,探究在连续改变形状后还能保持不变的一些性质.它只考虑物体间的位置关系而不考虑它们的形状和大小.简单的描述为:一些特殊的几何性质,在图形连续改变形状 ...

  9. Topological Data Analysis(TDA) 拓扑数据分析与mapper算法

    目录 什么是TDA? mapper算法的大致流程 使用mapper进行数据分析的优点 参考连接 什么是TDA? 即对数据拓扑学特征进行分析的方法,那么什么是拓扑学特征?拓扑是研究几何图形或空间在连续改 ...

  10. python 数据分析 百度网盘_[百度网盘]利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 - 磁力点点...

    利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 2018-5-27 · 链接:https://pan.baidu.com/s ...

最新文章

  1. java jar包收集
  2. 前端学习(3285):立即执行函数四
  3. jpa mysql存储过程_Jpa调用存储过程及参数
  4. 隐藏ASP.NET MVC版本
  5. SpringBoot2.1.5(14)---外部配置
  6. 【mmdetection】mmdetection数据处理pipline结果可视化
  7. Vue源码分析 - watcher.js
  8. AutoCAD字体安装教程
  9. Deeping操作系统配置tomcat并运行第一个Javaweb程序
  10. CCNA题库第一部分
  11. 如何将图片批量转换成PDF?
  12. MyBatisPlus关键字查询
  13. Excel制作乘法口诀表
  14. dva介绍和官网案例
  15. android极光推送 小米,极光推送- 小米厂商通道集成指南 - 极光文档
  16. 适用vue的html前台页面打印插件
  17. 广东移动魔百盒M411A _905L3_线刷固件包
  18. 【ureport2 vue版本实现】
  19. 基于超级电容Supercapacitor和蓄电池的充放电控制系统simulink仿真
  20. 基于超算平台气象预警并行计算架构研究

热门文章

  1. vue中实现图片预览放大,缩小,旋转等功能, 使用viewerjs
  2. 给电脑重装系统的时间需要多久才能装好
  3. MP3文件格式与编码原理解码流程详解
  4. Vim编辑器与Shell命令脚本
  5. 勒索病毒横行下设备该如何进行加密防护
  6. SQL Server性能调教系列(4)--Profiler(下)
  7. linux端口进程号pid,Linux根据端口号查看进程PID
  8. unity 多视角下的鱼眼效果
  9. NGUI 角色头像状态栏制作
  10. 动态规划实现矩阵连乘