当前位置: 首页 > news >正文

【Python语言速回顾】——数据可视化基础

目录

引入

一、Matplotlib模块(常用)

1、绘图流程&常用图

​编辑

2、绘制子图&添加标注

​编辑

3、面向对象画图

4、Pylab模块应用

二、Seaborn模块(常用)

1、常用图

2、代码示例

​编辑

​编辑

​编辑

​编辑

三、Artist模块

四、Pandas绘图

1、数据框(dataframe)&系列(series)

2、pandas常用绘图函数


引入

Python中数据可视化有多种实现方式,下面以实战项目需求为导向介绍几种比较流行的数据可视化模块:Pyplot模块、Seaborn模块、Artist模块、Pandas模块。(个人经常用到pyplot和seaborn)

一、Matplotlib模块(常用)

Matplotlib提供了一整套和Matlab类似的命令API,适合交互式制图。可方便地作为绘图控件,嵌入GUI应用程序。文档完备https://matplotlib.org/3.1.1/gallery/index.html各种图打开都有源程序。

1、绘图流程&常用图

①分别导入Matplotlib.pyplot和numpy
②定义横轴标度并以横轴标度为自变量,定义纵轴功能函数
③figure()函数指定图像长宽比
④plot()函数绘制功能函数
⑤plt的属性函数设置图像属性
⑥show()函数显示图像

格式:

plt.plot(x,y,其他参数)

其他参数label、color、linewidth、b--(同时指定颜色和线型,点(.)实线(-)虚点线(-.)点线(:)虚线(--)无线条(‘"‘))

常用图类型:

折线图plt.plot演示:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label = "$sin(x)$",color = "red",linewidth = 2)  #绘图并指定了线的标签,颜色,粗细
plt.plot(x,z,label = "$cos(x^2)$",color = "blue",linewidth = 1)
plt.xlabel("Times")
plt.ylabel("Volt")
plt.title("PyplotTest")
plt.ylim(-1.2,1.2)  #y轴显示范围
plt.legend() #显示图中左下角的提示信息,即提示标签(哪个线是哪个函数)

2、绘制子图&添加标注


Matplotlib中用轴表示一个绘图区域,一个绘图对象(figure)可包含多个轴(axis),可理解为子图。可用subplot函数快速绘制有多个轴的图表(子图):

subplot(numRows,numCols,plotNum)

将绘图区域分为numRows x numCols个子区域,从左到右从上到下依次编号,从编号1开始。三个参数都小于10时可省略之间逗号

标注即为图的注释:
①text()函数可将文本放置在轴域的任意位置,用来标注绘图的某些特征
②annotate()方法提供辅助函数进行定位,使标注变得准确方便
文本位置及标注点位置均由元组(x,y)描述,参数x,y表示标注点位置,参数xytext表示文本位置

③...

#子图绘制演示(接着上面示例的构建的函数)
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(211) #创建Axes对象
plt.subplot(2,1,1)  #两行一列个子区域,编号1位置
plt.plot(x,y,label = "$sin(x)$",color = "red",linewidth = 2)
plt.ylabel("y-Volt")
plt.legend()
plt.subplot(2,1,2)  #两行一列个子区域,编号2位置
plt.plot(x,z,label = "$cos(x^2)$",color = "blue",linewidth = 1)
plt.ylabel("z-Volt")
plt.xlabel("Times")
ax.annotate("sin(x)",xy=(2,1),xytext=(3,1.5),arrowprops = dict(facecolor='black',shrink = 0.05))  #添加文字和黑色箭头(Artist模块的简单类型Artist)
ax.set_ylim(-2,2)
plt.show()

3、面向对象画图

4、Pylab模块应用


也是matplotlib里面的一个模块,提供可绘制二维、三维数据的工具模块,包含numpy和pyplot模块中的常见函数,方便快速计算和绘图。

二、Seaborn模块(常用)

它基于matplotlib,但提供了更高级的统计图形方法!

1、常用图

2、代码示例

下面选取逻辑回归算法(一种分类算法,titannic数据集)中特征工程(数据预处理)中的一段代码演示:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessingtitanic_data = pd.read_csv("titanic_data.csv")   #泰坦尼克号幸存或遇难者信息
titanic_data = titanic_data[['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Embarked', 'Fare']] #选取需要的8列
#1.特征工程
titanic_data['Age'].fillna((titanic_data['Age'].mean()), inplace=True) #Age有177个空值,这里用平均值替代
titanic_data.dropna(inplace=True)  #Embarked只有2个空值,可放弃这两个值
titanic_data_X = titanic_data[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Embarked', 'Fare']]
titanic_data_Y = titanic_data[['Survived']]  #分离自变量X和因变量Y(最后的分类结果为2个1或0,是否存活)
X_train, X_test, Y_train, Y_test = train_test_split(titanic_data_X, titanic_data_Y,test_size=0.20)  #将数据分成训练集和测试集
seaborn.countplot(x='Pclass', data = X_train)  #检查Pclass(舱位等级)柱状图
plt.show()

seaborn.displot(X_train['Age'])                #检查Age分布图(柱状图+核密度估计)
plt.show()

seaborn.displot(X_train['Fare'])               #检查Fare(票价)分布图(柱状图+核密度估计)
plt.show()

age_scaler = StandardScaler()                  #创建Z-Score标准化对象,对Age进行分类特征标准化
age_scaler.fit(pd.DataFrame(X_train['Age']))
X_train.loc[:, 'Age'] = age_scaler.transform(X_train[['Age']])   #双[]fare_scaler = StandardScaler()                  #创建Z-Score标准化对象,对Fare(票价)进行分类特征标准化
fare_scaler.fit(pd.DataFrame(X_train['Fare']))
X_train.loc[:, 'Fare'] = fare_scaler.transform(X_train[['Fare']])  #双[]X_train.loc[:, 'Sex'] = X_train['Sex'].map({'female': 0, 'male': 1}) #将Sex映射为0,1embarked_encoder = preprocessing.LabelEncoder() #创建编码对象,对Embarked(登船口3个)编码
embarked_encoder.fit(pd.DataFrame(X_train['Embarked']))
X_train.loc[:, 'Embarked'] = embarked_encoder.transform(X_train[['Embarked']])#截至此,将所有数据的格式转换完成,用heatmap检查下特征之间的关联性
seaborn.heatmap(X_train.corr())
plt.show()

三、Artist模块


Matplotlib绘图库的API包含3个图层——画板、渲染、artist.Artist(如何渲染)。相比Pyplot和Pylab两个API,Artist用于处理所有的高级结构,如处理图表、文字、曲线等的绘制和布局,不需要关注底层的绘制细节。
Artist分简单类型、容器类型两种。简单类型的Artist为标准的绘图元件,如Line2D、Rectangle、Text、AxesTmage等;容器类型可以包含许多简单类型的Artist组成一个整体,如Axis、Axes、Figure等。

步骤:

①创建Figure对象
②用Figure对象创建一个或多个Axes或者Subplot对象
③调用Axes等对象的方法创建各种简单类型的Artist

Matplotlib所绘制的图表中的每一个元素都由Artist控制,而每一个Artist对象包含很多属性来控制显示效果,常见属性:

alpha透明值,0完全透明,1完全不透明
animate布尔值,绘制动画效果是使用
axes此Artist对象所在的Axes对象,可能为None
figure此Artist对象所在的Figure对象,可能为None
label文本标签
picker控制Artist对象选取
zorder控制绘图顺序

所有属性都可通过相应的get_*和set_*函数读写,如将alpha设置为当前值的一半:

fig.set_alpha(0.5*fig.get_alpha())

若一句代码设置多个属性:

fig.set(alpha = 0.5,zorder = 2,label = '$sin(x)$')

四、Pandas绘图

pandas是python最强大的数据分析和探索工具,包含高级的数据结构和精巧的工具。它构建在numpy之上,使得以numpy为中心的应用更便捷;支持类似于SQL的数据操作,具有丰富的数据处理函数;它的作图依赖于matplotlib,通常两者一起使用。

1、数据框(dataframe)&系列(series)

pandas带两个重要数据结构:数据框(dataframe)、系列(series)
①数据框

二维表,行列都有索引,面向行列的操作对称。创建数据框的方法很多,常用包含相等长度列表的字典或Numpy数组来创建数据库,行索引默认由0开始,列索引用户自定义(也可自定义行索引,列索引要与字典对应不然数据为空)

import pandas as pd
data = {'name':['小明','小红','小刚','小强','大壮'],'age':[15,16,14,18,20],'score':[88,99,65,95,67]}
dataframe1 = pd.DataFrame(data)
dataframe2 = pd.DataFrame(data,columns=['name','age','score'],index=['one','two','three','four','five'])
print(dataframe1)
print(dataframe2)
运行结果:name  age  score
0   小明   15     88
1   小红   16     99
2   小刚   14     65
3   小强   18     95
4   大壮   20     67name  age  score
one     小明   15     88
two     小红   16     99
three   小刚   14     65
four    小强   18     95
five    大壮   20     67

②系列

对具有同一属性的值的统称,可理解为一维数组(退化了的数据框)

print(dataframe2['name'])
运行结果:
one      小明
two      小红
three    小刚
four     小强
five     大壮
Name: name, dtype: object

2、pandas常用绘图函数

plot():绘制线性二维图(matplotlib/pandas库都有)
pie():绘制饼形图(matplotlib/pandas、库都有)
hist():绘制二维条形直方图(matplotlib/pandas库都有)
boxplot():绘制样本数据箱体图(pandas库)
plot(logy = True):绘制y轴的对数图(pandas库)
plot(yerr = error):绘制误差条形图(pandas库)

http://www.lryc.cn/news/214981.html

相关文章:

  • java实现pdf文件添加水印,下载到浏览器
  • 代码随想录算法训练营第四十一天丨 动态规划part04
  • PyCharm免费安装和新手使用教程
  • 使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
  • 开源软件:释放创新的力量,改变数字世界的游戏规则
  • 【QT】鼠标常用事件
  • LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)
  • java连接本地数据库可以简写为///
  • 基于springboot漫画动漫网站
  • autoFac 生命周期 试验
  • foreach、for in 和for of的区别?
  • 【Effective C++】条款45: 运用成员函数模板接受所有兼容的类型
  • WSL1 安装 debian xfce 用xrdp 导入远程桌面
  • WPF RelativeSource属性-目标对象类型易错
  • Java while 和do while 循环
  • 应用软件安全编程--03净化传递给 Runtime.exec() 方法的非受信数据
  • uniapp阻止冒泡的方法,点击事件嵌套点击事件,怎么阻止同时触发
  • 【云原生基础】了解云原生,什么是云原生?
  • Android.bp探究
  • 【LeetCode】415 字符串相加
  • 【RP-RV1126】配置一套简单的板级配置
  • 解决uniapp的video标签和transition属性使用时出现错位的问题
  • 电脑校园杂志电脑校园杂志社电脑校园编辑部2023年第9期目录
  • NSSCTF做题第十页(1)
  • 文件详细操作过程(C语言)
  • python使用ffmpeg来制作音频格式转换工具(优化版)
  • Debug技巧-不启用前端访问后端
  • 由CAB/PAB展开的一些思考
  • 系列十五、idea全局配置
  • 高德Go生态建设与研发实践