Python——Numpy基础分析(1)

一、数据集

1.数据说明

  • fixed acidity 固定酸度

  • volatile acidity 挥发性酸度

  • pH 酸碱值

  • alcohol 酒精度数

  • quality 品质得分

2.部分数据展示

图 1-1部分数据展示
  • 若需要全部数据,请私信作者,谢谢

二、导入数据——使用genfromtxt函数来读取文件

(1)genfromtxt函数详解

  • 官网介绍:numpy.genfromtxt — NumPy v1.26 Manual
  • genfromtxt(fnamedtype=<class 'float'>comments='#'delimiter=Noneskip_header=0skip_footer=0converters=Nonemissing_values=Nonefilling_values=Noneusecols=Nonenames=None,...)

(1)fname:要读取的文件、文件名、列表或生成器;

(2)dtype【可选】:结果数组的数据类型。如果为“无”,则数据类型将分别由每列的内容确定;

(3)comments【可选】:str(字符串),用于指示注释开始的字符。注释后一行中出现的所有字符都将被丢弃;

(4)delimiter【可选】:str、int(整型) or sequence(序列),用于分隔值的字符串。默认情况下,任何连续的空格都充当分隔符。还可以提供整数或整数序列作为每个字段的宽度。

(5)skip_header【可选】:int,在文件开头要跳过的行数;

(6)skip_footer【可选】:int,文件末尾要跳过的行数;

(7)converters【可选】:variable(变量),将列数据转换为值的函数集。转换器还可用于为缺失数据提供默认值:converters = {3: lambda s: float(s or 0)}

(8)missing_values【可选】:variable,与缺失数据相对应的字符串集;

(9) filling_values【可选】:数据丢失时用作默认值的一组值;

(10)usecols【可选】:sequence,要读取哪些列,0 为第一列。例如, 将提取第 2、5 和 6 列。usecols = (1, 4, 5)

(11)names【可选】:True、str、sequence,默认值为None,如果names为True,则从第一个skip_header行之后的第一行读取字段名称。该行前面可以选择添加注释分隔符。如果名称是逗号分隔名称的序列或单字符串,则这些名称将用于定义结构化数据类型中的字段名称。如果名称为 None,则将使用 dtype 字段的名称(如果有)。

(2)读取文件数据

方法一:

 # 1.导入numpy库,命名为numoy
import numpy as np   

# 2.使用genformtxt函数来读取文件,通过观察发现数据以分号(;)作为分割
wines1 = np.genfromtxt(r"D:/数据分析与可视化/实验/实验一——葡萄酒品质数据基础分析/winequality-red.csv",delimiter=";")  

# 3.查看数据
wines1

        得到的结果如下图2-1所示:

图2-1
  • 问题:从上图的结果会发现,第一行的数据为nan,这是缺失值的意思,造成这种原因是因为数据第一行为各变量名,是字符串格式,而genfromtxt默认导入的数据格式为浮点型,故会被读成缺失值。
  • 解决方法:为了防止缺失值的产生,可以调整参数skip_header为1,在读取时跳过第一行。
#  4.skip_header 用于设置数据加载时跳过文件头部的字符行数
wines1 = np.genfromtxt(r"D:/数据分析与可视化/实验/实验一——葡萄酒品质数据基础分析/winequality-red.csv",delimiter=";",skip_header=1)  

# 5.查看数据
wines1

        得到的结果如下图2-2所示:

图 2-2

方法二: 

  • 问题: 从上图2-1、2-2可发现,各变量名的数据均不显示
  • 解决办法:设定names为True来解决
# 1.names关键字设置为True
wines2 = np.genfromtxt(r"D:/数据分析与可视化/实验/实验一——葡萄酒品质数据基础分析/winequality-red.csv",delimiter=";",names = True)

# 2.查看数据
wines2

        得到的结果如下图2-3所示:

图 2-3
  •  注意:names参数的默认值为None。若为关键字赋予任何其他值,新名称将覆盖已使用dtype参数定义的字段名称
# 3.赋予参数names其他值
names = ['a','b','c','d','e','f','g','h','i','l','j','k']

# 4.再次导入数据,查看变化
wines2 = np.genfromtxt(r"D:/数据分析与可视化/实验/实验一——葡萄酒品质数据基础分析/winequality-red.csv",delimiter=";",names = names)

# 5.查看数据
wines2

        得到的结果如下图2-4所示: 

图 2-4
  • 从上图可见, 不仅修改了首行读取的列名,还默认了各列的数据类型都是浮点型'f8'
  • 但两种方法读入的数据相同,但是在维度上却不相同,使用shape方法查看两种方法读入的数据的维度
# 第一种方法读入的数据的维度
print("第一份数据的维度",wines1.shape)

# 第二种方法读入的数据的维度
print("第二份数据的维度",wines2.shape)

 得到的结果如下图2-5所示:

图 2-5
  • 从上图可见: 通过第一种方法读入的数据是一个二维数组,而通过第二种方法读入的数据是一个一维数组
  • 使用dtype方法查看两份数据的数据类型
# 通过dtype查看各这两个数组的数据类型
wines1.dtype 
图 2-6
wines2.dtype  
图 2-7

三、数据选取 

1.使用索引选取数据

索引-5-4-3-2-1
01234
0-2abcde
1-1fghij
  • 若想获取字母c,那么使用的列索引为2或者是-3,行索引为0或者是-2
# 1. 导入numpy库
import numpy as np

# 2. 使用numpy创建二维数组
data = np.array([
    ['a','b','c','d','e'],
    ['f','g','h','i','j'],
])

# 3.列索引 2 or -3 ,行索引 0 or -2
print("列索引为2:",data[0,2],data[-2,2])

print("列索引为-3:",data[0,-3],data[-2,-3])

        得到的结果如下图3-1所示:

图 3-1
  • 对于红酒品质的数据,若想获取第三种红葡萄酒的品质得分,即第三行第十二列的数据,对应的行索引为2,列索引为11
# 1.通过切片的方式来得到第三种红葡萄酒的品质得分
wines1[2,11]  

# 2.得到的结果
5.0

2.使用切片选取数据

  • 如果我们想要从第四列中选择前三项,我们可以使用冒号(:)来完成。

  • 冒号表示我们要从起始索引中选择所有元素,但不包括结束索引。

  • 前括后不括——>(start(开始):end(结束):step(步长))

(1)通过切片的方式来得到葡萄酒的第四列中的前三项

# 1.通过切片的方式来得到葡萄酒的第四列中的前三项
wines1[0:3,3]

# 2.得到的结果
array([1.9, 2.6, 2.3])

# 3.若从第一位开始取数据,则0可以省略
wines1[:3,3]

# 4.得到的结果
array([1.9, 2.6, 2.3])

(2)通过切片的方式来得到葡萄酒的第四列中的全部数据

  • 当不指定开始或结束索引,只用冒号制定时,将选择所有数据。
# 1. 通过切片的方式来得到葡萄酒的第四列中的全部数据
wines1[:,3] 

# 2.得到的结果为
array([1.9, 2.6, 2.3, ..., 2.3, 2. , 3.6])

# 3.同理,提取第一种红葡萄酒的所有数据,即第一行整行数据
wines1[0,:]

# 4.得到的结果为
array([ 7.4   ,  0.7   ,  0.    ,  1.9   ,  0.076 , 11.    , 34.    ,
        0.9978,  3.51  ,  0.56  ,  9.4   ,  5.    ])

注意:本文中数据以及内容若有侵权,请第一时间联系删除。

           本文是作者个人学习后的总结,未经作者授权,禁止转载,谢谢配合。

  • 41
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry晴

创作不易,多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值