Python数据可视化--seaborn实例

seaborn 是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图。(也就是说plt和sns中会有很多方法是可以混用的)本博文中的数据集采用Kaggle中的compete:House Prices: Advanced Regression Techniques中train.csv。如果需要数据集在Kaggle中就可以下载。本博文是为了方便博主自己查询seaborn中常用的技巧,仅记录常用的内容。伪系统性学习或者在做案例时遇见的内容我会记录在这里,不定期更新。

0.引用模块

import pandas as pd
import numpy as np

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
train_data = pd.read_csv('C:/ml_data/house/naive/train.csv')

1.seaborn以礼始以礼终

1.1 sns设备背景颜色风格

sns.set_style('white')

可选背景 white,dark,writegrid,darkgrid,ticks。使用white就挺舒适的,并不建议更换。

1.2 新建画布

plt.figure()

方法入参及含义
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;(1英寸等于2.5cm,A4纸是 21*30cm的纸张 )
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

1.3保存图片

plt.savefig('c:/ml_data/titanic.png')

注意:
1.需首先调用plt.figure()
2.如果在plt.savefig之前调用plt.show(),会保存一片空白!因为在调用plt.show()时会自动新建一个画布

2.绘制直方图 single

适用于单个特征,看该特征的分布

sns.distplot
(
data=train_data[‘salesprice’]
hist = False / True #是否绘制柱状图
kde = False / True #是否绘制密度估计曲线,默认为True
bins = #将原始数据划分到n个桶中(按照数值划分)
rug = False / True 是否绘制边际毛毯
ax = axes[0] #放在subplot中哪个位置 axes = plt.subplots(2,1)
ax = axes[1,0]
hist_kws = {‘color’:‘red’,‘label’:‘green’} #给柱上颜色和标记
kde_kws = {‘color’:‘red’,‘label’:‘green’,‘linestyle’:’–’} #给kde上颜色和标记,设置风格
fit = norm 查看该特诊数值所匹配的正态分布(看偏差)
)

plt.figure()
sns.distplot(train_data['SalePrice'])
plt.savefig('C:/Users/lifeisshort/Desktop.temp.jpg')

在这里插入图片描述

3.计数图 single

单个特征,每个特征可取值中的数量
sns.countplot
(
数据风格不再赘述
x = ‘Age’
hue = ‘Sex’
data = train_data
)

plt.figure()
sns.countplot(x = 'MSSubClass',hue = 'Street',data = train_data)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述

4.绘制条形图 multiple

显示y特征在x特征的作用下的分布情况,适用于x特征为类别特征,数值型特征别找死。
sns.barplot
(
数据风格1:
x = train_data['Age] #横轴
y = train_data[‘Survived’] #纵轴
hue = train_data[‘Sex’] #横轴的数据再细分一下下
数据风格2:
x = ‘Age’
y = ‘Survived’
hue = ‘Sex’
data = train_data
estimator = np.mean / np.median / np.max /np.min 默认是均值
ci=0,'sd’等,统计学中的置信区间
)

plt.figure()
sns.barplot(y = 'SalePrice',x = 'MSSubClass',data = train_data,estimator= np.max)
plt.savefig('C:/Users/lifeisshort/Desktop.temp.jpg')

在这里插入图片描述
可以参考这个链接,全一点:https://blog.csdn.net/zyb228/article/details/101938152

5.散点图 multiple

在x特征的作用下y特征的分布情况 适用于类别特征,数值型特征别找死
与sns.barplot不同的是,sns.barplot重点于数据的某个特征值的比较,而该方法重点于所有数据点的分布

1.使用sns.stripplot 应用于大数据
sns.stripplot
(
x = ‘Age’
y = ‘fare’
hue = ‘Sex’
data = train_data
jitter = n #同类数据的晃动(最大间距)
)

plt.figure()
sns.stripplot(x = 'MSSubClass',y = 'SalePrice',data = train_data)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述
2.使用swarmplot 应用于小数据 更好看,前提是数据量不多
sns.swarmplot
(
参数参考sns.stripplot,没有jitter
)

plt.figure()
sns.swarmplot(x = 'MSSubClass',y = 'SalePrice',data = train_data)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述

6.箱线图

sns.boxplot
(
x = ‘Pclass’
y = ‘Age’
hue = ‘Sex’
data = train_data
)
#同时存在x,y时表示在x特征的的作用分布下,y特征的箱线图
#只存在x,y一个时,仅表示单个特征的分布,x,y表示箱线图的方向

plt.figure()
sns.boxplot(x = 'MSSubClass',y = 'SalePrice',data = train_data,)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述
关于箱线图的理解:
在这里插入图片描述

7.回归图

作用于类别特征时效果奇佳!
7.1使用sns.regplot #不可以使用hue
sns.regplot
(
x = ‘length’
y = ‘hight’
data = data_all
)

7.2使用sns.Implot #可以使用hue
sns.Implot
(
x = ‘length’
y = ‘hight’
data = data_all
hue = ‘sex’
color = ‘g’
marker=’+’ / [’*’,’+’,‘o’]
)

plt.figure()
sns.regplot(x = 'GarageArea',y = 'SalePrice',data = train_data)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述

8.热力图

通常用来寻找相关性强的特征
这里只介绍简单的操作,入门级别
首先你需要corr = train_data.corr()
sns.heatmap(
corr,
annot = True,
vmax = 0~1 右边颜色柱的最大值(大于等于vmax的数值视为1)(颜色从vmin到vmax开始)
vmin = 0~1 小于边颜色柱的最大值(小于等于vmax的数值视为0)
)

plt.figure()
temp = train_data[['SalePrice','GarageArea','GarageCars']]
corr = temp.corr()
sns.heatmap(corr,annot = True)
plt.savefig('C:/Users/lifeisshort/Desktop/temp.jpg')

在这里插入图片描述
进阶操作,大数据怎么办,如果有一万个特征怎么办?

k = 10 #number of variables for heatmap
cols = corr.nlargest(k, 'SalePrice')['SalePrice'].index

corr.nlargest(k, ‘SalePrice’)#相关性表格,返回k个与SalePrice相关性最大的特征的相关性矩阵。

cm = np.corrcoef(train_data[cols].values.T)
hm = sns.heatmap(cm,annot = True)
plt.show()

np.corrcoef(train_data[cols].values.T)计算皮尔逊相关性矩阵

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Python数据可视化的QQ音乐实例,使用了Matplotlib和Seaborn库来绘制图表和图形。 首先,我们需要安装这两个库: ```python !pip install matplotlib seaborn ``` 然后,我们需要获取QQ音乐的数据。我们可以使用爬虫来获取网站的数据,或者使用QQ音乐提供的API。 以下是一个使用QQ音乐API来获取某个歌手的热门歌曲的例子: ```python import requests # 使用QQ音乐API获取某个歌手的热门歌曲 url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' params = { 'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'sizer.yqq.song_next', 'searchid': '64405487069162918', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '20', 'w': '周杰伦', 'g_tk': '5381', 'jsonpCallback': 'MusicJsonCallback', 'loginUin': '0', 'hostUin': '0', 'format': 'jsonp', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0' } headers = { 'referer': 'https://y.qq.com/n/yqq/singer/0025NhlN2yWrP4.html', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } res = requests.get(url, params=params, headers=headers) json_data = res.json() song_list = json_data['data']['song']['list'] ``` 接下来,我们可以使用Matplotlib和Seaborn来绘制图表和图形。以下是一个绘制该歌手的热门歌曲排行榜的例子: ```python import matplotlib.pyplot as plt import seaborn as sns # 绘制该歌手的热门歌曲排行榜 song_names = [song['name'] for song in song_list] song_scores = [song['score'] for song in song_list] sns.set(style='whitegrid') plt.figure(figsize=(12,6)) sns.barplot(x=song_scores, y=song_names, palette='Blues_d') plt.title('周杰伦的热门歌曲排行榜') plt.xlabel('播放量') plt.ylabel('歌曲名称') plt.show() ``` 该代码会生成一个水平条形图,显示该歌手的热门歌曲排行榜,按播放量从高到低排序。我们可以使用其他的Matplotlib和Seaborn功能来自定义这个图表,比如添加标签、调整颜色和字体等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值