2023 年 7 月 6 日,OpenAI 宣布 Code Interpreter 将在下周向 ChatGPT Plus 用户提供。它可能是增强 ChatGPT 功能的所有插件中最出色的。
代码解释器运行代码并允许上传数据,因此您可以使用它进行数据清理、分析、可视化和许多其他操作。它就像一个触手可及的数据分析师。
听起来太酷了?让我们继续。
我用它来完成一项任务,这可能需要几个小时才能完成。根据您的任务以及对 Python 库的熟悉程度,此任务甚至可能需要更长时间。
使用 ChatGPT,我只需编写几句话并上传两个 CSV 文件。
我将逐步引导您完成整个过程,以及代码解释器在各种任务(例如理解数据、清理和预处理数据以及创建数据可视化)方面的令人印象深刻的表现。
您需要先启用它
为了在聊天中使用代码解释器,您需要首先通过设置启用它。
如何启用代码解释器(作者提供的图片)
现在,当您开始新的聊天时,它就可用了。
任务
我打算创建一个世界地图可视化,用点的大小指示国家/地区,这些点的大小与国家/地区的人口成正比。
我有两个数据集,一个用于国家人口,另一个用于纬度和经度位置。
您可以轻松地在线找到这些数据集。
开始吧…
由于这是一项简单的任务,我没有花太多时间在即时工程上。这是我向 ChatGPT 请求的第一句话:
您可以使用提示窗口左侧的加号来上传数据集。
它首先读取数据集,这是显而易见的事情。还没有令人印象深刻!
# 由代码解释器生成的代码
import pandas as pd
# 将 CSV 数据加载到 pandas DataFrame中
population_data = pd.read_csv( '/mnt/data/country_population_historic.csv' )
# 显示DataFrame的前几行
population_data.head()
然后,ChatGPT 询问国家/地区位置:
我已经有了数据,所以我上传了它:
(图片由作者提供)
# Code Interpreter 生成的代码
# 加载国家坐标数据
country_coordinates = pd.read_csv( '/mnt/data/country_coordinates.csv' )
# 显示前几行
country_coordinates.head()
数据清洗和预处理
读取数据后的下一步是清理和预处理。我相信您已经听过很多次了,这一步通常需要花费最多的时间。
在创建世界地图可视化之前需要处理一些问题。ChatGPT 检测到它们并在不到一分钟的时间内提供了解决方案。相当令人印象深刻!
(图片由作者提供)
上面代码片段中的代码:
# 由代码解释器生成的代码
# 检查两个数据帧中的国家/地区名称是否一致
population_countries = set (population_data[ 'Country Name' ])
Cocoles_countries = set (country_coordinates[ 'name' ])
# 人口数据中但不在人口数据中的国家坐标数据
missing_in_cooperatives = Population_countries - Cocoles_countries
# 坐标数据中但不在人口数据中的国家
missing_in_population = Cocoles_countries - Population_countries
坐标数据集中缺少一些国家,人口数据集中也缺少一些国家。
ChatGPT 在上面的代码片段中做了什么:
- 在两个数据集中创建国家/地区名称的 Python 集
- 单独比较它们以找出集合中的差异
ChatGPT 不到一分钟就解决了这个问题:
上面代码片段中的代码:
# 由代码解释器生成的代码 # 将国家名称从人口数据集映射到坐标数据集 country_name_mapping = { 'Bahamas, The' : 'Bahamas' , 'Brunei Darussalam' : 'Brunei' , 'Cabo Verde' : 'Cape Verde', '刚果,民主党。众议员。” : '刚果[刚果民主共和国]' , '刚果共和国' : '刚果[共和国]' , "科特迪瓦" : "科特迪瓦" , '捷克' : '捷克共和国' , '埃及, 阿拉伯代表” :“埃及”, “冈比亚”:“冈比亚”、 “中国香港特别行政区”:“香港”、 “伊朗伊斯兰共和国” :“伊朗”、 “韩国、民主党、人民代表” :“朝鲜”、 “韩国” :“韩国”、 “吉尔吉斯共和国”:“吉尔吉斯斯坦”、 “老挝人民民主共和国”:“老挝”、 “中国澳门特别行政区”:“澳门”、 “密克罗尼西亚联邦”。圣。' : '密克罗尼西亚' , : '马其顿 [前南斯拉夫马其顿共和国]' , '俄罗斯联邦' : '俄罗斯' , '圣多美和普林西比' : '圣多美和普林西比' , '斯洛伐克共和国' : '斯洛伐克' , '阿拉伯叙利亚共和国' : '叙利亚' , '土耳其' : '土耳其' , '委内瑞拉,RB' : '委内瑞拉' , '也门共和国' : '也门' , '斯威士兰' : : Country_name_mapping}) # 删除坐标数据集中不存在的行 population_data_clean = Population_data_clean[population_data_clean[ 'Country Name' ].isin(coordinates_countries)] # 将人口数据与国家坐标数据 合并 merged_data = pd.merge(population_data_clean , Country_coordinates, left_on= 'Country Name' , right_on= 'name' ) # 仅保留必要的列 merged_data = merged_data[[ 'Country Name' , '2022' , 'latitude' , 'longitude' ]] # 重命名列清晰度 合并数据。列 = [ '国家', '人口' , '纬度' , '经度' ] merged_data.head()
现在我们的数据格式良好且干净。此步骤通常需要花费大量时间和人力。ChatGPT 大约一分钟就完成了。
创建可视化
ChatGPT 首先尝试使用 Matplotlib 库来完成此任务。然而,由于没有世界地图图像,它未能做到这一点:
(图片由作者提供)
然后,我只是要求它使用 Plotly,这也是我一开始的想法。
(图片由作者提供)
(图片由作者提供)
上面代码片段中的代码:
# 由代码解释器生成的代码importplotly.graph_objects as go # 创建散点地理图 Fig = go.Figure(data=go.Scattergeo( lon = merged_data[ 'Longitude' ], lat = merged_data[ 'Latitude' ], text = merged_data[ '国家' ] + ': ' + merged_data[ '人口' ].astype( str ), mode = '标记' , 标记 = dict ( 大小 = (merged_data[ '人口' ] / 1000000 ) ** 0.5 , # 取平方根以更好地可视化差异 sizemode = 'diameter' , sizeref = 1 , sizemin = 4 , color = merged_data[ 'Population' ], colorscale = 'Viridis' , colorbar_title = "Millions" , ) ) ) # 更新布局 Fig.update_layout( title_text = '2022 年世界人口' , geo = dict ( showframe = False , showcoastlines = True , 投影类型 = '等矩形' ) ) Fig.show()
最后的话
我们所做的:
- 读取数据集
- 清理、预处理并合并它们
- 创建交互式数据可视化
我们所要做的就是写两个句子(加上告诉 ChatGPT 使用 Plotly)。我认为这非常令人印象深刻!