Python数据分析与展示(二)

学习视频链接:Python数据分析与展示_北京理工大学_哔哩哔哩_bilibili    P11-P20

数据存取与函数

一、CSV文件

CSV(Comma-Separated Value,逗号分隔值),CSV是一种常见的文件格式,用来存储批量数据。

CSV文件只能有效存储一位和二维数组。

写入数组:

import numpy as np

np.savetxt(frame,array,fmt='%.18e',delimiter=None)

#   frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
#   array:存入文件的数组
#   fmt:写入文件的格式,例如%d %.2f %.18e
#   delimiter:分割字符串,默认是任何空格
例子:
import numpy as np

a=np.arange(100).reshape((5,20))
np.savetxt('a.csv',a,fmt='%d',delimiter=',',header="实验数组",encoding='utf-8')
# 实验数组
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99

读出数组:

import numpy as np

np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)

#   frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
#   dtype:数据类型,可选
#   delimeter:分割字符串,默认是空格
#   unpack:如果True,读入属性分别写入不同变量

例子:

import numpy as np

a=np.loadtxt('a.csv',dtype=np.float,delimiter=',')
print(a)

'''
[[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.
  18. 19.]
 [20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
  38. 39.]
 [40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
  58. 59.]
 [60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
  78. 79.]
 [80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97.
  98. 99.]]
'''
二、多维数据的的存取

写入数组:

import numpy as np

np.tofile(frame,sep='',format='%s')

#   frame:文件、字符串
#   sep:数据分割字符串,如果是空串,写入文件为二进制
#   format:写入数据的格式

例子:

import numpy as np

a=np.arange(100).reshape((5,20))
a.tofile('a.dat',sep=',',format='%d')
a.tofile('b.dat',format='%d')  #此时写入的是二进制格

读出数组:

np.fromfile(frame,dtype=float,count=-1,sep='')

#   frame:文件、字符串
#   dtype:读取的数据类型
#   count:读入元素的个数,-1表示读入整个文件
#   sep:数据分割字符串,如果是空串,写入文件为二进制

例子:

import numpy as np

a=np.fromfile('a.dat',dtype=np.int,sep=',').reshape((5,20))
print(a)
'''
[[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]]
'''

注意:该方法需要读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用,可以通过元数据文件来存储额外信息

三、多维数组的便捷文件存取

import numpy as np

np.save(fname,array)   #np.savez(frame,array)

#   fname:文件名,以.npy为扩展名,压缩扩展名为.npz
#   array:数组变量

np.load(fname)

#   fname:文件名,以.npy为扩展名,压缩扩展名为.npz
例子:
import numpy as np

a=np.arange(100).reshape((2,5,10))
np.save('a.npy',a)
a=np.load('a.npy')
print(a)
'''
[[[ 0  1  2  3  4  5  6  7  8  9]
  [10 11 12 13 14 15 16 17 18 19]
  [20 21 22 23 24 25 26 27 28 29]
  [30 31 32 33 34 35 36 37 38 39]
  [40 41 42 43 44 45 46 47 48 49]]

 [[50 51 52 53 54 55 56 57 58 59]
  [60 61 62 63 64 65 66 67 68 69]
  [70 71 72 73 74 75 76 77 78 79]
  [80 81 82 83 84 85 86 87 88 89]
  [90 91 92 93 94 95 96 97 98 99]]]
'''
四、NumPy的随机函数

NumPy的随机函数子库是random库

 例子:

 

例子:

例子:

五、NumPy统计函数

例子:

例子:

六、NimPy的梯度函数

  • np.gradient(f):计算数组f元素的梯度,当f为多维时,返回每个维度梯度
  • 梯度:连续值之间的变化率,即斜率。XY坐标轴连续三个X坐标对应的Y轴值,其中b的梯度是:(c-a)/2

例子:

笔记:python数据分析与展示(二) - 元骑鲸 - 博客园

笔记:数据分析与展示——NumPy数据存取与函数 - Python学习者 - 博客园 

图像的手绘效果(图像的数组表示) 

图像的RGB色彩模式

图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。

RGB三个颜色通道的变化和叠加得到各种颜色,取值都为0-255。RGB形成的颜色包括了人类视力所能感知的所有颜色。

PIL(Python Image Library)库

PIL库是一个具有强大图像处理能力的第三方库。在命令行下的安装方法:

pip install pillow

from PIL import Image

Image是PIL库中代表一个图像的类(对象)

图像是一个由像素组成的二维矩阵,每个元素是一个RGB值。

范例:将数组转化为ndarray数组

In [1]: from PIL import Image

In [2]: import numpy as np

In [3]: im = np.array(Image.open("E:/tiger.jpg"))

In [4]: print(im.shape,im.dtype)
(435, 428, 3) uint8

图像是一个三维数组,维度分别是高度、宽度和像素RGB值。

图像的变换

读入图像后,获得像素RGB值,修改后保存为新的文件。

范例:修改图像并另存

In [5]: b = [255,255,255] - im

In [6]: new_im = Image.fromarray(b.astype('uint8'))

In [7]: new_im.save("E:/tiger1.jpg")

In [8]: a = np.array(Image.open("E:/tiger.jpg").convert('L')) # 使用灰度表示图像

In [9]: b = 255 - a 

In [10]: im = Image.fromarray(b.astype('uint8'))

In [11]: im.save("E:/tiger2.jpg")

In [12]: c = (100/255)*a +150   # 区间变换

In [13]: im = Image.fromarray(c.astype('uint8'))

In [14]: im.save("E:/tiger3.jpg")

In [15]: d = 255 * (a/255)**2  # 像素平方

In [16]: im = Image.fromarray(d.astype('uint8'))

In [17]: im.save("E:/tiger4.jpg")

 

“图像的手绘效果”实例分析

手绘效果特征:

  • 黑白灰色
  • 边界线条较重
  • 相同或相近色彩趋于白色
  • 略有光源效果

图像手绘效果实现代码:

 

from PIL import Image
import numpy as np

a = np.asarray(Image.open('E:/tiger.jpg').convert('L')).astype('float')

depth = 10.                # (0-100)
grad = np.gradient(a)     # 取图像灰度的梯度值
grad_x, grad_y = grad     # 分别取横纵图像梯度值
grad_x = grad_x * depth / 100.
grad_y = grad_y * depth / 100.
A = np.sqrt(grad_x **2 + grad_y **2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A

vec_el = np.pi / 2.2     # 光源的俯视角度,弧度值
vec_az = np.pi / 4.     # 光源的方位角度,弧度值
dx = np.cos(vec_el) * np.cos(vec_az)     # 光源对x轴的影响
dy = np.cos(vec_el) * np.sin(vec_az)     # 光源对y轴的影响
dz = np.sin(vec_el)                     # 光源对z轴的影响

b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)     # 光源归一化
b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8'))        # 重构图像
im.save('E:/tiger0.jpg')

 

笔记链接:数据分析与展示——图像手绘效果实现 - Python学习者 - 博客园

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值