1. numpy模块
# numpy: 专门数组(矩阵)的运算
lis1 = [1,2,3] # 向量
lis2 = [4,5,6] # 向量
# [4,10,18]
lis = []
for i in range(len(lis1)):
lis.append(lis1[i] * lis2[i])
print(lis)
import numpy as np
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1*arr2)
import numpy as np
# numpy 数组
arr = np.array([1,2,3])
print(arr) # 一维的numpy数组
arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2) # 二维的numpy数组(一般就是二维)
arr3 = np.array([[[1,2,3],[4,5,6]],[1,2,3],[4,5,6]])
print(arr3)
# 三维的不使用numpy模块,使用tensorflow/pytorch模块
# 属性(可以记)
'''
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
astype 类型转换
'''
import numpy as np
arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2) # 二维的numpy数组(一般就是二维)
print(arr2.T) # 行与列互换
print(arr2.dtype) # python中的数据类型 # int32
print(arr2.astype(np.float64).dtype) # float64
print(arr2.size) # 6
print(arr2.shape) # (2,3)
print(arr2.ndim) # 2
# 切片
lis = [1,2,3]
print(lis[:]) # [1,2,3]
arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2)
print(arr2[:,:])
print(arr2[0:1,:]) # [[1 2 3]]
print(arr2[0:1,0:1]) # [[1]]
print(arr2[0,:]) # [1 2 3]
print(arr2[0,0],type(arr2[0,0])) # 1 <class 'numpy.int32'>
print(arr2[0,[0,2]]) # [1 3]
# 修改值
lis = [1,2,3]
lis[0] = 2
print(lis) # [2, 2, 3]
arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2) # 二维的numpy数组(一般就是二维)
arr2[0,:] = 0
print(arr2)
arr2[1,1] = 1
print(arr2)
arr2[arr2 < 3] = 3 # 布尔取值
print(arr2)
# 合并
arr1 = np.array([[1,2,3],[4,5,6]]) # 可变数据类型
# print(arr1)
arr2 = np.array([[7,8,9],[10,11,12]]) # 可变数据类型
# print(arr2)
print(np.hstack((arr1,arr2))) # 行合并
print(np.vstack((arr1,arr2))) # 列合并
print(np.concatenate((arr1,arr2))) # 默认列合并
print(np.concatenate((arr1,arr2),axis=1)) # 1表示行;0表示列
# 通过函数创建numpy数组
arr1 = np.array([[1,2,3],[4,5,6]]) # 可变数据类型
# print(arr1)
print(np.zeros((5,5)))
print(np.ones((5,5)) * 100)
print(np.eye(5))
print(np.arange(1,10,2)) # 生成一维的 # [1 3 5 7 9]
print(np.linspace(0,20,10)) # 平均分成10份 # 构造x坐标轴的值
arr = np.zeros((5,5))
print(arr.reshape((1,25)))
# 数组运算
arr1 = np.array([[1,2,3],[4,5,6]]) # 可变数据类型
print(arr1)
arr2 = np.array([[7,8,9],[10,11,12]]) # 可变数据类型
print(arr2)
# +-*/ // % **
print(arr1*arr2)
print(arr1+arr2)
# 运算函数
arr1 = np.array([[1,2,3],[4,5,6]])
print(arr1)
print(np.sin(arr1))
print(np.cos(arr1))
print(np.sqrt(arr1))
print(np.exp(arr1))
# 额外补充(了解)
arr1 = np.array([[1,2,3],[4,5,6]])
print(arr1)
arr2 = np.array([[7,8,9],[10,11,12]])
print(arr2)
print(arr1.T)
print(arr1.transpose())
# m * n × n * m = m * m
print(np.dot(arr1,arr2.T))
# 求逆
arr1 = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
print(np.linalg.inv(arr1))
# numpy的数学方法(了解)
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1)
print(arr1.var())
print(arr1.std())
print(arr1.mean())
print(arr1.cumsum()) # 累加和
# numpy随机数(了解)
print(np.random.rand(3,4))
print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
print(np.random.choice([1,2,3,4,5],3))
print(arr1)
np.random.shuffle(arr1)
print(arr1)
# 随机数种子 # 所有的随机数都是按照随机数种子生成的
import time
# 重点
np.random.seed(int(time.time()))
np.random.seed(1)
arr1 = np.random.rand(3,4) # 可变数据类型
print(arr1)
rs = np.random.RandomState(1)
print(rs.rand(3,4))
2. pandas模块
# pandas更多的是excel/csv文件处理,excel文件,对numpy+xlrd模块做了一层封装
# pandas的数据类型
import pandas as pd
import numpy as np
## Series(现在一般不适应(一维))
df = pd.Series(np.array([1,2,3,4]))
print(df)
# DataFrame(多维)
# DataFrame是一个表格型的数据结构,含有一组有序的列
dates = pd.date_range('20190101',periods=6,freq='M')
print(dates)
values = np.random.rand(6,4)*10
print(values)
columns = ['c4','c2','c3','c1']
df = pd.DataFrame(values,index=dates,columns=columns)
print(df)
'''
dtype 查看数据类型
index 查看行序列或者索引
columns 查看各列的标签
values 查看数据框内的数据,也即不含表头索引的数据
describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
transpose 转置,也可用T来操作
sort_index 排序,可按行或列index排序输出
sort_values 按数据值来排序
'''
print(df.dtypes)
print(df.index)
print(df.columns)
print(df.describe())
print(df.T)
df = df.sort_index(axis=1) # 0是行,1是列
print(df)
print(df.sort_values(by='c3'))
# 取值
print(df['c1'])
print(df[['c1','c3']])
print(df.loc['2019-01-31':'2019-02-28']) # (通过行标签取值)
print(df.values[1,1])
print(df.iloc[:,:]) # 通过行索引选择数据
print(df['c1']>3)
df.iloc[1,1]=1
print(df)
# pandas操作表格
# from io import StringIO
import pandas as pd
from io import StringIO
test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
,,,
'''
test_data = StringIO(test_data)
# 把数据读入内存,变成csv文件
df = pd.read_csv(test_data, header=None)
df.columns = ['c1', 'c2', 'c3', 'c4']
print(df)
# 缺失值处理
df = df.dropna(axis=0)
print(df)
# 删除行不为4个值的
df = df.dropna(thresh=3) # 必须得有4个值
print(df)
# 合并处理
df1 = pd.DataFrame(np.zeros((2,3)))
print(df1)
df2 = pd.DataFrame(np.ones((2,3)))
print(df2)
pd.concat((df1,df2),axis=1) # 默认按列0,1行
print(pd)
# append只能合并列
print(df1.append(df2))
# 导入数据
df = df.dropna(thresh=4)
print(df)
df.index = ['nick','jason','tank']
print(df)
3. matplotlib模块
# matplotlib模块: 画图
# 条形图
import matplotlib.pyplot as plt # 默认支持英文,不支持中文
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='D:msyh.ttc')
classes = ['3班','4班','5班','6班']
students = [50,60,55,67]
ind = range(len(classes))
# plt.bar(ind,students,color='r')
# plt.xticks(ind,classes,fontproperties= font)
# plt.show()
plt.style.use('ggplot')
plt.bar(ind,students,color='darkblue')
plt.xticks(ind,classes,fontproperties= font)
plt.xlabel('班级',fontproperties=font,fontsize=15)
plt.ylabel('人数',fontproperties= font,fontsize=15)
plt.title('班级-人数',fontproperties=font,fontsize=20)
plt.show()
# 直方图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
# %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
font = FontProperties(fname='D:msyh.ttc')
mu1, mu2, sigma = 50, 100, 10
x1 = mu1 + sigma * np.random.randn(100000) # 符合正太分布的随机数据
x2 = mu2 + sigma * np.random.randn(100000)
# plt.hist(x1,bins=50)# 每50个数据一根柱子
# plt.show()
fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1) # 一行2列 第一个
ax1.hist(x1, bins=50, color='yellow')
ax1.set_title('黄色的', fontproperties=font)
ax2 = fig.add_subplot(1, 2, 2) # 一行2列 第二个
ax2.hist(x2, bins=100, color='green')
ax2.set_title('绿色的', fontproperties=font)
fig.suptitle('大标题', fontproperties=font, fontsize=20)
plt.show()
# 折线图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
# %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
font = FontProperties(fname='D:msyh.ttc')
x1 = np.random.randn(1,40).cumsum()
x2 = np.random.randn(1,40).cumsum()
x3 = np.random.randn(1,40).cumsum()
x4 = np.random.randn(1,40).cumsum()
plt.plot(x1,marker='o',color='r',label='红线',linestyle='--')
plt.plot(x2,marker='*',color='y',label='黄线',linestyle='-.')
plt.plot(x3,marker='s',color='green',label='绿色',linestyle=':')
plt.plot(x4,marker='x',color='b',label='蓝色',linestyle='-')
plt.legend(prop=font) # label的字体的需要在这里换
plt.show()
# 散点图+直线图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
# %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
font = FontProperties(fname='D:msyh.ttc')
x1 = np.arange(1,20,2)
x1
y = x1**2
plt.scatter(x1,y,s=100)
plt.show()