栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

动手学数据分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动手学数据分析

第一部分:数据的载入以及初步观察 1.1 加载数据

将收集来数据保存在本地。

如本文使用的数据就是从https://www.kaggle.com/c/titanic/overview中下载的。

1.1.1 导入numpy和pandas库
# numpy是一个处理多维矩阵的一个库,里面包含各种数学方法
# pandas是一个强大的分析结构化数据的工具集;他的使用基础Numpy;用于数据挖掘和数据分析,同时也提
# 供数据清洗功能

import numpy as np
import pandas as pd
1.1.2 载入数据

(1)使用相对路径加载数据

data=pd.read_csv('train.csv)
print(data)

(2)使用绝对路径加载数据

#在绝对路径中/和具有相同作用,因为train.csv的首字母为t用/会被误认为换行符t
#若依旧想使用可以在train.csv前加\以示区分

data=pd.read_csv('D:/py代码/hands-on-data-analysis-master_1/train.csv')
print(data)

(3)检验是否正确引入数据

#在检验大量数据是否引入正确时,常用pd.head()查看数据的前几行而不是全部数据。
#pd.head()可以在()里面填写想要查看的行数,如果不填写,默认是n=5
print(pd)
print(pd.head())

思考:1.pd.read_csv()与pd.read_table()的不同,通过什么方法可以使的两种效果相同?

           2.‘.tsv’和'.csv'的区别,如何加载这两种数据集

回答:1.pd.read_csv()是以“,”为分隔符,pd.read_table()是以“t”换行符为分隔符。两者是通用的。可以通过seq和delimiter参数进行控制2

#两两都是相同表达。
data=pd.read_table('train.csv',seq=',')
# data=pd.read_csv('train.csv')

data=pd.read_csv('train.csv',seq='t')
#data=pd.read_table('train.csv')

           2.‘.tsv’和'.csv'都属于文本文件,但两者文件的字段分隔不同,'.tsv'是由制表符隔开,而'.csv'文件是逗号隔开。两种格式的文件都可以通过pd.read_csv()与pd.read_table()进行读取,只是在sep和delimiter参数。

1.1.3  逐块读取,每1000行为一个数据模块
chunker = pd.read_csv('train.csv', chunksize=1000)

思考:1.什么是逐块读取?2.为什么要逐块读取呢?

回答:1.遇到大文件,我们读取其中的一部分数据或对文件进行逐块处理。

           2.使用逐块读取的原因是因为当使用pandas处理大文件时,通过将文件逐步分成一个小片段来进行处理能够提高pandas处理文件的效率。

1.1.4 将表头改成中文,索引改成乘客ID
#方法一:通过data.columns直接进行修改
data.columun=[ names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船价信息', '票价', '客舱'']
#方法二:通过rename进行修改
df.rename(columns={'PassengerId':'乘客ID','Survived': '是否幸存','Pclass':'乘客等级(1/2/3等舱位)','Name':'乘客姓名','Sex': '性别','Age':'年龄','SibSp':'堂兄弟/妹个数','Parch': '父母子女个数','Ticket':'船票信息','Fare':'票价', 'Cabin':'客舱','Embarked':'登船港口'},inplace=True)
#方法三:使用names进行修改
df =pd.read_csv('train.csv', names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船价信息', '票价', '客舱', '登船港口'], index_col='乘客ID', header=0)

1.2 初步观察数据

导入数据,对数据的整体进行概览。

1.2.1 查看数据的基本信息(对于一个数据,还可以从哪些方面来观察?)
#查看Dataframe对象的前n行
data.head(n) 

#查看Dataframe对象的最后n行
data.tail(n)

#查看数据的行列数各是多少 
data.shape 

#查看索引、数据类型和内存信息
data.info() 

#查看数值型列的汇总统计,返回计数、均值、标准差、最小最大值、25%50%75%分位数,percentiles 0.05,0.95分位数
data.describe(percentiles=[.05, .25, .75, .95]) 

#快速查看数据列有哪些分类内容,类似groupby
data.unique()

#查看Series对象的唯一值和计数 
s.value_counts(dropna=False)

#查看Dataframe对象中每一列的唯一值和计数 
data.apply(pd.Series.value_counts) 

#返回所有列的求和值
data.sum() 

#返回所有列的均值
data.mean()

#返回列与列之间的相关系数 
data.corr()

#返回每一列中的非空值的个数 
data.count()

#返回每一列的最大值 
data.max()
 
#返回每一列的最小值
data.min 

#返回每一列的中位数
data.median() 

#返回每一列的标准差
data.std() 
1.3 保存数据
# 将上述处理完的数据保存
# 在保存数据时,为了防止pandas自己帮助行和列的名称,一般会将index参数设置为Fales
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入encoding='GBK' 或者encoding = utf-8

data.to_csv('train_chinese.csv')
第二部分 pandas基础 1.4 知道你的数据叫什么

思考:我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?

回答:pandas读取csv文件后数据,其数据类型为Dataframe类型

1.4.1 任务一:pandas中有两个数据类型Dateframe和Series,他们之间的区别。并举例说明。

1.Series和数组numpy.array类似

#输出一个数组
#Series是有索引的,如果没有制定索引,会以数字自动生成。
s1=pd.Series([1,2,3,4,5])
s2=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

2.Series和有定长的有序字典

s3=pd.Series({'a':1,'b':5,'c':6,'d':'7'})

3.Dataframe相当于表格,有行表头和列表头

#构建Dataframe最常用的方法就是直接传入一个等长发列表或者数组组成的字典
data={'name':['jdk','dww','bhjf','fwb'],
      'age':[15,68,51,23],
        'ins':['fgg','gg','vrb','rbr']}
frame=pd.Dataframe(data)
print(frame)
1.4.2 载入上一章的train.csv文件
data=pd.read_csv('train.csv')
1.4.3 查看Dataframe数据的每列的名称
data.columns
1.4.4 查看‘Cabin’列的所有项
data['Cabin'].head()
data.Cabin.head()
1.4.5 加载‘test_1.csv’,然后对比‘train.csv’,查看是否有多余项,并删除
#读取tset文件并对比是否有多余项
test_data=pd.read_csv('test_1.csv')

#发现‘a’项是多余的
#第一种:使用del
del test_data['a']

#第二种:使用drop,不改变内存,就是再次读取该数据是还是原始数据
trop_test_data=test_data.drop('a',axis=1)

#第三种:使用drop,改变内存,再次读取时是改变后的数据
trop_test_data=test_data.drop('a',axis=1,inplace=True)

1.4.6 将['Passengers','Name','Age','Ticket']这几列元素隐藏
#隐藏使用drop,想删除可以del或在后面添加inplace=True
data.drop(['Passengers','Name','Age','Ticket'],axis=1)

1.5 筛选逻辑 1.5.1 以‘Age’为筛选条件,显示年龄为10岁以下的乘客信息,显示10岁以上50岁以下乘客信息,并命名为midage
data_age_10down=data[data['Age']<10]

mindage=data[(data['Age']>10)&(data['Age']<50)]
1.5.2 将midage的数据中的第100行的‘Pclass’和‘Sex’的数据显示出来
midage=midage.reset_index(drop=True)
midage.loc[[100],['Pclass','Sex']]

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

#使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]

思考:1.reset_index()函数的作用

           2.如果不用这个函数,下面的任务会出现什么情况?

回答:

1.reset_index()可以重置索引,drop参数为True时,将index列隐藏,否则原来的索引新生成一列名为'index'的列。

2.后面索引容易出现逻辑错误

思考:对比iloc和loc的异同

回答:

loc——通过行标签索引行数据                                                   iloc——通过行号索引行数据 

loc按照标签,所以相当于前闭后闭                                            iloc前闭后开

第三部分 探索性数据分析 1.6 了解数据 1.6.1 利用Pandas对示例数据进行排序,要求升序
# by=的参数就是需要排序的列,ascending为True表明为升序,False为降序,默认为升序
# 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
df=pd.Dataframe(data,index=['2','1'],columns=['d',''a','b','c'])
df.arange(8).reshape((2, 4))
df.sort_values(by='a',ascending=True)

# Dataframe数据的排序可以通过值排序,也可以通过索引进行排序
#通过索引进行排序
df.sort_index()

#通过列索引进行升序排序
df.sort_index(axis=1)

#通过列索引进行降序排序
df.sort_index(axis=1,ascending=False)

#通过任意选择两列数据同时进行降序排序
df.sort_value(by=['a','d'],ascending=False)
1.6.2对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
train_chinese_data.sort_values(by=['票价','年龄'],ascending=False)
1.6.3 利用Pandas进行算术计算,计算两个Dataframe数据相加结果
new_frame=frame1_a+frame1_b
1.6.4 通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
#还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母#子女个数’),我们该怎么做呢?

max(text['兄弟姐妹个数'] + text['父母子女个数'])
1.6.5 学会使用Pandas describe()函数查看数据基本统计信息
frame2.describe()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号