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

news2025/1/11 4:22:07

文章目录

  • 怎样让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/566281.html

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

相关文章

机器学习之机器如何学习

通过Julia的语法、函数、编译器使机器学习技术变得更加简单。 1、机器学习如何工作 通过机器学习,研究人员可以构造算法,使计算机自身能够在大量的数据中找到数学模式,而这是人类不可能做到的。想想看: 如果我问你,你怎么知道一张…

Padstack editor 绘制SMD Pin,Thru Pin和Via

一,椭圆形状的SMD PIN 的创建(例如:0.55/0.23 补偿后 0.95/0.28) 1,在select padstack usage 中选择 SMD Pin ;select pad geometry中选择 Oblong; 2,先将左下角 decimal places中的值设置为2&…

Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)

目录 ①. 什么是内部类 ②. 内部类的共性 ③. 为什么需要内部类 ④. 成员内部类 ⑤. 局部内部类 ⑥. 静态内部类(嵌套类) ⑦. 匿名内部类 ①. 什么是内部类 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并…

C++常用的支持中文的GUI库Qt 6之三: 项目的发布

C常用的支持中文的GUI库Qt 6之三: 项目的发布 本文接着上一篇“C常用的支持中文的GUI库Qt 6之二:项目的结构、资源文件的使用” https://blog.csdn.net/cnds123/article/details/130741807介绍,并使用其中的例子。 程序代码能正确编译运行&…

1. Tomcat整体架构及其设计精髓分析

MySQL性能调优 1.Tomcat的整体架构1.1 Tomcat介绍1.1.1 Servlet基础回顾 1.2 目录结构1.3 web应用部署的方式1.4 结合Server.xml理解Tomcat架构1.5 架构图 2. Tomcat核心组件详解2.1 Server 组件2.2 Service组件2.3 连接器Connector组件2.3.1 ProtocolHandler 组件2.3.1.1 EndP…

全志V3S嵌入式驱动开发(移植linux kernel和rootfs)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 除了少部分嵌入式设备使用vxworks和freertos之外,大部分嵌入式都是使用linux来做基础os来使用的。linux使用场景很多,除了大…

智慧城市同城V4小程序V2.24独立开源版 + 全插件+VUE小程序开源前端+最新用户授权接口

智慧城市同城V4小程序V2.22开源独立版本月最新版,与上一版相比修复了一些小细节,功能本身并无大的变化。新版系统包含全插件、包括很多稀缺收费的插件都在里面如括招聘、 家政等,外加小程序的VUE开源前端,整个系统全开源&#xff…

chatgpt赋能python:PythonTic:了解一种强大的测试框架

Python Tic: 了解一种强大的测试框架 当你编写代码时,测试通常是不可或缺的一部分。Python Tic是一个出色的测试框架,它可以帮助您自动化测试和验证您的代码。 简介 Python Tic是一种基于Python的测试框架,它能够测试您的代码的各个方面&a…

鹅厂程序员的9个生存法则

👉腾小云导读 本文作者在腾讯多年,主要从事的是腾讯云CDN、EdgeOne产品的后台研发工作。作者在云计算领域遇到了不少代码设计和程序设计的问题,他对于如何把项目中的代码标准化、提高开发维护的效率,做了总结梳理。本篇为各位分享…

解密Java Class文件不为人知的秘密

Java 诞生多年,因此在网络上,有关 Java Class 文件格式解析的文章有很多,但他们大多数都是在列举《Java 虚拟机》中定义的格式,通读下来,好像所有的东西都讲清楚了,但是我个人好像并没有看懂,不…

舵机云台实现体感姿态跟随功能

1. 功能说明 本文示例将实现R207样机舵机云台根据六轴陀螺仪传感器数据实现姿态跟随的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩…

【012】C++循环控制语句 for 和 while 详解

C循环控制语句 for 和 while 详解 引言一、循环控制语句 for1.1、for 循环语句1.2、break和continue1.3、for循环的嵌套 二、循环控制语句while2.1、while循环语句2.2、break和continue2.3、do...while()循环语句 总结 引言 💡 作者简介:专注于C/C高性能…

【JavaSE】Java基础语法(九):封装

文章目录 ☔1. private关键字☔2. private关键字的使用☔3. this关键字☔4. this内存原理☔5. 封装思想 ☔1. private关键字 概述 : private是一个修饰符,可以用来修饰成员(成员变量,成员方法) 特点 : 被private修饰的成员&…

公网远程连接Redis数据库【内网穿透】

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 转发自cpolar内网穿透的文章:公网远程连接…

(El-button-group)解决:优化 el-button 实现 button 相连且动态切换的使用案例(涉及:动态绑定 class )

Ⅰ、Element-ui 提供的组件与想要目标情况的对比&#xff1a; 1、Element-ui 提供组件情况&#xff1a; 其一、Element-ui 自提供的代码情况为(示例的代码&#xff0c;例子如下)&#xff1a; // Element-ui 自提供的代码&#xff1a; <template><div><el-but…

深度解析多线程的创建方式和正确启动多线程

一、创建多线程 1. 实现多线程 java 实现多线程的方式准确来说有两种&#xff08;oracle官方文档说的&#xff09;&#xff1a; &#xff08;1&#xff09;实现 Runnable 接口&#xff0c; 重写run()函数&#xff0c;运行start()方法 代码演示&#xff1a; /*** 用Runnable…

移动端浏览器性能优化探索

在移动端的页面开发过程中&#xff0c;我们经常提及页面性能优化、消除页面卡顿的话题&#xff0c;如何确定优化策略&#xff0c;我们首先应当对页面卡顿的行为有所认知。 前言 &#xfeff; 页面的卡顿现象可以比较明确的分为三个类型&#xff0c;分别是 “画面撕裂” 、“丢帧…

让你不再好奇怎么给小说配音

你是否曾经想象过&#xff0c;当你在读小说时&#xff0c;你可以听到人物的声音&#xff0c;感受到情感和气氛的变化&#xff1f;有声书的出现已经让这一切成为可能。然而&#xff0c;如何为小说创造生动的配音效果却是一个需要仔细考虑的问题。如果你还不知道怎么给小说配音的…

酷开会员丨版权时代,酷开科技打造更多优质内容服务消费者

以版权产业为核心的文化产业&#xff0c;需要重视版权、鼓励创新&#xff0c;才能形成文化创新的环境与氛围&#xff0c;这也是版权时代的发展趋势。在版权时代&#xff0c;付费观看是基本意识&#xff0c;比如电视内容供应方提供了大量免费的资源&#xff0c;观众为观看更精良…

数据结构之二叉树的基本实现

在我们之前已经了解的堆这样的完全二叉树的实现&#xff0c;也对树型结构有了一些了解&#xff0c;那么今天我们来看看二叉树的一些性质。 因为二叉树是一种每个节点至多只有两个子树&#xff08;即二叉树的每个节点的度不大于2&#xff09;&#xff0c;并且二叉树的子树有左右…