数据分析 Numpy

您所在的位置:网站首页 pandas和numpy的数据类型 数据分析 Numpy

数据分析 Numpy

#数据分析 Numpy | 来源: 网络整理| 查看: 265

2018.6.16******************************************************** author:wills

数据分析一般采用 Numpy | Pandas 库中的相关函数进行处理 那么什么数据需要分析呢 ?又要怎么分析呢 ?

我们人眼睛看到的世界,是直观立体的是事物的外在表现形式,这取决于我们的大脑构成,从小到大接受的教育,以及对自然界万事万物的观察以及记忆,我们看到一只鸟,一条鱼,蓝天,白云这些都是万物外在的表现形式.但是他们的内在本质又是什么呢?按照现在科学的理论.地球上的生命绝大部分都是碳基生命,就是一堆碳水化合物再添加一些各种各样的稀有元素构成,再往下层解剖就是由一个个原子分子构成.当然如果按弦理论,那就是一段段的波,各种各样的波构成.好了废话到此结束,就是说人看到的是表象,但是计算机看到的和人看到的是不一样的,比如一张猫图片,人看到就是一只猫,不管猫是什么形状,大小,颜色,品种,是死是活,都可以马上认出这是一只猫.但是计算机不行,它看到的不是一只猫,它’看’到的是一串串数据,以各种格式构成的数据,所以我们数据分析的作用,就是要让计算机通过分析这一串串的数据,认识到这是一只猫,什么形状的猫,什么颜色的猫,什么品种的猫,是死的猫还是活的猫,下面我们先通过一只猫的图片简单认识一下Numpy库

我使用的是Anaconda软件,所有的数据分析相关的包都已经安装好了,如果使用pycharm即其他编辑器的朋友需要自行安装相关的包,以下所有代码都是在jupyter环境下书写的,所有没有print也可以直接打印出变量

首先导入Numpy等相关的包 import numpy as np import matplotlib.pyplot as plt import pandas as pd 读取图片数据,分别以数据的形式,已经图片形式显示出来 cat = plt.imread('cat.jpg') cat array([[[231, 186, 131], [232, 187, 132], [233, 188, 133], ..., [100, 54, 54], [ 92, 48, 47], [ 85, 43, 44]], [[232, 187, 132], [232, 187, 132], [233, 188, 133], ..., [100, 54, 54], [ 92, 48, 47], [ 84, 42, 43]], [[232, 187, 132], [233, 188, 133], [233, 188, 133], ..., [ 99, 53, 53], [ 91, 47, 46], [ 83, 41, 42]], ..., [[199, 119, 82], [199, 119, 82], [200, 120, 83], ..., [189, 99, 65], [187, 97, 63], [187, 97, 63]], [[199, 119, 82], [199, 119, 82], [199, 119, 82], ..., [188, 98, 64], [186, 96, 62], [188, 95, 62]], [[199, 119, 82], [199, 119, 82], [199, 119, 82], ..., [188, 98, 64], [188, 95, 62], [188, 95, 62]]], dtype=uint8) cat.shape # (456, 730, 3) # .shape属性可以查看图片的形状属性,彩色图片是三维数组,黑白图片是二维数组 # .jpg格式的图片 使用 0 - 255 的uint8类型数字代表每一个像素 # .png格式的图片 使用 0 - 1 的float64类型的数字代表每一个像素 cat.size # 998640 # .size属性表示图片的所有的元素个数,它等于shape中的维度数字相乘 456 * 730 * 3 = 998640 # 修改图片的尺寸与维度,reshape中的维度数据相乘一定要等于.size # 即新的数据形状 x * y * z * n ... = 456 * 730 *3 cat.reshape(998640) # 直接将数据降成一位数组 cat.reshape(456,730 * 3) # 将数据将成二维 array([[231, 186, 131, ..., 85, 43, 44], [232, 187, 132, ..., 84, 42, 43], [232, 187, 132, ..., 83, 41, 42], ..., [199, 119, 82, ..., 187, 97, 63], [199, 119, 82, ..., 188, 95, 62], [199, 119, 82, ..., 188, 95, 62]], dtype=uint8) # 将彩色图片降为黑白图片 cat1 = cat.reshape(456,730*3) plt.imshow(cat1) # 这个办法将图片的形状改变了不好,而且图片看着偏绿色

png

# 通过查看cat的数据流可以看出,彩色图片第三维是三个用来表示三原色的数字,那么我们只取其中一个数字,那么原图片 # 就在大小不变的情况下转化为二维黑白图片 # .min .max .mean 可以取数组的最大值,最小值,平均值, axis用于确定取值的维度 0 表示第一维 cat2 = cat.min(axis=2) # 取三原色中的小值,图片会偏向黑色 cat3 = cat.max(axis=2) # 取大值,图片偏向白色 cat4 = caan(axis=2) # 取平均值,图片转化为黑白效果最好 plt.imshow(cat3,cmap='gray') plt.show() plt.imshow(cat4,cmap='gray') plt.show() plt.imshow(cat2,cmap='gray')

这里写图片描述 这里写图片描述

这里写图片描述

cat.dtype # .dtype属性表示数据的类型 dtype('uint8') cat.astype(np.float64)/255 # .astype 方法可以修改 jpg图片的数据为 0 - 1 的float64类型数据,这样就可以和png格式的图片进行互相交换了 array([[[0.90588235, 0.72941176, 0.51372549], [0.90980392, 0.73333333, 0.51764706], [0.91372549, 0.7372549 , 0.52156863], ..., [0.39215686, 0.21176471, 0.21176471], [0.36078431, 0.18823529, 0.18431373], [0.33333333, 0.16862745, 0.17254902]], [[0.90980392, 0.73333333, 0.51764706], [0.90980392, 0.73333333, 0.51764706], [0.91372549, 0.7372549 , 0.52156863], ..., [0.39215686, 0.21176471, 0.21176471], [0.36078431, 0.18823529, 0.18431373], [0.32941176, 0.16470588, 0.16862745]], [[0.90980392, 0.73333333, 0.51764706], [0.91372549, 0.7372549 , 0.52156863], [0.91372549, 0.7372549 , 0.52156863], ..., [0.38823529, 0.20784314, 0.20784314], [0.35686275, 0.18431373, 0.18039216], [0.3254902 , 0.16078431, 0.16470588]], ..., [[0.78039216, 0.46666667, 0.32156863], [0.78039216, 0.46666667, 0.32156863], [0.78431373, 0.47058824, 0.3254902 ], ..., [0.74117647, 0.38823529, 0.25490196], [0.73333333, 0.38039216, 0.24705882], [0.73333333, 0.38039216, 0.24705882]], [[0.78039216, 0.46666667, 0.32156863], [0.78039216, 0.46666667, 0.32156863], [0.78039216, 0.46666667, 0.32156863], ..., [0.7372549 , 0.38431373, 0.25098039], [0.72941176, 0.37647059, 0.24313725], [0.7372549 , 0.37254902, 0.24313725]], [[0.78039216, 0.46666667, 0.32156863], [0.78039216, 0.46666667, 0.32156863], [0.78039216, 0.46666667, 0.32156863], ..., [0.7372549 , 0.38431373, 0.25098039], [0.7372549 , 0.37254902, 0.24313725], [0.7372549 , 0.37254902, 0.24313725]]]) cat = plt.imread('cat.jpg') plt.imshow(cat)

这里写图片描述

# 下面我们在导入一张鱼的图片它是png格式图片 fish = plt.imread('fish.png') # 假如我们现在要把鱼头放到猫的嘴的位置该怎么做呢? # 先看鱼和猫图片的大小 fish.shape # (326,243,3) cat.shape # (456,730,3) # 先把鱼头用切片的办法,切出来 fish_head = fish[50:150,60:200] # 然后在猫嘴的旁边找到一个 100*140 的区域,然后把鱼头的值赋给它 # 注意,fish是png格式的数据,其值是 0 - 1 的float32类型数据,需要先转换为uint8的数据 fish_head = (fish_head * 255).astype(np.uint8) # 注意,这里猫图片数据类型有可能是只读类型,需要修改其属性变为可写,不然不可以修改 cat.flags.writeable = True cat[330:430,260:400] = fish_head plt.imshow(cat) # 这样就实现了把鱼头放到猫嘴的操作,同理大家也可以找一下人物肖像进行换头手术 # 这个图片只是完成了简单的效果,如果要进行更加深入的操作,比如鱼头就是圆的,这就需要更加深入的 # 数据分析知识,还有图片颜色看着更加柔和的效果

这里写图片描述

将这张图片切成5张图片呢,或者说本质就是将数据流切成几份 按照 y 轴来切 cata = cat[:120] catb = cat[120:250] catc = cat[250:] plt.imshow(cata) plt.show() plt.imshow(catb) plt.show() plt.imshow(catc)

这里写图片描述

这里写图片描述

这里写图片描述

按照 x 轴 来切 catax = cat[:, :120] catbx = cat[:, 120:550] catcx = cat[:, 550:] plt.imshow(catax) plt.show() plt.imshow(catbx) plt.show() plt.imshow(catcx)

这里写图片描述

这里写图片描述

这里写图片描述

将图片进行上下颠倒,和左右颠倒,以及颜色变换

实质就是改变了数据流的排列方式

上下颠倒 cat_top_to_bottom = cat[::-1] plt.imshow(cat_top_to_bottom)

这里写图片描述

左右颠倒 cat_right_to_left = cat[:,::-1] plt.imshow(cat_right_to_left) # 注意鱼眼睛跑到左边去了

这里写图片描述

颜色变换 cat_color_change = cat[:,:,::-1] plt.imshow(cat_color_change)

这里写图片描述

将两张图片拼起来,即将两个数组连接起来 # 为了方便拼接,再导入一张格式和猫一样的dog图片 dog = plt.imread('dog.jpg') dog.shape # (300, 313, 3) 狗图片比猫图片小,为了拼接需要对锚图片进行裁剪切片 new_cat = cat[100:400,200:513] # 使用 numpy.concatenate()函数可以将ndarray的数组级联起来,包括垂直和水平级联 # 此函数的默认参数axis=0,表示垂直级联, axis=1,表示水平级联,也可以说 axis=n表示将第n维数据进行级联 # 并且需要级联的对象要放入到一个元组中作为参数传入,对象在元组中的顺序即级联的顺序 cat_dog_vertical = np.concatenate((dog,new_cat)) cat_dog_horizontal = np.concatenate((dog,new_cat,dog),axis=1) plt.imshow(cat_dog_vertical) plt.show() plt.imshow(cat_dog_horizontal)

这里写图片描述

这里写图片描述

通过上面对一张猫的图片的反复操作,我们已经对数据分析,处理有了初步的了解,现在我们系统的对 ndarray | Series | DataFrame几种类型进行深入的了解 首先先看cat的数据类型 type(cat) # numpy.ndarray 类型,这是一种特殊的数组类型,可以有许多的操作 numpy.ndarray 一. numpy.ndarray数组类型 A 生成方式 1. 从Python的数据结构列表,元组等直接转换 nd = np.array([4,5]) nd1 = np.array(([1,2],[3,2],[1,3])) nd2 = np.array((1,2,3,4,'a','b')) display(nd,nd1,nd2) array([4, 5]) array([[1, 2], [3, 2], [1, 3]]) array(['1', '2', '3', '4', 'a', 'b'], dtype='


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3