Python自学02

Python可视化

前言

如果想要用 Python 进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便对数据有一定的了解。其中最直观的就是采用数据可视化技术,这样,数据不仅一目了然,而且更容易被解读。

四类可视化视图

比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;
联系:查看两个或两个以上变量之间的关系,比如散点图;
构成:每个部分占整体的百分比,或者是随着时间的百分比变 化,比如饼图;
分布:关注单个变量,或者多个变量的分布情况,比如直方图。

常用的8个Python数据可视化库

1.Matplotlib 第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。

2.Seaborn 利用Matplotlib,用简洁的代码来制作好看的图表,与Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感。

3.ggplot 基于R的一个作图库的ggplot2,同时利用了源于《图像语法》中的概念,允许叠加不同的图层来完成一幅图,并不适用于制作非常个性化的图像,为操作的简洁度而牺牲了图像的复杂度。

4.Bokeh 与ggplot很相似,但与ggplot不同之处为它完全基于Python而不是从R处引用。长处在于能用于制作可交互、可直接用于网络的图表。图表可以输出为JSON对象、HTML文档或者可交互的网络应用。

5.Plotly 可以通过Python notebook使用,与bokeh一样致力于交互图表的制作,但提供在别的库中几乎没有的几种图表类型,如等值线图、树形图和三维图表。

6.pygal 与Bokeh和Plotly一样,提供可直接嵌入网络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成方法,且默认的风格也很漂亮,用几行代码就可以很容易地制作出漂亮的图表。

7.geoplotlib 用于制作地图和地理相关数据的工具箱。可用来制作多种地图,比如等值区域图、热度图、点密度图等,必须安装Pyglet方可使用。

8.missingno 用图像的方式快速评估数据缺失的情况,可根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图对数据进行修正。

1、matplotlib

Matplotlib是用于数据可视化的最流行的Python包之一
它是一个跨平台库,用于根据数组中的数据制作2D图
它提供了一个面向对象的API,有助于使用Python GUI工具包(如PyQt,WxPythonotTkinter)在应用程序中嵌入绘图

a. 什么是API

(百度百科)APIApplication Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

操作系统是用户与计算机硬件系统之间的接口,用户通过操作系统的帮助,可以快速、有效和安全、可靠地操纵计算机系统中的各类资源,以处理自己的程序。
为使用户能方便地使用操作系统,OS 又向用户提供了如下两类接口:

(1) 用户接口:操作系统专门为用户提供了“用户与操作系统的接口” ,通常称为用户接口。该接口支持用户与 OS 之间进行交互,即由用户向 OS 请求提供特定的服务,而系统则把服务的结果返回给用户。

(2) 程序接口:操作系统向编程人员提供了“程序与操作系统的接口” ,简称程序接口,又称应用程序接口 API(Application Programming Interface)。 该接口是为程序员在编程时使用的,系统和应用程序通过这个接口,可在执行中访问系统中的资源和取得 OS 的服务,它也是程序能取得操作系统服务的唯一途径。大多数操作系统的程序接口是由一组系统调用(system call)组成,每一个系统调用都是一个能完成特定功能的子程序。

应用程序接口又称为应用编程接口,是一组定义、程序及协议的集合,通过 API接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。API同时也是一种中间件,为各种不同平台提供数据共享。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的可维护性和可扩展性。

API和GUI

API 接口属于一种操作系统或程序接口GUI接口属于一种图形操作系统。两者都属于直接用户接口。有时公司会将 API 作为其公共开放系统。也就是说,公司制定自己的系统接口标准,当需要执行系统整合、自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码,该接口标准被称之为开放式API。

以打开文件为例理解API

以C语言为例,我们使用fopen()函数可以打开一个文件,感觉非常简单。文件保存在硬盘上,要经过复杂的处理才能显示,这些细节对我们来说是透明的,由操作系统完成。也就是说,我们调用fopen()函数来通知操作系统,让操作系统打开一个文件。
那么,我们如何告诉操作系统打开文件呢?

看似简单的操作到底层都非常复杂,打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来。这个过程如果要让程序员来完成,那简直是噩梦!

怎么办呢?操作系统想了一个很好的办法,它预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档,程序员只需要简单地调用这些函数就可以完成复杂的工作,让编程变得简单有趣。这些封装好的函数,就叫做API(Application Programming Interface),即应用程序编程接口。

说得更加通俗易懂一些,别人写好的代码,或者编译好的程序,提供给你使用,就叫做API。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。

b.pyplot的API

matplotlib.pyplot是命令样式函数的集合,使Matplotlib像MATLAB一样工作。每个Pyplot功能都会对图形进行一些更改。

绘制(图表)类型
函数描述
Bar绘制条形图(柱状图)
Barh绘制水平条形图
Boxplot绘制一个箱形图
Hist绘制直方图
hist2d绘制2D直方图
Pie绘制饼图
Plot绘制轴的线和/或标记
Polar绘制一个极坐标图
Scatter绘制x与y的散点图
Stackplot绘制堆积区域图
Sterm绘制杆图
Step绘制步骤图
Quiver绘制二维箭头字段
图像函数
函数描述
Imread将文件中的图像读入数组
Imsave像在图像文件中一样保存数组
Imshow在轴上显示图像
轴函数
函数描述
Axes添加轴到图形
Text向轴添加文本
Title设置当前轴的标题
Xlabel设置当前轴的x轴标签
Xlim获取或设置当前轴的x限制
Xscale设置x轴的缩放比例
Xticks获取或设置当前刻度位置和标签的x限制
Ylabel设置当前轴的y轴标签
Ylim获取或设置当前轴的y限制
Yscale设置y轴的缩放比例
Yticks获取或设置当前刻度位置和标签的y限制
图形函数
函数描述
Figtext将文字添加到图形
Figure创建一个新的图形
Show显示一个图形
Savefig保存当前图形
Close关闭一个图窗口

c.pylab模块

Matplotlib是整个包,matplotlib.pyplot是Matplotlib中的一个模块,它和PyLab是一个与Matplotlib一起安装的模块。PyLab是Matplotlib面向对象绘图的过程接口,是一个非常方便的模块,可以在单个名称空间中批量导入matplotlib.pyplot(用于绘图)和NumPy(用于数学和使用数组)。

d.用matplotlib.pyplot画图

散点图
scatter(x,y)
scatter(x,y,sz)
scatter(x,y,sz,c)
scatter(___,'filled')
scatter(___,mkr)
scatter(___,Name,Value)
scatter(ax,___)
s = scatter(___)

函数说明
① scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形的散点图。该类型的图形也称为气泡图。
② scatter(x,y,sz) 指定圆大小。要绘制大小相等的圆圈,请将 sz 指定为标量。要绘制大小不等的圆,请将 sz 指定为长度等于 x 和 y 的长度的向量。
③ scatter(x,y,sz,c) 指定圆颜色。要以相同的颜色绘制所有圆圈,请将 c 指定为颜色名称或 RGB 三元组。要使用不同的颜色,请将 c 指定为向量或由 RGB 三元组组成的三列矩阵。
④ scatter(,‘filled’) 填充圆形。可以将 ‘filled’ 选项与前面语法中的任何输入参数组合一起使用。
⑤ scatter(,mkr) 指定标记类型。
scatter(,Name,Value) 使用一个或多个名称-值对组参数修改散点图。例如,‘LineWidth’,2 将标记轮廓宽度设置为 2 磅。
⑥ scatter(ax,) 将在 ax 指定的坐标区中,而不是在当前坐标区中绘制图形。选项 ax 可以位于前面的语法中的任何输入参数组合之前。
⑦ s = scatter(___) 返回 Scatter 对象。在创建散点图后,以后可使用 s 对其进行修改。

import matplotlib.pyplot as plt
import numpy as np
# 数据准备
N = 1000
x = np.random.randn(N)
y = np.random.randn(N)
# 用Matplotlib画散点图
plt.scatter(x,y)
plt.show()

Figure_1

折线图

plt.plot(x,y,format_string,**Kwargs)
x:x轴数据,列表或数组
y:y轴数据,列表或数组
format_string:控制曲线的格式字符串

**kwargs:第二组或更多(x,y,format_string) 可以绘制多条折线并存的图形(若不写,则绘制的图形中,只有一条折线)
其他样式设置,一率放在所有参数设置的最后面,例如linewidth设置线条的粗细大小等。
以下这些都属于其他参数设置,均归属于 **kwargs(关键字多变量传参)放在所有参数的后面(参数列表的最后面)
【 color:控制颜色,color=’green’
linestyle:线条风格,linestyle=’dashed’
marker:标记风格,marker = ‘o’
markerfacecolor:标记颜色,markerfacecolor = ‘blue’
markersize:标记尺寸,markersize = ‘20’
linewidth:线条宽度 ,linewidth=4

import matplotlib.pyplot as plt
import numpy as np
# 数据准备
N = 1000
x = (0,1,2,3,4,5,6,7,8,9,10)
y = (2,5,3,1,4,8,9,11,7,9,3)
# 用Matplotlib画折线图
plt.plot(x,y)
plt.show()

请添加图片描述

import matplotlib.pyplot as plt
import numpy as np
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
i=[1,35,56,78,96]
#绘制图形
# 参数linewidth设置plot()绘制的线条的粗细
plt.plot(input_values, squares,input_values,i, linewidth=5)
#语法:plot(x轴坐标,y轴坐标,其他参数设置)
# 设置图表标题,设置字体大小
#函数title()给图表指定标题,参数fontsize指定了图表中文字的大小。
plt.title("Square Numbers", fontsize=24)
#给x轴添加标签,设置字体大小
plt.xlabel("Value", fontsize=14)
# 给y轴添加标签,设置字体大小
plt.ylabel("Square of Value", fontsize=14)
# 设置每个坐标轴的取值范围
plt.axis([0, 6, 0, 100])   #[x.x,x.y,y.x,y.y]
# tick_params()设置刻度标记的大小,设置刻度的样式
plt.tick_params(axis='both', labelsize=14)
# 打开matplotlib查看器,并显示绘制的图形
plt.show()

请添加图片描述

直方图

函数功能:判定数据(或特征)的分布情况

调用方法:plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False)

参数说明:
x:指定要绘制直方图的数据;
bins:指定直方图条形的个数;
range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
density:是否将直方图的频数转换成频率;
weights:该参数可为每一个数据点设置权重;
cumulative:是否需要计算累计频数或频率;
bottom:可以为直方图的每个条形添加基准线,默认为0;
histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
orientation:设置直方图的摆放方向,默认为垂直方向;
rwidth:设置直方图条形宽度的百分比;
log:是否需要对绘图数据进行log变换;
color:设置直方图的填充色;
label:设置直方图的标签,可通过legend展示其图例;
stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;

##绘制频数直方图
import numpy as np
import matplotlib.pyplot as plt
import os 
#导入os库
x_norm1=np.random.randn(1000)
plt.rcParams['axes.unicode_minus']=False
#显示负号
plt.figure(figsize=(6,4))
#设置画布
plt.hist(x_norm1,bins=10)
plt.show()

请添加图片描述

##绘制多个频数直方图
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(1000,2)
 
plt.hist(x = data,            # 绘图数据
        bins = 20,            # 指定直方图的条形数为20个
        edgecolor = 'w',      # 指定直方图的边框色
        color = ['c','r'],    # 指定直方图的填充色
        label = ['1','2'],     # 为直方图呈现图例
        density = False,      # 是否将纵轴设置为密度,即频率
        alpha = 0.6,          # 透明度
        rwidth = 1,           # 直方图宽度百分比:0-1
        stacked = False)      # 当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放
 
ax = plt.gca()                # 获取当前子图
ax.spines['right'].set_color('none')  # 右边框设置无色
ax.spines['top'].set_color('none')    # 上边框设置无色
# 显示图例
plt.legend()
# 显示图形
plt.show()

请添加图片描述

条形图

如果说通过直方图可以看到变量的数值分布,那么条形图可以帮我们查看类别的特征
在条形图中,长条形的长度表示类别的频数,宽度表示类别。在 Matplotlib 中,我们使用 plt.bar(x, height) 函数,其中参数 x 代表 x 轴的位置序列,height 是 y 轴的数值序列,也就是柱子的高度。在 Seaborn 中,我们使用 sns.barplot(x=None, y=None, data=None) 函数。其中参数 data 为 DataFrame 类型,x、y 是 data 中的变量。

plt.bar():正常柱状图,常见的统计图;
plt.barh():横向的柱状图,可以理解为正常柱状图旋转了90°

常用参数解释:
plt.bar()
x:表示x坐标,数据类型为int或float类型,刻度自适应调整;也可传dataframe的object,x轴上等间距排列;
height:表示柱状图的高度,也就是y坐标值,数据类型为int或float类型;
width:表示柱状图的宽度,取值在0~1之间,默认为0.8;
bottom:柱状图的起始位置,也就是y轴的起始坐标;
align:柱状图的中心位置,默认"center"居中,可设置为"lege"边缘;
color:柱状图颜色;
edgecolor:边框颜色;
linewidth:边框宽度;
tick_label:下标标签;
log:柱状图y周使用科学计算方法,bool类型;
orientation:柱状图是竖直还是水平,竖直:“vertical”,水平条:“horizontal”;

plt.barh()
y:表示y坐标,数据类型为int或float类型,刻度自适应调整;也可传dataframe的object,y轴上等间距排列;
height:表示柱状图的长度,也就是x坐标值,数据类型为int或float类型;
width:表示柱状图的高度,取值在0~1之间,默认为0.8;
其他参数与plt.bar()类似。

箱线图
饼图

label:设置各部分标签
explode:设置某一块离开中心距离
autopct:设置圆里面的文本
shadow:设置是否有阴影
labeldistance: 设置标签文本距圆心位置,数字表示多少倍半径
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离

import numpy as np
import matplotlib.pyplot as plt
# 数据准备
nums = [25, 37, 33, 37, 6]
labels = ['High-school','Bachelor','Master','Ph.d', 'Others']
# 用Matplotlib画饼图
plt.pie(x = nums, labels=labels)
plt.show()

请添加图片描述

热力图
蜘蛛图

蜘蛛图是一种显示一对多关系的方法。
在蜘蛛图中,一个变量相对于另一个变量的显著性是清晰可见的。这里需要使用 Matplotlib 来进行画图,首先设置两个数组:labels 和 stats。他们分别保存了这些属性的名称和属性值。因为蜘蛛图是一个圆形,你需要计算每个坐标的角度,然后对这些数值进行设置。当画完最后一个点后,需要与第一个点进行连线。因为需要计算角度,所以我们要准备 angles 数组;又因为需要设定统计结果的数值,所以我们要设定 stats 数组。并且需要在原有 angles 和 stats 数组上增加一位,也就是添加数组的第一个元素。

figure语法说明:
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 (1英寸等于2.5cm,A4纸是 21*30cm的纸张)
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties  
# 数据准备
labels=np.array([u"A","B",u"C",u"D",u"E",u"F"])
stats=[83, 61, 95, 67, 76, 88]
# 画图数据准备,角度、状态值
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 用Matplotlib画蜘蛛图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)   
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
# 设置中文字体
# font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)  
# ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font)
ax.set_thetagrids(angles * 180/np.pi, labels)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值