GPT怎样教我用Python进行数据可视化

news2024/12/30 2:04:25

文章目录

  • GPT怎样教我用Python进行数据可视化
    • matplotlib
    • pyecharts
    • 总结

GPT怎样教我用Python进行数据可视化

🚀🚀首先,我们先看一下这段代码,这是我之前写来读取excel文件中xx大学在各个类别中的获奖情况,并保存在一个txt文件里面,代码逻辑比较简单,理解起来应该不难。

import xlrd

data = xlrd.open_workbook('xxxx.xls')  # 打开xls文件
table = data.sheet_by_index(0)  # 通过索引获取表格

# 初始化奖项字典
awards_dict = {
    "一等奖": 0,
    "二等奖": 0,
    "三等奖": 0
}

# 初始化科目字典
subjects_dict = {}

# 遍历表格的每一行,跳过表头
for i in range(1, table.nrows):
    row = table.row_values(i)
    # 是xx大学才进行处理
    if row[2] == 'xx大学':
        # 转为小写,避免首字母不一样带来的误判
        subject = row[4].lower()
        # 获得的奖项
        award = row[5]
        # 加入字典
        if subject not in subjects_dict:
            subjects_dict[subject] = awards_dict.copy()
        subjects_dict[subject][award] += 1

# 将结果写入文件
with open("result.txt", "w") as f:
    for subject, awards in subjects_dict.items():
        f.write(f"{subject}\n")
        for award, count in awards.items():
            f.write(f"{award}: {count}\n")
        f.write("\n")

🚀🚀运行结果:

c/c++程序设计大学a组
一等奖: 0
二等奖: 1
三等奖: 0

c/c++程序设计大学b组
一等奖: 23
二等奖: 51
三等奖: 40

java软件开发研究生组
一等奖: 0
二等奖: 1
三等奖: 0

java软件开发大学b组
一等奖: 4
二等奖: 8
三等奖: 12

python程序设计大学b组
一等奖: 2
二等奖: 6
三等奖: 5

web应用开发大学组
一等奖: 1
二等奖: 1
三等奖: 0

matplotlib

🚀🚀然后我们要求chatGPT根据上面的代码,用直方图展示xx大学在各个类别中的获奖情况,也就是去对这个文本文件进行数据可视化,于是chatGPT就生成了以下的代码。

import xlrd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']    # 设置中文字体,不然显示不了中文
data = xlrd.open_workbook('xxxx.xls')  # 打开xls文件
table = data.sheet_by_index(0)  # 通过索引获取表格

# 初始化奖项字典
awards_dict = {
    "一等奖": 0,
    "二等奖": 0,
    "三等奖": 0
}

# 初始化科目字典
subjects_dict = {}

# 遍历表格的每一行,跳过表头
for i in range(1, table.nrows):
    row = table.row_values(i)
    if row[2] == 'xx大学':
        # 转为小写,避免首字母不一样带来的误判
        subject = row[4].lower()
        award = row[5]
        if subject not in subjects_dict:
            subjects_dict[subject] = awards_dict.copy()
        subjects_dict[subject][award] += 1

# 直方图展示xx大学在各个类别中的获奖情况
x_labels = subjects_dict.keys()
x = range(len(x_labels))

# 提取各个奖项的数量
y_first = [subjects_dict[subject]['一等奖'] for subject in x_labels]
y_second = [subjects_dict[subject]['二等奖'] for subject in x_labels]
y_third = [subjects_dict[subject]['三等奖'] for subject in x_labels]

# 设置颜色
color_first = 'skyblue'
color_second = 'lightgreen'
color_third = 'lightcoral'

# 绘制直方图
plt.bar(x, y_first, width=0.2, align='center', label='一等奖', color=color_first)
plt.bar(x, y_second, width=0.2, align='edge', label='二等奖', color=color_second)
plt.bar(x, y_third, width=-0.2, align='edge', label='三等奖', color=color_third)

# 添加辅助线
plt.axhline(0, color='gray', linewidth=0.8)
plt.axvline(-0.5, color='gray', linewidth=0.8)

plt.xlabel('类别')
plt.ylabel('获奖数量')
plt.title('xx大学在各个类别中的获奖情况')
plt.xticks(x, x_labels)
plt.legend()

# 调整图例位置和边框样式
plt.legend(loc='upper right', frameon=False)

# 设置图形背景色
plt.gca().set_facecolor('whitesmoke')

# 调整图形布局
plt.tight_layout()

plt.show()

🚀🚀运行代码,于是得到以下结果:

在这里插入图片描述

🚀🚀乍一看,好像没啥问题,但是细看会发现大问题,就是我们无法正确显示一等奖的个数,一开始我还以为是统计的出了问题,后来检查后并不是,原因还是出现在显示上,看以下代码:

# 绘制直方图
plt.bar(x, y_first, width=0.2, align='center', label='一等奖', color=color_first)
plt.bar(x, y_second, width=0.2, align='edge', label='二等奖', color=color_second)
plt.bar(x, y_third, width=-0.2, align='edge', label='三等奖', color=color_third)

🚀🚀一等奖和二等奖的x和width都是一样的,所以可能出现了重合,看来这里有点小问题,于是我们进行一点微调,然后就有了后面的代码:

import xlrd
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']    # 设置中文字体,不然显示不了中文
data = xlrd.open_workbook('xxxx.xls')  # 打开xls文件
table = data.sheet_by_index(0)  # 通过索引获取表格

# 初始化奖项字典
awards_dict = {
    "一等奖": 0,
    "二等奖": 0,
    "三等奖": 0
}

# 初始化科目字典
subjects_dict = {}

# 遍历表格的每一行,跳过表头
for i in range(1, table.nrows):
    row = table.row_values(i)
    if row[2] == 'xx大学':
        # 转为小写,避免首字母不一样带来的误判
        subject = row[4].lower()
        award = row[5]
        if subject not in subjects_dict:
            subjects_dict[subject] = awards_dict.copy()
        subjects_dict[subject][award] += 1

# 直方图展示xx大学在各个类别中的获奖情况
x_labels = subjects_dict.keys()
x = np.arange(len(x_labels))  # 使用numpy的arange生成连续的横坐标值

# 提取各个奖项的数量
y_first = [subjects_dict[subject]['一等奖'] for subject in x_labels]
y_second = [subjects_dict[subject]['二等奖'] for subject in x_labels]
y_third = [subjects_dict[subject]['三等奖'] for subject in x_labels]

# 设置颜色
color_first = 'skyblue'
color_second = 'lightgreen'
color_third = 'lightcoral'

# 绘制直方图
plt.bar(x, y_third, width=0.2, align='center', label='三等奖', color=color_third)
plt.bar(x + 0.2, y_second, width=0.2, align='center', label='二等奖', color=color_second)
plt.bar(x - 0.2, y_first, width=0.2, align='center', label='一等奖', color=color_first)

plt.xlabel('类别')
plt.ylabel('获奖数量')
plt.title('xx大学在各个类别中的获奖情况')
plt.xticks(x, x_labels)
plt.legend()

# 调整图例位置和边框样式
plt.legend(loc='upper right', frameon=False)

# 设置图形背景色
plt.gca().set_facecolor('whitesmoke')

# 调整图形布局
plt.tight_layout()

plt.show()

🚀🚀运行结果如下所示,显示正常。

在这里插入图片描述

pyecharts

🚀🚀但是我们不会就此停下,刚好笔者接触过另外一个数据可视化库pyecharts,所以问问GPT能不能基于这个库来优化一下。

🚀🚀pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。

import xlrd
from pyecharts.charts import Bar
from pyecharts import options as opts

data = xlrd.open_workbook('xxxx.xls')  # 打开xls文件
table = data.sheet_by_index(0)  # 通过索引获取表格

# 初始化奖项字典
awards_dict = {
    "一等奖": 0,
    "二等奖": 0,
    "三等奖": 0
}

# 初始化科目字典
subjects_dict = {}

# 遍历表格的每一行,跳过表头
for i in range(1, table.nrows):
    row = table.row_values(i)
    if row[2] == 'xx大学':
        # 转为小写,避免首字母不一样带来的误判
        subject = row[4].lower()
        award = row[5]
        if subject not in subjects_dict:
            subjects_dict[subject] = awards_dict.copy()
        subjects_dict[subject][award] += 1

# 直方图展示xx大学在各个类别中的获奖情况
x_labels = subjects_dict.keys()

# 提取各个奖项的数量
y_first = [subjects_dict[subject]['一等奖'] for subject in x_labels]
y_second = [subjects_dict[subject]['二等奖'] for subject in x_labels]
y_third = [subjects_dict[subject]['三等奖'] for subject in x_labels]

# 使用 Pyecharts 绘制直方图
bar = (
    Bar()
    .add_xaxis(list(x_labels))
    .add_yaxis('一等奖', y_first)
    .add_yaxis('二等奖', y_second)
    .add_yaxis('三等奖', y_third)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
        yaxis_opts=opts.AxisOpts(name='获奖数量'),
        title_opts=opts.TitleOpts(title='xx大学在各个类别中的获奖情况'),
        legend_opts=opts.LegendOpts(pos_right='5%', pos_top='20%')
    )
)

# 生成图表并保存为 HTML 文件
bar.render('bar_chart.html')

🚀🚀运行结果如下所示:

在这里插入图片描述

🚀🚀到这里,就基本就达到我的要求了,甚至超出了我的期望,于是我也没继续追问了,当然肯定还有继续优化的空间,但是也算是基本完成了任务。

总结

🚀🚀虽然笔者接触过一点matplotlib,但是因为长期未使用,用的不算很熟练,于是就想起来用GPT帮我完成基本设计。然后在用的过程中,与他交流,不断向他学习,收获很大,并且本人不会pyecharts库,但是在GPT的介绍下也算有了一些简单的认知,所以把GPT比作一个百问不厌的老师毫不过分,但是还是希望大家能自己主动思考。

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

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

相关文章

【数据结构】24王道考研笔记——线性表

线性表 目录 线性表定义和基本操作顺序表静态顺序表动态顺序表 链表单链表不带头结点:带头结点: 双链表循环链表循环单链表:循环双链表: 静态链表 顺序表链表比较逻辑结构:存储结构:基本操作: 定…

【JUC基础】11. 并发下的集合类

目录 1、前言 2、并发下的ArrayList 2.1、传统方式 2.1.1、程序正常运行 2.1.2、程序异常 2.1.3、运行期望值不符 2.2、加锁 2.3、synchronizedList 2.4、CopyOnWriteArrayList 3、并发下的HashSet 3.1、CopyOnWriteArraySet 3.2、HashSet底层是什么? 4…

python基础----环境搭建-----01

一 python介绍 1.1 Python 特点 Python 是完全面向对象的语言。函数、模块、数宁、宁符串都是对象,在 Python 中一切皆对象。完全支持继承、重载、多重继承。支持重载运算符,也支持泛型设计。Python 拥有一个强大的标准库,Python 语言的核心…

element-ui菜单el-menu的使用

效果演示 先给大家看一下效果吧 el-menu详解 Menu Attributes# 属性名说明类型可选值默认值mode菜单展示模式stringhorizontal / verticalverticalcollapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)boolean—falseellipsis是否省略多余的子项…

四、 JSP04 Servlet 技术

四、 Servlet 技术 4.1 认识 Servlet Web 容器在处理 JSP 文件时,会将 JSP 文件通过 JSP 容器转换成可识别的 .java 文件 这个 .java 文就是一个 Servlet 类,JSP 技术就是基于 Servlet 实现的 4.1.1 什么是 Servlet Servlet 是一个符合特定规范的 Java…

Linux系统编程学习 NO.5 ——shell命令行的概念以及原理、权限的概念

1.shell命令行的概念以及原理 首先,用户下达指令需求。此时Linux操作系统的内核kernel,并不会直接接收用户下达的指令,因为操作系统不擅长跟用户打交道。那么指令要如何下达呢?这就命令行解释器来对用户的指令进行处理。 1.1.shell命令行的…

每日学术速递5.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Text2NeRF: Text-Driven 3D Scene Generation with Neural Radiance Fields 标题:Text2NeRF:具有神经辐射场的文本驱动 3D 场景生成 作者:Jingb…

从组件化角度聊聊设计工程化

目录 设计系统 设计系统的定义 设计系统的优势 设计系统存在的问题 设计工程化 设计系统探索 设计系统落地实践 Design Token Design Token 实践 设计工程化理想方案构想 展望 参考文献 近几年围绕业务中台化的场景,涌现出了许多低代码平台。面对多组件…

RAW、RGB 、YUV三种图像格式理解

文章目录 1. 背景2. 相关概念2.1 颜色与色彩空间2.2 RAW图像2.3 RGB图像2.4 YUV图像 3. 分类简图 RAW、RGB 、YUV三种图像格式理解 1. 背景 在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认…

Redis实战之实现共同关注

Redis实战之实现共同关注 一 需求 二 实现 package com.hmdp.service.impl;import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.…

用ChatGPT一分钟自动产出一份高质量PPT

如何用ChatGPT一分钟自动产出一份高质量PPT,节约时间摸鱼呢?废话少说,直接上案例。 一.用ChatGPT做一下提问,这里我用的小程序万事知天下,根据自己PPT的需求,制作chatgpt的prompt就行了。 请帮我创建一个以…

Spring Security 核心解读(一)整体架构

Spring Security 整体架构 前提整体架构Servlet 整体的过滤器模型Security 过滤器链自定义过滤器 实际开发解决方案一个替代cookie认证的filter其他组件,后续抽时间再整理整理 前提 开源项目一手文档基本都在github,标准文档基本都在官网。 最好的文档就…

在Centos Stream 9上Docker的实操教程 - Docker的常用命令

在Centos Stream 9上Docker的实操教程 - Docker的常用命令 Docker启动类命令Docker镜像命令镜像列表 docker images镜像查找 docker search拉取镜像 docker pull删除镜像 docker rmi查看占用信息 docker system df容器创建新镜像 docker commit 容器命令启动容器 docker run查看…

【历史上的今天】4 月 27 日:Tumblr 上线;施乐推出了 Star 工作站;第一台安德伍德打字机诞生

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 4 月 27 日,在 1791 年的今天,摩斯电码的共同发明者、电报发明者塞缪尔摩斯(Samuel Morse)诞生。摩斯最开始是一…

基于springboot + vue 的学生成绩管理系统

基于springboot vue实现的学生成绩管理系统 主要模块: 1)学生模块:我的成绩、成绩统计、申述管理、修改密码 2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3)管理员模块&…

Vue自定义插件的使用

通过 Vue 实例绑定方法: 在 plugins.js 文件中创建 filter 过滤器,定义一个只返回前四个字符的方法。 export default {install(Vue){// 定义过滤器Vue.filter(mySlice,function(value){return value.slice(0,4);})} } 由于我们之前在 main.js 文件中引入…

六级备考20天|CET-6|翻译练习|真题·红楼梦|8:50~9:08+11:33~12:00

目录 1 中文 2 英文​ 3 解析 4 订正 ​ 1 中文 漏翻译:具有很强的艺术感染力! 2 英文 3 解析 tell 讲述 tragic love story 悲剧性爱情故事 own painful personal experience 自己痛苦的个人经历 major/minor characters 主要/次要人物 be viv…

SSH爆破攻击及应急响应/事件处置

提示:本文是我做的笔记,有问题可以留言 目录 前言一、什么是SSH?二、开始前的准备1.扫描2.准备爆破3.准备ssh登录登陆后的准备nc反弹 应急响应/事件处置1.查看网络连接情况2.查看守护进程3.删除,结束异常后门4.修改密码 总结 前言…

day40_servlet

今日内容 零、 复习昨日 一、注解 二、改造项目 三、请求转发 四、重定向 零、 复习昨日 一、注解(Annotation) 注解,又称为注释.它是给程序看的注释. JDK1.5后才出现的,作用是为了提高开发效率的,如何做到?(一个注解可以简化很多很多代码…) 常见注解: Override 1.1 自定义注…

Linux基础开发工具之软件包管理器

目录 前言 1.什么是软件包 2.软件下载的三种方式 3. Linux软件生态 4. 使用yum安装软件 5.yum源的相关介绍 总结: 前言 Linux作为一款操作系统,其自然也和我们其他的操作系统一样需要安装对应得软件去满足我们的需求,因此为了更好的下载…