栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

seaborn绘图

seaborn绘图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('E:/python/Python数据分析与挖掘从零开始到实战/数据分析篇/学习笔记/数据/air_data.csv')
df.head()
MEMBER_NOFFP_DATEFIRST_FLIGHT_DATEGENDERFFP_TIERWORK_CITYWORK_PROVINCEWORK_COUNTRYAGELOAD_TIME...ADD_Point_SUMEli_Add_Point_SumL1Y_ELi_Add_PointsPoints_SumL1Y_Points_SumRation_L1Y_Flight_CountRation_P1Y_Flight_CountRation_P1Y_BPSRation_L1Y_BPSPoint_NotFlight
0549932006/11/22008/12/246.北京CN31.02014/3/31...399921144521111006197603702110.5095240.4904760.4872210.51277750
1280652007/2/192007/8/36NaN北京CN42.02014/3/31...1200053288532884157682384100.5142860.4857140.4892890.51070833
2551062007/2/12007/8/306.北京CN40.02014/3/31...1549155202517114063612337980.5185190.4814810.4814670.51853026
3211892008/8/222008/8/235Los AngelesCAUS64.02014/3/31...034890348903722041861000.4347830.5652170.5517220.44827512
4395462009/4/102009/4/156贵阳贵州CN48.02014/3/31...2270464969649693388132103650.5328950.4671050.4690540.53094339

5 rows × 44 columns

df1 = df['FFP_TIER'].value_counts()
df1
4    58066
5     3409
6     1513
Name: FFP_TIER, dtype: int64
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
一、基础绘图
plt.style.use('default')
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(20,8),dpi=80)
plt.bar(df1.index,height=df1.values,color='skyblue')
plt.xticks([4,5,6],['等级四','等级五','等级六'])
plt.ylabel('用户数量',fontsize=12,labelpad=10)
plt.title('未使用seaborn',fontsize=14,pad=10)
plt.show()

二、使用seaborn绘图 1、seaborn绘图(一)
plt.style.use('seaborn')
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(20,8),dpi=80)
plt.bar(df1.index,df1.values,color='skyblue')
plt.xticks([4,5,6],['等级四','等级五','等级六'])
plt.ylabel('用户数量',fontsize=12,labelpad=10)
plt.title('seaborn绘图(1)',fontsize=14,pad=10)
plt.show()

plt.style.use('default')
2、seaborn绘图(二)
sns.set()
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(20,8),dpi=80)
plt.bar(df1.index,df1.values,color='skyblue')
plt.xticks([4,5,6],['等级四','等级五','等级六'])
plt.ylabel('用户数量',fontsize=12,labelpad=10)
plt.title('seaborn绘图(2)',fontsize=14,pad=10)
plt.show()

3、seaborn绘图(3)
data = pd.Dataframe(df1)
data = data.reset_index()
data
indexFFP_TIER
0458066
153409
261513
data.columns = ['会员卡等级','会员数量']
data
会员卡等级会员数量
0458066
153409
261513
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(20,8),dpi=80)
sns.barplot(x='会员卡等级',y='会员数量',data=data,color='skyblue')
plt.ylabel('用户数量',fontsize=12,labelpad=10)
plt.title('seaborn绘图(3)',fontsize=14,pad=10)
plt.show()

三、绘制常用统计图形 1、柱状图

sns.barplot(x,y,hue,data,color,palette,orient)

  • x,y 不同坐标上的值
  • hue: 分类变量
  • data: 数据
  • color: 颜色
  • palette: 调色板
  • orient: 方向(vertical: 垂直, horizontal: 水平)

一般调色板参数,请见
http://seaborn.pydata.org/generated/seaborn.color_palette.html#seaborn.color_palette
常用的如muted,RdBu,Set1,Blues_d ,husl等几个选项

df_bar = df.groupby(['FFP_TIER','GENDER'])['MEMBER_NO'].count()
df_barplot = df_bar.reset_index()
df_barplot.columns=['会员卡等级','性别','会员数量']
df_barplot
会员卡等级性别会员数量
0414208
1443856
25486
352923
46157
561355
plt.figure(figsize=(20,8),dpi=80)
sns.barplot(x='会员卡等级',y='会员数量',data=df_barplot,color='skyblue',hue='性别',palette='muted',orient='v')
plt.title('seaborn绘图--柱状图',fontsize=14,pad=10)
plt.xticks(range(3),['等级四','等级五','等级六'])
plt.legend(loc='best')
plt.show()

2、散点图

sns.scatterplot(x,y,hue,data,color,palette,style,s,markers)

  • x,y不同坐标上的值
  • hue: 分类变量
  • data: 数据
  • color: 颜色
  • palette: 调色板
  • style: 以分类变量作图,产生不同的形状
  • s: 形状大小
  • markers: 形状
# 飞行次数和飞行里程的关系
df_scatter = df[['FLIGHT_COUNT','SEG_KM_SUM']]
df_scatter.head()
FLIGHT_COUNTSEG_KM_SUM
0210580717
1140293678
2135283712
323281336
4152309928
plt.figure(figsize=(20,8),dpi=80)
sns.scatterplot(x='FLIGHT_COUNT',y='SEG_KM_SUM',data=df_scatter,palette='husl',s=50,markers='O')
plt.xlabel('飞行次数',fontsize=12,labelpad=10)
plt.ylabel('飞行里程',fontsize=12,labelpad=10)
plt.title('飞行次数和飞行里程的关系',fontsize=14,pad=10)
plt.show()

# 不同性别飞行次数和飞行里程的关系
plt.figure(figsize=(20,8),dpi=80)
sns.scatterplot(x='FLIGHT_COUNT',y='SEG_KM_SUM',hue='GENDER',data=df,palette='husl',s=50,style='GENDER'
                #,markers='O',
               )
plt.xlabel('飞行次数',fontsize=12,labelpad=10)
plt.ylabel('飞行里程',fontsize=12,labelpad=10)
plt.title('不同性别飞行次数和飞行里程的关系',fontsize=14,pad=10)
plt.show()

3、箱线图

sns.boxplot(x,y,hue,data,order, width, fliersize,linewidth, color,palette)

  • x,y不同坐标上的值
  • hue: 分类变量
  • data: 数据
  • width: 箱线宽度
  • fliersize: 异常值点的大小
  • color: 颜色
  • palette: 调色板
  • linewidth: 指定箱体边框的宽度
plt.figure(figsize=(20,8),dpi=80)
sns.boxplot(y = 'AGE', data = df,
            showmeans=True,color = 'skyblue',width =0.3, linewidth=2,
            flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':10},
            meanprops = {'marker':'D','markerfacecolor':'indianred', 'markersize':8},
            medianprops = {'linestyle':'--','color':'red'})
plt.xlabel('')
plt.ylabel('年龄')
plt.title('年龄箱线图')
plt.show()

plt.figure(figsize=(20,8),dpi=80)
sns.boxplot(x='GENDER',y = 'AGE', data = df,
            showmeans=True,color = 'skyblue',width =0.3, linewidth=2,
            flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':10},
            meanprops = {'marker':'D','markerfacecolor':'indianred', 'markersize':8},
            medianprops = {'linestyle':'--','color':'red'})
plt.xlabel('')
plt.ylabel('年龄')
plt.title('不同性别年龄箱线图')
plt.show()

4、直方图

sns.distplot(a,bins,hist,kde,rug, fit, hist_kws,kde_kws, fit_kws, color,norm_hist,ax)

  • a: 数据

  • bins: 直方条形个数

  • hist: 是否绘制直方图

  • kde: 是否绘制核密度图

  • fit: 是否绘制概率密度曲线图

  • hist_kws: 传递直方图相关参数

  • kde_kes: 传递核密度图相关参数

  • fit_kws: 传递概率密度曲线相关参数

  • color: 曲线颜色

  • norm_hist: 是否将频数改成频率

  • ax: 指定子图位置

  • 绘制直方图

# 男性、女性年龄分布
man_age = df.AGE[df.GENDER=='男']
woman_age = df.AGE[df.GENDER=='女']
plt.figure(figsize=(20,8),dpi=80)
sns.distplot(man_age,bins=30,hist=True,norm_hist=True, label = '男性年龄分布图',color='skyblue')
plt.xlabel('年龄')
plt.ylabel('')
plt.title('男性-年龄分布图')
plt.show()

plt.figure(figsize=(20,8),dpi=80)
sns.distplot(woman_age,bins=30,hist=True,norm_hist=True, label = '女性年龄分布图',color='hotpink')
plt.xlabel('年龄')
plt.ylabel('')
plt.title('女性-年龄分布图')
plt.show()

  • 绘制核密度分布图
plt.figure(figsize=(20,8),dpi=80)
sns.distplot(man_age, hist=False, kde = True, kde_kws = {'color':'skyblue'}, norm_hist=True, label = '男性年龄分布图')
sns.distplot(woman_age, hist=False, kde = True, kde_kws = {'color':'hotpink'}, norm_hist=True, label = '女性年龄分布图')
plt.title('年龄分布图')
plt.legend()
plt.show()

5、折线图
# 按照年份汇总数据,计算总飞行次数和飞行里程数
df['YEAR'] = df['FFP_DATE'].str.split('/',expand=True)[0]
df_line = df.groupby(df['YEAR'])[['FLIGHT_COUNT', 'SEG_KM_SUM']].sum()
df_line.reset_index()
YEARFLIGHT_COUNTSEG_KM_SUM
02004849213046594
120055458476263647
2200674116107466218
3200781398115824690
4200880384115958959
5200973515102908088
6201092398133804987
72011117870170898377
82012135812200675940
920132717241751371
plt.figure(figsize=(20,8),dpi=80)
sns.lineplot(x="YEAR", y="FLIGHT_COUNT",data =df_line,lw=2,color="red")
# sns.lineplot(x="YEAR", y="SEG_KM_SUM",data =df_line,lw=2,color="blue")
plt.ylabel('飞行次数')
plt.xlabel('年份')
plt.title('飞行次数变化趋势')
plt.show()

6、回归图
plt.figure(figsize=(20,8),dpi=80)
sns.lmplot(x="FLIGHT_COUNT", y="SEG_KM_SUM",data =df_line,legend_out=False,
           markers='o',fit_reg= True,aspect=1.3,height=8,
            scatter_kws={'s':50,'facecolor':'red'})
plt.xlabel('飞行次数')
plt.ylabel('飞行公里数')
plt.title('飞行次数和飞行公里数的关系')
plt.show()

7、countplot

countplot()主要用于绘制数据中,每个类别出现的数量,只能计数

# 绘制不同区域订单数量
plt.figure(figsize=(20,8),dpi=80)
sns.countplot(x ='FFP_TIER',data = df)
plt.ylabel('用户数量')
plt.xlabel('会员卡级别')
plt.title('不同会员卡级别下的用户数量')
plt.show()

# 绘制不同区域订单数量
plt.figure(figsize=(20,8),dpi=80)
sns.countplot(x ='FFP_TIER',data = df,hue ='GENDER')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.ylabel('用户数量')
plt.xlabel('会员卡级别')
plt.title('不同会员卡级别下的男女用户数量')
plt.show()

四、seaborn绘图风格设置

sns.set (context, style, palette, font, font_scale, color_codes)

  • style: 为绘图风格,一共五种风格(darkgrid(灰白背景+网格) whitegrid(白白背景+灰网格) dark white ticks带坐标轴刻度)
  • context: 控制绘图元素的规模,paper,notebook, talk, and poster (元素缩放)
  • Palette: 调色板,deep, muted, pastel, bright, dark, colorblind
  • Font: 这个参数一般不管,不用调整
  • font_scale: 字体大小
  • color_codes: 一般用默认值
# 以订单数据为例
plt.figure(figsize=(20,8),dpi=80)
sns.set(style='darkgrid',context='notebook',font_scale=1.0,palette='colorblind') 
# 支持中文显示
sns.countplot(x ='FFP_TIER',data = df,hue ='GENDER')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.ylabel('用户数量')
plt.xlabel('会员卡级别')
plt.title('不同会员卡级别下的男女用户数量')
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号