Python数据分析三剑客学习笔记Day7——matplotlib包的使用:简单双轴图,散点图,箱形图,相关系数矩阵图,热力图的绘制

本文是视频Python数据分析三剑客 数学建模基础 numpy、pandas、matplotlib的学习笔记。
终于学完啦,完结撒花✿✿ヽ(°▽°)ノ✿
因为包版本更新的问题,视频里很多函数调用的写法已经过时了,但是博客里的(迄今为止)都是对的。
请阅读的小伙伴注意文章时效性。
————————————————————————————————————————————————————

导入:

#防止出现错误警告
import warnings
warnings.filterwarnings('ignore')

#导入三剑客
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#设置字体字符
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

df=pd.read_excel('movie_data3.xlsx',index_col=0)
df[:5]

在这里插入图片描述
不懂的小伙伴可以去复习之前的内容。

双轴图的画法

add_subplot函数解释:
Python Matplotlib add_subplot 和 subplots_adjust详解及代码详细说明 配图片说明

from scipy.stats import norm
import matplotlib.mlab as mlab   #生成正态概率密度函数

fig=plt.figure(figsize=(10,8))
ax1=fig.add_subplot(111)   #生成多个图
n,bins,patches=ax1.hist(df['评分'],bins=100,color='m',alpha=0.5)
​
ax1.set_ylabel('电影数量',fontsize=15)
ax1.set_xlabel('评分',fontsize=15)
ax1.set_title('频率分布图',fontsize=20)#计算正态概率密度函数
#可能是因为版本更新,视频里面的写法不对了...
y=norm.pdf(bins,df['评分'].mean(),df['评分'].std())#双轴
ax2=ax1.twinx()
​
ax2.plot(bins,y,'b--')
ax2.set_ylabel('概率分布',fontsize=15)
​
plt.show()

在这里插入图片描述

根据电影时长和电影评分绘制散点图

具体函数参数解释:
python画散点图以及矩阵散点图plt.scatter()和pd.scatter_matrix()详解

x=df['时长']
y=df['评分']
​
plt.figure(figsize=(10,8))
plt.scatter(x,y)
#plt.legend()
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=18)
plt.ylabel('评分',fontsize=18)
plt.show()

在这里插入图片描述

数据量太大,所以图太冗杂,可挑选部分点进行绘制

x=df['时长'][::150]
y=df['评分'][::150]#间隔150选择点
​
plt.figure(figsize=(10,5))
plt.scatter(x,y,color='r',marker='*',label='评分')
plt.legend()
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=18)
plt.ylabel('评分',fontsize=18)
plt.show()

在这里插入图片描述
这里按照视频里面的写法会报错,详细解决办法看这里

可发现大部分电影时长集中在一百左右,评分大多在7分左右

maker属性

在这里插入图片描述

来自:https://blog.csdn.net/weixin_39010770/article/details/88185316?ops_request_misc=&request_id=&biz_id=102&utm_term=maker%E5%B1%9E%E6%80%A7&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-88185316.pc_search_result_before_js&spm=1018.2226.3001.4187

绘制各个地区的评分箱形图

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。

详细参考:Python数据可视化:箱线图

美国电影评分的箱线图

data=df[df.产地=='美国']['评分']
​
plt.figure(figsize=(10,5))
plt.boxplot(data,whis=2)
plt.title('美国电影评分',fontsize=20)
plt.show()

在这里插入图片描述
可以对异常值格式进行设定:

data=df[df.产地=='美国']['评分']
​
plt.figure(figsize=(10,5))
#设置异常值
plt.boxplot(data,whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'})
plt.title('美国电影评分',fontsize=20)
plt.show()

在这里插入图片描述
也可以对箱体颜色进行设定:

data=df[df.产地=='美国']['评分']
​
plt.figure(figsize=(10,5))
#设置箱体颜色
plt.boxplot(data,whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
           patch_artist=True,boxprops={'color':'k','facecolor':'g'})
plt.title('美国电影评分',fontsize=20)
plt.show()

在这里插入图片描述

多组数据箱线图

data1=df[df.产地=='中国大陆']['评分']
data2=df[df.产地=='中国香港']['评分']
data3=df[df.产地=='日本']['评分']
data4=df[df.产地=='英国']['评分']
data5=df[df.产地=='法国']['评分']

plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中国大陆','中国香港','日本','英国','法国'],
            whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
           patch_artist=True,boxprops={'color':'k','facecolor':'g'})

#设置背景颜色属性
ax=plt.gca()
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.1)

plt.title('电影评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

使用vert函数将图旋转

data1=df[df.产地=='中国大陆']['评分']
data2=df[df.产地=='中国香港']['评分']
data3=df[df.产地=='日本']['评分']
data4=df[df.产地=='英国']['评分']
data5=df[df.产地=='法国']['评分']
​
plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中国大陆','中国香港','日本','英国','法国'],
            whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
           patch_artist=True,boxprops={'color':'k','facecolor':'g'},vert=False)#设置背景颜色属性
ax=plt.gca()
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.1)
​
plt.title('电影评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

相关系数矩阵图

plotting.scatter_matrix函数

完整用法:pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15,15), marker=‘0’, hist_kwds={‘bins’:50},s=60,alpha=.8, cmap=mglearn.cm3)

参数如下:

frame,pandas dataframe对象
alpha, 图像透明度,一般取(0,1]
figsize,以英寸为单位的图像大小,一般以元组 (width, height) 形式设置 ax,可选一般为none
diagonal,必须且只能在{‘hist’, ‘kde’}中选择1个,’hist’表示直方图(Histogram plot),’kde’表示核密度估计(Kernel Density
Estimation);该参数是scatter_matrix函数的关键参数
marker,Matplotlib可用的标记类型,如’.’,’,’,’o’等
density_kwds,(other plotting keyword arguments,可选),与kde相关的字典参数
hist_kwds,与hist相关的字典参数
range_padding,(float, 可选),图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点
kwds,与scatter_matrix函数本身相关的字典参数
c,颜色
来自:https://www.cnblogs.com/zlc364624/p/12369999.html

画电影时长,投票人数,评分的相关系数矩阵图

data=df[['投票人数','评分','时长']]
data[:5]

可以画出各个属性之间的散点图,对角线是分布图

%pylab inline
#对角线展示kde,核密度估计,hist,频率分布直方图
#这里也和视频不太一样 QAQ
result=pd.plotting.scatter_matrix(data[::100],figsize(7,7),diagonal='kde')

在这里插入图片描述

绘制热力图

seaborn可以创建具有统计意义的图表,可理解pandas的Dataframe类型
详细参考:一、python可视化——热力图

import seaborn as sns
#求相关系数
corr=data.corr()
#求绝对值
corr=abs(corr)#视频上面的方法不对了 TAT
ax=plt.subplots(figsize=(10,8))
​
ax=sns.heatmap(corr,vmax=1,vmin=0,annot=True,annot_kws={'size':13,'weight':'bold'},linewidths=0.05)
​
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
​
plt.show()

在这里插入图片描述

颜色越深,相关性越少(可以通过自定义参数进行设置)

第七次课作业

(1)读取酒店数据2.xlsx,根据评分和价格信息,绘制散点图。

df=pd.read_excel('酒店数据22.xlsx',index_col=0)
df[:5]

在这里插入图片描述

y=df['价格'][::2]
x=df['评分'][::2]

plt.figure(figsize=(10,9))
plt.scatter(x,y)

plt.title('酒店价格与评分散点图',fontsize=20)
plt.ylabel('价格',fontsize=18)
plt.xlabel('评分',fontsize=18)
plt.show()

在这里插入图片描述

(2)画出油尖旺地区,评分的箱线图。

data=df[df.地区=='油尖旺']['评分']

plt.figure(figsize=(10,5))
plt.boxplot(data,whis=2)
plt.title('油尖旺地区评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

(3)选出平均价格前5的地区,画出这些地区的评分的箱线图。

data=df['价格'].groupby(df['地区']).mean().sort_values(ascending=False)[:5]

data1=df[df.地区=='中西区']['评分']
data2=df[df.地区=='离岛']['评分']
data3=df[df.地区=='沙田']['评分']
data4=df[df.地区=='湾仔']['评分']
data5=df[df.地区=='东区']['评分']

plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中西区','离岛','沙田','湾仔','东区'],
            whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
           patch_artist=True,boxprops={'color':'k','facecolor':'g'})

#设置背景颜色属性
ax=plt.gca()
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.1)

plt.title('平均价格前5的地区评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

(4)将题目2,3的图像旋转90度。

data=df[df.地区=='油尖旺']['评分']

plt.figure(figsize=(10,5))
plt.boxplot(data,whis=2,vert=False)
plt.title('油尖旺地区评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

data1=df[df.地区=='中西区']['评分']
data2=df[df.地区=='离岛']['评分']
data3=df[df.地区=='沙田']['评分']
data4=df[df.地区=='湾仔']['评分']
data5=df[df.地区=='东区']['评分']

plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中西区','离岛','沙田','湾仔','东区'],
            whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
           patch_artist=True,boxprops={'color':'k','facecolor':'g'},vert=False)

#设置背景颜色属性
ax=plt.gca()
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.1)

plt.title('平均价格前5的地区评分箱线图',fontsize=20)
plt.show()

在这里插入图片描述

(5)绘制一个评分,评分人数和价格之间的相关系数图

data=df[['评分人数','评分','价格']]
%pylab inline
result=pd.plotting.scatter_matrix(data,figsize(7,7),diagonal='kde')

在这里插入图片描述

import seaborn as sns

corr=data.corr()
corr=abs(corr)

ax=plt.subplots(figsize=(10,8))

ax=sns.heatmap(corr,vmax=1,vmin=0,annot=True,annot_kws={'size':13,'weight':'bold'},linewidths=0.05)

plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值