Pandas数据可视化详解:大案例解析(第27天)

系列文章目录

  1. Pandas数据可视化
  2. 解决不显示中文和负号问题
  3. matplotlib数据可视化
  4. seaborn数据可视化
  5. pyecharts数据可视化
  6. 优衣库数据分析案例

文章目录

  • 系列文章目录
  • 前言
    • 1. Pandas数据可视化
      • 1.1 案例解析:代码实现
    • 2. 解决不显示中文和负号问题
    • 3. matplotlib数据可视化
      • 1.1 案例解析:代码实现
    • 4. seaborn数据可视化
      • 1.1 案例解析:代码实现
    • 5. pyecharts数据可视化
      • 1.1 案例解析:代码实现
    • 6. 优衣库数据分析案例
      • 1.1 案例解析:代码实现


前言

本文主要通过大案例的方式详解了Pandas数据可视化,matplotlib数据可视化,seaborn数据可视化,pyecharts数据可视化。


提示:以下是本篇文章正文内容,下面案例可供参考

1. Pandas数据可视化

1.1 案例解析:代码实现

pandas的df和s对象绘图, 是通过内置matplotlib模块的pyplot类实现

# 导入模块
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns# 可以通过图表快速高效查看出数据之间的规律,潜在一些结论
# 加载数据集
df = sns.load_dataset('anscombe', data_home='./data/seaborn-data/')
df
# 查看每份子集中x和y列的统计描述信息
df.groupby('dataset').describe()
# 获取四份子集数据
df1 = df.query('dataset=="I"')
df2 = df.query('dataset=="II"')
df3 = df.query('dataset=="III"')
df4 = df.query('dataset=="IV"')
# 查建画布
# figsize设置图表的大小, 宽高
fig = plt.figure(figsize=(16, 8))
# 设置画布的标题
fig.suptitle('Anscombe Data')
# 创建四个子图
# 2,2 -> 两行两列,四个图
# 1,2,3,4 -> 每个子图所在的位置
axes1 = fig.add_subplot(2,2,1)
axes2 = fig.add_subplot(2,2,2)
axes3 = fig.add_subplot(2,2,3)
axes4 = fig.add_subplot(2,2,4)
# 绘制图形
axes1.plot(df1['x'], df1['y'], 'o')
axes2.plot(df2['x'], df2['y'], 'o')
axes3.plot(df3['x'], df3['y'], 'o')
axes4.plot(df4['x'], df4['y'], 'o')
# 给每个子图添加标题
axes1.set_title('dataset_1')
axes2.set_title('dataset_2')
axes3.set_title('dataset_3')
axes4.set_title('dataset_4')
plt.show()# pandas绘图
# df对象绘图
# 图形的x轴是df的行索引值
# 图形的y轴是每个数值列的值
# 当前df1有两列数值列, 绘制出两条折线
# 默认绘制折线图
df1.plot(kind='line')
plt.show()
# 柱状图
df1.plot(kind='bar')
# s对象绘图
# 图形x轴是s对象的索引值
# 图形y轴是s对象的值
df1['x'].plot()

2. 解决不显示中文和负号问题

  • 将 simhei.ttf 字体文件放到 /export/server/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf 目录下

    在这里插入图片描述

    在这里插入图片描述

    • 如何查看matplotlibrc文件所在位置

    • ttf目录是在 mpl-data/fonts

      import matplotlib
      matplotlib.matplotlib_fname()
      

      !在这里插入图片描述

  • 在 matplotlibrc 文件中增加以下内容

    font.family			 : sans-serif
    font.sans-serif		 : SimHei
    axes.unicode_minus   : False
    

    在这里插入图片描述

  • 删除缓存文件

    cd /root/.cache
    rm -rf matplotlib
    
  • 重启jupyter notebook

3. matplotlib数据可视化

1.1 案例解析:代码实现

# 绘制折线图, 默认图表 -> 两个变量之间的关系
# 不指定x轴和y轴值, x轴是使用行索引值, y中是数值列值
# df1.plot()
# df1.plot.line()
# df1.plot(kind='line')
# 指定图表的x轴值和y轴值
df1.plot(x='x', y='y')
plt.show()# 绘制柱状图  展示不同类别的信息情况
df1.plot.bar()
# 绘制堆积柱状图
df1.plot(kind='bar', stacked=True)
df1.plot.bar(x='x',y='y')
plt.show()# 水平条形图 -> 柱状图进行旋转
df1.plot.barh()
# 水平堆积条形图
df1.plot.barh(stacked=True, figsize=(16, 8), grid=True)
plt.show()# 绘制饼图 -> 查看不同类型的占比情况
# autopct:添加百分比标签
# radius:圆直径大小,最大1
df1.plot.pie(y='y', autopct='%.2f%%', radius=0.9, figsize=(16,8))
plt.show()# 散点图 -> 查看数据分布情况
# grid:添加网格线
df1.plot(kind='scatter',x='x',y='y', grid=True)
plt.show()# 气泡图 -> 通过散点图api绘制
# 在散点图二维平面上再通过点的大小增加第三个维度
# s:点的大小, 第三个维度
df1.plot.scatter(x='x', y='y', grid=True, s=df1['x']*100)# 面积图 
# 面积堆积图
df1.plot.area()
df1.plot.area(stacked=False)# 箱线图 -> 查看数据的最小值,最大值, 1/4分位值, 中位值, 3/4分位值, 离群值(异常值) 
# 异常值, 数据值普遍分布在 1~100, 有几个值为 1w, 2w, 这些值就是离群值
df1.boxplot()# 直方图 -> 统计不同组数据出现的次数, y轴次数
# bins=10:默认分成10组
df1.plot.hist()
plt.show()
df1['x'].plot.hist()
plt.show()# 蜂巢图 ->了解
# gridsize=12设定蜂箱格子的大小,数字越小格子越大
df1.plot.hexbin(x='x', y='y', gridsize=12)
plt.show()data = pd.read_csv('data/LJdata.csv')
data.head()
# 不同朝向的房源数量柱状图
temp_s = data.groupby(by='朝向')['区域'].count()
temp_s
temp_s.plot.bar(figsize=(16,8))# 前五朝向房源数量的饼图
sort_s = temp_s.sort_values(ascending=False).head()
sort_s.plot.pie(autopct='%.2f%%', radius=0.9, figsize=(12,6))
plt.show()

4. seaborn数据可视化

1.1 案例解析:代码实现

# 加载数据
tips_df = sns.load_dataset('tips', data_home='./data/seaborn-data')
tips_df# 散点图
fig = plt.figure(figsize=(16,8))
sns.scatterplot(data=tips_df, x='total_bill', y='tip', hue='sex', style='smoker', size='size')
plt.show()# 关系散点图
sns.relplot(data=tips_df, x='total_bill', y='tip') # 默认 kind='scatter'
sns.relplot(data=tips_df, x='total_bill', y='tip', kind='line')
plt.show()# 分类散点图
sns.stripplot(data=tips_df, x='time', y='total_bill')
# 不同日期用餐时间的分类散点图
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')# 在同一个代码块中绘制多个图形, 借助matplotlib包
f = plt.figure()
axes1 = f.add_subplot(2,1,1)
axes2 = f.add_subplot(2,1,2)
# 按照x属性所对应的类别分别展示y属性的值,适用于分类数据
# 不同饭点的账单总金额的散点图
sns.stripplot(data=tips_df, x='time', y='total_bill', ax=axes1)
# hue通用参数按颜色划分
# jitter=True 当数据点重合较多时,尽量分散的展示数据点
# dodge=True 拆分分类
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day', ax=axes2)
plt.show()# 小提琴图
# 下图分别描述午餐账单、晚餐账单的最大值、最小值、三个四分位数,以及所有账单金额出现的次数(频率)
sns.violinplot(data=tips_df, x='time', y='total_bill')
plt.show()# 箱线图 下图分别描述午餐账单、晚餐账单的最大值、最小值、三个四分位数,以及所有账单金额出现的次数(频率)
sns.boxplot(data=tips_df, x='time', y='total_bill', hue='day')
plt.show()# 分类柱状图
# 下图中黑色的粗线条展示了数据的分布(误差线), 线条越短, 数据分布越均匀
# 下图中每个柱的顶点就是该分类y指定列的平均值 estimator
sns.barplot(data=tips_df, x='day', y='total_bill', estimator=max)
plt.show()# 分类计数图
# 按x指定的列值分组统计出现次数
# y轴就是出现的次数
sns.countplot(data=tips_df, x='time')
plt.show()# 矩阵热力图 -> 对df数据样式有要求, 通过透视表转换
# 男女在午餐晚餐的平均消费
new_df = tips_df.pivot_table(index='sex', columns='time', values='total_bill', aggfunc='mean')
print(new_df)
# 输出为热力图:男性在晚餐花费最多
sns.heatmap(data=new_df)
plt.show()# 成对关系图
sns.pairplot(tips_df)
#sns.pairplot(df) # 全部数值列进行两两组合
#sns.pairplot(df, vars=['列名1', '列名2']) # 指定要组合展示的列名
plt.show()
# 自行调整成对关系图的绘图图形
pair_grid = sns.PairGrid(tips_df)
# 中间轴线上的图设为kdeplot
pair_grid.map_diag(sns.kdeplot) 
# 右上设为lineplot
pair_grid.map_upper(sns.lineplot) 
# 左下设为scatterplot
pair_grid.map_lower(sns.scatterplot) 
plt.show()

5. pyecharts数据可视化

1.1 案例解析:代码实现

# 可以绘制酷炫的图形
# 绘图套路 -> 参考官方示例代码进行修改即可# 绘制2019年不同国家GDP值的词云图
# 准备要绘制词云图的数据 -> [(国家1, gdp值), (国家2, gdp值), ...]
data = pd.read_csv('data/1960-2019全球GDP数据.csv', encoding='gbk')
data
# 获取year列为2019的数据子集
data_2019= data.query('year==2019')
data_2019
# 通过zip函数将不同列表对应位置的值保存到元组中
a = [1,2,3]
b = [4,5,6]
list(zip(a, b))
data2 = list(zip(data_2019['country'], data_2019['GDP']))
data2from pyecharts import options as opts  # 配置选项
from pyecharts.charts import WordCloud  # 词云图
c = (WordCloud()# 添加数据.add(series_name="不同国家GDP", data_pair=data2, word_size_range=[6, 66])# 设置全局配置.set_global_opts(title_opts=opts.TitleOpts(title="不同国家GDP的词云图", title_textstyle_opts=opts.TextStyleOpts(font_size=10)),tooltip_opts=opts.TooltipOpts(is_show=True))# 将html格式的文件保存到指定为止
#     .render("basic_wordcloud.html")  
)
c.render_notebook()

6. 优衣库数据分析案例

1.1 案例解析:代码实现

# 导入模块
import pandas as pd# 加载数据集
uniqlo = pd.read_csv('data/uniqlo.csv')
uniqlo.head()
# 查看数据集基本信息
uniqlo.info()
# 查看数值列描述统计指标
uniqlo.describe()
# 查看非数值列描述统计指标
uniqlo.describe(include='object')
# 查看销售金额小于等于0的数据
uniqlo.query('销售金额<=0')
uniqlo[uniqlo['销售金额'] >= 5000]# 统计不同产品销售数量情况
# 统计不同产品的销售总量
# 分组聚合
uniqlo.groupby(by='产品名称')['产品数量'].sum().sort_values(ascending=False)
pd.pivot_table(data=uniqlo, index='产品名称', values='产品数量', aggfunc='sum')
# 不同产品不同城市销售数量
uniqlo.groupby(by=['产品名称', '城市'])[['产品数量']].sum()
pd.pivot_table(data=uniqlo, index='产品名称', columns='城市', values='产品数量', aggfunc='sum', margins=True)
# 不同产品不同城市以及不同销售渠道的销售数量
uniqlo.groupby(by=['产品名称', '城市', '销售渠道'])[['产品数量']].sum()
pd.pivot_table(data=uniqlo, index='产品名称', columns=['城市', '销售渠道'], values='产品数量', aggfunc='sum')# 统计不同销售渠道情况
# 统计不同销售渠道的条目数
uniqlo['销售渠道'].value_counts()
uniqlo.groupby(by='销售渠道')['城市'].count()
uniqlo.groupby(by='销售渠道')['城市'].count().plot(kind='bar')
# 统计不同城市不同销售渠道的条目数
uniqlo.groupby(by=['城市','销售渠道'])[['产品数量']].count()
pd.pivot_table(data=uniqlo, index='城市', columns='销售渠道', values='产品数量', aggfunc='count')
# 绘制sns的分类计数图
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(16,8))
sns.countplot(data=uniqlo,y='城市',hue='销售渠道')
plt.show()
# 统计不同城市不同销售渠道的产品总数
uniqlo.groupby(by=['城市', '销售渠道'])[['产品数量']].sum()
pd.pivot_table(data=uniqlo, index='城市', columns='销售渠道', values='产品数量', aggfunc='sum', margins=True)# 用户消费时间分析
# 不同消费时间的条目数
uniqlo['消费时间'].value_counts()
uniqlo.groupby(by='消费时间')['城市'].count()
# 不同消费时间产品总数
uniqlo.groupby(by='消费时间')['产品数量'].sum()
# 不同城市不同消费时间的产品数量
uniqlo.groupby(by=['消费时间', '城市'])[['产品数量']].sum()
wkd_sales = pd.pivot_table(data=uniqlo,index='消费时间', columns='城市', values='产品数量', aggfunc='sum')
wkd_sales
# 获取第一行数据
wkd_sales.loc['Weekday', :]
wkd_sales.loc['Weekday']
# 统计不同城市不同消费时间日均产品数量
# 在wkd_sales基础上增加两行数据
# 获取一行数据得到s对象, s对象运算操作
wkd_sales.loc['Weekday_avg',:] = wkd_sales.loc['Weekday', :] / 5
wkd_sales.loc['Weekend_avg',:] = wkd_sales.loc['Weekend', :] / 2
wkd_sales# 销售额和成本之间的关系
# 获取多列数据
uniqlo[['销售金额', '单件成本']]
# 计算相关性系数
uniqlo[['销售金额', '单件成本']].corr()
# 销售金额是所有销售产品数量的总金额, 单件成本是一件产品成本
# 需要先计算单件销售金额 = 销售金额 / 产品数量
# 计算相关性需要先过滤掉异常数据
uniqlo2 = uniqlo[uniqlo['销售金额']>0]
uniqlo2
# 添加新的一列 单件销售金额 
uniqlo2['单件销售金额'] = uniqlo2['销售金额'] / uniqlo2['产品数量']
uniqlo2
# 计算单件销售金额和单件成本相关系数
uniqlo2[['单件销售金额', '单件成本']].corr()
# 绘制散点图
sns.scatterplot(data=uniqlo2, x='单件成本', y='单件销售金额')
# 绘制热力图
sns.heatmap(uniqlo2[['单件销售金额', '单件成本']].corr())

所需文件已经上传:第27天

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1473216.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型

编者按&#xff1a; 如何更好地评估和比较不同版本的大语言模型&#xff1f;传统的学术基准测试固然重要&#xff0c;但往往难以全面反映模型在实际应用场景中的表现。在此背景下&#xff0c;本文作者别出心裁&#xff0c;通过让 Llama-2 和 Llama-3 模型进行井字游戏对决&…

一维前缀和的实现

这是C算法基础-基础算法专栏的第十一篇文章&#xff0c;专栏详情请见此处。 引入 我们用朴素做法求一维数组的区间和时&#xff0c;一般是从前向后循环累加&#xff0c;它的时间复杂度为&#xff0c;当求区间和的次数过多&#xff0c;则会有超时的可能&#xff0c;那有没有时间…

高效管理个人日程,智慧校园行政办公全指南

在智慧校园的行政办公体系里&#xff0c;个人日程管理功能担当起协调与优化每位教职员工日常安排的角色&#xff0c;它像一位贴心的时间助理&#xff0c;确保工作与私人生活的和谐并进。这一功能设计得既直观又灵活&#xff0c;让使用者能以自己偏好的视角审视时间规划&#xf…

物联网的技术和应用有哪些?

随着科技的飞速发展&#xff0c;物联网已经成为连接世界的重要纽带&#xff0c;塑造着我们未来的生活。我们一起深入探索物联网的前沿技术和前瞻性应用&#xff0c;一窥未来的可能性。 获取物联网解决方案&#xff0c;YesPMP平台一站式物联网开发服务。 提示&#xff1a;智慧家…

springboot的健身房预约管理系统-计算机毕业设计源码75535

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 1.4开发技术 1.4.1 Java技术 1.4.2MVVM模式 1.4.3B/S结构 1.4.4SpringBoot框架 1.4.5 Mysql数据库 2系统分析 2.1 可行性分析 2.1.1经济可行性 2.1.2技术可行性 2.1.3操作可行性 2.2 系…

Python爬虫零基础实战,简洁实用!

1.爬虫简介 简单来讲&#xff0c;爬虫就是一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&#xff0c;点点按钮&#xff0c;查查数据&#xff0c;或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 你可以简单地想象&#xff1a;每个…

阶段总结——基于深度学习的三叶青图像识别

阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…

Redis基础教程(十三):Redis lua脚本

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Python用户宝典:了解并实现遗传算法

遗传算法是一种基于自然选择的技术&#xff0c;用于解决复杂问题。由于问题很复杂&#xff0c;遗传算法&#xff08;而不是其他方法&#xff09;被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何用Python来实现。 遗传算法的要素 适应度函数 适应度函数衡…

Vue 常用指令详细介绍

Vue 常用指令 1.Vue 常用指令介绍 内容讲解 【1】Vue 指令介绍 在vue中指令是作用在视图中的即html标签&#xff0c;可以在视图中增加一些指令来设置html标签的某些属性和文本。 指令都是以带有 v- 前缀的特殊属性。 【2】使用Vue指令 使用指令时&#xff0c;通常编写在…

springboot马拉松赛事志愿者管理系统-计算机毕业设计源码80251

摘 要 随着马拉松运动的兴起和发展&#xff0c;马拉松赛事的组织和管理面临着越来越多的挑战&#xff0c;其中志愿者的招募、培训和管理是至关重要的一环。传统的人力资源管理方式已经无法满足大型马拉松赛事对志愿者团队的需求&#xff0c;因此基于现代信息技术的马拉松赛事志…

文言文编程语言|老外来了也得先学论语

最近看到一个有意思的开源项目 wenyan&#xff0c;主要功能就是使用文言文来编写代码。 按项目说明 “Wenyan” 是一种遵循中国古典文学的语法和语调的编程语言。 此外&#xff0c;文言的字符集仅包含繁体汉字和「」引号&#xff0c;确保古代中国人能够阅读。 该编程语言的文…

【Unity数据存储】Unity中使用SqLite数据库进行数据持久化

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 专栏交流&#x1f9e7;&…

win11 去除文件预览图并保留具体图片预览

运行下列脚本&#xff1a; off echo. taskkill /f /im explorer.exe timeout 2 /nobreak>nul echo. DEL /F /S /Q /A %LocalAppData%\Microsoft\Windows\Explorer\thumbcache_*.db REG ADD "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\B…

C语言编译和编译预处理

编译预处理 • 编译是指把高级语言编写的源程序翻译成计算机可识别的二进制程序&#xff08;目标程序&#xff09;的过程&#xff0c;它由编译程序完成。 • 编译预处理是指在编译之前所作的处理工作&#xff0c;它由编译预处理程序完成 在对一个源程序进行编译时&#xff0c;…

Linux系统(CentOS)安装iptables防火墙

1&#xff0c;先检查是否安装了iptables 检查安装文件-执行命令&#xff1a;rpm -qa|grep iptables 检查安装文件-执行命令&#xff1a;service iptables status 2&#xff0c;如果安装了就卸装(iptables-1.4.21-35.el7.x86_64 是上面命令查出来的版本) 执行命令&#xff1a…

Nginx(http配置、https配置)访问Spring Boot 项目

前文 记录一下在linux服务器下配置nginx中nginx.conf文件代理访问springboot项目 1. spring boot.yml配置 其他mysql,redis,mybatis等之类的配置就不一一列出了 # 自定义配置 为了等下验证读取的配置文件环境 appName: productserver:port: 8083 # 应用服务 WEB 访问端口s…

分享:Motionity-开源的Web端动画编辑器

Motionity是一个免费且开源的Web端动画编辑器&#xff0c;它结合了After Effects和Canva的优点&#xff0c;为用户提供了强大的动画编辑功能。支持视频剪切、图像搜索过滤、文本动画库、图层蒙版等功能。 一、项目背景与特点 开源项目&#xff1a;Motionity是一个开源项目&…

docker push 推送镜像到阿里云仓库

1.登陆阿里云 镜像服务&#xff0c;跟着指引操作就行 创建个人实例&#xff0c;创建命名空间、镜像仓库&#xff0c;绑定代码源头 2.将镜像推送到Registry $ docker login --username*** registry.cn-beijing.aliyuncs.com $ docker tag [ImageId] registry.cn-beijing.aliy…

全国青少年软件编程等级考试-四级-奇偶之和(真题)

题目&#xff1a;奇偶之和 1.准备工作 (1)保留舞台中的小猫角色&#xff1b; 2.功能实现 (1)分别计算1&#xff5e;100中&#xff0c;奇数之和&#xff0c;偶数之和&#xff1b; (2)说出奇数之和&#xff0c;偶数之和。 讲解&#xff1a; 1、如何判断奇偶数 奇数是指除以2有…