Python | 可视化

可视化

Python中进行数据可视化需要用到第三方包,常用的有MATPLOTILB、Seaborn、Pandas、Bokeh、Plotly、Vispy、Vega、gega-lite

Matplotlib可视化

Matplotlib包含两个模块:
绘图API:pyplot
集成库:pylab,是Matplotlib和Scipy、Numpy的集成库
这里我们用的是前者
有两种绘图方式:

  1. inline静态绘图,嵌入到Jupyter Notebook中显示
  2. notebook交互式绘图,只显示一行输出代码
绘图
  • 在二维坐标系上绘图:plt.plot()
    显示图需要用plt.show()函数,否则只能看到代码
    添加%matplotlib inline也可以显示

一个图显示多个函数有两种方法:

  1. 可以写入多个参数,格式为plot(x,y1,x,y2,x,y3)
  2. 多次plot( ) 创建函数

后者的好处在于,一个plot()只能有一个标签,想要有多个标签就需要采用第二种方法
plot()的第三个参数可以设置线段的的类型颜色形状等
改变坐标轴取值范围:plt.xlim()或plt.xlim()
也可以同时定义:plt.axis(xstart,xstop,ystart,ystop)或者是plt.axis(equal)后者意味XY坐标刻度单位相同
取值范围大而函数可能没有那么长时,就会有空白,可以通过plt.axis("tight")来消除空白

import matplotlib.pyplot as plt
t = np.arange(0.,4.,0.1)
plt.plot(t,t,t,t + 2,"g--",t,t ** 2,"rD",label = "t函数")
#“g——”设置线的颜色和形状虚线,“rD”颜色加形状
#label、写在最后,只能设置一个label
plt.rcParams['font.family'] = "SimHei"   #显示汉字前要设置字体
plt.title("标题")   #标题和xy轴的设置必须在plot()后,show()前
plt.xlabel("x")
plt.ylabel("y")

plt.legend(loc = "upper left")   #loc是位置
plt.show()

2

  • 绘制散点图:plt.scatter()
    参数:xy坐标,c颜色,s点的大小,cmap是对c的补充色带
    还有sklearn,darasets.samples_gen erator模块提供的函数make_blobs()
    符合正态分布的随机数据集
    参数:n_samples:样本数量,既行数
    n_features:特征数量,既列数
    centers:类别数
    random_state:随机数的生成方式
    cluster_std:每个类别的方差
    返回值:X:测试集,数组[行,列]
    y:label,数组[行]
  • 多图显示
    plot()前面加subplot(行,列,画图位置既第几个子窗口)
  • 保存plt.savefig(filename)

Pandas绘图

Pandas继承和优化了Matplotlib,使数据框的可视化更容易
数据框名.plot()
参数kind决定数据框类型:

bar    纵向柱状图
barh   横向柱状图
kde    核密度估计曲线

Seaborn可视化

  • 绘制核密度估计图
  • 绘制dispot图
  • 绘制散点图矩阵
  • 绘制联合分布图
  • 绘制直方图
  • 绘制箱线图

实例

  1. 请用matplotlib画出 y=sin(x2)*cos(x2) 的图表,x轴的取值范围在[-10,10]之间,并加上图名以及x/y轴的名称。
    答案:
import numpy as np
import matplotlib.pyplot as plt 
x = np.linspace(-10, 10)
y = np.power(np.sin(x), 2) *np.power(np.cos(x), 2)
plt.plot(x, y)
plt.title("y=sin(x^2)*cos(x^2)")
plt.xlabel("x")
plt.ylabel("y")
plt.xlim(-10,10)
plt.show()
  1. 假设y1=[23,8,11,30,55,33,27,15,21,19,25,38,29,15,17],y2=[18,8,3,26,40,49,50,33,27,25,29,41,45,32,26],请在一个图中画出这两条折线,其中x轴表示值的个数,y轴表示y1/y2值。
    答案:
import matplotlib.pyplot as plt 
x1=range(0,15) 
x2=range(0,15) 
y1=[23,8,11,30,55,33,27,15,21,19,25,38,29,15,17] 
y2=[18,8,3,26,40,49,50,33,27,25,29,41,45,32,26]
plt.plot(x1,y1,label='Frist line',linewidth=1,color='g',marker='o',markerfacecolor='blue',markersize=3) 
plt.plot(x2,y2,label='second line',linewidth=1,color='r',marker='d',markerfacecolor='yellow',markersize=3) 
plt.xlabel('Plot Number') 
plt.ylabel('Value') 
plt.title('The line chart') 
plt.legend(loc='upper right') 
plt.show()
  1. 请使用pandas的画图函数,画出如下所示数据的柱状图,使x轴代表income,y轴代表expense。
    数据来源URL:http://data.stats.gov.cn/easyquery.htm?cn=E0103
    地区 income expense
    北京市 57229.83 37425.34
    天津市 37022.33 27841.38
    河北省 21484.13 15436.99
    山西省 20420.01 13664.44
    内蒙古自治区 26212.23 18945.54
    辽宁省 27835.44 20463.36
    吉林省 21368.32 15631.86
    黑龙江省 21205.79 15577.48
    上海市 58987.96 39791.85
    江苏省 35024.09 23468.63
    浙江省 42045.69 27079.06
    安徽省 21863.3 15751.74
    福建省 30047.75 21249.35
    江西省 22031.45 14459.02
    山东省 26929.94 17280.69
    河南省 20170.03 13729.61
    湖北省 23757.17 16937.59
    湖南省 23102.71 17160.4
    广东省 33003.29 24819.63
    广西壮族自治区 19904.76 13423.66
    海南省 22553.24 15402.73
    重庆市 24152.99 17898.05
    四川省 20579.82 16179.94
    贵州省 16703.65 12969.62
    云南省 18348.34 12658.12
    西藏自治区 15457.3 10320.12
    陕西省 20635.21 14899.67
    甘肃省 16011 13120.11
    青海省 19001.02 15503.13
    宁夏回族自治区 20561.66 15350.29
    新疆维吾尔自治区 19975.1 15087.3
    答案:
mport matplotlib.pyplot as plt
import pandas as pd
data=pd.read_csv('data.csv',index_col=0,encoding='gbk')
data.plot(kind="bar",x="income",y="expense",color="blue")
plt.xlabel("income")
plt.ylabel("expense")
plt.legend(" ")
plt.show()
  1. 利用seaborn的内置数据tips(餐厅小费情况),进行如下分析:
    小费和总消费之间的关系(绘出散点图和回归方程);
    午饭和晚饭,哪一顿顾客更愿意给小费(绘出箱线图);
    男性顾客和女性顾客谁更愿意给小费(绘出小提琴图)。
    提示:可利用“sns.load_dataset()”载入内置数据
    答案:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
tips = sns.load_dataset('tips')
sns.regplot(x='total_bill', y='tip', data=tips)
sns.boxplot(y='tip',x='time',data=tips)
sns.violinplot(x='sex',y='tip',data=tips)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值