以下是关于将数据分析转成可视化图的相关内容:
实践 1:用 Kaggle 的天气数据集绘制气温趋势折线图与月降雨天数柱状组合图
项目要求:绘制气温趋势折线图+月降雨天数柱状组合图,即双 y 轴图形。
打开数据集,分析数据:
新建 python 文件,开始编程:
试运行与 Debug:
ChatGPT 助力数据分析:实际案例与技巧
问题与技巧:
流程:
[heading4]项目要求[content]绘制气温趋势折线图+月降雨天数柱状组合图组合图,也就是需要绘制双y轴的图形[heading4]打开数据集,分析数据[content]我们发现第一行有着Formatted Date,Precip Type,Temperature表头,这三列与我们数据可视化的目的有着明显关联,Formatted Date的数据提取整理后可以作为图标的横坐标,Precip Type的数据可以反映月降雨天数,Temperature的数据可以反应气温趋势。简单来说,需要三项关键数据,x轴上的,两个y轴上的数据。[heading4]新建python文件,开始编程[content]选择python文件,命名保存,例如我命名的“实践一”调用库[heading5]a、读取数据[content]该文件格式为csv,因此可以用pandas库中的文件路径可用鼠标右键点击,然后复制路径或者复制相对路径得到,完成后如图所示。[heading5]b、数据处理[content]处理出x轴的数据让我们尝试使用MarsCode书写代码:MarsCode提示词:处理有关气温的数据MarsCode提示词:处理有关降雨的数据MarsCode提示词:[heading5]c、创建图表[heading5]d、添加标题与图例[heading5]e、保存并显示图形[heading4]试运行[content][heading4]Debug[content]可以发现左纵坐标数据明显有误,降雨天数不可能这么大,重新分析数据集,我们发现它一天记录了多个时刻的天气状况,而写代码时没有考虑到这个情况,直接把出现了“rain”的都记录了进去,导致数值远远大于实际值。给MarsCode说明现在面临的问题,然后重新生成代码MarsCode提示词:将原来的改为:再次运行:结果符合预期,我们的可视化目的实现了!
对上面的流程,记录开发时一些问题和技巧,部分我采用一问一答形式说明。[heading3]公用逻辑[content]1、为什么在user prompt限定SQL和数据分析及其返回格式,而不用system prompt?有两个方面,一是因为system prompt已经承载了表结构信息;二是user prompt遵循力度更高。尝试多次,还是让user prompt承载具体返回格式更为精确,这一操作在后端进行,防止用户通过开发者工具查看参数。2、为什么分开定义单维度数据和多维度数据的prompt,而不直接丢给让GPT判断?最好不要给让GPT存在两种返回格式的prompt。例如:“如果数据是单维度,你就返回{xxx},如果数据是多维度,你就返回{xxx}”。这类存在两种结果导向的prompt,我尝试了多次,大约有50%的几率GPT会犯傻(明明是单维度,却返回多维度格式,反之多维度却返回单维度格式)所以最好的解决方式是在发送请求前用条件运算符区分这两个格式的prompt,代码判断一下是单维度还是多维度数据,再决定用哪个prompt,再传给ChatGPT,尽量让这个prompt只存在一种结果导向。3、前端如何渲染图表?SQL分析的接口或个性化分析解析的数据文件所获得的tableData,其格式与渲染表格的格式一样:对象数组。让GPT判断出对象的key值映射:keyMap,得知维度、数据项、数据值的key,就可以拿到并处理成图表所需的series、xAxis。
1.第一个user prompt:限定SELECT SQL,这里告诉它:不要用SELECT*来查询全部列,且仅回复一条SELECT SQL语句。至少查询两列:数据项、数据值,且不能直接查询如mediumtext/longtext这样的长类型字段,可以用count/substring等函数查询这些长类型列。2.system prompt是表结构信息,如有难以理解的字段可以告诉GPT字段的意义,有多个表可分开描述。3.需校验GPT生成的SQL,不通过直接返回提示:抱歉,不支持此类请求。通过再执行SQL查询数据。4.数据分析的user prompt:提示数据分析,限定返回的JSON格式:conclusion、keyMap、title。keyMap的作用:数据key的映射,获取结果数据对应的维度、数据项、数据值的key值,用于映射数据渲染图表。由于支持多维数据,单维度数据的keyMap没有维度项,就存在让GPT返回两种结构的情况。这里我采取分开定义单维度数据和多维度数据的prompt,根据结果数据tableData的维度,用条件运算符选择对应的prompt,再传递给GPT。5.结果数据tableData是跟随接口一起返回到前端,已经通过SQL查询的数据,不能让GPT又生成一次,否则非常耗时。