matplotlib
库的基本功能;matplotlib
库中常用可视化方法调用接口。Matplotlib
库等iris150
条记录(150*5)包括一个类标号属性。1) 可视化必要性及工具
数据可视化是数据科学工作的一项主要任务,在分析早期阶段,通常会进行探索性数据分析(EDA)以获取对数据的理解和洞察,尤其对于大型高维的数据集,数据可视化有助于使数据分布及关系更清晰易懂;在项目结束时,以清晰、简洁和引人注目的方式展示最终结果使人更容易理解。
本实验采用 Python 的 Matplotlib、Seaborn 等库实现一些快速而简单的可视化功能,Matplotlib 是个比较流行的 Python 库,可以方便实现数据的可视化,它与 Numpy、pandas 及其提供的数据结构紧密集成。Seaborn 是基于
matplotlib 的 Python 可视化库。提供了多种对 matplotlib 绘制的图形的美化
功能。
在可视化过程中,要了解各种可视化技术的特点及接口,根据实际数据集及任务需求来正确选择相应可视化手段,并且正确设置接口数据和参数。
具体要求
从本地读取 iris
数据集,将列名命名为:'sepal length', 'sepal width ', 'petal length','petal width', 'species'
import pandas as pd
iris_data = pd.read_csv("iris.csv", header=None, names=['sepal length', 'sepal width',
'petal length', 'petal width', 'species'])
# 利用header=None告诉pandas,将要读取的数据中不包含列名。在读取的时候,names同时指定列名
iris = pd.DataFrame(iris_data)
print(iris)
a) 查看数据行列情况,判断是否有空行,如果有则删除;
b) 查看空值情况
import pandas as pd
iris_data=pd.read_csv("iris.csv",header=None,names=['sepal length','sepal width',
'petal length','petal width','species'])
iris=pd.DataFrame(iris_data)
print("数据集的行数为:",iris.shape[0])
print("数据集的列数为:",iris.shape[1])
#查询空行数
print("存在空行数目:",iris.isnull().T.any().sum())
#删除空行数目
iris.dropna(axis=0,how="all",inplace=True)
# dropna()方法,能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。
# 函数形式:dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。
# how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。
# thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。
# subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。
# 由subset限制的子区域,是判断是否删除该行/列的条件判断区域。
# inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
print("删除空行后存在空行数目:",iris.isnull().T.any().sum ())
print("每列空值的数目:\n",iris.isnull().sum())
(注意:以下图中请标记:title、legend
以及各坐标标签。)
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
iris_data = pd.read_csv("iris.csv", header=None, names=['sepal length', 'sepal width',
'petal length', 'petal width', 'species'])
iris = pd.DataFrame(iris_data)
plt.suptitle("鸢尾花各维分布直方图")
# suptitle为图像添加一个居中标题。
# 画花萼长度的分布直方图
plt.subplot(221)#第一行的左图
#第一个参数代表子图的行数;第二个参数代表该行图像的列数; 第三个参数代表每行的第几个图像。
plt.hist(iris_data['sepal length'], bins=20, edgecolor='black', alpha=0.7)
#指定要绘制箱线图的数据,bins箱子的边界,# bins是指直方图的总个数, alpha设置直方图的透明度
# 显示横轴标签
plt.xlabel("取值")
# 显示纵轴标签
plt.ylabel("计数")
# 显示图标题
plt.title("花萼长度的分布直方图")
# 画花萼宽度的分布直方图
plt.subplot(222) #第一行的右图
plt.hist(iris_data['sepal width'], bins=20, edgecolor='black', alpha=0.7)
# 显示横轴标签
plt.xlabel("取值")
# 显示纵轴标签
plt.ylabel("计数")
# 显示图标题
plt.title("花萼宽度的分布直方图")
# 画花瓣长度的分布直方图
plt.subplot(223)
plt.hist(iris_data['petal length'], bins=20, edgecolor='black', alpha=0.7)
# 显示横轴标签
plt.xlabel("取值")
# 显示纵轴标签
plt.ylabel("计数")
# 显示图标题
plt.title("花瓣长度的分布直方图")
# 画花瓣宽度的分布直方图
plt.subplot(224)
plt.hist(iris_data['petal width'], bins=20, edgecolor='black', alpha=0.7)
# 显示横轴标签
plt.xlabel("取值")
# 显示纵轴标签
plt.ylabel("计数")
# 显示图标题
plt.title("花瓣宽度的分布直方图")
# subplots_adjust调整子图上下之间的间距
plt.subplots_adjust(hspace=0.5)# hspace分别表示子图之间上下的间距
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
import seaborn as sns
mpl.rcParams['font.sans-serif']=['SimHei']
iris_data = pd.read_csv("iris.csv", header=None, names=['sepal length', 'sepal width',
'petal length', 'petal width', 'species'])
iris = pd.DataFrame(iris_data)
plt.suptitle("三类鸢尾花的petal_length属性值的分布情况")
sns.boxplot(x="species",y="petal length",data=iris)
# boxplot是一种用作显示一组数据分散情况资料的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。
plt.title("箱型图")
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
mpl.rcParams['font.sans-serif']=['SimHei']
iris_data = pd.read_csv("iris.csv", header=None, names=['sepal length', 'sepal width',
'petal length', 'petal width', 'species'])
iris = pd.DataFrame(iris_data)
#生隔相等的10个实数
# np.linspace主要用来创建等差数列,10为样本数据开始点,num:生成的样本数据量
q=np.linspace(10,100,num=10)#linspace创建数值序列工具,间隔起始点、终止端、分隔值总数
# print(q)
#取出species值为1的sepal length值
sepal_length1=np.array(iris[iris['species']==1]['petal width'])
#np.percentile(sepal_length,q)取sepal_length的q百分位的值
plt.plot(q,np.percentile(sepal_length1,q),color='blue',linewidth=2.0)
#取出species值为2的sepal length值
sepal_length2=np.array(iris[iris['species']==2]['petal width'])
plt.plot(q,np.percentile(sepal_length2,q),color='red',linewidth=2.0)
#取出species值为3的sepal length值
sepal_length3=np.array(iris[iris['species']==3]['petal width'])
plt.plot(q,np.percentile(sepal_length3,q),color='green',linewidth=2.0)
plt.title("三种鸢尾花的petal_width属性的10个百分位折线图")
plt.legend([sepal_length1,sepal_length2,sepal_length3],labels=['山鸢尾花','杂色鸢尾花','佛及利亚鸢尾花'])
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
iris_data = pd.read_csv("iris.csv", header=None, names=['sepal length', 'sepal width',
'petal length', 'petal width', 'species'])
iris = pd.DataFrame(iris_data)
plt.scatter(iris[iris['species']==1]['sepal length'],iris[iris['species']==1]['sepal width'])
#前两个参数为横坐标和纵坐标
plt.scatter(iris[iris['species']==2]['sepal length'],iris[iris['species']==2]['sepal width'])
plt.scatter(iris[iris['species']==3]['sepal length'],iris[iris['species']==3]['sepal width'])
plt.title('花萼长与宽的散点图', fontsize=24)
plt.xlabel('sepal length', fontsize=14)
plt.ylabel('sepal width', fontsize=14)
plt.show()
待补充···