python day18 模块
numpy模块
numpy模块: 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学运算
import numpy as np
arr1 = np.array([1,2,3])
arr1 = np.array([4,5,6])
#numpy数组 --> 可变数据类型
#二位数组
arr = np.array([
[1,2,3],
[4,5,6]
])
#T 数组的转置(对高维数组而言) ---> 行列互换,转置
print(arr,'
',arr.T)
#dtype 数组元素的数据类型,numpy数组是属于python解释器的;int32/float64 属于numpy
print(aar.dtype)
#size 数组元素的个数
print(arr.size)
#ndim 数组的维数
print(arr.ndim)
# shape 数组的维度大小(以元祖形式)
print(arr.shape[0])
print(arr.shape[1])
#astype 类型转换
arr = arr.astype(np.float64)
print(arr)
#切片numpy数组
arr = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(arr[:,:])#行,列
print(arr[0,0])
#逻辑取值
print(arr[arr>4])
#赋值
arr = np.array([
[1,2,3],
[4,5,6]
])
arr[0,0] = 0
print(arr)
arr[0,:] = 0
print(arr)
#数组的合并
arr1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr2 = np.array([
[7, 8, 9],
['a', 'b', 'c']
])
print(np.hstack((arr1,arr2))) #水平合并 #只能放元祖
print(np.vstack((arr1,arr2))) # 垂直合并
print(np.concatenate((arr1,arr2),axis = 1)) #默认以列合并 #0 表示列 1表示行
#通过函数创建numpy数组
print(np.ones((2,3))) #创建一个2行3列,,值全为1的数组
print(np.zeros((2, 3)))
print(np.eye(3, 3)) #创建一个3行3列对角线上的值为1的数组
print(np.linspace(1,100,10))## 构造一个等差数列,取头也取尾,从0取到100,取10个数
print(np.arange(2,10))#[2....9]
print(arr1.reshape((3,4)))#重构形状
#numpy数组运算函数
print(np.sin(arr1)
#矩阵运算 -- 点乘
arr1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr2 = np.array([
[1, 2],
[4, 5],
[6, 7]
])
print(np.dot(arr1,arr2))
#求逆
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
# numpy数组数学和统计方法
print(np.sum(arr[0, :]))
# numpy.random生成随机数(******)
print(np.random.rand(3, 4)) #构造3*4的均匀分布的numpy数组
print(np.random.random((3, 4)))
print(np.random.randint(1, 100, (3, 4)))
matplotlib模块
matplotlib 模块: 画图
##条形图
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
# 修改背景为条纹
plt.style.use('ggplot')
classes = ['3班', '4班', '5班', '6班']
classes_index = range(len(classes))
print(list(classes_index))
student_amounts = [66, 55, 45, 70]
# 画布设置
fig = plt.figure()
# 1,1,1表示一张画布切割成1行1列共一张图的第1个;2,2,1表示一张画布切割成2行2列共4张图的第一个(左上角)
ax1 = fig.add_subplot(1, 1, 1)
ax1.bar(classes_index, student_amounts, align='center', color='darkblue')
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
plt.xticks(classes_index,
classes,
rotation=0,
fontsize=13,
fontproperties=font)
plt.xlabel('班级', fontproperties=font, fontsize=15)
plt.ylabel('学生人数', fontproperties=font, fontsize=15)
plt.title('班级-学生人数', fontproperties=font, fontsize=20)
# 保存图片,bbox_inches='tight'去掉图形四周的空白
# plt.savefig('classes_students.png?x-oss-process=style/watermark', dpi=400, bbox_inches='tight')
plt.show()
##直方图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
# 修改背景为条纹
plt.style.use('ggplot')
mu1, mu2, sigma = 50, 100, 10
# 构造均值为50的符合正态分布的数据
x1 = mu1 + sigma * np.random.randn(10000)
print(x1)
fig = plt.figure()
ax1 = fig.add_subplot(121)
# bins=50表示每个变量的值分成50份,即会有50根柱子
ax1.hist(x1, bins=50, color='darkgreen')
ax2 = fig.add_subplot(122)
ax2.hist(x2, bins=50, color='orange')
fig.suptitle('两个正态分布', fontproperties=font, fontweight='bold', fontsize=15)
ax1.set_title('绿色的正态分布', fontproperties=font)
ax2.set_title('橙色的正态分布', fontproperties=font)
plt.show()
##折线图
import numpy as np
from numpy.random import randn
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
# 修改背景为条纹
plt.style.use('ggplot')
np.random.seed(1)
# 使用numpy的累加和,保证数据取值范围不会在(0,1)内波动
plot_data1 = randn(40).cumsum()
print(plot_data1)
plot_data2 = randn(40).cumsum()
plot_data3 = randn(40).cumsum()
plot_data4 = randn(40).cumsum()
plt.plot(plot_data1, marker='o', color='red', linestyle='-', label='红实线')
plt.plot(plot_data2, marker='x', color='orange', linestyle='--', label='橙虚线')
plt.plot(plot_data3, marker='*', color='yellow', linestyle='-.', label='黄点线')
plt.plot(plot_data4, marker='s', color='green', linestyle=':', label='绿点图')
# loc='best'给label自动选择最好的位置
plt.legend(loc='best', prop=font)
plt.show()