简单易懂!7天快速掌握python数据分析系列2【职场新人必备】

本文详细介绍了如何使用NumPy进行CSV文件的数据存取,包括`np.savetxt()`和`np.loadtxt()`的用法。此外,还探讨了多维数据的二进制存取,并讲解了NumPy的随机数生成函数,如`rand()`、`randn()`等。最后,我们学习了NumPy的统计函数,如求和、平均值、标准差等,以及梯度计算。这些知识对于数据可视化和分析至关重要。
摘要由CSDN通过智能技术生成

【python】数据分析——NumPy数据存取与函数(数据可视化必备,升职加薪~

一、 数据CSV文件存取

CSV文件是一种常见的文件格式,用来存储批量数据
CSV (Comma‐Separated Value, 逗号分隔值)
如csv文件:
在这里插入图片描述
储存方式如下:
在这里插入图片描述

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('hi.csv',a,fmt='%d',delimiter=',')

运行之后生成文件hi.csv,内容如下:

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

np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• dtype : 数据类型,可选
• delimiter : 分割字符串,默认是任何空格
• unpack : 如果True,读入属性将分别写入不同变量
import numpy as np
a = np.arange(100).reshape(5,20)
np.savetxt('hi.csv',a,fmt='%d',delimiter=',')
b = np.loadtxt('hi.csv',delimiter=',')
print(b)

运行之后,输出下面内容:

[[ 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.]]

注意:CSV只能有效存储一维和二维数组
np.savetxt() np.loadtxt()只能有效存取一维和二维数组

二、多维数据的存取

a.tofile(frame, sep=’’, format=’%s’)
• frame : 文件、字符串
• sep : 数据分割字符串,如果是空串,写入文件为二进制
• format : 写入数据的格式
import numpy as np
a = np.arange(100).reshape(5,10,2)
a.tofile("Hi.csv",sep=",",format='%d')
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
np.fromfile(frame, dtype=float, count=‐1, sep=’’)
• frame : 文件、字符串
• dtype : 读取的数据类型
• count : 读入元素个数,‐1表示读入整个文件
• sep : 数据分割字符串,如果是空串,写入文件为二进制
import numpy as np
a = np.arange(8).reshape(2,2,2)
a.tofile("Hi.csv",sep=",",format='%d')
c = np.fromfile("Hi.csv",dtype=np.int,sep=",")
print(c) #[0 1 2 3 4 5 6 7]
d = np.fromfile("Hi.csv",dtype=np.int,sep=",").reshape(2,2,2)
print(d)
# [[[0 1]
#   [2 3]]
# 
#  [[4 5]
#   [6 7]]]

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

三、NumPy的随机数函数

函数说明
rand(d0,d1,…,dn)根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,…,dn)根据d0‐dn创建随机数数组,标准正态分布
randint(low[,high,shape])根据shape创建随机整数或整数数组,范围是[low, high)
seed(s)随机数种子,s是给定的种子值
import numpy as np
a = np.random.rand(3,4,5)
print(a)
# [[[0.93167509 0.29227973 0.40485324 0.01227035 0.66754083]
#   [0.02825983 0.05614416 0.14903452 0.32860761 0.6920035 ]
#   [0.87950817 0.09009899 0.87558365 0.98154873 0.80915343]
#   [0.38040696 0.48955701 0.78338091 0.80256027 0.06079577]]
# 
#  [[0.21023615 0.6139609  0.37804617 0.22596294 0.08619328]
#   [0.00786424 0.63951868 0.11122572 0.37615082 0.03257427]
#   [0.59386931 0.44372432 0.76775023 0.71987846 0.12100777]
#   [0.2551045  0.37505672 0.43154707 0.49439403 0.6364919 ]]
# 
#  [[0.42831382 0.47477497 0.75919826 0.88999011 0.16622242]
#   [0.98415869 0.70789066 0.11089593 0.26318817 0.71760938]
#   [0.32209725 0.78501643 0.43980396 0.17258173 0.57996303]
#   [0.02872444 0.98845014 0.94725228 0.88785349 0.00122294]]]
b = np.random.randn(3,4,5)
print(b)
# [[[-1.23963946 -0.87661776 -3.11136382  0.6949735  -1.47587937]
#   [ 1.01227741 -1.69774153  0.31708561 -0.88389138 -0.89859371]
#   [ 1.36822819  1.40228659 -0.67629377  1.56154564 -1.65247255]
#   [-0.22859929  0.37256959 -3.93839597  1.2611267  -0.6310885 ]]
# 
#  [[ 0.74582873 -0.49666831  0.38459108  0.24423243  0.55147492]
#   [-2.62644683  0.26376657 -1.62957111 -0.55316638 -1.10024399]
#   [ 0.71820722 -1.02721459  0.87756052 -1.02068055  1.21698483]
#   [-0.11776616 -1.52728815 -0.77139222  2.24806796 -0.50189187]]
# 
#  [[ 0.74997187  0.89716     0.4245434  -1.43295372 -0.94564698]
#   [-0.30270796  1.40239256 -0.94013598 -1.18276946  0.19525141]
#   [ 0.06024137 -2.35108659  0.95920053  1.28061446 -1.34663968]
#   [-1.28533139  0.08738651 -0.59631121  0.55162771  0.17541158]]]
c = np.random.randint(100,200,(3,4))
print(c)
# [[178 114 155 180]
#  [144 197 131 190]
#  [181 120 142 170]]
import numpy as np
np.random.seed(10)
d = np.random.randint(100,200,(3,4))
print(d)
# [[109 115 164 128]
#  [189 193 129 108]
#  [173 100 140 136]]
np.random.seed(10)
e = np.random.randint(100,200,(3,4))
print(e)
# [[109 115 164 128]
#  [189 193 129 108]
#  [173 100 140 136]]
函数说明
shuffle(a)根据数组a的第1轴进行随排列,改变数组x
permutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变数组x
permutation(a)从一维数组a中以概率p抽取元素,形成size形状新数组 replace表示是否可以重用元素,默认为False
import numpy as np
a = np.random.randint(100,200,(3,4))
print(a)
# [[117 176 182 135]
#  [149 165 173 149]
#  [188 125 122 192]]
np.random.shuffle(a)
print(a)
# [[117 176 182 135]
#  [188 125 122 192]
#  [149 165 173 149]]
np.random.shuffle(a)
print(a)
# [[117 176 182 135]
#  [149 165 173 149]
#  [188 125 122 192]]

import numpy as np
a = np.random.randint(100,200,(3,4))
print(a)
# [[164 184 165 122]
#  [175 168 157 127]
#  [172 142 169 155]]
np.random.permutation(a)
print(a)
# [[164 184 165 122]
#  [175 168 157 127]
#  [172 142 169 155]]

import numpy as np
a = np.random.randint(100,200,(8,))
print(a)
#[157 188 103 136 113 186 101 163]
b = np.random.choice(a,(3,2))
print(b)
# [[157 188]
#  [113 136]
#  [113 163]]
c = np.random.choice(a,(3,2),replace=False)
print(c)
# [[136 101]
#  [188 113]
#  [157 186]]
d = np.random.choice(a,(3,2),p=a/np.sum(a))
print(d)
# [[163 186]
#  [188 188]
#  [103 136]]
函数说明
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状
normal(loc,scale,size)产生具有正态分布的数组,loc均值,scale标准差,size形状
poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率,size形状
import numpy as np
a = np.random.uniform(0,10,(3,4))
print(a)
# [[8.24348258 3.96262963 0.05736494 7.03147882]
#  [7.71284852 0.80908949 0.48253096 9.00630671]
#  [6.09285453 1.63149231 4.89389046 7.38840469]]
b = np.random.normal(10,5,(3,4))
print(b)
# [[11.94286927 12.28024669  7.48928215  7.62375983]
#  [10.51415527 16.24666781 15.44929754  9.12603225]
#  [ 5.21871015 14.92661678 15.61407682 16.80334635]]

四、NumPy的统计函数

函数说明
sum(a, axis=None)根据给定轴axis计算数组a相关元素之和,axis整数或元组
mean(a, axis=None)根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None)根据给定轴axis计算数组a相关元素的加权平均值
std(a, axis=None)根据给定轴axis计算数组a相关元素的标准差
var(a, axis=None)根据给定轴axis计算数组a相关元素的方差
import numpy as np
a = np.arange(15).reshape(3,5)
print(a)
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]]
print(np.sum(a))
#105
print(np.mean(a,axis=1))
#[ 2.  7. 12.]
print(np.average(a,axis=0,weights=[10,5,1]))
#[2.1875 3.1875 4.1875 5.1875 6.1875]
print(np.std(a))
#4.320493798938574
print(np.var(a))
#18.666666666666668
函数说明
min(a) max(a)计算数组a中元素的最小值、最大值
argmin(a) argmax(a)计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index, shape)根据shape将一维下标index转换成多维下标
ptp(a)计算数组a中元素最大值与最小值的差
median(a)计算数组a中元素的中位数(中值)
import numpy as np
a = np.arange(15,0,-1).reshape(3,5)
print(a)
# [[15 14 13 12 11]
#  [10  9  8  7  6]
#  [ 5  4  3  2  1]]
print(np.max(a))
#15
print(np.argmax(a))
#0
print(np.unravel_index(np.argmax(a),a.shape))
#(0,0)
print(np.ptp(a))
#14
print(np.median(a))
#8.0

五、NumPy的梯度函数

函数说明
np.gradient(f)计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
import numpy as np
a = np.random.randint(0,20,(5))
print(a)
#[ 9  7 10 16  1]
print(np.gradient(a))
#[ -2.    0.5   4.5  -4.5 -15. ]

祝贺你!完成第二部分的学习,坚持下去,一步一个脚印,天道酬勤!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快乐小多多

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值