matplotlib
参考MATLIB
from matplotlib import pyplot as plt
import random
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
plt.figure(figsize=(18,8),dpi=50)
plt.xticks(x[::10])
plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
import random
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
#调整x轴的刻度 字符串hello(i)与i对应
#_x = x 对x进行强制类型转换
_x = list(x)[::20]
_xtickslabels = ["hello{}".format(i) for i in _x]
plt.xticks(_x,_xtickslabels)
plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
import random
import matplotlib
matplotlib.rc#python Ctrl+B看源码
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#调整x轴的刻度 字符串hello(i)与i对应
#_x = x 对x进行强制类型转换
_x = list(x)
_xtickslabels = ["10点{}分".format(i) for i in range(60)]
_xtickslabels += ["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::10],_xtickslabels[::10],rotation=45)#rotation为旋转角度
plt.show()
#2linux系统下常用的命令 fc-list :
from matplotlib import pyplot as plt
import random
import matplotlib#windows和linux设置字体
from matplotlib import font_manager
#一定可设置中文
#my_font = font_manager.FontPropereties(fanme="")#文件字体的位置
#windows和Linux设置字体的方式
matplotlib.rc("font",family="monospace",weight="bold")#等效下几行代码
#font={'family':'monospace'
# 'weight':'bold'
# 'size':'larger'
# }
#matplotlib.rc("font",**font)#python Ctrl+B看源码
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#_x = x 对x进行强制类型转换
_x = list(x)
_xtickslabels = ["10点{}分".format(i) for i in range(60)]
_xtickslabels += ["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::10],_xtickslabels[::10],rotation=45)#rotation为旋转角度 fontproperties=my_font
plt.show()
#折线图
from matplotlib import pyplot as plt
from matplotlib import font_manager
#my_font = font_manager.FontPropereties(fanme="")#文件字体的位置
#一个男生20岁到24岁谈的女朋友的数量
y1 = [0,1,3,1,2]
y2 = [0,8,5,4,3]
x = range(20,25)
plt.plot(x,y1,label="The First Guy",color="cyan")
plt.plot(x,y2,label="Second",linestyle="-.",color = "#DB7093")
xtickslabel=["{}years old".format(i) for i in x]
plt.xticks(x,xtickslabel,rotation=45)
plt.xlabel("age")
plt.ylabel("num of girl friends")
plt.title("name of picture")
plt.grid(alpha=0.5,linestyle=":")#alpha设置透明度,linestyle...
plt.legend()#(prop=my_font,loc=0)位置最好0=“best”,看源码查看位置
plt.show()
#散点图
from matplotlib import pyplot as plt
from matplotlib import font_manager
#myfont=font_manager.FontPropereties(fname="文字字体的路径")
y3 = [11,17,16,19,23]
y10 = [21,17,18,15,13]
x3 = range(5)
x10= range(15,20)
plt.scatter(x3,y3,label="Match")
plt.scatter(x10,y10,label="Oct")
plt.legend()#loc prop
x = list(x3)+list(x10)
xticklabels = ["3.{}".format(i+1) for i in x3]
xticklabels += ["12.{}".format(i-14) for i in x10]
plt.xticks(x,xticklabels,rotation=45)
plt.xlabel("date")
plt.ylabel("temperature")
plt.title("hah")
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager
#my_font = font_manager.FontProperetation(fname="")
a=["QQ","VX","facebook"]
b=[12,13.6,11]
plt.bar(range(3),b,width=0.3)
plt.xticks(range(3),a)
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager
#my_font = font_manager.FontProperetation(fname="")
a=["QQ","VX","facebook"]
b=[12,13.6,11]
plt.barh(range(3),b,height=0.3)
plt.yticks(range(3),a)
plt.grid()
plt.show()
numpy
列表和数组的区别:数组要求数据类型一致。
数据维度的python表述:
一维数组:列表和集合类型。列表有序,集合无序。
二维数组:列表类型
多维维数组:列表类型
高维数据(仅使用最基本的二元关系展示数据间的复杂结构):字典类型、数据表示格式。
numpy是一个开源的python科学计算基础库。
❀一个强大的n维数组对象 ndarray
❀广播功能函数
❀整合C /C++/Frotran代码的工具
❀线性代数、傅里叶变换、随机数生成功能
numpy是Scipy和panas等数据处理和科学计算库的基础
ndarray
数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。
优化 快 节省存储空间。
一般情况要求元素类型相同。
轴(axis)保存数据的维度
秩(rank)轴的数量
ndarray对象的属性
.ndim 秩,即轴的数量或维度的数量
.shape ndarray对象的尺度,对于矩阵,n行m列
.size ndarray 对象元素的个数,相当于.shape中的n*m
.dype ndarray对象的元素类型
.itemsize ndarray对象中每个元素的大小,以字节为单位
import numpy as np
t1 = np.array([1,2,3]);
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(t2)
print("*"*100)
import numpy as p
t3 = np.arange(10)
print(t3)
print(type(t3))
print(t3.dtype)
#设置数据类型
t4 = np.array(range(10),dtype="float32")
print(t4)
print(type(t4))
print(t4.dtype)
#调整数据类型
t5=t4.astype("int32")
print(t5.dtype)
import numpy as np
import random
#取小数
t6 = np.array([random.random()for i in range(10)])
print(t6)
#取小数点
t7 = np.round(t6,2)
print(t7)
# round(random.randm(),3)
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个全val数组,shape是元组类型
np.eye(n) 创建一个正方形的n*n单位矩阵,对角线为1,其余为0.
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
a.tolist
ndarray的索引和切片
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程
参考matlib
CSV的文件存取
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None)
frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array:存入文件的数组
fmt:写入文件的格式。例如:%d、%.2f、%,18e。
delimiter:分割字符串,默认是空格。
np.loadtxt(frame,dype=np.float,delimiter=None,unpack=False)
dtype:数据类型,可选
unpack:如果True,读入属性将分别写入不同变量
CSV只能存储一维和二维数据
多维数据的存储
a.tofile(frame,sep=’’,format=’%s’)
frame:文件、字符串
sep:数据分割字符串,如果是空船,写入文件为二进制。
format:写入数据的格式
np.fromfile(frame, dtype=float, count=-1, sep=")
々frame:文件、字符串。
々dtype:读取的数据炎型。
々count:读入元素个数,-1表示連人整个文件。
々sep:数据分割字符串,如果是空串,写人文件カ二迸制。
NumPy的便捷文件存取
np.save(fname, array或np.savez(fname, array)
frame: 文件名,以.npy为扩展名,压缩扩展名为.npz
array;数组变量
np.load(fname)
必frame:文件名,以.npy为扩展名,压缩扩展名为.npz
NUMPY库的随机数函数
np.random的随机数函数
rand(d0,d1,…,dn) 根据d0-dn创建随机数数组,浮点数,[0,1), 均匀分布
randn(d0.d1…dn)根 据d0-dn创建随机数数组,标准正志分布
randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high)
seed(s)随机数种子, s是给定的种子值
shuffle(a) 根据数组a的第一轴进行随排列,改变数组x
permutation(a)根据数组a的第一轴产生一个新的乱序数组,不该比那数组x
choice(a[,size,replace,p]) 从一维数组a中以概率p抽取元素,形成size形状新
数组replace表示是否可以重用元素,
shuffle(a) 根据数组a的第1轴进行随排列,改变数组x
permutation(a)
choice(al,size,replace,pl)
根据数组a的第1轴进行随排列,改变数组x
根据数组a的第1轴产生一个新的乱序数组,不改变数组x从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可以重用元素,默认为False
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状
nornal(loc,scale,size) 正态分布,均值、标准差、形状
poisson(lam,size) 泊松的分布 随机事件概率、形状
numpy的统计函数
sum(a,axis=None)
mean(a,axis=None)
average(a,axis=None)
std(a,axis=None)方差
var(a,axis=None)标准差
min() max()
argmin() argmax() 计算数组a中元素最小值、最大值的降一维后下标
unravel()_index(index,shape) 根据shape将一维下标index转换成多维下标
ptp(a) 计算数组a中元素最大值与最小值的差
median(a) 计算数组a中元素的中位数(中值)
numpy的梯度函数
np.gradient(f)计算数组中元素的梯度,当f为多维时,返回每个维度梯度(看,斜率)
pandas库
http://pandas.pydata.org Pandas是pythond的第三方库,提供高性能易用数据类型和分析工具。
pandas是基于numpy实现的扩展库
pandas数据类型
series和dataframe
基本操作、运算操作、特征类操作、关联类操作
numppy | pandas |
基础数据类型ndarray | 扩展数据类型series、datafram |
关注数据的结构表达 | 数据的应用表达 |
– | – |
维度:数据间的关系 | 数据与索引间关系 |
series类型
series类型是由一组数据以及与数据相关的索引组成
一维的带标签的数组
import pandas as pd
a = pd.Series(range(20))
print(a)
b = a.cumsum()
print(b)
``
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
dtype: int64
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
11 66
12 78
13 91
14 105
15 120
16 136
17 153
18 171
19 190
dtype: int64
import pandas as pd
c = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(c)
a 9
b 8
c 7
d 6
dtype: int64
Series类型可由如下类型创建:
python列表
标量值
import pandas as pd
s = pd.Series(22,index=['a','b','c'])
print(s)
a 22
b 22
c 22
dtype: int64
python字典
#字典类型创建Series类型
import pandas as pd
s=pd.Series({'a':9,'b':8,'c':7})
print(s)
a 9
b 8
c 7
dtype: int64
#字典类型创建Series类型
#index指定Series的结构
import pandas as pd
e = pd.Series({'a':9,'b':8,'c':7},index=['c','a','b','d'])
print(e)
c 7.0
a 9.0
b 8.0
d NaN
dtype: float64
ndarray
#用numpy类型创建Series类型
import numpy as np
import pandas as pd
f = pd.Series(np.arange(3))
print(f)
0 0
1 1
2 2
dtype: int32
#用numpy类型创建Series类型
import numpy as np
import pandas as pd
m = pd.Series(np.arange(5),index=np.arange(9,4,-1))
print(m)
其他函数
Series基本操作
.index
.values
自动索引和自定义索引并存,不能混用
.name
import pandas as pd
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(b.index)
print(b.values)
print(b['b'])
Index(['a', 'b', 'c', 'd'], dtype='object')
[9 8 7 6]
8
import pandas as pd
b = pd.Series([9,8,7],['a','b','c'])
b.name='孙玉的Series索引对象'
b.index.name='索引列'
print(b)
索引列
a 9
b 8
c 7
Name: 孙玉的Series索引对象, dtype: int64
索引和切片
import pandas as pd
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(b.index)
print(b.values)
print(b['b'])
print(b[0])
print("********************")
print(b[b>b.median()])
Index(['a', 'b', 'c', 'd'], dtype='object')
[9 8 7 6]
8
9
********************
a 9
b 8
dtype: int64
import pandas as pd
a = pd.Series([1,1,1],index=['b','c','d'])
b = pd.Series([1,1,1],index=['a','b','c'])
print(a+b)
a NaN
b 2.0
c 2.0
d NaN
dtype: float64
dataframe数据类型
dataframe类型由共同相同索引的一组列组成
DataFrame是一个表格型的数据类型,每列值类型可以不同
DATaFrame既有行索引index、也有列索引(纵向索引index,横向索引column)
DataFrame常用于表达二维数据,但也可表达多维数据
DataFrame类型可以由如下类型创建
二维ndarray对象
由一维ndarray、列表、字典、元组或Series构成的字典
Series类型
其他的DataFrame类型
import pandas as pd
a = pd.Series([1,1,1],index=['b','c','d'])
b = pd.Series([1,1,1],index=['a','b','c'])
print(a+b)
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
二维ndarray对象
import pandas as pd
import numpy as np
d = pd.DataFrame(np.arange(10).reshape(2,5))
print(d)
one two
a 1 4
b 2 5
c 3 6
** **
import pandas as pd
dt = {'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([4,5,6],index=['a','b','c'])
}
d = pd.DataFrame(dt)
print(d)
dd=pd.DataFrame(d,index=['b','c','d'],columns=['two','three'])
print(dd)
one two
a 1 4
b 2 5
c 3 6
two three
b 5.0 NaN
c 6.0 NaN
d NaN NaN
import pandas as pd
d = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([4,5,6],index=['a','b','c'])
})
print(d)
one two
a 1 4
b 2 5
c 3 6
如何改变Series和pandas的结构
增加、重排:重新索引 .reindex
删除:drop