Python 数据分析 —— Matplotlib ②

简介: Python 数据分析 —— Matplotlib ②

@[toc]
  
  
  
  

前提工作

  

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore')    # 去掉警告

plt.rcParams['font.sans-serif'] = ['SimHei']    # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False    # 确保负号正常显示


df = pd.read_excel(r'D:\数据分析\movie_data3.xlsx')

  
  
  
  

twinx() —— 双轴图(折线图+柱状图)的绘制

  

所谓双轴图,其实就是双y轴图,即一个图有两个y轴。

既然y轴都有两个了,理所当然双轴图中的图也有两个。一个图定位坐标时看左边y轴,另一个看右边y轴。

双轴图并不固定里面两个图的类型,可以 折线图+柱状图 ,也可以 两个折线图,随心所欲。目前双轴图支持的展示类型柱形图、折线图、堆积柱形图、面积图这四类图表样式。
不过一般来说是 折线图+柱状图。

  

要实现双轴操作,就要用到 twinx() 函数了。

  

根据电影评分绘制电影数量和评分的频率分布双轴图

  • x轴:评分
  • 图左边的y轴:表示电影数量
  • 图右边的y轴:表示概率分布

  
生成概率密度函数,需要导包

from scipy.stats import norm
fig = plt.figure(figsize = (10,8))

# 1.生成频率分布直方图
ax1 = fig.add_subplot(111)
n,bins,patches = ax1.hist(df['评分'],bins = 100,alpha = 0.7)

ax1.set_xlabel('评分',fontsize = 15)
ax1.set_ylabel('电影数量',fontsize = 15)
ax1.set_title('频率分布图',fontsize = 20)


# 2.生成绘制曲线图用的正态分布概率密度函数

# scipy.stats.norm函数 : 可以实现正态分布
# pdf函数 : 生成概率密度函数(概率论学的那)
# 上面两个合起来  norm.pdf : 生成正态分布概率密度函数

# 此时我们需要一个均值(μ)为评分的均值,方差(σ²)为评分的标准差这样一个正态分布概率密度函数
y = norm.pdf(bins,df['评分'].mean(),df['评分'].std())    
# 第一个参数是前面hist函数的返回值   第二个参数:均值   第三个参数:方差


# 3.生成曲线图
ax2 = ax1.twinx()    # ax2与ax1共用一个x轴
ax2.plot(bins,y,'y--')    # 为了打造双轴图,就得把y绘制到图形中
ax2.set_ylabel('评分的概率分布',fontsize = 15)

在这里插入图片描述

PS:这看起来怪麻烦,其实不然,只是举的这个例子难了,因为曲线是拿正态分布概率密度函数画的。概率论学的。
  

简单来说,双轴图画法就是在画两个图的基础上加上了 twinx() 操作。即,一个图上画两种图案,这两两个图案用 twinx() 联系起来。这样好理解多了。

  
  
  
  

plt.scatter() —— 散点图的绘制

  

两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

  

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

x = df.时长
y = df.评分

plt.figure(figsize = (10,8))
plt.scatter(x,y)
plt.title('电影时长与评分的散点图',fontsize = 20)
plt.xlabel('时长',fontsize = 18)
plt.ylabel('时长',fontsize = 18)
plt.tick_params(labelsize = 14)    # 坐标轴上字体大小

在这里插入图片描述
  
这样绘制的图有个问题,由于数据量过大,所以画出来的图非常冗余难看。

  

改进:

提取原有数据的 百分之一

x = df.时长[::100]
y = df.评分[::100]

只需把 x,y 数据每隔 100 个提取一次即可,这样就能得到原有数据的 百分之一

下面的代码不变

在这里插入图片描述

  

绘制图形时,在 plt.scatter() 中还可以加color参数设置点的颜色和 maker 参数设置点的 形状
  

marker 属性:

设置散点的形状

marker 形状
'.'
',' 像素点
'o'
'v' 倒三角点
'^' 上三角点
'<' 左三角点
'>' 右三角点
'1' 下三叉点
'2' 上三叉点
'3' 左三叉点
'4' 右三叉点
'8' 八角形点
's' 正方形点
'p' 五角点
'*' 星星点
'h' 六边形点1
'H' 六边形点2
'+' 加号点
'x' 乘号点
'D' 钻石
'd' 细钻
'\ ' v线
'_' H线

  
绘图时就利用marker属性设置散点形状

plt.scatter(x,y,color = 'b',marker = 'D')

  
  
  
  

plt.boxplot() —— 箱形图的绘制

  

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

  

plt.boxplot() 的参数:

  • x :指定要绘制箱形图的数据。
  • sym :指定异常的形状,默认为 +号 显示。
  • labels :图例,添加标签。
  • whis :指定上下须与上下四分位的位置,默认为1.5倍的四分位差。指定异常值的范围,大代表宽松;小代表,紧。
  • flierprops :设置异常值的属性,如异常点的形状、大小、填充色等。
  • notch :是否是凹⼝的形式展现箱线图,默认⾮凹⼝。
  • vert :箱形图如何摆放,横着还是竖着,默认垂直摆放。
  • positions :指定箱线图的位置,默认为[0,1,2…]。
  • widths :指定箱线图的宽度,默认为0。
  • patch_artist :是否填充箱体的颜⾊。
  • meanline :是否用线的形式表示均值,默认用点来表示。
  • meanprops :设置均值的属性,如点的⼤⼩、颜⾊等。
  • capprops :设置箱线图顶端和末端线条的属性,如颜⾊、粗细等。
  • whiskerprops :设置须的属性,如颜⾊、粗细、线的类型等。
  • ...

  

美国电影评分的箱形图

plt.figure(figsize = (10,6))
plt.boxplot(data,whis = 2,flierprops = {'marker':'o','markerfacecolor':'r','color':'k'},patch_artist = True,boxprops = {'color':'k','facecolor':'#9999ff'})
# flierprops —— 异常值属性设置。   markerfacecolor 填充色    color 边框线    patch_artist 箱体颜色是否能修改
# boxprops —— 填充箱体颜色。  color 外边框线    facecolor 填充色    

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':'#9999ff'})
plt.title('电影评分',fontsize = 20)
plt.tick_params(labelsize = 14)    # 坐标轴上字体大小

# 设置坐标轴的颜色
ax = plt.gca()    # gca : 得到当前的坐标系
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.2)

plt.show()

在这里插入图片描述

  

通过 vert 属性可以把图旋转

构造箱形图时,plt.boxplot 中加个 vert 属性即可

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

其他代码不变

在这里插入图片描述

  
  
  
  

seaborn.heatmap() —— 热力图(相关系数矩阵图)

  

seaborn 是一个精简的python库,可以创建具有统计意义的图表,能理解pandas的DataFrame类型。

  

seaborn.heatmap 参数:
  

(1)热力图输入数据参数:

  • data :矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则 df 的 index/column 信息会分别对应到 heatmap 的 columns 和 rows,即 pt.index 是热力图的行标,pt.columns 是热力图的列标。

  

(2)热力图矩阵块颜色参数:

  • vmax,vmin :分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定。
  • cmap :从数字到色彩空间的映射,取值是 matplotlib 包里的 colormap 名称或颜色对象,或者表示颜色的列表。
  • center :改参数默认值。如果数据表取值有差异时,设置热力图的色彩中心对齐值;能调整生成的图像颜色的整体深浅;设置 center 数据时,如果有数据溢出,则手动设置的 vmax、vmin 会自动改变 robust,默认为False。

  

(3)热力图矩阵块注释参数:

  • annot :默认False。如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据。
  • fmt :字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字。
  • annot_kws :默认False。如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置。

  

(4)热力图矩阵块之间间隔及间隔线参数:

  • linewidths :定义热力图里 “标识两两特征关系的矩阵小块”之间的间隔大小。
  • linecolor :切分热力图上每个小块的线的颜色,默认值是 'white'。

  

(5)热力图颜色刻度条参数:

  • cbar :是否在热力图侧边绘制颜色刻度条,默认是True。

    • cbar_kws :热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None。
    • cbar_ax :热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None。

  

求投票人数,评分,时长 ,这三个属性间的相关系数矩阵图

# 把这三列取出来
data = df[['投票人数','评分','时长']]

在这里插入图片描述
  

先导入:

import seaborn as sns

求参数:

corr = data.corr()    # 求相关系数
corr = abs(corr)      # 不想考虑正相关还是负相关,只想考虑相关程度

在这里插入图片描述

绘图:

fig = plt.figure(figsize = (10,8))
ax = fig.add_subplot(1,1,1)

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

plt.xticks(fontsize = 15)    # 设置x轴字体大小
plt.yticks(fontsize = 15)    # 设置y轴字体大小
# 等同于
# plt.tick_params(labelsize = 14)    # 坐标轴上字体大小

在这里插入图片描述

  

  

pandas 本身也封装了画图函数

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

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

%pylab inline
result = pd.plotting.scatter_matrix(data[::100],diagonal = 'kde',color = 'k',alpha = 0.2,figsize = (10,10))
# diagonal 对角线设置

在这里插入图片描述

  
  
  
  

夹带私货

  

各电影评价人数柱状图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

import warnings

warnings.filterwarnings('ignore')  # 去掉警告

plt.rcParams['font.sans-serif'] = ['SimHei']  # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False  # 确保负号正常显示


# 各电影评价人数柱状图

df = pd.read_csv(r'D:\pro1\实战案例\douban.csv')
df = df[['片名', '评价人数']]

plt.figure(figsize=(10, 6))
plt.bar(df.片名, df.评价人数)
plt.title('各电影评价人数', fontsize=20)   # 设置图的标题(fontsize是字体大小)
plt.xlabel('电影', fontsize=18)   # x轴名字
plt.ylabel('评价人数', fontsize=18)     # y轴名字
plt.tick_params(labelsize=12)   # 坐标轴上字体大小
plt.xticks(rotation=90)     # 把字旋转多少度。x轴上的字都挤在一起了,把字竖着写

# 把数字显示在柱上(每个柱子都显示就得用循环)
for a, b in zip(df.片名, df.评价人数):
    plt.text(a, b + 30000, b, ha='center', fontsize=10, va='bottom')

plt.show()

在这里插入图片描述

  

各电影评价人数和评分情况双轴图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

import warnings

warnings.filterwarnings('ignore')  # 去掉警告

plt.rcParams['font.sans-serif'] = ['SimHei']  # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False  # 确保负号正常显示

# 各电影评价人数和评分情况双轴图

df = pd.read_csv(r'D:\pro1\实战案例\douban.csv')
df = df[['片名', '评价人数', '评分']]

fig = plt.figure(figsize=(10, 6))
ax1 = fig.add_subplot(111)
ax1.bar(df.片名, df.评价人数, alpha=0.7)
ax1.set_title('各电影评价人数和评分情况', fontsize=20)  # 设置图的标题(fontsize是字体大小)
ax1.set_xlabel('电影', fontsize=18)  # x轴名字
ax1.set_ylabel('评价人数', fontsize=18)  # y轴名字
ax1.tick_params(labelsize=14)  # 坐标轴上字体大小
plt.xticks(rotation=90)  # 把字旋转多少度。x轴上的字都挤在一起了,把字竖着写

ax2 = ax1.twinx()
ax2.plot(df.片名, df.评分, 'y')
ax2.set_ylabel('评分', fontsize=18)

plt.show()

在这里插入图片描述

  
  
  
  

总结

  

暑假在家里花了一个星期时间,把numpy、pandas和matplotlib这三个数据分析库做了个大致的了解,目前对于Python数据分析的学习暂时告一段落了。接下来一段时间要继续Java的学习,并且在6月底吧,开始学数学建模的一些算法,因为听说学校会在6月底给参加建模的学生培训。

学到这里时其实挺感慨的,因为这个暑假是我人生中唯一一个开始认真学习的假期,哪怕是高二的暑假,我也没有像现在这样努力。每天早上8点坐到书桌上,一坐就是晚上12点或1点,目前已经坚持一个星期了,因为暑假才放了一个星期嘛哈哈。真不可思议,我现在能克制住所有欲望在假期里专注学习,这是我之前任何时候都不敢想的,希望一直保持下去吧。如果这个暑假每一天都能利用好,我相信我距离大厂又会更进一步。

还有一点让我欣慰,就是之前一个大佬,我就直接指名道姓吧哈哈,就是铁甲小宝大佬帮助我面试讲师的时候,给了我一些他的项目,其中有爬虫和豆瓣影评可视化。当时我看了这些项目时,表示啥也看不懂,但为了能面试上某教育机构的讲师,我硬着头皮说这些是我做的项目。彼时,我连Python基础都不好,连个简单的管理系统都写不出来,更别提会这些了,我连听都没听说过!还记得他跟我说爬虫的时候,我还以为他在逗我,我根本想不到爬虫竟然是一个技术的名字,我还反复跟他确认那个项目叫啥?叫爬虫?离谱的名字! 额额 现在看之前的自己太蠢了。现在算是今非昔比了,爬虫项目我早就做了,豆瓣影评可视化就是上面的“夹带私货” 哈哈。我用了不同的方法做的,并且也对图做了一些改进,肯定要比他给我的要好看许多了,哈哈并没有说大佬不好的意思。

我也在慢慢进步,从最早的3月份小菜鸡,到现在6月份小菜鸟,进行了从鸡到鸟的飞翔蜕变。哈哈开玩笑的。3个月时间,我学了不少东西,不过这是次要的。最重要的是3个月时间,让我对于未来不再迷茫了,至少不会像之前那样不知道该干啥。

努力坚持住,目前大二暑假,还有两年毕业,这两年利用好,我今后的人生可能都会变得不一样,加油吧骚年!

现在凌晨快1点了,属实是网易云时间到了,不能再写这有的没的了,明天还要继续干活呢,下播了兄弟们!

相关文章
|
11天前
|
数据挖掘 PyTorch TensorFlow
|
12天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
34 5
|
9天前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
33 16
|
1天前
|
数据可视化 数据挖掘 API
使用Python进行数据可视化:探索Matplotlib和Seaborn库
【9月更文挑战第19天】在数据科学领域,将复杂的数据集转换成直观、易懂的图形是一项基本而关键的技能。本文旨在通过Python编程语言介绍两个强大的数据可视化库——Matplotlib和Seaborn,以及它们如何帮助数据分析师和研究人员揭示数据背后的故事。我们将从基础概念讲起,逐步深入到高级技巧,确保无论读者的背景如何,都能获得必要的知识和启发,以在自己的项目中实现有效的数据可视化。
|
2天前
|
机器学习/深度学习 数据挖掘 大数据
大数据时代的“淘金术”:Python数据分析+深度学习框架实战指南
在大数据时代,数据被视为新财富源泉,而从海量信息中提取价值成为企业竞争的核心。本文通过对比方式探讨如何运用Python数据分析与深度学习框架实现这一目标。Python凭借其强大的数据处理能力及丰富库支持,已成为数据科学家首选工具;而TensorFlow和PyTorch等深度学习框架则为复杂模型构建提供强有力的技术支撑。通过融合Python数据分析与深度学习技术,我们能在各领域中发掘数据的无限潜力。无论是商业分析还是医疗健康,掌握这些技能都将为企业和社会带来巨大价值。
20 6
|
1天前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
12 4
|
1天前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
12 3
|
15天前
|
数据可视化 数据挖掘 数据处理
Python中数据可视化的魔法——使用Matplotlib和Pandas
【9月更文挑战第5天】在Python的世界里,数据可视化是连接复杂数据与人类直觉的桥梁。本篇文章将带领读者探索如何使用Matplotlib和Pandas这两个强大的库来揭示数据背后的故事。我们将从基础概念开始,逐步深入到高级技巧,让每一位读者都能轻松创建引人入胜的数据可视化图表,使数据分析变得既直观又有趣。
58 14
|
9天前
|
数据采集 传感器 数据可视化
利用Python进行数据分析与可视化
【9月更文挑战第11天】在数字化时代,数据已成为企业决策和科学研究的关键。本文将引导读者了解如何使用Python这一强大的工具进行数据分析和可视化,帮助初学者理解数据处理的流程,并掌握基本的可视化技术。通过实际案例,我们将展示如何从原始数据中提取信息,进行清洗、处理,最终以图形方式展现结果,使复杂的数据变得直观易懂。
|
10天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
25 5