IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 动手学数据分析-Task01:数据加载及探索性数据分析 -> 正文阅读

[Python知识库]动手学数据分析-Task01:数据加载及探索性数据分析

本学习笔记为Datewhale-7月组队学习-动手学数据分析的学习内容,学习链接为:https://github.com/datawhalechina/hands-on-data-analysis



前言

从这篇博文开始,我们将会一起学习如何用python进行数据分析。本次学习将会通过kaggle上泰坦尼克的实例进行学习。这里有两份资料: 教材《Python for Data Analysis》和 baidu.com & google.com(善用搜索引擎)


一、学习知识点概要

Task01:数据加载及探索性数据分析

知识点:
1.数据载入及初步观察
2.pandas基础
3.探索性数据分析

二、学习内容

(一)数据载入及初步观察

1. 数据加载

数据集下载 https://www.kaggle.com/c/titanic/overview

(1)导入numpy和pandas

import numpy as np
import pandas as pd

(2)载入数据

使用相对路径载入数据

df = pd.read_csv('train.csv')

【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。

使用绝对路径载入数据

#每个人存放的绝对路径都不一样
df = pd.read_csv('C:/Users/wslan/Desktop/学习/hands-on-data-analysis-master/第一单元项目集合/train.csv')

数据输出

#查看前三行数据,head()默认输出前五行
df.head(3)

两种方法得到的数据相同,如下:
在这里插入图片描述

(3)逐块读取数据

每1000行为一个数据模块,逐块读取

chunker = pd.read_csv('train.csv', chunksize=1000)

(4)更改表头和索引

将表头改成中文,索引改为乘客ID

读取时直接处理列名

df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df.head()

【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?

读取后修改列名

df.columns = ['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']

加之rename函数,用字典的形式替换式的修改

df.rename(columns={'PassengerId':'乘客ID','Survived':'是否幸存','Pclass':'仓位等级','Name':'姓名','Sex':'性别','Age':'年龄','SibSp':'兄弟姐妹个数','Parch':'父母子女个数','Ticket':'船票信息','Fare':'票价','Cabin':'客舱','Embarked': '登船港口'})
df

2. 初步观察

导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等

(1)查看数据的基本信息

df.info()

(2)观察表格数据

观察表格前十行:

df.head(10)

观察表格后15行:

df.tail(15)

(3)判断数据是否为空

判断数据是否为空,为空的地方返回True,其余地方返回False

df.isnull().head()

【思考】上面的操作都是数据分析中对于数据本身的观察,对于一个数据,还可以从哪些方面来观察?找找答案,这个将对下面的数据分析有很大的帮助

还可以对数据的平均值、方差、标准差、最大最小值等隐藏在数据中的信息进行观察

3. 保存数据

将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
df.to_csv('train_chinese.csv')

(二)pandas基础

1. 数据类型

pandas中有两个数据类型DateFrame和Series

(1)数据类型Series

sdata = {'a': 1111, 'b': 2222, 'c': 3333, 'd': 4444}
example_1 = pd.Series(sdata)
example_1

在这里插入图片描述

(2)数据类型DateFrame

data = {'a': ['one', 'two', 'three', 'four'],
        'b': [1.0, 2.0, 3.0, 4.0 ],'c': [1, 2, 3, 4,]}
example_2 = pd.DataFrame(data)
example_2

在这里插入图片描述

2. 查看数据

(1)查看每列的名称

df.columns

(2)查看"Cabin"这列的所有值

法一:

df['Cabin'].head(3)

法二:

df.Cabin.head(3)

(3)隐藏列元素

将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

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

3. 删除多余列

(1)加载文件"test_1.csv",然后对比"train.csv"

test_1 = pd.read_csv('test_1.csv')
test_1.head(3)

(2)观察发现test_1.csv有一列是多余的,将多余的列删去

# 删除多余的列
del test_1['a']
test_1.head(3)

【思考】还有其他的删除多余的列的方式吗?

df= df.drop('column_name', 1)

具体查看此链接http://www.361way.com/pandas-del-drop/6151.html

4. 筛选数据

(1)我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

df[df["Age"]<10].head(3)

(2) 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head(3)

5. 显示特定数据

重置索引

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

【思考】这个reset_index()函数的作用是什么?如果不用这个函数,下面的任务会出现什么情况?

reset_index()函数的作用是重置索引,因为前面筛选了数据,所以midage的索引和行数此时并不是对应的,如果不使用reset_index()函数,显示的就不是midage数据中的第100行,而是df数据的第100行。具体函数作用可点击此链接查看https://www.cnblogs.com/keye/p/11229863.html

显示midage数据中第100行"Pclass"和"Sex"的数据

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]]

【思考】对比iloc和loc的异同

loc——通过行标签索引行数据
iloc——通过行号索引行数据
具体可点击此链接查看https://blog.csdn.net/boywaiter/article/details/86012620

(三)探索性数据分析

1.排序

(1)对示例数据进行排序,要求升序

#自己构建一个都为数字的DataFrame数据
frame = pd.DataFrame(np.arange(8).reshape((2, 4)), 
                     index=['2', '1'], 
                     columns=['d', 'a', 'b', 'c'])
frame

在这里插入图片描述

# 大多数时候我们都是想根据列的值来排序,所以,将你构建的DataFrame中的数据根据某一列,升序排列
frame.sort_values(by='c', ascending=True)

在这里插入图片描述

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

(2)总结其他排序方式

让行索引升序排序:

frame.sort_index()

在这里插入图片描述
让列索引升序排序:

frame.sort_index(axis=1)

在这里插入图片描述
让列索引降序排序:

frame.sort_index(axis=1, ascending=False)

在这里插入图片描述
让任选两列数据同时降序排序:

frame.sort_values(by=['a', 'c'], ascending=False)

在这里插入图片描述

(3)对泰坦尼克号数据进行排列

按票价和年龄两列进行综合排序(降序排列)

'''
在开始我们已经导入了train_chinese.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可
head(3) : 读取前3条数据
'''

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

在这里插入图片描述

2. 利用Pandas进行算术计算

(1)计算两个DataFrame数据相加结果

#将frame_a和frame_b进行相加
frame1_a + frame1_b

在这里插入图片描述

【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

(2)计算出在船上最大的家族人数

'''
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
'''
max(text['兄弟姐妹个数'] + text['父母子女个数'])

3. Pandas describe()函数

(1)查看数据基本统计信息

# 建立一个frame2后,调用 describe 函数,观察frame2的数据基本信息

frame2.describe()

'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''

(2)观察泰坦尼克号数据集的基本统计数据

票价

'''
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
'''
text['票价'].describe()

在这里插入图片描述

【思考】从上面数据我们可以看出, 一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。

父母子女个数

'''
通过上面的例子,我们再看看泰坦尼克号数据集中 父母子女个数 这列数据的基本统计数据,然后可以说出你的想法
'''
text['父母子女个数'].describe()

在这里插入图片描述

三、学习问题与解答

问题一:绝对路径与相对路径?
解答: 绝对路径是相对于根路径 / 的,只要文件不移动位置,那么它的绝对路径是恒定不变的;而相对路径是相对于当前所在目录而言的,随着程序的执行,当前所在目录可能会改变,因此文件的相对路径不是固定不变的。

问题二:知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?
解答:
pd.read_csv()和pd.read_table()的区别

函数说明
pd.read_csv()从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
pd.read_table()从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符“\t”

指定分隔符,可以使pd.read_csv()和pd.read_table()效果一样

pd.read_table('', sep=',')

TSV文件和CSV的文件的区别是:前者使用\t作为分隔符,后者使用,作为分隔符。

pd.read_csv('test.tsv', sep='\t')

问题三:什么是逐块读取?为什么要逐块读取呢?chunker(数据块)是什么类型?
解答:
因为用pandas处理文件的时侯,经常会遇到大文件,可能会遇到内存不足的问题,并且有时我们只是想读取其中的一部分数据,因此我们可以把大文件分成小块,进行逐块处理。这里,我们把拆分的小块称为chunk,一个chunk 就是我们数据的一个小组。 Chunk 的大小主要依据我们内存的大小,自行决定。

read_csv 和 read_table 有一个 chunksize 参数,用以指定一个块大小(每次读取多少行),返回一个可迭代的 TextFileReader 对象。
每个chunker(数据块)都是DataFrame类型的数据结构。

问题三:对比iloc和loc的异同
解答:
loc——通过行标签索引行数据
iloc——通过行号索引行数据
具体可点击此链接查看https://blog.csdn.net/boywaiter/article/details/86012620

问题四:reset_index()函数的作用是什么?如果不用这个函数,下面的任务会出现什么情况?
解答:
reset_index()函数的作用是重置索引,因为前面筛选了数据,所以midage的索引和行数此时并不是对应的,如果不使用reset_index()函数,显示的就不是midage数据中的第100行,而是df数据的第100行。具体函数作用可点击此链接查看https://www.cnblogs.com/keye/p/11229863.html

四、学习思考与总结

本次学习,学会了如何进行数据加载及探索性数据分析。

获得一个要分析的数据,要学会如何加载数据,查看数据,然后学习Pandas的一些基础操作,最后开始尝试探索性的数据分析。通过泰坦尼克号数据的实例,解决过程中出现的各种问题,加深了对pandas指令的印象。

加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载和处理数据方法和思路都是一样的。在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料,使用google和百度等,了解业务逻辑,明白输入和输出是什么。

希望大家可以互相交流、共同学习,如果发现博文中有错的或不解的,欢迎留言或私聊交流~
————————————————

五、参考文章

[1]https://github.com/datawhalechina/hands-on-data-analysis
[2] https://blog.csdn.net/boywaiter/article/details/86012620
[3]https://www.cnblogs.com/keye/p/11229863.html
[4]https://blog.csdn.net/weixin_43438930/article/details/108104434
[5]http://www.361way.com/pandas-del-drop/6151.html

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:49:15  更:2021-07-14 10:50:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 4:37:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码