Hands-on-data-analysis 动手数据分析
动手数据分析笔记
第一章
第一节 数据载入及初步观察
数据载入
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)]
- 票价越高且年龄较小的,基本全部存活
- 家庭人数越多,存活率几乎为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
在 Data Analysis for the Life Sciences是哈佛大学PH525x系列课程--生物医学中的数据分析(PH525x series - Biomedical Data Scien ... R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录 R探索新数据分析(Exploratory Data Analysis,EDA) 目录 R探索新数据分析(Exploratory Data Analysis,EDA) str方法进行数据概览及类型查看 python进行探索性数据分析EDA(Exploratory Data Analysis)分析 show holy respect to python community, for there ded ... # -*- coding: utf-8 -*- ''' Created on 2018年1月24日 @author: Jason.F @summary: 有监督回归学习-探索式数据分析(EDA,Exp ... <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ... http://cos.name/cn/topic/102130 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘. 在对访谈内容或剧本 ... 一.拓扑概念 拓扑主要研究的对象为几何图形或空间结构,探究在连续改变形状后还能保持不变的一些性质.它只考虑物体间的位置关系而不考虑它们的形状和大小.简单的描述为:一些特殊的几何性质,在图形连续改变形状 ... 目录 什么是TDA? mapper算法的大致流程 使用mapper进行数据分析的优点 参考连接 什么是TDA? 即对数据拓扑学特征进行分析的方法,那么什么是拓扑学特征?拓扑是研究几何图形或空间在连续改 ... 利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 2018-5-27 · 链接:https://pan.baidu.com/s ...@型 from KDD
Hands-on-data-analysis 动手数据分析相关推荐
最新文章
热门文章