pip install matplotlib
import matplotlib.pyplot as plt
figure(num,figsize,dpi,facecolor,edgecolor,frameon)
例如:
>>> import matplotlib.pyplot as plt
>>> plt.figure(figsize=(3,2),facecolor="green")#绘制一个尺寸为3*2英寸,背景为绿色的空白图形
#使用figure函数只是创建了一个画布,然后需要在这一个画布上绘制图形
<Figure size 300x200 with 0 Axes>
>>> plt.plot()#绘制一个空白图形
[]
>>> plt.show()#一定要使用show函数所绘制的图形才能显示出来
颜色 | 缩略字符 | 颜色 | 缩略字符 |
---|---|---|---|
blue | b | black | k |
green | g | white | w |
red | r | cyan | c |
yellow | y | magenta | m |
subplot(行数,列数,子图序号)
1 |
---|
2 |
1 | 2 |
---|---|
3 | 4 |
1 | 2 | 3 |
---|---|---|
4 | 5 | 6 |
例如,如果把画图划分为两行两列的子图
>>> import matplotlib.pyplot as plt
>>>fig = plt.figure()
>>> plt.subplot(2,2,1)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F53EB02400>
>>> plt.subplot(2,2,2)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F5406266D8>
>>> plt.subplot(2,2,3)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F53B090908>
>>> plt.subplot(2,2,4)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F540626668>
>>> plt.show()
输出结果为:
当subplot的参数都小于10的时候,可以省略逗号
>>> import matplotlib.pyplot as plt
>>>fig = plt.figure()
>>> plt.subplot(221)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F5406A96D8>
>>> plt.subplot(222)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F53F16EA20>
>>> plt.subplot(223)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F53F16EA58>
>>> plt.subplot(224)
<matplotlib.axes._subplots.AxesSubplot object at 0x000001F53EE566A0>
>>> plt.show()
结果同上图
下面我们来看一个完整的例子:
创建一个文件first.py文件,内容如下
import matplotlib.pyplot as plt
fig = plt.figure()
plt.subplot(221)
plt.subplot(222)
plt.subplot(223)
plt.show()
在文件所在的目录下执行:
>>>python first.py
plt.rcParams["font.sans-self"]="SimHei"
中文字体 | 英文描述 | 中文字体 | 英文描述 |
---|---|---|---|
宋体 | SimSun | 楷体 | KaiTi |
黑体 | SimHei | 仿宋 | FangSong |
微软雅黑 | MicrosoftYaHei | 隶书 | LiSu |
微软正黑体 | Microsoft JhengHei | 幼圆 | YouYuan |
rc参数被修改后,可以使用以下函数恢复标准默认配置
plt.rcdefaults()
suptitle(标题文字)# 这个参数是不能省略的
参数 | 说明 | 默认值 |
---|---|---|
x | 标题位置的x坐标 | 0.5 |
y | 标题位置的y坐标 | 0.98 |
color | 标题颜色 | 黑色 |
backgroundcolor | 标题背景颜色 | 12 |
fontsize | 标题的字体大小 | |
fontweight | 字体粗细 | normal |
fontstyle | 设置字体类型 | |
horizontalalignment | 标题水平对齐方式 | center |
verticalaligment | 标题的垂直对齐方式 | top |
fontsize | fontweight | fontstype | horizontalalignment | verticalaligment |
---|---|---|---|---|
xx-small | light | normal | left | center |
x-small | normal | italic | right | top |
small | medium | oblique | center | bottom |
large | semibold | baseline | ||
x-large | bold | |||
xx-large | heavy | |||
black |
title(标题文字)
title()函数的主要参数:
参数 | 说明 | 取值 |
---|---|---|
loc | 标题位置 | left,right |
rotation | 标题文字旋转角度 | |
color | 标题颜色 | 黑色 |
fontsize | 标题的字体大小 | |
fontweight | 字体粗细 | normal |
fontstyle | 设置字体类型 | |
horizontalalignment | 标题水平对齐方式 | center |
verticalalignment | 标题的垂直对齐方式 | top |
fontdict | 设置参数字典 |
例子:
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"#设置默认字体为中文黑体
fig = plt.figure(facecolor="lightgrey")#创建一个绘图对象,设置背景色为浅灰色
plt.subplot(221)
plt.title('子标题1')
plt.subplot(2,2,2)
plt.title('子标题2',loc="left",color="b")
plt.subplot(223)
myfontdict = {
"fontsize":12,"color":"g","rotation":30}
plt.title("子标题3",fontdict=myfontdict)
plt.subplot(224)
plt.title('子标题4',color='white',backgroundcolor="black")
plt.suptitle("全局标题",fontsize=20,color="r",backgroundcolor="y")
plt.show()
执行之后得到:
结果中问题很多,全局标题盖住了第一行的子标题,第二行标题太过紧凑
tight_layout(rect=[left,bottom.right,top])
其中四个参数如图所示,默认值是(0,0)和(1,1)
为了给全局标题留一个位置,所以取值为(0,0)和(1,0.9)
修改代码为
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"#设置默认字体为中文黑体
fig = plt.figure(facecolor="lightgrey")#创建一个绘图对象,设置背景色为浅灰色
plt.subplot(221)
plt.title('子标题1')
plt.subplot(2,2,2)
plt.title('子标题2',loc="left",color="b")
plt.subplot(223)
myfontdict = {
"fontsize":12,"color":"g","rotation":30}
plt.title("子标题3",fontdict=myfontdict)
plt.subplot(224)
plt.title('子标题4',color='white',backgroundcolor="black")
plt.suptitle("全局标题",fontsize=20,color="r",backgroundcolor="y")
plt.tight_layout(rect=[0,0,1,0.9])
plt.show()
scatter(x,y,scale,color,marker,label)
参数 | 说明 | 默认值 |
---|---|---|
x | 数据点x的坐标 | 不可省略 |
y | 数据点y的坐标 | 不可省略 |
scale | 数据点的大小 | 36 |
color | 数据点的颜色 | |
marker | 数据点的样式 | ‘o’(圆点) |
label | 图例文字 |
plt.rcParams['font.sans-serif']="SimHei"
n = 1024
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
plt.scatter(x,y,color="blue",marker="*")
plt.title("标准正态分布",fontsize=20)
plt.text(2.5,2.5,"均 值:0\n标准差:1")
text(x,y,s,fontsize,color)
参数说明:
参数 | 说明 | 默认值 |
---|---|---|
x | 文字的x坐标 | 不可省略 |
y | 文字的y坐标 | 不可省略 |
s | 显示的文字 | 不可省略 |
fontsize | 文字的大小 | 12 |
color | 文字的颜色 | 黑色 |
plt.xlim(-4,4)
plt.ylim(-4,4)
plt.xlabel('横坐标x',fontsize=14)
plt.ylabel('纵坐标y',fontsize=14)#字号为14
axes.unicode_minus
设置成Falseplt.rcParams["axes.unicode_minus"]=Fasle
函数 | 说明 |
---|---|
xlabel(x,y,s,fontsize,color) | 设置x轴标签 |
ylabel(x,y,s,fontsize,color) | 设置y轴标签 |
xlin(xmin,xmax) | 设置x轴坐标的范围 |
ylim(ymin,ymax) | 设置y轴坐标的范围 |
tick_params(labelsize) | 设置刻度文字的符号 |
import numpy as np # 导入numpy库
import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False
n = 1024
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
plt.scatter(x,y,color="blue",marker="*")
plt.title("标准正态分布",fontsize = 20)
plt.text(2.5,2.5,"均 值:0\n标准差:1")
plt.xlim(-4,4)
plt.ylim(-4,4)
plt.xlabel("横坐标x",fontsize=14)
plt.ylabel("纵坐标y",fontsize=14)
plt.show()
...
n = 1024
x1 = np.random.normal(0,1,n)
y1 = np.random.normal(0,1,n)
x2 = np.random.uniform(-4,4,(1,n))
y2 = np.random.uniform(-4,4,(1,n))
plt.scatter(x1,y1,color="blue",marker="*")
plt.scatter(x2,y2,color="yellow",marker="o")
...
scatter(x,y,scale,color,marker,label)
legend(loc,fontsize)
取值 | 图例位置 | 取值 | 图例位置 |
---|---|---|---|
0 | best(自动寻找最优位置) | 6 | center left |
1 | upper right(右上角) | 7 | center right |
2 | upper left(左上角) | 8 | lower center |
3 | lower left | 9 | upper center |
4 | lower right | 10 | center |
5 | right |
...
y2 = np.random.uniform(-4,4,(1,n))
plt.scatter(x1,y1,color="blue",marker="*",label="正态分布")
plt.scatter(x2,y2,color="yellow",marker="o",label="均匀分布")
plt.legend()
plt.title("标准正态分布",fontsize = 20)
plt.xlim(-4,4)
...
import numpy as np # 导入numpy库
import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False
n = 1024
x1 = np.random.normal(0,1,n)
y1 = np.random.normal(0,1,n)
x2 = np.random.uniform(-4,4,(1,n))
y2 = np.random.uniform(-4,4,(1,n))
plt.scatter(x1,y1,color="blue",marker="*",label="正态分布")
plt.scatter(x2,y2,color="yellow",marker="o",label="均匀分布")
plt.legend()
plt.title("标准正态分布",fontsize = 20)
plt.xlim(-4,4)
plt.ylim(-4,4)
plt.xlabel("横坐标x",fontsize=14)
plt.ylabel("纵坐标y",fontsize=14)
plt.show()
折线图(Line Chart):散点图的基础上,将相邻的点用线段相连接
plot(x,y,color,marker,label,linewidth,markersize)
参数 | 说明 | 默认值 |
---|---|---|
x | 数据点的x坐标 | 0,1,2,… |
y | 数据点的y坐标 | 不可省略 |
color | 数据点的颜色 | |
marker | 数据点的样式 | ‘o’ |
label | 图例文字 | |
linewidth | 折现的宽度 | |
markersize | 数据点的大小 |
n = 24
y1 = np.random.randint(27,37,n)#温度
y2 = np.random.randint(40,60,n)#湿度
plt.plot(y1,label='温度')
plt.plot(y2,label='湿度')
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = "SimHei"
n = 24
y1 = np.random.randint(27,37,n)
y2 = np.random.randint(40,60,n)
plt.plot(y1,label="温度")
plt.plot(y2,label="湿度")
plt.xlim(0,23)
plt.ylim(20,70)
plt.xlabel('小时',fontsize=12)
plt.ylabel('测量值',fontsize=12)
plt.title('24小时温度湿度统计',fontsize=16)
plt.legend()
plt.show()
柱状图(Bar Chart):由一系列高度不等的柱形条纹表示数据分布的情况
bar(left,height,width,facecolor,edgecolor,label)
y1 = [32,25,16,30,24,45,40,33,28,17,24,20]
y2 = [-23,-35,-26,-35,-45,-43,-35,-32,-23,-17,-22,-28]
plt.bar(range(len(y1)),y1,width=0.8,facecolor='green',edgecolor='white',label='统计量1')
plt.bar(range(len(y2)),y2,width=0.8,facecolor='red',edgecolor='white',label='统计量2')
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False
y1 = [32,25,16,30,24,45,40,33,28,17,24,20]
y2 = [-23,-35,-26,-35,-45,-43,-35,-32,-23,-17,-22,-28]
plt.bar(range(len(y1)),y1,width=0.8,facecolor='green',edgecolor='white',label='统计量1')
plt.bar(range(len(y2)),y2,width=0.8,facecolor='red',edgecolor='white',label='统计量2')
plt.title("柱状图",fontsize=20)
plt.legend()
plt.show()
keras.detasets
模块加载和访问tensorflow.keras.datasets.boston_housing
tensorflow.keras.datasets
是前缀boston_housing
是数据集名称tensorflow.keras
是keras API在tensorflow中的实现import tensorflow as tf
boston_housing = tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y) = boston_housing.load_data()
# 由于该数据集,包括房屋属性和房价,而且分为训练集和测试集,所以需要4个numpy数组分别接受
# (train_x,train_y)=(训练集属性、训练集房价)
# (test_x,test_y) = (测试集属性、测试集房价)
如果你在Vscode中运行该代码报错ModuleNotFoundError: No module named 'tensorflow'
,这有可能是因为VScode和anaconda没有建立链接导致,不如看看这篇文章【环境配置】在Vscode终端中使用Anaconda3中配置的环境
C:\Users\user_name\.keras\datasets\boston_housing.npz
# user_name是当前用户的用户名
# 如果是使用管理员登陆,这里就是Administrator文件夹
# 文件保存的名称为boston_housing.npz,npz是一种压缩文件格式,主要用来存储数据
# 也可以通过其他渠道下载好这个数据集,把它保存在该文件夹下
>>> print("Training set:", len(train_x))
Training set: 404
>>> print("Txsting set:", len(test_x))
Txsting set: 102
import tensorflow as tf
boston_housing = tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y) = boston_housing.load_data(test_split=0)
# test_split是设置测试数据在整个数据中的比例,默认是0.2
然后就可以看到
>>> print("Training set:", len(train_x))
Training set: 506
>>> print("Txsting set:", len(test_x))
Txsting set: 0
>>> type(train_x)
<class 'numpy.ndarray'>
>>> type(train_y)
<class 'numpy.ndarray'>
>>> print("Dim of train_X:",train_x.ndim)
Dim of train_X: 2
>>> print("Shape of train_X:",train_x.shape)
Shape of train_X: (506, 13)
>>> print("Dim of train_y:",train_y.ndim)
Dim of train_y: 1
>>> print("Shape of train_y:",train_y.shape)
Shape of train_y: (506,)
例如:输入train_x中的前5行数据
>>> print(train_x[:5,])
[[1.23247e+00 0.00000e+00 8.14000e+00 0.00000e+00 5.38000e-01 6.14200e+00
9.17000e+01 3.97690e+00 4.00000e+00 3.07000e+02 2.10000e+01 3.96900e+02
1.87200e+01]
[2.17700e-02 8.25000e+01 2.03000e+00 0.00000e+00 4.15000e-01 7.61000e+00
1.57000e+01 6.27000e+00 2.00000e+00 3.48000e+02 1.47000e+01 3.95380e+02
3.11000e+00]
[4.89822e+00 0.00000e+00 1.81000e+01 0.00000e+00 6.31000e-01 4.97000e+00
1.00000e+02 1.33250e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.75520e+02
3.26000e+00]
[3.96100e-02 0.00000e+00 5.19000e+00 0.00000e+00 5.15000e-01 6.03700e+00
3.45000e+01 5.98530e+00 5.00000e+00 2.24000e+02 2.02000e+01 3.96900e+02
8.01000e+00]
[3.69311e+00 0.00000e+00 1.81000e+01 0.00000e+00 7.13000e-01 6.37600e+00
8.84000e+01 2.56710e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.91430e+02
1.46500e+01]]
例如:输入train_x中的某一列数据
>>> print(train_x[:,5])
[6.142 7.61 4.97 6.037 6.376 5.708 5.536 5.468 5.628 5.019 6.404 4.628
5.572 6.251 5.613 5.957 7.016 6.345 6.162 6.727 6.202 6.595 7.135 6.575
...
5.813 7.185 6.63 6.343 8.297 6.758 6.421 6.98 6.471 6.852 6.019
6.376 6.108 6.417 6.209 5.093 5.987 6.395 6.957 6.229 5.414 6.495 6.009
5.885 6.375 6.968 4.88 5.981 7.52 5.593 6.485 5.705 6.172 6.229 5.951
6.593 7.061 6.03 5.884 6.897 8.259 6.812 6.122 7.333 8.78 6.273 7.802
6.951 6.101]
其中有506个数值,分别是每条数据中的平均房间数
#首先导入绘图库和numpy库
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# 然后加载数据集
boston_housing = tf.keras.datasets.boston_housing
(train_x,train_y),(_,_) = boston_housing.load_data(test_split=0)
plt.figure(figsize=(5,5))#绘图对象的尺寸,宽和高都是5英寸
plt.scatter(train_x[:,5],train_y)# 然后绘制散点
plt.xlabel("RM")
plt.ylabel("Price($1000's)")#坐标轴标签
plt.xlim(2,10)
plt.ylim(0,60)
plt.title("5, RM-Price")#设置标题
plt.show()
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
boston_housing = tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y) = boston_housing.load_data(test_split=0)
plt.figure(figsize=(12,12))
for i in range(13):
plt.subplot(4,4,i+1)
plt.scatter(train_x[:,i],train_y)
plt.show()
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
boston_housing = tf.keras.datasets.boston_housing
(train_x,train_y),(test_x,test_y) = boston_housing.load_data(test_split=0)
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False
titles = ["CRIM","ZN","INDUS","CHAS","NOX","RM","AGE","DIS","RAD","TAX","PTRATIO","B-1000","LSTAT","MEDV"]
plt.figure(figsize=(12,12))
for i in range(13):
plt.subplot(4,4,i+1)
plt.scatter(train_x[:,i],train_y)
plt.xlabel(titles[i])
plt.ylabel("Preice($1000's)")
plt.title(str(i+1)+"."+titles[i]+" - Price")
plt.tight_layout(rect=[0,0,1,0.95])
plt.suptitle("各个属性与房价的关系",x = 0.5, y = 0.98,fontsize= 20)
plt.show()
花萼长度 | 花萼宽度 | 花瓣长度 | 花瓣宽度 | 类别标签 |
---|---|---|---|---|
Sepal length | Sepal width | Petal length | Petal width | Species |
山鸢尾(Setosa) | ||||
变色鸢尾(Versicolour) | ||||
维吉尼亚鸢尾(Virginica) |
tf.keras.utils.get_file(fname,origin,cache_dir)
参数:
C:\Users\\Administrator(当前用户名)\.keras\datasets
返回值:下载后的文件在本地磁盘中的绝对路径
>>>import tensorflow as tf
>>>TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>>train_path = tf.keras.utils.get_file("iris_training.csv",TRAIN_URL)
# 第一次执行时会现在数据集
Downloading data from http://download.tensorflow.org/data/iris_training.csv
8192/2194 [================================================================================================================] - 0s 0s/step
'C:\\Users\\xxx\\.keras\\datasets\\iris_training.csv'
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> TRAIN_URL.split('/')
['http:', '', 'download.tensorflow.org', 'data', 'iris_training.csv']
# 五个元素,两个连续的//之间是一个空的字符串
>>> fname_list = TRAIN_URL.split('/')
>>> fname_list[-1]
'iris_training.csv'
或者
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> TRAIN_URL.split('/')[-1]
'iris_training.csv'
只需要改变第一行的URL即可
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
import pandas as pd
pd.read_csv(filepath_or_buffer,header,names)
'C:\\Users\\xxx\\.keras\\datasets\\iris_training.csv'
pd.read_csv()
函数返回的数据类型为pandas.core.frame.DataFrame
;这是二维数据表类型,是Pandas中非常常用的一种数据类型>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
>>> import pandas as pd
>>> pd.read_csv(train_path)
120 4 setosa versicolor virginica
0 6.4 2.8 5.6 2.2 2
1 5.0 2.3 3.3 1.0 1
2 4.9 2.5 4.5 1.7 2
3 4.9 3.1 1.5 0.1 0
4 5.7 3.8 1.7 0.3 0
.. ... ... ... ... ...
115 5.5 2.6 4.4 1.2 1
116 5.7 3.0 4.2 1.2 1
117 4.4 2.9 1.4 0.2 0
118 4.8 3.0 1.4 0.1 0
119 5.5 2.4 3.7 1.0 1
[120 rows x 5 columns]
>>> df_iris = pd.read_csv(train_path)
>>> type(df_iris)
<class 'pandas.core.frame.DataFrame'>
pd.read_csv(filepath_or_buffer,header,names)
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
>>> df_iris = pd.read_csv(train_path)
>>> df_iris = pd.read_csv(train_path,header=0)
>>> df_iris.head() # 使用DataFrame对象的head()方法,输出二维表格中的前五行
# 可以看到,数据集中的第一行数据被当作列标题,但是在这里这一行数据并不是列标题,因此我们应当把数据设置为none
120 4 setosa versicolor virginica
0 6.4 2.8 5.6 2.2 2
1 5.0 2.3 3.3 1.0 1
2 4.9 2.5 4.5 1.7 2
3 4.9 3.1 1.5 0.1 0
4 5.7 3.8 1.7 0.3 0
# 在这里,应当把header设置为none,数据没有表头,但是第一行显示不是所需要的数据,不对,这一行既不是样本也不是标题
>>> df_iris = pd.read_csv(train_path,header=None)
>>> df_iris.head()
0 1 2 3 4
0 120.0 4.0 setosa versicolor virginica
1 6.4 2.8 5.6 2.2 2
2 5.0 2.3 3.3 1.0 1
3 4.9 2.5 4.5 1.7 2
4 4.9 3.1 1.5 0.1 0
pd.read_csv(filepath_or_buffer,header,names)
*在这里就是希望自定义个一个标题,并且不显示第一行的内容
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
>>> df_iris = pd.read_csv(train_path)
>>> COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
>>> df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
>>> df_iris.head()
SepalLength SePalWidth PetalLength PetalWidth Species
0 6.4 2.8 5.6 2.2 2
1 5.0 2.3 3.3 1.0 1
2 4.9 2.5 4.5 1.7 2
3 4.9 3.1 1.5 0.1 0
4 5.7 3.8 1.7 0.3 0
df.head(n)# 读取前n行数据
>>> df_iris.head(8)
SepalLength SePalWidth PetalLength PetalWidth Species
0 6.4 2.8 5.6 2.2 2
1 5.0 2.3 3.3 1.0 1
2 4.9 2.5 4.5 1.7 2
3 4.9 3.1 1.5 0.1 0
4 5.7 3.8 1.7 0.3 0
5 4.4 3.2 1.3 0.2 0
6 5.4 3.4 1.5 0.4 0
7 6.9 3.1 5.1 2.3 2
df.tail(n)
>>> df_iris.tail(8) #这表示读取鸢尾花数据的后八行数据
SepalLength SePalWidth PetalLength PetalWidth Species
112 5.0 3.0 1.6 0.2 0
113 6.3 3.3 6.0 2.5 2
114 5.0 3.5 1.6 0.6 0
115 5.5 2.6 4.4 1.2 1
116 5.7 3.0 4.2 1.2 1
117 4.4 2.9 1.4 0.2 0
118 4.8 3.0 1.4 0.1 0
119 5.5 2.4 3.7 1.0 1
>>> df_iris.tail() #参数为空时,表示读取后五行数据
SepalLength SePalWidth PetalLength PetalWidth Species
115 5.5 2.6 4.4 1.2 1
116 5.7 3.0 4.2 1.2 1
117 4.4 2.9 1.4 0.2 0
118 4.8 3.0 1.4 0.1 0
119 5.5 2.4 3.7 1.0 1
>>> df_iris[10:16] # 表示读取行号10-15的数据
SepalLength SePalWidth PetalLength PetalWidth Species
10 5.2 2.7 3.9 1.4 1
11 6.9 3.1 4.9 1.5 1
12 5.8 4.0 1.2 0.2 0
13 5.4 3.9 1.7 0.4 0
14 7.7 3.8 6.7 2.2 2
15 6.3 3.3 4.7 1.6 1
>>> df_iris.describe()
SepalLength SePalWidth PetalLength PetalWidth Species
count 120.000000 120.000000 120.000000 120.000000 120.000000
mean 5.845000 3.065000 3.739167 1.196667 1.000000
std 0.868578 0.427156 1.822100 0.782039 0.840168
min 4.400000 2.000000 1.000000 0.100000 0.000000
25% 5.075000 2.800000 1.500000 0.300000 0.000000
50% 5.800000 3.000000 4.400000 1.300000 1.000000
75% 6.425000 3.300000 5.100000 1.800000 2.000000
max 7.900000 4.400000 6.900000 2.500000 2.000000
属性 | 描述 |
---|---|
ndim | 数据表的维数 |
shape | 数据表的形状 |
size | 数据表元素的总个数 |
>>> df_iris.ndim
2
>>> df_iris.shape
(120, 5)
>>> df_iris.size
600
>>> import numpy as np
>>> iris = np.array(df_iris)
>>> type(df_iris)
<class 'pandas.core.frame.DataFrame'>
>>> type(iris)
<class 'numpy.ndarray'>
也可以使用DataFrame对象自带的方法.values和.as_matrix()函数方法,前者可以,后者好像不可以了,应该是用的pandas版本太高或者太低导致
>>> iris = df_iris.values
>>> type(df_iris)
<class 'pandas.core.frame.DataFrame'>
>>> type(iris)
<class 'numpy.ndarray'>
>>> iris[0:6] # 对iris数组的第一维进行切片
array([[6.4, 2.8, 5.6, 2.2, 2. ],
[5. , 2.3, 3.3, 1. , 1. ],
[4.9, 2.5, 4.5, 1.7, 2. ],
[4.9, 3.1, 1.5, 0.1, 0. ],
[5.7, 3.8, 1.7, 0.3, 0. ],
[4.4, 3.2, 1.3, 0.2, 0. ]])
>>> iris[0:6,0:4]
array([[6.4, 2.8, 5.6, 2.2],
[5. , 2.3, 3.3, 1. ],
[4.9, 2.5, 4.5, 1.7],
[4.9, 3.1, 1.5, 0.1],
[5.7, 3.8, 1.7, 0.3],
[4.4, 3.2, 1.3, 0.2]])
>>> iris_y = iris[:,4] # 取到所有的行的第4列
>>> iris_y
array([2., 1., 2., 0., 0., 0., 0., 2., 1., 0., 1., 1., 0., 0., 2., 1., 2., 2., 2., 0., 2., 2., 0., 2., 2., 0., 1., 2., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 0., 0., 2., 2., 2., 0., 0., 2., 0., 2., 0., 2., 0., 1., 1., 0., 1., 2., 2., 2., 2., 1., 1., 2., 2., 2., 1., 2., 0., 2., 2., 0., 0., 1., 0., 2., 2., 0., 1., 1., 1., 2., 0., 1., 1., 1., 2., 0., 1., 1., 1., 0., 2., 1., 0., 0., 2., 0., 0., 2., 1., 0., 0., 1., 0., 1., 0., 0., 0., 0., 1., 0., 2., 1., 0., 2., 0., 1., 1., 0., 0., 1.])
>>> import tensorflow as tf
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> import pandas as pd
>>>
>>> TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
>>> train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
>>> COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
>>> df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
>>> iris = np.array(df_iris)
>>> iris[:,2]
array([5.6, 3.3, 4.5, 1.5, 1.7, 1.3, 1.5, 5.1, 4.4, 1.5, 3.9, 4.9, 1.2,
1.7, 6.7, 4.7, 5.9, 6.6, 5.3, 1.5, 5.7, 5.6, 1.3, 5.6, 5.8, 1.5,
4. , 5.1, 4.5, 5. , 4.4, 3. , 4.5, 5.5, 4.8, 5.7, 5.1, 5.1, 1.5,
1.4, 6.4, 5.1, 5.2, 1.9, 1.6, 5. , 1.6, 6.9, 1. , 6. , 1.4, 4.4,
4. , 1.2, 4.7, 4.8, 6.1, 5.1, 5.4, 3.5, 3.9, 5.6, 5. , 5.5, 4.5,
6.3, 1.3, 6.1, 5.5, 1.5, 1.3, 4.6, 1.3, 6.1, 4.9, 1.5, 3.8, 4.2,
4.5, 5.3, 1.5, 4.7, 4.6, 4.2, 5.6, 1.5, 4.8, 4.5, 5.1, 1.3, 5.2,
4.7, 1.4, 1.5, 5.8, 1.4, 1.4, 6.7, 4.8, 1.6, 1.4, 3.3, 1.3, 4.1,
1.6, 1.4, 1.5, 1.4, 3.6, 1.6, 4.9, 4.1, 1.6, 6. , 1.6, 4.4, 4.2,
1.4, 1.4, 3.7])
>>> iris[:,3]
array([2.2, 1. , 1.7, 0.1, 0.3, 0.2, 0.4, 2.3, 1.4, 0.4, 1.4, 1.5, 0.2,
0.4, 2.2, 1.6, 2.3, 2.1, 2.3, 0.4, 2.1, 2.1, 0.4, 1.4, 1.6, 0.2,
1.2, 1.8, 1.5, 1.7, 1.3, 1.1, 1.5, 2.1, 1.8, 2.3, 2. , 2.4, 0.3,
0.3, 2. , 1.9, 2.3, 0.4, 0.2, 1.5, 0.2, 2.3, 0.2, 1.8, 0.2, 1.4,
1.3, 0.2, 1.4, 1.8, 1.9, 1.9, 2.3, 1. , 1.1, 2.4, 1.9, 1.8, 1.5,
1.8, 0.2, 2.5, 1.8, 0.2, 0.2, 1.3, 0.2, 2.3, 1.8, 0.1, 1.1, 1.3,
1.5, 1.9, 0.2, 1.4, 1.5, 1.3, 2.4, 0.1, 1.4, 1.3, 1.6, 0.3, 2. ,
1.2, 0.3, 0.2, 2.2, 0.3, 0.2, 2. , 1.8, 0.2, 0.2, 1. , 0.3, 1. ,
0.4, 0.2, 0.2, 0.2, 1.3, 0.2, 1.8, 1.3, 0.2, 2.5, 0.6, 1.2, 1.2,
0.2, 0.1, 1. ])
>>> plt.scatter(iris[:,2],[iris[:,3]])
<matplotlib.collections.PathCollection object at 0x00000201AA808508>
>>> plt.show()
输出结果为:
可以看到,虽然散点图被绘制出来了,但是不同类别的花没有区分开来
plt.scatter(x,y,c,cmap)
例如:
>>> x = np.arange(10)
>>> y = np.arange(10)
>>> dot_color = [0,1,2,0,1,2,2,1,1,0]
>>> plt.scatter(x,y,20,dot_color,cmap='brg')
<matplotlib.collections.PathCollection object at 0x00000201A9E6BD08>
>>> plt.show()
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
iris = np.array(df_iris)
plt.scatter(iris[:,2],[iris[:,3]],c=iris[:,4],cmap='brg')
plt.show()
# 导入必要的库
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 下载数据集
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
# 定义类、标题、列表并读取数据集文件
COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
# 将Pandas二维数据表转化问numpy二维数组
iris = np.array(df_iris)
# 绘制散点图
plt.scatter(iris[:,2],[iris[:,3]],c=iris[:,4],cmap='brg')
plt.title("Anderson's Iris Data Set\n(Bule->Setosa | Red->Versicolor | Green->Virginica)")# 添加图表题
plt.xlabel(COLUMN_NAMES[2])
plt.ylabel(COLUMN_NAMES[3])# 设置坐标轴标签
plt.show()# 显示图形
for i in range(4):
plt.subplot(1,4,i+1)
if(i==0):
plt.text(0.3,0.5,COLUMN_NAMES[0],fontsize=15)
else:
plt.scatter(iris[:,i],iris[:,0],c=iris[:,4],cmap='brg')
plt.title(COLUMN_NAMES[i])# 横坐标标签使用子图标题来实现
plt.ylabel(COLUMN_NAMES[0])
下面是完整的代码:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
iris = np.array(df_iris)
fig = plt.figure('Iris Data',figsize=(15,3))
fig.suptitle("Anderson's Iris Data Set\n(Bule->Setosa | Red->Versicolor | Green->Virginica)")
for i in range(4):
plt.subplot(1,4,i+1)
if(i==0):
plt.text(0.3,0.5,COLUMN_NAMES[0],fontsize=15)
else:
plt.scatter(iris[:,i],iris[:,0],c=iris[:,4],cmap='brg')
plt.title(COLUMN_NAMES[i])# 横坐标标签使用子图标题来实现
plt.ylabel(COLUMN_NAMES[0])
plt.tight_layout(rect=[0,0,1,0.9])
plt.show()
fig = plt.figure('Iris Data',figsize=(15,15))
fig.suptitle("Anderson's Iris Data Set\n(Bule->Setosa | Red->Versicolor | Green->Virginica)")
for i in range(4):
for j in range(4):
plt.subplot(4,4,4*i+(j+1))
if(i==j):
plt.text(0.3,0.5,COLUMN_NAMES[0],fontsize=15)
else:
plt.scatter(iris[:,j],iris[:,i],c=iris[:,4],cmap='brg')
plt.title(COLUMN_NAMES[j])# 横坐标标签使用子图标题来实现
plt.ylabel(COLUMN_NAMES[i])
plt.tight_layout(rect=[0,0,1,0.93])
plt.show()
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
iris = np.array(df_iris)
fig = plt.figure('Iris Data',figsize=(15,15))
fig.suptitle("Anderson's Iris Data Set\n(Bule->Setosa | Red->Versicolor | Green->Virginica)")
for i in range(4):
for j in range(4):
plt.subplot(4,4,4*i+(j+1))
if(i==j):
plt.text(0.3,0.5,COLUMN_NAMES[0],fontsize=15)
else:
plt.scatter(iris[:,j],iris[:,i],c=iris[:,4],cmap='brg')
plt.title(COLUMN_NAMES[j])# 横坐标标签使用子图标题来实现
plt.ylabel(COLUMN_NAMES[i])
plt.tight_layout(rect=[0,0,1,0.93])
plt.show()
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
COLUMN_NAMES = ['SepalLength', 'SePalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES,header=0)
iris = np.array(df_iris)
fig = plt.figure('Iris Data',figsize=(12,12))
fig.suptitle("Anderson's Iris Data Set\n(Bule->Setosa | Red->Versicolor | Green->Virginica)")
for i in range(4):
for j in range(4):
plt.subplot(4,4,4*i+(j+1))
if(i==j):
plt.text(0.3,0.5,COLUMN_NAMES[0],fontsize=10)
else:
plt.scatter(iris[:,j],iris[:,i],8,c=iris[:,4],cmap='brg')
plt.title(COLUMN_NAMES[j],fontsize=10)# 横坐标标签使用子图标题来实现
plt.ylabel(COLUMN_NAMES[i],fontsize=10)
plt.tight_layout(rect=[0,0,1,0.98])
plt.show()