8.(python)seaborn_visualizationSeaborn与可视化

坚强是说给别人听的谎言 提交于 2020-12-18 02:15:19

文章目录

  • 8.1 一般绘图:factorplot 和 FacetGrid

    • 8.1.1 根据2个维度变量绘图

    • 8.1.2 可以按照第3个维度绘制不同的关系图

    • 8.1.3 可以从折线图切成柱状图

    • 8.1.4 散点图

    • 8.1.5 绘图的同时还做回归

    • 8.1.6 kde密度绘图

    • 8.1.7 按照2个维度展开画图

  • 8.2 pairplot and PairGrid

    • 8.2.1 多个维度两两组合绘图

    • 8.2.2 组合绘图的时候顺便回归一下

  • 8.3 jointplot and JointGrid

    • 8.3.1 联合绘图

    • 8.3.2 联合绘图(加回归)


Seaborn与可视化
Seaborn是斯坦福大学出的一个非常好用的可视化包,这一节我们一起来看看这个包和相关的一些用法。


# * coding:utf-8_*_
# 作者 :XiangLin
# 创建时间 :12/02/2020 19:45
# 文件 :2-8_seaborn_visualization.py
# IDE :PyCharm
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use("bmh")
plt.rc('font', family='SimHei', size=13) #显示中文
pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

Populating the interactive namespace from numpy and matplotlib
先用pandas读进来一份数据

names = [
'mpg'
, 'cylinders'
, 'displacement'
, 'horsepower'
, 'weight'
, 'acceleration'
, 'model_year'
, 'origin'
, 'car_name'
]
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data',sep='\s+',names=names)
print(df.head())
print(df.info())

df['maker'] = df['car_name'].map(lambda x: x.split()[0]) #将car_name第一个字符串切割出来
df['origin'] = df['origin'].map({1: 'America', 2: 'Europe', 3: 'Asia'})
df = df.applymap(lambda x:np.nan if x== '?' else x).dropna()
df['horsepower'] = df.horsepower.astype(float)
print(df.head())
输出:
mpg cylinders displacement horsepower weight acceleration model_year origin car_name
0 18.0 8 307.0 130.0 3504.0 12.0 70 1 chevrolet chevelle malibu
1 15.0 8 350.0 165.0 3693.0 11.5 70 1 buick skylark 320
2 18.0 8 318.0 150.0 3436.0 11.0 70 1 plymouth satellite
3 16.0 8 304.0 150.0 3433.0 12.0 70 1 amc rebel sst
4 17.0 8 302.0 140.0 3449.0 10.5 70 1 ford torino
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
mpg 398 non-null float64
cylinders 398 non-null int64
displacement 398 non-null float64
horsepower 398 non-null object
weight 398 non-null float64
acceleration 398 non-null float64
model_year 398 non-null int64
origin 398 non-null int64
car_name 398 non-null object
dtypes: float64(4), int64(3), object(2)
memory usage: 28.1+ KB
None
mpg cylinders displacement horsepower weight acceleration model_year origin car_name maker
0 18.0 8 307.0 130.0 3504.0 12.0 70 America chevrolet chevelle malibu chevrolet
1 15.0 8 350.0 165.0 3693.0 11.5 70 America buick skylark 320 buick
2 18.0 8 318.0 150.0 3436.0 11.0 70 America plymouth satellite plymouth
3 16.0 8 304.0 150.0 3433.0 12.0 70 America amc rebel sst amc
4 17.0 8 302.0 140.0 3449.0 10.5 70 America ford torino ford

8.1 一般绘图:factorplot 和 FacetGrid

8.1.1 根据2个维度变量绘图

画出model_year和mpg的关系图

# plt.figure(figsize=(16, 30))
sns.factorplot(figsize=(10,6),data=df,x='model_year',y='mpg')
plt.show()

8.1.2 可以按照第3个维度绘制不同的关系图

sns.factorplot(data=df,x='model_year',y='mpg',col = 'origin')
plt.show()

8.1.3 可以从折线图切成柱状图

sns.factorplot(data=df, x="model_year", y="mpg", col="origin",kind='bar') #折线图转化为柱状图
plt.show()
print(df.head())
sns.factorplot('model_year',data=df,col="origin",kind = 'count')
plt.show()
sns.factorplot("cylinders",data=df, col="origin",kind= 'count') #统计各个国家中cylinders的个数
plt.show()
g = sns.FacetGrid(df,col='origin')
g.map(sns.distplot,"mpg")
plt.show()




8.1.4 散点图

g = sns.FacetGrid(df,col='origin')
g.map(plt.scatter,"horsepower","mpg")
plt.show()

8.1.5 绘图的同时还做回归

g = sns.FacetGrid(df,col='origin')
g.map(sns.regplot,"horsepower", "mpg")
plt.xlim(0, 250)
plt.ylim(0, 60)
plt.show()

8.1.6 kde密度绘图

df['tons'] = (df.weight/2000).astype(int)
g = sns.FacetGrid(df,col='origin',row="tons")
g.map(sns.kdeplot,"horsepower", "mpg")
plt.xlim(0, 250)
plt.ylim(0, 60)
plt.show()

8.1.7 按照2个维度展开画图

g = sns.FacetGrid(df,col='origin',row="tons")
g.map(plt.hist,'mpg',bins = np.linspace(0,50,11))
plt.show()

8.2 pairplot and PairGrid

8.2.1 多个维度两两组合绘图

g = sns.pairplot(df[["mpg", "horsepower", "weight", "origin"]],hue='origin',diag_kind="hist")
for ax in g.axes.flat:
plt.setp(ax.get_xticklabels(),rotation=45)
plt.show()

8.2.2 组合绘图的时候顺便回归一下

g = sns.pairplot(df[["mpg", "horsepower", "weight", "origin"]],hue='origin')
g.map_upper(sns.regplot)
g.map_lower(sns.residplot)
g.map_diag(plt.hist)
for ax in g.axes.flat:
plt.setp(ax.get_xticklabels(),rotation=45)
g.add_legend()
g.set(alpha=0.5)
plt.show()

8.3 jointplot and JointGrid

8.3.1 联合绘图

使用jointplot就能作出联合分布图形, 即, x总体和y总体的笛卡尔积分布
jointplot还是非常实用的, 对于两个连续型变量的分布情况, 集中趋势能非常简单的给出.

sns.jointplot("mpg", "horsepower", data=df, kind='kde')
plt.show()

8.3.2 联合绘图(加回归)

sns.jointplot("horsepower", "mpg", data=df, kind="reg")
plt.show()

g = sns.JointGrid(x="horsepower", y="mpg", data=df)
g.plot_joint(sns.regplot, order=2)
g.plot_marginals(sns.distplot)
plt.show()



来自七月在线数据挖掘算法

                                  写留言

本文分享自微信公众号 - 五角钱的程序员(xianglin965)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!