Pandas绘图和Seaborn绘图

第一步先完成相关包的导入

python 复制代码
# 导包
import pandas as pd
import seaborn as sns               # 底层依赖 Matplotlib 
import matplotlib.pyplot as plt
import os

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

os.chdir(r'D:\LLM\pandasProject')  # 设置当前工作目录

1、Pandas绘图

复制代码
介绍: Pandas绘图可以基于 df对象直接绘图, 它的底层依赖 Matplotlib
python 复制代码
# 1. 加载数据集, 并设置 第1列为 索引列.
df = pd.read_csv('./data/winemag-data_first150k.csv', index_col=0)
df


# 列展示
# print(df.columns)
# Index(['country', 'description', 'designation', 'points', 'price', 'province',
#        'region_1', 'region_2', 'variety', 'winery'],
#       dtype='object')
python 复制代码
# 2. 查看数据集.
df.info()
df.describe()
复制代码
需求1: 绘制图形, 展示 产葡萄酒最多的10个产地的信息.
python 复制代码
# 3. 分组统计
# 思路1: 根据产地(province)分组, 基于points列(也可以是其它的不包含缺失值的列) 进行count统计即可.
df.groupby('province', as_index=False).points.count().sort_values('points', ascending=False).head(10)

# 思路2: value_counts() 值的个数, 且会自动降序排列, 它相当于: groupby() + count() + sort_values()
df['province'].value_counts().head(10)
python 复制代码
# 4. 针对于上述的结果, 绘图展示. 
df['province'].value_counts().head(10).plot()          # 折线图, 语法糖

# df['province'].value_counts().head(10).plot.line(figsize=(10, 5), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray'])          # 折线图
df['province'].value_counts().head(10).plot.bar(figsize=(10, 5), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray'], fontsize=15)      # 柱状图

# 5. 最终写法.
# step1: 定义变量, 记录参数, 字典形式.
text_kwargs = dict(figsize=(10, 5), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray'], fontsize=15)
# print(text_kwargs)

# step2: 绘图, 传参.
df['province'].value_counts().head(10).plot.bar(**text_kwargs)
复制代码
需求2: 绘制图形, 展示 葡萄酒最多的10个产地的 占比
python 复制代码
# 1. 计算 葡萄酒最多的10个产地.
df['province'].value_counts().head(10)

# 2. 计算 每个产地的 占比, 即:  产地产的葡萄酒数量 / 总共的葡萄酒数量
# len(df)     # 150930
df['province'].value_counts().head(10) / len(df)

# 3. 绘图
(df['province'].value_counts().head(10) / len(df)).plot.bar(**text_kwargs)
复制代码
需求3: 展示 每个评分的葡萄酒种类(个数), 即: 80分 -> 多少种酒, 85分 -> 多少种酒, 90分 -> 多少种酒, 95分 -> 多少种酒, 100分 -> 多少种酒
python 复制代码
# df.points.value_counts().sort_index().plot.line(**text_kwargs)      # 折线图
# df.points.value_counts().sort_index().plot.area(**text_kwargs)      # 面积图, 就是把区域内进行填充
df.points.value_counts().sort_index().plot.bar(**text_kwargs)         # 柱状图, 就是把区域内进行填充

2、Seaborn绘图

复制代码
# 介绍: Seaborn 是一个 Python 数据可视化库, 它基于 Matplotlib, 并且它提供了更高级的绘图功能.
# Pandas中绘图直接写单词, 例如: hist(), Seaborn中绘图是 图形名 + plot(), 例如: histplot()
python 复制代码
# 1. 加载数据集.
# df = pd.read_csv('./data/tips.csv')     # 离线方式.
df = sns.load_dataset('tips')             # 在线方式(电脑要联网), tips是Seaborn自带的数据集
df
复制代码
需求1: 绘制图形, 展示 男女总账单的情况
python 复制代码
# 1. 创建画布
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制图形.
# 参1: data: 数据集
# 参2: x: x轴的列名
# 参3: hue: 分组依据的列名
sns.histplot(data=df, x='total_bill', hue='sex')

# 3. 添加标题.
ax.set_title('男女总账单的情况', fontsize=15)

# 4. 展示图形.
plt.show()
复制代码
散点图, scatter(), regplot(), jointplot()
python 复制代码
# 需求: 描述 总账单 和 小费的分布情况
# 1. 创建画布
fig, ax = plt.subplots(figsize=(10, 5))

# 2. 绘制散点图
# 思路1: 散点图, scatter()
# 参1: data: 数据集
# 参2: x: x轴的列名, 总账单
# 参3: y: y轴的列名, 小费
# sns.scatterplot(data=df, x='total_bill', y='tip')

# 思路2: regplot(), 可以绘制散点图, 且可以绘制 拟合回归线(底层是: 线性回归)
# sns.regplot(data=df, x='total_bill', y='tip')
sns.regplot(data=df, x='total_bill', y='tip', fit_reg=True) # 绘制拟合回归线
# sns.regplot(data=df, x='total_bill', y='tip', fit_reg=False)  # 不绘制拟合回归线

# 思路3: jointplot(), 可以绘制散点图, 且可以绘制 拟合回归线(底层是: 线性回归)
# sns.jointplot(data=df, x='total_bill', y='tip', kind='hex')     # kind=hex -> 蜂巢图

# 3. 添加标题.
ax.set_title('总账单 和 小费的分布情况', fontsize=15)
# 4. 展示图形.
plt.show()
复制代码
箱线图, boxplot(), violinplot()
python 复制代码
# 绘制箱线图(也叫: 盒须图), 展示: 时间(time) 和 账单总金额(total_bill) 的分布情况
sns.boxplot(data=df, x='time', y='total_bill')
plt.show()
python 复制代码
# 需求: 查看 性别(sex) 和 账单总金额(total_bill), 时间(time) 的分布情况
# 小提琴图, 适用于: 箱线图 + 密度图
# 参1: data: 数据集
# 参2: x: x轴的列名, 时间(time)
# 参3: y: y轴的列名, 账单总金额(total_bill)
# 参4: hue: 分组依据的列名, 性别(sex)
# 参5: split: 是否将箱线图进行分割, 默认为False, 即不进行分割
sns.violinplot(data=df, x='time', y='total_bill', hue='sex', split=True)
plt.show()
相关推荐
追风少年ii3 小时前
文献分享--口腔黏膜免疫受独特的空间结构调控
大数据·数据挖掘·数据分析·空间·单细胞
AI前沿晓猛哥4 小时前
告别C盘红条!安全清理QQ安装目录的深度教程与工具评测
数据挖掘
Faker66363aaa5 小时前
如何使用RetinaNet进行中式菜品识别分类训练使用菜谱数据集炒菜,炖汤,蒸鱼,凉拌,烧烤,煎炸
人工智能·分类·数据挖掘
小王毕业啦10 小时前
2011-2024年 省、市北京大学数字普惠金融指数(xlsx)
大数据·人工智能·金融·数据挖掘·数据分析·社科数据·经管数据
ygw_10 小时前
O2O优惠券线下使用情况数据分析
数据挖掘·数据分析
Dxy12393102161 天前
DataFrame数据操作能力深度解析:从基础到高级的完整指南
pandas
AI生成网页工具1 天前
2026年北京本地企业级AI提效解决方案提供商推荐名单与专业对比
数据挖掘
好家伙VCC1 天前
# 发散创新:用Python+Pandas构建高效BI数据清洗流水线在现代数据分析领域,**BI(商业智能)工具的核心竞
java·python·数据分析·pandas
Lun3866buzha1 天前
机械零件识别与分类_基于YOLO11-seg的六角螺栓、方颈螺栓、六角螺母、弹性卡环、弹簧锁紧垫片和平垫片自动检测与识别_DRB_1
人工智能·分类·数据挖掘