本文章未使用pandas库,若需要pandas+numpy请移步至 [第7天] Python Pandas 基础学习 - 小能日记 (cnblogs.com)

作业要求:读取UCI iris数据集中鸢尾花的萼片、花瓣长度数据,进行数据清理,去重,排序,并求出和、累积和、均值、标准差、方差、最大值、最小值

学习网站:w3school  92python  runoob

数据下载:UCI 官方  阿里云OSS

总共用时:3小时 (代码在后面)

学习内容:python基础、numpy使用、io读取数据集、数据处理转换与简单分析

学习建议:w3school的numpy教程讲的不错,数组连接那部分需要多看看以外,其他都可以一遍过。遇到新问题,多用搜索引擎,大胆尝试。方法名字不知道的要看学习网站总结的文档,具体的使用方式可以搜索引擎单独搜这个方法。


踩过的坑

1、VSCODE 保存PY文件时自动格式化导致过长的单行自动换行:

从图中可以看到保存时因为单行过长,导致格式化自动换行

解决方法:

  1. 打开vscode左下角设置settings(ctrl+,)
  2. 输入框输入autopep8
  3. 在python>formatting:Autopep8 Args一栏选择Add Item
  4. 在添加条目的输入框输入:"--max-line-length=200",如图:


2、python中判断readline读到文件末尾

python中判断readline读到文件末尾


3、numpy.unique无法对二维数组去重

numpy 数组的去重

numpy 对二维数组去重


4、np.sort()函数的作用

np.sort()函数的作用


5、python for 循环获取index索引

python for 循环获取index索引


6、在NumPy中如何创建一个空的数组/矩阵?

在NumPy中如何创建一个空的数组/矩阵?

这3种数组内字典的去重方式,你会几种?


7、在Numpy中使用自定义结构类型

NumPy 数据类型 | 菜鸟教程 (runoob.com)

Python numpy之结构化数据类型_m0_59235245的博客-CSDN博客_python结构化数据类型

# ^ 去重后转化为 numpy 数组
dt = np.dtype([('sepal_length', 'f4'), ('sepal_width', 'f4'), ('petal_length', 'f4'), ('petal_width', 'f4'), ('category', 'S20')])
res = np.array(list(set(tuple(t) for t in data)), dt)
print(res)

我的代码

注意:不需要手动下载iris.data,运行代码会自动从阿里OSS下载iris.data文件存储在当前目录中

import requests
import numpy as np
import sys # ^ 阿里云OSS读取数据集文件
content = requests.get("https://xiaonenglife.oss-cn-hangzhou.aliyuncs.com/static/cnblogs/2020_3/iris.data") if content.status_code != 200:
print("不成功")
sys.exit() # ^ 退出程序 f = open('iris.data', 'w')
f.write(content.text)
f.close f = open('iris.data', 'r') # ^ 另一种数据导入方法,字典键名为类别,每个键值对是一个数组,旧方法请看末尾 data = {}
line = f.readline()
while line:
if(len(line) > 1):
values = line.split(',')
data.setdefault(values[4].strip('\n'), []) # @ 如果键不存在,则插入这个具有指定值的键
data[values[4].strip('\n')].append([float(values[0]), float(values[1]), float(values[2]),
float(values[3])])
line = f.readline() print(data)
print(data.keys()) # ^ 去重后转化为 numpy 数组
for key in data:
data[key] = np.array(list(set(tuple(t) for t in data[key]))) print(data) # ^ 获取Iris-virginica品种数据
a = data['Iris-virginica']
# ^ 拆分成四个数组
arr = np.array_split(a, 4, axis=1)
print(arr)
# ^ 对花瓣长度进行排序
arr_length = arr[2].flatten()
print(np.sort(arr_length))
# ^ 对花瓣长度进行求和
print(arr_length.sum())
# ^ 求花瓣长度均值
print(np.mean(arr_length))
# ^ 求花瓣长度标准差
print(np.std(arr_length))
# ^ 求花瓣长度最大值
print(np.max(arr_length))
# ^ 求花瓣长度最小值
print(np.min(arr_length)) """
# ^ 字典数组方法
iris = []
line = f.readline()
while line:
# ^ print(len(line)) 可以看到最后一行无内容的但有一个空格
if(len(line) > 1):
values = line.split(',')
iris.append(dict(sepal_length=float(values[0]), sepal_width=float(values[1]), petal_length=float(values[2]),
petal_width=float(values[3]), category=values[4].strip('\n')))
line = f.readline() print(iris, len(iris)) # ^ 输出字典数组 # ^ 数据清理去重
# ^ 把每一个字典转换成一个元组并保存到集合里,再循环集合转化为字典
iris = [dict(t) for t in set([tuple(d.items()) for d in iris])]
print(iris, len(iris)) # ^ 创建 ndarry 数组
# @ 方法二 a = np.zeros(shape=(len(iris), 4))
a = []
for index, item in enumerate(iris):
if item['category'] == "Iris-virginica": # ^ 只针对Iris-virginica品种
a.append([item['sepal_length'], item['sepal_width'], item['petal_length'], item['petal_width']]) a = np.array(a) # ^ 拆分成四个数组
arr = np.array_split(a, 4, axis=1)
print(arr)
"""

新代码(自定义dt类型)

import requests
import numpy as np
import sys # ^ 阿里云OSS读取数据集文件
content = requests.get("https://xiaonenglife.oss-cn-hangzhou.aliyuncs.com/static/cnblogs/2020_3/iris.data") if content.status_code != 200:
print("不成功")
sys.exit() # ^ 退出程序 f = open('iris.data', 'w')
f.write(content.text)
f.close f = open('iris.data', 'r') # ^ 采用自定义数据结构类型进行转换 data = []
line = f.readline()
while line:
if(len(line) > 1):
values = line.split(',')
data.append([float(values[0]), float(values[1]), float(values[2]),
float(values[3]), values[4].strip('\n')])
line = f.readline() # ^ 去重后转化为 numpy 数组
dt = np.dtype([('sepal_length', 'f4'), ('sepal_width', 'f4'), ('petal_length', 'f4'), ('petal_width', 'f4'), ('category', 'S20')])
res = np.array(list(set(tuple(t) for t in data)), dt)
print(res) # ^ 数组过滤, 获取Iris-virginica品种数据
filter_arr = []
for element in res:
if element[4] == b'Iris-virginica':
filter_arr.append(True)
else:
filter_arr.append(False) res = res[filter_arr] # print(len(res), res) # ^ 取出花瓣长度
arr_length = res["petal_length"] # ^ 对花瓣长度进行排序
print(np.sort(arr_length))
# ^ 对花瓣长度进行求和
print(arr_length.sum())
# ^ 求花瓣长度均值
print(np.mean(arr_length))
# ^ 求花瓣长度标准差
print(np.std(arr_length))
# ^ 求花瓣长度最大值
print(np.max(arr_length))
# ^ 求花瓣长度最小值
print(np.min(arr_length))

from numpy import random
import numpy as np def ___():
print("-----------------------------------------") # ^ 导入模块
print("版本号", np.__version__)
___()
# ^ 使用模块创建标量、一维数组、二维数组、三维数组
arr0 = np.array(11)
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
arr3 = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [8, 9, 10]]])
print(arr2)
print("arr2 数据类型", type(arr2))
print("arr3 维度为", arr3.ndim)
print("arr2 访问第二维第一个元素", arr2[1, 0]) ___()
# ^ 数据类型
arr = np.array([1, 2, 3, 4])
print("arr数据对象类型", arr.dtype)
arr = np.array(['apple', 'banana', 'cherry'])
print("arr数据对象类型", arr.dtype)
# @ 定义数组元素的预期数据类型
arr = np.array([1, 2, 3, 4], dtype="S")
print("arr数据对象类型", arr.dtype)
___()
# @ 数组类型的转换
arr = np.array([1.1, 2.1, 3.1])
newarr = arr.astype('i') # @ newarr = arr.astype(int)
print(newarr, newarr.dtype) arr = np.array([1, 0, 3])
newarr = arr.astype(bool)
print(newarr, newarr.dtype)
___() # ^ 副本与视图
"""
副本拥有数据,对副本所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响副本。 视图不拥有数据,对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。
"""
# @ 副本
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61 print(arr)
print(x) ___()
# @ 视图 arr = np.array([1, 2, 3, 4, 5])
y = arr.view()
arr[0] = 61 print(arr)
print(y) ___() # @ 检查副本与视图是否拥有数据 如果数组拥有数据, base 属性返回 None。否则,base 属性将引用原始对象。
print(x.base)
print(y.base) ___() # ^数组形状
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("arr 数组形状", arr.shape) # ^数组重塑
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
print("将12个元素一维转为二维\n", newarr)
newarr = arr.reshape(2, 3, 2)
print("将12个元素一维转为三维\n", newarr)
print("重塑返回的是视图", newarr.base) # IMPORTANT ___()
# ^ 展平数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr) # ^ 使用迭代器遍历三维数组
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
# @ 迭代并修改数据类型,需要额外空间
for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
print(x) # @ 以不同的步长迭代
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) for x in np.nditer(arr[:, ::2]):
print(x) # @ 枚举迭代
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) for idx, x in np.ndenumerate(arr):
print(idx, x) ___()
# ^ 数组连接
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))
print(arr) arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
print(arr) arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.stack((arr1, arr2), axis=1)
print(arr)
___()
# ^ 数组分割
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 3)
print(newarr) arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [
10, 11, 12], [13, 14, 15], [16, 17, 18]])
newarr = np.array_split(arr, 3, axis=1)
print(newarr)
___()
# ^ 数组搜索
arr = np.array([1, 2, 3, 4, 5, 4, 4])
x = np.where(arr == 4)
print(x) arr = np.array([6, 7, 8, 9])
x = np.searchsorted(arr, 7)
print(x) arr = np.array([6, 7, 8, 9])
x = np.searchsorted(arr, 7, side='right')
print(x)
___()
# ^ 数组排序
arr = np.array([3, 2, 0, 1])
print(np.sort(arr)) # @ 此方法返回数组的副本,而原始数组保持不变。 arr = np.array(['banana', 'cherry', 'apple'])
print(np.sort(arr)) arr = np.array([[3, 2, 4], [5, 0, 1]])
print(np.sort(arr))
___()
# ^ 数组过滤
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr) # @ 创建过滤器 arr = np.array([61, 62, 63, 64, 65]) # 创建一个空列表
filter_arr = [] # 遍历 arr 中的每个元素
for element in arr:
# 如果元素大于 62,则将值设置为 True,否则为 False:
if element > 62:
filter_arr.append(True)
else:
filter_arr.append(False) # IMPORTANT 简写为 filter_arr = arr > 62
# STEP 如 filter_arr = arr % 2 == 0 newarr = arr[filter_arr] print(filter_arr)
print(newarr) # ^ 生成随机数
x = random.randint(100)
x = random.rand() # @ 随机浮点数
x = random.randint(100, size=(5)) # @ 生成一个 1-D 数组,其中包含 5 个从 0 到 100 之间的随机整数
x = random.randint(100, size=(3, 5)) # @ 生成有 3 行的 2-D 数组,每行包含 5 个从 0 到 100 之间的随机整数
x = random.choice([3, 5, 7, 9])
x = random.choice([3, 5, 7, 9], size=(3, 5))
print(x)
___()
# ^ 请使用 NumPy mean() 方法确定平均:
speed = [99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86]
x = np.mean(speed)
print(x) # ^ 请使用 NumPy median() 方法找到中间值:
x = np.median(speed)
print(x) # ^ 使用 NumPy std() 方法查找标准差:
x = np.std(speed)
print(x) # ^ 使用 NumPy var() 方法确定方差:
speed = [32, 111, 138, 28, 59, 77, 97]
x = np.var(speed)
print(x)
# ^ 使用 NumPy percentile() 方法查找百分位数
ages = [5, 31, 43, 48, 50, 41, 7, 11, 15, 39, 80, 82, 32, 2, 8, 6, 25, 36, 27, 61, 31]
x = np.percentile(ages, 75)
print(x)

点赞是一种积极的生活态度,喵喵喵!(疯狂暗示)

Python 读取UCI iris数据集分析、numpy基础学习的更多相关文章

  1. Python web框架 Tornado(一)基础学习

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  2. Numpy基础学习与总结

    Numpy类型学习 1.数组的表示 import numpy as np In [2]: #numpy核心是高维数组,库中的ndarray支持多维数组,同时提供了数值运算,可对向量矩阵进行运算 In ...

  3. 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)

    4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...

  4. Numpy基础学习

    Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包. 主要的功能: 1.ndarray,一个具有矢量运算和复杂广播工能的快速且节省空间的多维数组 2.用于对整组数据 ...

  5. Numpy 基础学习

    numpy.array() 功能:创建一个数据 vector = numpy.array([1,2,3,4]) matrix = numpy.array([1,2,3,4],[11,12,13,14] ...

  6. 用Python实现支持向量机并处理Iris数据集

    SVM全称是Support Vector Machine,即支持向量机,是一种监督式学习算法.它主要应用于分类问题,通过改进代码也可以用作回归.所谓支持向量就是距离分隔面最近的向量.支持向量机就是要确 ...

  7. python数据分析---第04章 NumPy基础:数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  8. Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析

    Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析 今天主要讲述的内容是关于决策树的知识,主要包括以下内容:1.分类及决策树算法介绍2.鸢尾花卉数据集介绍3.决策树实现鸢尾数据集分析.希望这篇 ...

  9. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

随机推荐

  1. JavaWeb——Maven使用

    5.1.创建一个javaWeb项目 选择使用摸版:勾选Create from archetype选项 选择相应的模板:选择org.apache.maven.archetypes:maven-arche ...

  2. ZYNQ使用ymodem协议传输文件

    SDK: V2014.4 协议: Ymodem 工具: USB转UART转接线.xshell6软件 可实现各种文件传输,大小不限,只是速度很慢 参考原代码如下: /****************** ...

  3. Fiddler修改接口下行数据,mock测试

    应用场景:在不修改服务器代码的情况下,临时改变接口下行数据值,便于查看界面效果.. 使用工具:Fiddler 使用方法:连接Fiddler,使用代理. Fiddler配置方法如下: 1.定位到Fidd ...

  4. Nginx配置不当(CRLF注入 、目录穿越)

    基于vulhub漏洞环境 环境搭建参考:https://blog.csdn.net/qq_36374896/article/details/84102101 1.漏洞名称 CRLF注入 2.漏洞原理 ...

  5. python 自定义加密与解密

    import tkinter import webbrowser import re #本程序是一个中文字符和中文检测工具 #中文字符自己添加,我只添加了一点 #输入字符串,点击检查文本即可判断有没有 ...

  6. MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解

    判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...

  7. Docker容器入门实践

    Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 ...

  8. VULNCMS

    靶机准备 导入虚拟机,并将网络模式设置为NAT 扫描ip netdiscover -r 192.168.164.0/24 渗透测试 扫描端口 nmap -sS -sV -T5 -A -p- 192.1 ...

  9. 半吊子菜鸟学Web开发2 --JavaScript学习1

    JavaScript是一种类C的语言,对于我来说学起来还是蛮轻松的 1 输出 console.log(**); 相当于print console.assert(*);弹窗 2 变量 JS是动态变量 类 ...

  10. 【算法篇】Bitmap 算法

    首先,什么是Bitmap算法(位图算法)呢? 一:定义: Bit map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.使用Bit为用来存储数据的单位, 可以大大节省存储空间. ...