近视眼怎么恢复

注册

 

发新话题 回复该主题

python可视化 [复制链接]

1#
白癜风该怎么治 http://www.bdfyy999.com/

基于pandas的内置可视化

基本绘图

Series和DataFrame上的这个功能只是使用matplotlib库的plot()方法的简单包装实现。

%matplotlibinlineimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(10,4),index=pd.date_range(/04/15,periods=10),columns=list(ABCD))df.plot()如果索引由日期组成,则调用gct().autofmt_xdate()来格式化x轴,如上图所示。

我们可以使用x和y关键字绘制一列与另一列。

绘图方法允许除默认线图之外的少数绘图样式。这些方法可以作为plot()的kind关键字参数提供。这些包括-

bar或barh为条形hist为直方图boxplot为盒型图area为“面积”scatter为散点图条形图

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(10,4),columns=[a,b,c,d])df.plot.bar()要生成一个堆积条形图,通过指定:passstacked=True

importpandasaspddf=pd.DataFrame(np.random.rand(10,4),columns=[a,b,c,d])df.plot.bar(stacked=True)要获得水平条形图,使用barh()方法

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(10,4),columns=[a,b,c,d])df.plot.barh(stacked=True)直方图

可以使用plot.hist()方法绘制直方图。我们可以指定bins的数量值。

importpandasaspdimportnumpyasnpdf=pd.DataFrame({a:np.random.randn()+1,b:np.random.randn(),c:np.random.randn()-1},columns=[a,b,c])df.plot.hist(bins=20)要为每列绘制不同的直方图,要用df.plot()

importpandasaspdimportnumpyasnpdf=pd.DataFrame({a:np.random.randn()+1,b:np.random.randn(),c:np.random.randn()-1},columns=[a,b,c])df.hist(bins=20)箱形图

Boxplot可以绘制调用Series.box.plot()和DataFrame.box.plot()或DataFrame.boxplot()来可视化每列中值的分布。

例如,这里是一个箱形图,表示对[0,1)上的统一随机变量的10次观察的五次试验。

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(10,5),columns=[A,B,C,D,E])df.plot.box()区域块图

可以使用Series.plot.area()或DataFrame.plot.area()方法创建区域图形

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(10,4),columns=[a,b,c,d])df.plot.area()散点图

可以使用DataFrame.plot.scatter()方法创建散点图

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(50,4),columns=[a,b,c,d])df.plot.scatter(x=a,y=b)饼状图

饼状图可以使用DataFrame.plot.pie()方法创建

importpandasaspdimportnumpyasnpdf=pd.DataFrame(3*np.random.rand(4),index=[a,b,c,d],columns=[x])df.plot.pie(subplots=True)Matplotlib可视化

1.matplotlib安装配置

linux可以通过以下方式安装matplotlib

sudopipinstallnumpysudopipinstallscipysudopipinstallmatplotlibwindows墙裂推荐大家使用anaconda

2.一幅可视化图的基本结构

通常,使用numpy组织数据,使用matplotlibAPI进行数据图像绘制。一幅数据图基本上包括如下结构:

Data:数据区,包括数据点、描绘形状Axis:坐标轴,包括X轴、Y轴及其标签、刻度尺及其标签Title:标题,数据图的描述Legend:图例,区分图中包含的多种曲线或不同分类的数据其他的还有图形文本(Text)、注解(Annotate)等其他描述

3.画法

下面以常规图为例,详细记录作图流程及技巧。按照绘图结构,可将数据图的绘制分为如下几个步骤:

导入matplotlib包相关工具包准备数据,numpy数组存储绘制原始曲线配置标题、坐标轴、刻度、图例添加文字说明、注解显示、保存绘图结果下面是一个包含cos、sin、sqrt函数的完整图像:

3.1导包

会用到matplotlib.pyplot、pylab和numpy

#coding:utf-8%matplotlibinlineimportnumpyasnpimportmatplotlib.pyplotaspltfrompylabimport*3.2准备数据

numpy常用来组织源数据/p>

#定义数据部分x=np.arange(0.,10,0.2)y1=np.cos(x)y2=np.sin(x)y3=np.sqrt(x)#x=all_df[house_age]#y=all_df[house_price]3.3绘制基本曲线

使用plot函数直接绘制上述函数曲线,可以通过配置plot函数参数调整曲线的样式、粗细、颜色、标记等:

#绘制3条函数曲线#$y=\sqrt{x}$plt.rcParams[figure.figsize]=(12,8)plt.plot(x,y1,color=blue,linewidth=1.5,linestyle=-,marker=.,label=r$y=cos{x}$)plt.plot(x,y2,color=green,linewidth=1.5,linestyle=-,marker=*,label=r$y=sin{x}$)plt.plot(x,y3,color=m,linewidth=1.5,linestyle=-,marker=x,label=r$y=\sqrt{x}$)2.3.1关于颜色的补充

主要是color参数:

*r红色

*g绿色

*b蓝色

*ccyan

*m紫色

*y土黄色

*k黑色

*w白色

3.3.2linestyle参数

linestyle参数主要包含虚线、点化虚线、粗虚线、实线,如下:

3.3.3marker参数

marker参数设定在曲线上标记的特殊符号,以区分不同的线段。常见的形状及表示符号如下图所示:

3.4设置坐标轴

可通过如下代码,移动坐标轴spines

#坐标轴上移ax=plt.subplot()#ax=plt.subplot(2,2,1)ax.spines[right].set_color(none)#去掉右边的边框线ax.spines[top].set_color(none)#去掉上边的边框线#移动下边边框线,相当于移动X轴ax.xaxis.set_ticks_position(bottom)ax.spines[bottom].set_position((data,0))#移动左边边框线,相当于移动y轴ax.yaxis.set_ticks_position(left)ax.spines[left].set_position((data,0))可通过如下代码,设置刻度尺间隔lim、刻度标签ticks

#设置x,y轴的刻度取值范围plt.xlim(x.min()*1.1,x.max()*1.1)plt.ylim(-1.5,4.0)#设置x,y轴的刻度标签值plt.xticks([2,4,6,8,10],[rtwo,rfour,rsix,r8,r10])plt.yticks([-1.0,0.0,1.0,2.0,3.0,4.0],[r-1.0,r0.0,r1.0,r2.0,r3.0,r4.0])可通过如下代码,设置X、Y坐标轴和标题:

#设置标题、x轴、y轴plt.title(r$the\function\figure\of\cos(),\sin()\and\sqrt()$,fontsize=19)plt.xlabel(r$the\input\value\of\x$,fontsize=18,labelpad=88.8)plt.ylabel(r$y=f(x)$,fontsize=18,labelpad=12.5)3.5设置文字描述、注解

可通过如下代码,在数据图中添加文字描述text:

plt.text(0.8,0.9,r$x\in[0.0,\10.0]$,color=k,fontsize=15)plt.text(0.8,0.8,r$y\in[-1.0,\4.0]$,color=k,fontsize=15)可通过如下代码,在数据图中给特殊点添加注解annotate:

#特殊点添加注解plt.scatter([8,],[np.sqrt(8),],50,color=m)#使用散点图放大当前点plt.annotate(r$2\sqrt{2}$,xy=(8,np.sqrt(8)),xytext=(8.,2.83),fontsize=16,color=#,arrowprops=dict(arrowstyle=-,connectionstyle=arc3,rad=0.1,color=#))3.6设置图例

可使用如下两种方式,给绘图设置图例:

1:在plt.plot函数中添加label参数后,使用plt.legend(loc=’upright’)2:不使用参数label,直接使用如下命令:plt.legend([cos(x),sin(x),sqrt(x)],loc=upperright)

3.7网格线开关

可使用如下代码,给绘图设置网格线:

#显示网格线plt.grid(True)3.8显示与图像保存

plt.show()#显示#savefig(../figures/plot3d_ex.png,dpi=48)#保存,前提目录存在4.完整的绘制程序

#coding:utf-8importwarningswarnings.filterwarnings(ignore)importnumpyasnpimportmatplotlib.pyplotaspltfrompylabimport*#定义数据部分x=np.arange(0.,10,0.2)y1=np.cos(x)y2=np.sin(x)y3=np.sqrt(x)#绘制3条函数曲线plt.plot(x,y1,color=blue,linewidth=1.5,linestyle=-,marker=.,label=r$y=cos{x}$)plt.plot(x,y2,color=green,linewidth=1.5,linestyle=-,marker=*,label=r$y=sin{x}$)plt.plot(x,y3,color=m,linewidth=1.5,linestyle=-,marker=x,label=r$y=\sqrt{x}$)#坐标轴上移ax=plt.subplot()ax.spines[right].set_color(none)#去掉右边的边框线ax.spines[top].set_color(none)#去掉上边的边框线#移动下边边框线,相当于移动X轴ax.xaxis.set_ticks_position(bottom)ax.spines[bottom].set_position((data,0))#移动左边边框线,相当于移动y轴ax.yaxis.set_ticks_position(left)ax.spines[left].set_position((data,0))#设置x,y轴的取值范围plt.xlim(x.min()*1.1,x.max()*1.1)plt.ylim(-1.5,4.0)#设置x,y轴的刻度值plt.xticks([2,4,6,8,10],[r2,r4,r6,r8,r10])plt.yticks([-1.0,0.0,1.0,2.0,3.0,4.0],[r-1.0,r0.0,r1.0,r2.0,r3.0,r4.0])#添加文字plt.text(8,1.5,r$x\in[0.0,\10.0]$,color=k,fontsize=15)plt.text(8,1.8,r$y\in[-1.0,\4.0]$,color=k,fontsize=15)#特殊点添加注解plt.scatter([8,],[np.sqrt(8),],50,color=m)#使用散点图放大当前点plt.annotate(r$2\sqrt{2}$,xy=(8,np.sqrt(8)),xytext=(8.5,2.2),fontsize=16,color=#,arrowprops=dict(arrowstyle=-,connectionstyle=arc3,rad=0.1,color=#))#设置标题、x轴、y轴plt.title(r$the\function\figure\of\cos(),\sin()\and\sqrt()$,fontsize=19)plt.xlabel(r$the\input\value\of\x$,fontsize=18,labelpad=88.8)plt.ylabel(r$y=f(x)$,fontsize=18,labelpad=12.5)#设置图例及位置plt.legend(loc=best)#plt.legend([cos(x),sin(x),sqrt(x)],loc=upright)#显示网格线plt.grid(True)#显示绘图plt.show()常用图形

曲线图:matplotlib.pyplot.plot(data)灰度/直方图:matplotlib.pyplot.hist(data)散点图:matplotlib.pyplot.scatter(data)箱式/箱线图:matplotlib.pyplot.boxplot(data)x=np.arange(-5,5,0.1)y=x**2plt.plot(x,y)x=np.random.normal(size=)plt.hist(x,bins=10)plt.rcParams[figure.figsize]=(8,8)x=np.random.normal(size=)y=np.random.normal(size=)plt.scatter(x,y)plt.rcParams[figure.figsize]=(8,8)x=np.random.normal(size=)plt.boxplot(x)箱式图(boxplot)科普

上边缘(Q3+1.5*IQR/“箱子高度”)、下边缘(Q1-1.5*IQR/“箱子高度”)、IQR=Q3-Q1上四分位数(Q3)、下四分位数(Q1)中位数异常值处理异常值时与3σσ标准的异同:统计边界是否受异常值影响、容忍度的大小seaborn单维度与关联维度分析

单变量分布

%matplotlibinlineimportnumpyasnpimportpandasaspdfromscipyimportstats,integrateimportmatplotlib.pyplotaspltimportseabornassnssns.set(color_codes=True)np.random.seed(sum(map(ord,distributions)))importdatetimeimportmatplotlib.datesasmpdimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickerimportnumpyasnpimportpandasaspdimporttimefrommatplotlibimportgridspecfrompandasimportDataFramefrompandasimportSeriesimportwarningswarnings.filterwarnings(ignore)%matplotlibinline灰度图

最方便快捷的方式~

x=np.random.normal(size=)sns.distplot(x,kde=True)想得到更精细的刻画?调节bins~

sns.distplot(x,kde=True,bins=20)想配合着实例一起看?

sns.distplot(x,kde=False,bins=20,rug=True)配合着实例一起看有什么好处?指导你设置合适的bins。

核密度估计

通过观测估计概率密度函数的形状。有什么用呢?待定系数法求概率密度函数~

核密度估计的步骤:

每一个观测附近用一个正态分布曲线近似叠加所有观测的正态分布曲线归一化在seaborn中怎么画呢?

sns.kdeplot(x)bandwidth的概念:用于近似的正态分布曲线的宽度。

sns.kdeplot(x)sns.kdeplot(x,bw=.2,label=bw:0.2)sns.kdeplot(x,bw=2,label=bw:2)plt.legend()模型参数拟合

x=np.random.gamma(6,size=)sns.distplot(x,kde=False,fit=stats.gamma)双变量分布

mean,cov=[0,1],[(1,.5),(.5,1)]data=np.random.multivariate_normal(mean,cov,)df=pd.DataFrame(data,columns=[x,y])两个相关的正态分布~

散点图

sns.jointplot(x=x,y=y,data=df)六角箱图

x,y=np.random.multivariate_normal(mean,cov,).Twithsns.axes_style(ticks):sns.jointplot(x=x,y=y,kind=hex)核密度估计

sns.jointplot(x=x,y=y,data=df,kind=kde)f,ax=plt.subplots(figsize=(6,6))sns.kdeplot(df.x,df.y,ax=ax)sns.rugplot(df.x,color=g,ax=ax)sns.rugplot(df.y,vertical=True,ax=ax)想看到更连续梦幻的效果~

f,ax=plt.subplots(figsize=(6,6))cmap=sns.cubehelix_palette(as_cmap=True,dark=1,light=0)sns.kdeplot(df.x,df.y,cmap=cmap,n_levels=60,shade=True)g=sns.jointplot(x=x,y=y,data=df,kind=kde,color=m)#g.plot_joint(plt.scatter,c=w,s=30,linewidth=1,marker=+)#g.ax_joint.collections[0].set_alpha(0)#g.set_axis_labels($X$,$Y$)数据集中的两两关系

iris=sns.load_dataset(iris)iris.head()sns.pairplot(iris);属性两两间的关系+属性的灰度图

g=sns.PairGrid(iris)g.map_diag(sns.kdeplot)g.map_offdiag(sns.kdeplot,cmap=Blues_d,n_levels=20)seaborn高级分析-连续变量关联分析

%matplotlibinlineimportnumpyasnpimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassnssns.set(color_codes=True)np.random.seed(sum(map(ord,regression)))importwarningswarnings.filterwarnings(ignore)tips=sns.load_dataset(tips)tips.head()tips[tips[size]==1]绘制线性回归模型

最简单的方式:散点图+线性回归+95%置信区间

sns.lmplot(x=total_bill,y=tip,data=tips)对于变量离线取值,散点图就显得有些尴尬了。。。

sns.lmplot(x=size,y=tip,data=tips)方法1:加个小的抖动

sns.lmplot(x=size,y=tip,data=tips,x_jitter=.08)方法2:离散取值上用均值和置信区间代替散点

sns.lmplot(x=size,y=tip,data=tips,x_estimator=np.mean,ci=95)拟合不同模型

有些时候线性拟合效果不错,有些时候差强人意~

ans

分享 转发
TOP
发新话题 回复该主题