我是靠谱客的博主 俊秀马里奥,最近开发中收集的这篇文章主要介绍DW-动手学数分01(数据加载及探索性数据分析)第一节:数据加载第二节:pandas基础第三节:探索性数据分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 第一节:数据加载
    • 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

  • deldrop的区别
    • 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的输入可以是:单个整数、整数列表或数组、整数切片、布尔数组

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_index(),axis=1按列索引排序,默认为0。其他参数同上
    # 让行索引升序排序
    frame.sort_index()
    
    在这里插入图片描述
    # 让列索引升序排序
    frame.sort_index(axis=1)
    
    在这里插入图片描述
    # 让任选两列数据同时降序排序
    frame.sort_values(by=['a', 'c'], ascending=False)
    
    在这里插入图片描述

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基础第三节:探索性数据分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部