【莫烦Python】Numpy & Pandas (数据处理教程)_哔哩哔哩_bilibili
【莫烦Python】Matplotlib Python 画图教程_哔哩哔哩_bilibili
一.numpy
1.基本属性
import numpy as np
#将列表转化成numpy的矩阵
array = np.array([[1, 2, 3],
[4, 5, 6]])
#输出矩阵的基本信息
print(array)
print('num of dim:', array.ndim)
print('shape:', array.shape)
print('size:', array.size)
2.创造各种各样array
import numpy as np
#构造array时可以设置类型
array = np.array([1, 2, 3], dtype = int) #是dtype不是type
print(array.dtype) #输出int 32
b = np.array([1, 2, 3], dtype = float) #是dtype不是type
print(b.dtype) #输出float64
#设置零矩阵
c = np.zeros((3, 3)) #注意多了一个括号
print(c)
'''
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
'''
#设置一矩阵
d = np.ones((3, 3))
print(d)
'''
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
'''
#生成有序数列
e = np.arange(10, 20, 2) #类似range 左开右闭 步长
print(e)
'''
[10 12 14 16 18]
'''
f = np.arange(12).reshape((3, 4)) #reshape操作
print(f)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
#生成线段
g = np.linspace(0, 10, 5) #线段上五个点均分
print(g)
'''
[ 0. 2.5 5. 7.5 10. ]
'''
3.基础运算
import numpy as np
a = np.array([1, 2, 3]);
b = np.array([4, 5, 6]);
#加法直接加
print(a + b)
#次方用**
print(a**2)
#三角函数
print(np.sin(a))
#判断大小
print(a < 2)
#[ True False False]
a = np.array([[1, 1],
[0, 1]])
b = np.arange(4).reshape((2, 2))
#按位置乘
print(a * b)
#矩阵相乘 以下两种均可
print(np.dot(a, b))
print(a.dot(b))
#随机生成0到1的数
a = np.random.random((2, 3))
print(a)
print(np.sum(a)) #所有元素和
print(np.max(a)) #最大元素
print(np.min(a)) #最小元素
#axis代表维度 0表示列 1表示行
print(np.sum(a, axis=1))
print(np.max(a, axis=0))
print(np.min(a, axis=1))
A = np.arange(2, 14).reshape((3, 4))
'''
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
'''
print(np.argmin(A)) #最小值的索引 输出0
print(np.argmax(A)) #最大值的索引 输出11
print(np.mean(A)) #均值 7.5 A.mean()也行
print(np.mean(A, axis=0)) #0是对列求平均 1是行
print(np.median(A)) #中位数7.5
print(np.cumsum(A)) #变成前缀和
print(np.diff(A)) #差分 di = ai+1 - ai
print(np.nonzero(A)) #非零位置,输出两个array,一个是位置的行一个是位置的列
print(np.sort(A)) #对每一行进行排序
print(A.T) #转置 np.transpose(A)也可
print(A.clip(5, 9)) #所有小于5的数变5,大于9的数变9
4.索引
import numpy as np
A = np.arange(3, 15).reshape((3, 4))
print(A)
'''
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
'''
print(A[1]) #[ 7 8 9 10] 第一行 下标从0开始
print(A[1][1]) #8
print(A[1, 1]) #8
print(A[1, :]) #类似matlab
print(A[:, 1]) #类似matlab
print(A[1, 1:3]) #[8 9]
for row in A: #默认迭代行
print(row)
for col in A.T: #加转置可以迭代列
print(col)
print(A.flatten()) #把矩阵变成一行
for item in A.flat: #实现迭代A的每一个元素
print(item)
5.array的合并
import numpy as np
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
print(np.vstack((A, B))) #vetical stack 上下合并 注意多一个括号
print(np.hstack((A, B))) #horizontal stack 左右合并
#增加维度 向量变矩阵
print(A.shape)
print(A[np.newaxis, :].shape) #在行方向上加维度 变成(1, 3)
print(A[:, np.newaxis]) #在列方向加维度 变成3x1的矩阵 这样把向量变成列向量
6.array的分割
import numpy as np
A = np.array([[1, 1, 1],
[2, 2, 2]])
print(np.split(A, 3, axis=1)) #axis=1是竖着切,分成3个相等的部分
print(np.hsplit(A, 3)) #类似
7.拷贝
import numpy as np
a = np.array([[1, 1, 1],
[2, 2, 2]])
b = a #类似引用 同时改变
c = a.copy() #普通赋值 一个改变不影响另一个
二.pandas
1.基本用法
import pandas as pd
import numpy as np
#创建一个一维序列 标签默认从0开始
s = pd.Series([1, 3, 5, np.nan, 44, 1])
print(s)
'''
0 1.0
1 3.0
2 5.0
3 NaN
4 44.0
5 1.0
dtype: float64
'''
#创造日期标签
dates = pd.date_range('20160101', periods=6)
print(dates)
'''
DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',
'2016-01-05', '2016-01-06'],
dtype='datetime64[ns]', freq='D')
'''
#创建二维矩阵 标签默认从0开始
df1 = pd.DataFrame(np.arange(12).reshape((3, 4)))
print(df1)
'''
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
'''
#创建二维矩阵 并设置标签
df2 = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df2)
'''
a b c d
2016-01-01 0.787488 0.513120 0.298277 0.049221
2016-01-02 0.646591 0.031268 0.944913 0.168996
2016-01-03 0.736546 0.191419 0.975171 0.892403
2016-01-04 0.967153 0.524391 0.145268 0.516792
2016-01-05 0.700026 0.558873 0.524348 0.239110
2016-01-06 0.702705 0.152738 0.583090 0.322033
'''
#df2的 各种信息
print(df2.describe())
'''
a b c d
count 6.000000 6.000000 6.000000 6.000000
mean 0.513089 0.397933 0.543572 0.675607
std 0.316227 0.331969 0.341994 0.270497
min 0.022717 0.015744 0.092303 0.316425
25% 0.382061 0.090406 0.318337 0.455286
50% 0.509325 0.469178 0.532380 0.765810
75% 0.704835 0.657270 0.829911 0.869332
max 0.927524 0.749382 0.928292 0.949981
进程已结束,退出代码为 0
'''
#转置
print(df2.T)
#对标签排序 1是对列排序
print(df2.sort_index(axis=1, ascending=False))
'''
d c b a
2016-01-01 0.125248 0.779030 0.233654 0.137977
2016-01-02 0.696297 0.570827 0.256009 0.983322
2016-01-03 0.960166 0.214114 0.440261 0.087298
2016-01-04 0.675118 0.251800 0.554522 0.920476
2016-01-05 0.821534 0.203595 0.536193 0.626046
2016-01-06 0.483608 0.858479 0.012226 0.712910
'''
#某一列
print(df2.sort_values(by = 'b'))
'''
a b c d
2016-01-06 0.712910 0.012226 0.858479 0.483608
2016-01-01 0.137977 0.233654 0.779030 0.125248
2016-01-02 0.983322 0.256009 0.570827 0.696297
2016-01-03 0.087298 0.440261 0.214114 0.960166
2016-01-05 0.626046 0.536193 0.203595 0.821534
2016-01-04 0.920476 0.554522 0.251800 0.675118
'''
2. 选择数据
import pandas as pd
import numpy as np
#创建二维矩阵 并设置标签
dates = pd.date_range('20160101', periods=6)
df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
'''
a b c d
2016-01-01 0.787488 0.513120 0.298277 0.049221
2016-01-02 0.646591 0.031268 0.944913 0.168996
2016-01-03 0.736546 0.191419 0.975171 0.892403
2016-01-04 0.967153 0.524391 0.145268 0.516792
2016-01-05 0.700026 0.558873 0.524348 0.239110
2016-01-06 0.702705 0.152738 0.583090 0.322033
'''
#选择某一列
print(df['b'])
'''
2016-01-01 0.665834
2016-01-02 0.297715
2016-01-03 0.513704
2016-01-04 0.249076
2016-01-05 0.030517
2016-01-06 0.983741
Freq: D, Name: b, dtype: float64
'''
#输出0 1 2行
print(df[0:3])
'''
a b c d
2016-01-01 0.013124 0.351912 0.679782 0.192111
2016-01-02 0.175300 0.956146 0.969367 0.488475
2016-01-03 0.503340 0.662137 0.334847 0.012275
'''
#iloc就类似numpy了
print(df.iloc[1])
print(df.iloc[:, 1])
print(df.iloc[1, 2])
print(df.iloc[[1, 3, 5], 1:3])
#和上面类似 只是数字变标签
print(df.loc['2016-01-01'])
#a这一列大于0.15的保留
print(df[df.a > 0.15])
'''
a b c d
2016-01-01 0.596506 0.955338 0.196281 0.632468
2016-01-03 0.603334 0.696364 0.886982 0.178019
2016-01-04 0.980567 0.611526 0.534930 0.793968
2016-01-05 0.685185 0.100450 0.728273 0.906942
'''
3. 导入导出
data = pd.read_csv('1.csv')
data.to_csv('2.csv')
三.matpolotlib
1.基本用法
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 1, 50)
y = 2 * x + 1
plt.plot(x, y)
plt.show() #加这句话图才会出来
2.显示多张图片
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure() #以下的操作针对这一个figure
plt.plot(x, y1)
plt.figure(num = 3, figsize=(8, 5)) #设置编号和大小
plt.plot(x, y1)
plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--');
plt.show() #加这句话图才会出来
3. 设置坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.plot(x, y1)
plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--');
plt.xlim((-1, 2)) #设置坐标轴范围
plt.ylim((-2, 3))
plt.xlabel('I am x') #坐标轴名称
plt.ylabel('I am y')
plt.xticks(np.linspace(-1, 2, 5)) #设置刻度
plt.yticks([-2, 0], [r'$really\ bad$', r'$\alpha$'])
plt.show() #加这句话图才会出来
4. 设置图例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.plot(x, y1, label = 'up') #plot时要加入label
plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--', label = 'down');
plt.legend(loc = 'best') #loc可加可不加 加了就是选择一个没有什么数据的地方放
plt.show() #加这句话图才会出来
先学到这吧,以后遇到不会的再看视频学。