概述
目录
- 第一节:数据加载
- 1 载入数据
- 1.1 导入numpy和pandas
- 1.2 载入数据
- 1.2.1 相对路径与绝对路径
- 1.2.2 read_csv和read_table的区别
- 1.3 逐块读取
- 1.4 修改表头和索引
- 2 初步观察数据
- 2.1 查看数据基本信息
- 2.2 观察指定位置的数据
- 2.3 判断数据是否为空
- 3 保存数据
- 第二节:pandas基础
- 1 了解数据类型
- 1.1 DataFrame和Series类型
- 1.2 查看DataFrame数据的每列名称
- 1.3 查看指定列的所有值
- 1.4 删除单个列
- 1.5 删除多个列
- 2 筛选的逻辑
- 2.1 指定筛选条件
- 2.2 将指定行列的数据显示出来
- 2.2.1 loc和iloc函数
- 2.2.2 rest_index()函数
- 第三节:探索性数据分析
- 1 操作数据
- 1.1 对数据排序
- 1.2 综合排序
- 1.3 DataFrame的加法
- 1.4 数据中的最大值
- 1.5 describe()函数
- 1.6 思考数据的基本统计数据
第一节:数据加载
1 载入数据
1.1 导入numpy和pandas
import numpy as np
import pandas as pd
注意:记住在开头就写上,避免忘记,可以使用简写方便书写
1.2 载入数据
1.2.1 相对路径与绝对路径
- 相对路径:相对于当前文件来说,要选择的文件的位置
- 绝对路径:针对电脑来说,目标文件的位置
# 相对位置 df=pd.read_csv('train.csv') # 绝对位置 df=pd.read_csv('C:UsersYG小白DW数据分析学习train.csv')# 报错 # SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes
- 位置问题:在windows系统当中读取文件路径可以使用,但是在python字符串中有转义的含义
- 方法一:在路径前面加r,即保持字符原始值的意思
df=pd.read_csv(r'C:UsersYG小白DW数据分析学习train.csv')
- 方法二:替换为正斜杠
df=pd.read_csv('C:/Users/YG小白/DW数据分析学习/train.csv'
- 方法三:替换为双反斜杠
df=pd.read_csv(r'C:\Users\YG小白\DW数据分析学习\train.csv')
1.2.2 read_csv和read_table的区别
- read_csv:从文件读取分隔好的数据,默认分隔符是逗号
- read_table:从文件读取分隔好的数据,默认分隔符是制表符(‘t’),即以行为单位进行分隔
df2 = pd.read_table('train.csv',nrows = 3)#只读取3行数据 print(df2) print("pd.read_table读取数据行列数为:",df2.shape) # pd.read_table读取数据行列数为: (3, 1)
df1=pd.read_csv('train.csv',nrows = 3) print(df1) print("pd.read_csv读取数据行列数为:",df1.shape) # pd.read_csv读取数据行列数为: (3, 12)
注意:两个都是加载带分隔符的数据,只是默认的分隔符不同。read_table是将每行所有的元素作为一个维度存储在一起,因此只有一列;而read_csv是将每个元素作为一列存储。
1.3 逐块读取
-
什么是逐块读取?为什么要逐块读取呢?
- 逐块读取:将数据分成小块按块读入,得到的对象指向了多个分块对象,但并没有将实际数据先读入,而是在提取数据时才将数据提取进来。
- 原因:在处理很⼤的⽂件时,可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源。数据的处理和清洗经常使用分块的方式处理,这能大大降低内存的使用量,但相比会更耗时一些。
-
chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?
# `chunkersize`参数用来控制迭代数据分析的大小 #指定 `chunkersize`参数作为每一块的行数 chunker = pd.read_csv('train.csv', chunksize=400) print(type(chunker)) # TextParser for piece in chunker: print(type(piece)) print(len(piece))
有
chunkersize
参数可以进行逐块加载,本质就是将文本分成若干块,每次处理chunkersize
行的数据,最终返回一个TextParser
对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理。pandas 有两个主要的数据结构:Series 和 DataFrame。
- DataFrame 是一个表格型的数据结构。它提供有序的列和不同类型的列值。
- Series 是一个一维数组对象 ,类似于 NumPy 的一维 array。它除了包含一组数据还包含一组索引
1.4 修改表头和索引
- 将表头改成中文,索引改为乘客ID
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'] ,index_col='乘客ID',header=0) df.head()
2 初步观察数据
2.1 查看数据基本信息
-
对数据基本结构和信息进行了解,如数据大小、有多少列,各列都是什么格式的,是否包含null等
# info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息, # 包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。 df.info()
-
有多个函数可以使用
describe()
函数# describe()函数用于生成描述性统计信息。 # 类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。 df.describe()
-
info
函数和describe()
函数info
函数- 功能: 给出样本数据的相关信息概览 :行数,列数,列索引,列非空值个数,列类型,内存占用
- 使用格式:data.info()
describe()
函数- 功能:直接给出样本数据的一些基本的统计量,包括均值,标准差,最大值,最小值,分位数等。
- 使用格式:data.describe()
2.2 观察指定位置的数据
-
观察前五行和后四行的数据
df.head(5)
df.tail(4)
2.3 判断数据是否为空
-
为空的地方返回True,其余地方返回False
df.isnull().head(3)
3 保存数据
- 将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')
注意:不同的操作系统保存下来可能会有乱码。大家可以加入
encoding='GBK'
或者encoding = 'uft-8'
第二节:pandas基础
1 了解数据类型
1.1 DataFrame和Series类型
- pandas 有两个主要的数据结构:Series 和 DataFrame。
- DataFrame 是一个表格型的数据结构。它提供有序的列和不同类型的列值。
- Series 是一个一维数组对象 ,类似于 Numpy的一维array。它除了包含一组数据还包含一组索引。平常用Python处理xlsx、csv文件,读出来的就是dataframe格式
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
1.2 查看DataFrame数据的每列名称
- columns
df.columns
1.3 查看指定列的所有值
- 两种方法
# 方法一 df['Cabin'].head(3) # 方法二 df.Cabin.head(3)
1.4 删除单个列
-
方法一:del
test_1 = pd.read_csv('test_1.csv') # 删除指定列 del test_1['a'] test_1.head(3)
-
方法二:pop
test_1 = pd.read_csv('test_1.csv') # 删除指定列 test_1.pop('a') test_1.head(3)
注意:以上的删除,都不对原文件进行修改
1.5 删除多个列
- drop函数
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
注意:drop函数默认删除行,列需要加axis = 1。
如果想要完全删除数据结构,使用inplace=True
,默认inplace=False
del
和drop
的区别del
函数是 Python的内置函数函数,仅对列进行操作,一次只能操作一个,仅是就地操作drop
函数是属于pandas中的内置函数,对列和行都进行操作,一次可以处理多个项目,可以就地操作或返回副本
2 筛选的逻辑
2.1 指定筛选条件
-
单个筛选条件
# 以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。 df[df["Age"]<10].head(3)
-
多个筛选条件
# 将年龄在10岁以上和50岁以下的乘客信息显示,并将这个数据命名为midage midage = df[(df["Age"]>10)& (df["Age"]<50)] midage.head(3)
2.2 将指定行列的数据显示出来
2.2.1 loc和iloc函数
-
loc函数
# 将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来 midage = midage.reset_index(drop=True) midage.loc[[100],['Pclass','Sex']]
# 将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]]
-
两个函数的区别:
- loc函数
- 基于行和列的标签进行索引。
- loc的输入可以是:单个标签(例如:1 or ‘a’)、标签列表或数组、标签切片(注意:此处切片包含结束位置)、布尔数组
- iloc函数
- 基于位置进行索引,主要是整数,也可以用布尔数组。
- iloc的输入可以是:单个整数、整数列表或数组、整数切片、布尔数组
- loc函数
2.2.2 rest_index()函数
-
reset_index()函数
- 作用:将数据还原索引为普通列,重新变为默认的整型索引
数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引。
- 格式:DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)
- 参数:
- drop:在获得新的indexs时,原来的index变成数据列,保留下来。若不想保留原来的index,使用参数 drop=True,默认 False。
midage = midage.reset_index() midage.head(3)
midage = midage.reset_index(drop=Ture) midage.head(3)
第三节:探索性数据分析
1 操作数据
1.1 对数据排序
- 创建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 对象的索引行
- 代码解析:
- 根据某一列值进行排序
# 根据c列的值,升序排序 frame.sort_values(by='c', ascending=True)
- sort_values()
- by:排列的列名
- ascending: 排序的方式(False降序)
- sort_values()
- 根据索引进行排序
- sort_index(),
axis=1
按列索引排序,默认为0。其他参数同上
# 让行索引升序排序 frame.sort_index()
# 让列索引升序排序 frame.sort_index(axis=1)
# 让任选两列数据同时降序排序 frame.sort_values(by=['a', 'c'], ascending=False)
- sort_index(),
1.2 综合排序
- 通过综合排序得出与常识不同的结论
- 对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),读取前20条数据
text.sort_values(by=['票价', '年龄'], ascending=False).head(20)
- 结论:排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例
1.3 DataFrame的加法
- 利用pandas可以对DataFrame数据进行算数运算
- 两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
#建立一个例子 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 framel_b
#将frame_a和frame_b进行相加 frame1_a + frame1_b
1.4 数据中的最大值
- max函数
max(text['兄弟姐妹个数'] + text['父母子女个数']) ''' 10 '''
- 先让这两列相加返回一个DataFrame,然后用max函数求出最大值
1.5 describe()函数
- 和info函数的区别见第一节2.2
- describe函数的基本结构
- 结构:
''' count : 样本数据大小 mean : 样本数据的平均值 std : 样本数据的标准差 min : 样本数据的最小值 25% : 样本数据25%的时候的值 50% : 样本数据50%的时候的值 75% : 样本数据75%的时候的值 max : 样本数据的最大值 '''
- 使用Pandas describe()函数查看数据基本统计信息
#建立一个例子 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
# 调用 describe 函数,观察frame2的数据基本信息 frame2.describe()
1.6 思考数据的基本统计数据
- 看看泰坦尼克号 票价 这列数据的基本统计数据
text['票价'].describe()
- 思考:一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。
- 看看泰坦尼克号集中 父母子女个数 这列数据的基本统计数据
text['父母子女个数'].describe()
DataWhale Github地址:link
DataWhale 学习地址:link
最后
以上就是俊秀马里奥为你收集整理的DW-动手学数分01(数据加载及探索性数据分析)第一节:数据加载第二节:pandas基础第三节:探索性数据分析的全部内容,希望文章能够帮你解决DW-动手学数分01(数据加载及探索性数据分析)第一节:数据加载第二节:pandas基础第三节:探索性数据分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复