数据可视化库Seabron(2)

单变量分析绘图

直方图

import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy import stats,integrate
import pandas as pd
%matplotlib inline

sns.set(color_codes=True)
np.random.seed(sum(map(ord,"distribution")))

x = np.random.normal(size=100)
sns.distplot(x,bins=20,kde=True)
#bins: 设置分桶数
#kde控制是否画kde曲线

map()函数:
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。

ord()函数:

ord()函数它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值。如果所给的Unicode字符超出了你的Python定义范围,则会引发一个TypeError的异常。

np.random.seed()函数

设置相同的seed,每次生成的随机数相同。

数据分布情况 

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)   #实例化伽玛分布

根据均值和协方差生成数据 

np.random.multivariate_normal生成一个服从多元正态分布的数组
multivariate_normal(mean, cov, size=None, check_valid=None, tol=None) 
mean:均值,维度为1,必选参数;
cov:协方差矩阵,必选参数;
size: 指定生成矩阵的维度,若size=(1, 1, 2),则输出的矩阵的 shape 即形状为 1X1X2XN(N为mean的#长度);
check_valid:可取值 warn,raise以及ignore;

tol:检查协方差矩阵奇异值时的公差,float类型

mean, cov = [0, 1], [(1, .5), (.5, 1)]
#两个相关的正态分布
data = np.random.multivariate_normal(mean, cov, 200)
#依据指定的均值和协方差生成数据,生成二维数组
df = pd.DataFrame(data, columns=["x", "y"])
df.tail()
  x y
195 -0.885440 -0.275349
196 -0.678798 1.505844
197 1.601188 2.096382
198 -0.398727 1.388353
199 -0.051887 0.427285

观测两个变量之间的分布关系最好用散点图 (数据量较小)

sns.jointplot(x="x", y="y", data=df);

数据量较大的情况 

x,y = np.random.multivariate_normal(mean,cov,1000).T
with sns.axes_style('white'):   
    sns.jointplot(x=x,y=y,kind='hex',color='g')    #kind=’hex’——六角箱图

回归分析图 

np.random.seed(sum(map(ord,'regression')))
tips = sns.load_dataset('tips')   #tips为Seaborn内置数据集
#tips.head()
sns.regplot(x='total_bill',y='tip',data=tips)

sns.regplot(x='size',y='tip',data=tips)
sns.regplot(x='size',y='tip',data=tips,x_jitter=.05)   #数据横向浮动0.05

 

多变量分析绘图

 

sns.set(style='whitegrid',color_codes=True)
np.random.seed(sum(map(ord,"categorical")))
titanic = sns.load_dataset('titanic')
tips = sns.load_dataset('tips')
iris = sns.load_dataset('iris')
sns.stripplot(x='day',y='total_bill',hue='day',data=tips,jitter=True)

stripplot()按照x轴里的类别进行分类

jitter=True,使集中在一起的数据往左往右偏移

hue=' day' 用不同的颜色标识分类

sns.swarmplot(x='day',y='total_bill',hue='sex',data=tips)

 swarmplot()分簇散点图

 

盒图

IQR即统计学概念四分位距,第一四分位和第三四分位之间的距离

N = 1.5IQR 如果一个值>Q3+N,或者<Q1-N,则为离群点

 

 

 

sns.violinplot(x='total_bill',y='day',hue='time',data=tips)

violinplot()小提琴图,越大的地方说明数据出现在的频率越高

分类属性绘图

sns.violinplot(x='day',y='total_bill',hue='sex',data=tips,split=True)
#split  对数据进行分类

 

 

sns.violinplot(x='day',y='total_bill',data=tips,inner=None)
sns.swarmplot(x='day',y='total_bill',data=tips,color='w',alpha=.9)

显示值的集中趋势可以用条形图

sns.barplot(x='sex',y='survived',hue='class',data=titanic)

 

点图可以更好的描述单一变量变化趋势

sns.pointplot(x='sex',y='survived',hue='class',data=titanic)

对比不同性别活下的来概率

sns.pointplot(x='class',y='survived',hue='sex',data=titanic,
             palette={'male':'g','female':'m'},
             markers=['*','o'],linestyle=['-','--']); 

 自定义点图

多层面板分类图(最常用)

sns.factorplot(x='day',y='total_bill',hue='smoker',data=tips,kind='bar')

 

sns.factorplot(x='day',y='total_bill',hue='smoker',data=tips,col='time',kind='swarm')

 

sns.factorplot(x='time',y='total_bill',hue='smoker',data=tips,col='day',kind='box',size=4,aspect=.5)

 aspect=0.5  设置长宽比

 

 

facetgrid的使用方法

tips = sns.load_dataset('tips')
g = sns.FacetGrid(tips,col='time')  #实例化facetgrid
g.map(plt.hist,'tip')

 

 

g = sns.FacetGrid(tips,col='sex',hue='smoker')
g.map(plt.scatter,'total_bill','tip',alpha=.7)
g.add_legend()

scatter表示散点图

g.add_legend()加入标注

g = sns.FacetGrid(tips,row='smoker',col='time',margin_titles=True)
g.map(sns.regplot,'size','total_bill',color='.1',fit_reg=True,x_jitter=.1)

fit_reg=True   显示回归线

 

from pandas import Categorical
ordered_days = tips.day.value_counts().index  #tips数据集中原来的顺序
ordered_days = Categorical(['Thur','Fri','Sat','Sun'])    #自己设置的顺序
print(ordered_days)
g = sns.FacetGrid(tips,row='day',row_order=ordered_days,size=1.7,aspect=4)
g.map(sns.boxplot,'total_bill')

 

 

Facetgrid绘制多变量

pal = dict(Lunch='seagreen',Dinner='gray')
g = sns.FacetGrid(tips,hue='time',palette=pal,size=5)
g.map(plt.scatter,'total_bill','tip',s=20,alpha=.7,linewidth=.5,edgecolor='white')
g.add_legend()

 

 s=20 设置图中标识圆点大小

alpha=.7设置对比度

with sns.axes_style('white'):
    g = sns.FacetGrid(tips,row='sex',col='smoker',margin_titles=True,size=2.5)
g.map(plt.scatter,'total_bill','tip',color='#334488',edgecolor='white',lw=.9);
g.set_axis_labels('Total bill(US Dollars)','Tip');
g.set(xticks=[10,30,50],yticks=[2,6,10]);
g.fig.subplots_adjust(wspace=.5,hspace=.5)   #设置每个子图之间的距离

 这里出现四个子图的原因是:smoker和sex各种两种可能

 

 

  

 

iris = sns.load_dataset('iris')
g = sns.PairGrid(iris)
g.map(plt.scatter)

对图

g = sns.PairGrid(iris,vars=['sepal_length','sepal_width'],hue='species')
g.map(plt.scatter);   #取鸢尾花数据集中两个特征进行成图

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章