OpenAI总算敞开Code Interpreter给一切Plus用户运用了,这是一个天大的好消息,我迫不及待就开端了测验,测验成果也是喜不自禁。因为Python代码的加持,能发挥Code Interpreter最大才干的范畴便是数据剖析了。普通的Excel数据剖析底子不在话下,专业的数据剖析也能够经过跟ChatGPT对话来进行,彻底改变了数据剖析的办法。
为了充沛展现Code Interpreter的才干,我特别从Kaggle上找了一个数据集,并交给它一系列从简略的数据剖析并生成图表到杂乱的机器学习建模使命,由浅入深的探究了Code Interpreter的才干。
不论你日常运用Excel进行数据剖析,仍是用Python代码,都能从这个案例知道怎么运用Code Interpreter以及它的才干。
这个数据集是关于奈飞 (Netflix) 8000多部电影和电视的数据,包括导演,艺人,评级,发布时刻,观看时刻,节目类型,节目描绘等数据。
我会首要介绍怎么装置Code Interpreter,然后一步步让它完结从简略到杂乱的数据剖析使命。最终,我对Code Interpreter对数据剖析范畴的影响和它本身的约束做了一个总结。
怎么装置Code Interpreter
现在ChatGPT的代码解说器 (Code Interpreter)的运用条件是要有ChatGPT Plus账号。登录ChatGPT今后,点击左下角用户名右边的三个点形状的按钮,翻开ChatGPT的设置窗口。
在新翻开的窗口中,点击左边的”Beta features”,然后把右侧下方的Code interpreter切换到翻开状态。
关闭窗口,把鼠标悬停在ChatGPT主界面上方的”GPT-4″按钮上,然后在弹出的下拉菜单里挑选”Code interpreter”。
这样咱们就成功激活了Code interpreter。
数据整理和预处理
ChatGPT的一个缺陷是无法直接上传文件,必需求经过网页衔接或许第三方插件才干读取文件。可是有了代码解说器 (Code Interpreter),你能够直接上传数据文件了。
它支撑512M以内的文件上传,并且上传前还能够解压缩。这个巨细关于数据剖析来说很足够了,你能够上传一个几百万行的csv文件。
激活了Code Interpreter今后,聊天输入框内的左边会呈现一个加号,点击它就能够翻开本地电脑的文件浏览器了。
我直接把从Kaggle上下载的解压包上传,省的再解压缩了。
上传今后,我就直接开端给它使命了:
作为一个专业的数据剖析员,请遵循标准的数据剖析程序。让咱们一步一步来。
ChatGPT在进行开端的数据剖析之后,给出的回复是这样的:
很好,让咱们开端数据剖析进程。以下是咱们一般遵循的进程:
- 1. 数据收集:在这种状况下,你现已供给了一个数据集。
- 2. 数据处理:这包括数据整理,处理缺失值,以及其他必要的转换。
- 3. 探究性数据剖析(EDA):这包括经过核算和可视化来了解数据的特征。
- 4. 建模(如有必要):依据剖析的方针,咱们或许树立核算或机器学习模型。
- 5. 解说:最终,咱们解说成果并作出定论或主张。
让咱们从第一步开端。你供给了一个名为
archive.zip
的文件,所以让咱们提取它并检查其内容,以更好地了解数据集。
archive.zip
文件包括一个CSV文件,名为netflix_titles.csv
。这好像是一个关于Netflix标题的数据集。让咱们持续进行数据剖析进程的下一步,即数据处理。咱们将阅览CSV文件,看看前几行,以了解它的结构和它所包括的数据类型。
该数据集包括以下几列:
show_id
: 每个节目的仅有标识符。type
: 节目的格局(电影或电视节目)。title
: 该节目的标题。director
: 该节目的导演。cast
: 参与表演的艺人。country
: 制造该节目的国家。date_added
: 该节目被增加到Netflix的日期。release_year
: 该节目开端发布的年份。rating
: 该节目的评级。duration
: 该节目的持续时刻。listed_in
: 该节目的类型。description
: 对该节目的简短描绘。在咱们进一步进行剖析之前,检查数据是否有缺失值或需求处理的不一致之处,是有优点的。让咱们检查一下咱们的数据会集的缺失值。
下面是每一列中缺失值的计数:
director
: 2634个缺失值cast
: 825个缺失值country
: 831个缺失值date_added
: 10个缺失值rating
: 4个缺失值duration
: 3个缺失值
director
,cast
, andcountry
这几列有相当多的缺失值。依据咱们的剖析方针,咱们能够用一个恰当的值(如’不知道’)来填补这些值,或许咱们能够决议忽略这些列,假如它们与咱们的剖析不相关。在
date_added
,rating
, 和duration
列中,只要几个缺失值。咱们能够考虑删去这些列中有缺失值的行,或许假如咱们能确定一个适宜的值,就把它们填进去。下一步是探究性数据剖析。可是,咱们需求先决议怎么处理这些缺失值。你想怎么进行?
假如你点击ChatGPT的回复里面的”Show Work”按钮,就会打开如下代码:
importzipfile
importos
#Pathtothezipfile
zip_path="/mnt/data/archive.zip"
#Directorytoextractto
extract_dir="/mnt/data/archive/"
#Createdirectorytoextracttoifitdoesn'texist
os.makedirs(extract_dir,exist_ok=True)
#Openthezipfile
withzipfile.ZipFile(zip_path,'r')aszip_ref:
#Extractallthecontentsofzipfileinthedirectory
zip_ref.extractall(extract_dir)
#Listthecontentsofthedirectoryafterextraction
contents=os.listdir(extract_dir)
contents
Code Interpreter不仅为咱们剖析了数据,展现了剖析进程,同时还输出了代码。关于会Python代码的同学来说,会更加清楚Code Interpreter进行数据剖析的底层逻辑。不懂代码也不要紧,Code Interpreter为每一行都增加了注释。
经过以上代码和注释,你会发现ChatGPT其实在解压缩文件这个环节也是用了Python的os
和zipfile
库。咱们其实并未让它解压缩,一切都是主动运行的。接下来它读取了各列的称号,并用它的了解对各个列名进行了诠释。这也是用ChatGPT剖析数据的一大优势—它知道什么是奈飞,电影和电视这些论题,所以能够帮咱们比较精确的解读数据。
接下来它把每一列的缺失数据的总和都列举出来,并且依据缺失值的数量和剖析的方针,给了处理这些缺失值的主张。因为假如有空数据的话,剖析起来或许会报错,不合理的数据也会干扰剖析的成果,所以数据的清洗一般是数据剖析进程中一个十分重要的环节。
因为ChatGPT存在随机性,有时它或许不会给出数据清洗的主张,这时候你能够主动要求它给出数据清洗的主张。也能够越过这一步,后续遇到问题它会自行整理,谁叫它是机器呢,不嫌费事。可是为了削减碳脚印,咱们就让依照它给出的主张清洗数据吧。所以我给了它这样一个Prompt:
将导演、艺人和国家的缺失值填写为 “不知道”,并删去增加日期、评级和观看时刻的缺失值的行。
ChatGPT是这样回复的:
一切缺失值都已成功处理。该数据集不再包括任何缺失值。
现在咱们能够进入下一个进程: 探究性数据剖析(EDA)。在这一步,咱们将深化研讨数据集,了解数据的散布,不同变量之间的联系,并确定任何有趣的形式或见地。
你想在这个数据会集探究哪些具体方面?例如,咱们能够看看电影与电视节目的散布,剖析多年来增加的内容,或许看看哪些国家出产的内容最多,等等。
探究性数据剖析 (EDA)
假如把数据看作一个拼图的话,EDA便是拼图的第一步。它协助咱们了解拼图的大约样子,找到重要的部分,并开端树立联络。
EDA在数据剖析中起着至关重要的作用,因为它能够协助咱们开端熟悉数据集,并确定能够为进一步剖析供给信息的要害特征。例如,在市场营销中,EDA能够协助辨认客户群,了解购买形式,并发现市场趋势。在医疗保健范畴,它能够提醒患者数据的形式,辨认危险因素,并协助进行疾病诊断。在金融范畴,EDA能够协助剖析市场趋势,辨认投资机会,并检测欺诈。
已然Code Interpreter告诉咱们下一步它将探究数据,那么就让它这样进行吧:
作为一个专业的数据剖析师,请自己做出决议。
它这样回复:
好吧,让咱们从探究数据的一般方面开端。以下是咱们能够采取的几个进程:
- 1. 类型散布(电影与电视节目):这能够让咱们了解到Netflix上最遍及的那种内容。
- 2. 逐年增加的内容:这项剖析能够让咱们看到Netflix上增加的内容随时刻推移的趋势。
- 3. 按国家区分的内容出产:这能够告诉咱们哪些国家是Netflix上的首要内容出产国。
- 4. 评级散布:这能够让咱们了解Netflix上最遍及的内容种类(就老练度评级而言)。
让咱们从类型的散布开端(电影与电视节目)。
该图显现,数据会集的电影比电视节目多,标明Netflix的电影收藏量比电视节目多。
接下来,让咱们剖析一下这些年Netflix上内容的增加趋势。要做到这一点,咱们首要需求从
date_added
列中提取年份。留意,咱们现在的数据是一个字符串,所以咱们要把它转换成日期时刻格局,然后再提取年份。
该图显现了每年增加到Netflix的电影和电视节目的数量。咱们能够看到多年来内容增加的明显趋势,2016年前后增加的电影数量明显增加,每年增加的电视节目数量也在稳步增加。从2018年到2020年,增加的内容有一个特别明显的上升。
接下来,让咱们看看哪些国家出产的内容最终呈现在Netflix上。因为一些节目列出了多个国家,咱们需求将这些条目拆分,以取得精确的计数。为了这次剖析的目的,咱们将考虑前10个国家。
柱状图显现了Netflix上的内容出产数量的前10个国家。到现在为止,美国是最大的出产国,其次是印度、英国、加拿大和法国。
最终,让咱们看一下Netflix上的内容评级散布。这能够供给一个关于方针受众在年龄组和内容老练度方面的主意。
该图显现了Netflix上内容评级的散布。最常见的评级是 “TV-MA”,这是为老练的观众预备的,其次是 “TV-14″,合适14岁以上的儿童,以及 “TV-PG”,这标明有家长监督。
咱们的探究性数据剖析到此结束。这些见地使咱们对数据集和Netflix上的内容类型有了很好的了解。
你想持续进行建模,或许在数据会集还有什么想探究的吗?建模一般是为猜测或分类使命做的,假如咱们的方针只是了解数据集,或许就没有必要了。
Code Interpreter依据它对数据内容和剖析方针的了解,从4个视点给出了探究性剖析。这些视点确实是很好的切入口,让咱们能很快地了解数据集的大约状况,为后边更深化的剖析做了铺垫。
在剖析进程中,它会依据剖析方针主动转换数据类型,比方把字符串型的日期格局转化为pandas日期对象以便经过Python的Pandas库处理数据。它还依据剖析方针主动生成了图表,并给出了剖析的定论,尽管咱们并没有要求它这么做。默许状况下,假如柱状图能够展现数据,它生成的便是柱状图,你也能够要求它换一种图表类型。
最终,它列出了后续的进程,是持续探究数据仍是开端建模。
Code Interpreter的EDA做的仍是很完善的,我其实只是让它依据自己的经历来操作。关于一开端拿到数据并没有剖析思路的人来说,Code Interpreter为咱们做了很多辛苦的工作,尽管它并不觉得累。
接下来咱们给它一些其它的剖析视角看看它的体现。
我:
剖析电影的持续时刻。
ChatGPT:
持续时刻一栏包括电影的长度(分钟)和电视节目的季数。为了剖析电影时长,咱们首要需求把电影和电视节目分隔。然后,咱们能够检查电影时长的散布,找出最短、最长和均匀的电影时长。
让咱们先把电影分隔,提取以分钟为单位的持续时刻。
这里有一些关于Netflix上电影时长的核算数据:
- 最短的电影是3分钟长。
- 最长的电影是312分钟长。
- 电影的均匀长度约为100分钟。
- 第25个百分点(即25%的电影比这个长度短)是87分钟。
- 第50个百分位数,或中位数(即一半的电影比这个长度短)是98分钟。
- 第75百分位数(即75%的电影比这个长度短)是114分钟。
这些核算数据供给了一个关于电影长度的一般概念。可是,将散布可视化能够供给一个更直观的了解。让咱们绘制一个电影长度的直方图。
该直方图显现了Netflix上电影时长的散布。大多数电影的长度在80到120分钟之间,峰值在90-100分钟左右。极短或极长的电影较少,这一点从散布的两端的下降趋势能够看出。
对电影长度的剖析到此结束。在这个数据会集,你还有什么想评论的吗?
我:
向我展现节目类型和它们的数量之间的联系
ChatGPT:
为了剖析节目类型和它们的数量之间的联系,咱们首要需求切割
listed_in
列,因为每个条目能够包括由逗号分隔的多个节目类型。让咱们核算每个节目类型的呈现次数,并将成果可视化。在这个剖析中,咱们将考虑一切类型,而不只是是电影或电视节目的类型。
柱状图显现了Netflix的内容按类型的计数。”世界电影”、”电视剧 “和 “喜剧 “等类型的计数最高,意味着它们是Netflix上最常见的内容类型。
咱们对节目类型及其计数的剖析到此结束。在这个数据会集,你还有什么想要探究的吗?
自然言语处理
接下来咱们看看Code Interpreter能否用自然言语处理 (NLP) 来处理和剖析数据。NLP是一个研讨范畴,专注于使核算机能够了解人类言语并与之互动,其办法类似于咱们彼此之间的沟通办法。它答应核算机处理、剖析并从很多的文本数据中取得洞察力。ChatGPT便是运用NLP技能进行言语建模、了解句法和语义联系、处理情感剖析。这些NLP才干使ChatGPT能够进行类似人类的对话,并依据它收到的输入供给有含义的回应。
Code Interpreter能够运用Python的一个十分流行的NLP的库NLTK(自然言语东西包)。能够用来履行广泛的NLP使命,如符号化、部分语音符号、命名实体辨认、情感剖析和文本分类。经过运用NLTK,没有丰富数据剖析经历的人也能够有用地处理和剖析文本数据。
比方我给它这样一个使命:
剖析标题中最频繁的词。
经过剖析词频的办法,咱们能够把文本中单词的呈现频率核算并展现出来,然后能够帮咱们快速了解文本中的首要内容。
咱们来看下ChatGPT (Code Interpreter)的输出:
剖析标题中最常见的单词能够深化了解流行主题或趋势。 例如,“爱”、“战争”、“世界”等词语或许标明内容中涵盖的常见主题。
咱们首要从“标题”列中提取一切单词,然后核算每个单词的频率。 为了取得有含义的成果,咱们将扫除不供给太多信息的常见英语单词(例如“the”、“a”、“and”)。 这些被称为“停用词”。 让咱们找出最常用的 20 个单词。
关于给您带来的不便利,咱们深表歉意,因为当时环境的权限有限,我好像无法下载该组英文停用词。
处理办法是手动定义一组底子的英语停用词。 该调集不会像 NLTK 供给的那样全面,但它应该合适咱们的目的。 让咱们持续选用这种办法。
条形图显现了扫除一组底子的英语停用词后 Netflix 影片中最常见的 20 个单词。
“爱”、“男人”、“世界”、“日子”和“故事”等词是最常见的,这标明这些主题在 Netflix 内容中很遍及。
请记住,此剖析或许会遭到未包括在咱们的底子停用词会集的其他常用词的影响。
您还想在这个数据会集探究什么吗?
因为Code Interpreter所在的沙盒环境短少更多中止词的语料包,所以它并没有扫除像’&’, ‘-‘, ‘with’, ‘i’ 这样对剖析词频毫无含义的中止词。那咱们就把不想要的中止词提交给ChatGPT,让它扫除去吧。并且词频一般经过词云才干取得更好的展现作用,所以我提交了如下Prompt:
请删去停用词 ‘&’、’my’、’2’、’with’、’i’、’on’、’you’、’man’、’little’、’one’、’-‘、 ‘from’。 运用词云展现。
ChatGPT的输出如下:
词云供给了 Netflix 影片中最常见单词的视觉标明,每个单词的巨细与其频率相对应。 “爱”、“世界”、“日子”、“故事”、“女孩”、“婴儿”和“圣诞节”等常用词特别突出,标明这些主题在 Netflix 内容中很遍及。
请记住,词云中单词的确切方位和色彩是随机生成的,不具有任何含义。 重要的方面是单词的相对巨细。
您还想在这个数据会集探究什么吗?
时刻序列剖析
时刻序列剖析能够协助咱们了解随时刻改变的数据形式和趋势。经过剖析和了解这些形式,咱们能够做出有价值的决议计划,以及猜测未来。例如,在金融范畴,时刻序列剖析有助于依据历史数据猜测股票价格或市场趋势。 在天气预报中,它使咱们能够猜测温度改变或降雨形式。
咱们来让Code Interpreter帮咱们剖析电视/电影的节目类型是怎么跟着时刻改变的。
我的Prompt:
观察电影和电视节目的类型怎么跟着时刻的推移而改变。
ChatGPT的答复:
剖析电影和电视节目的类型怎么跟着时刻的推移而改变,能够深化了解观众偏好或内容制造战略的趋势和改变。
为此,咱们需求:
- 电影和电视剧分隔。
- 拆分“listed_in”列,因为每个条目能够包括多个节目类型。
- 按“release_year”分组并核算每年每种类型的频率。
咱们先从电影开端吧。 为了清楚起见,咱们将跟着时刻的推移绘制排名前 5 的节目类型。
折线图显现随时刻改变的前 5 种类型的电影数量。 类型包括“世界电影”、“剧情片”、“喜剧”、“纪录片”和“动作与冒险”。
咱们能够观察到,“世界电影”、“剧情片”和“喜剧”的数量逐年明显增加,特别是2000年今后。“纪录片”也有增加,但起伏不大。 多年来,“动作与冒险”类型一直保持相对安稳。
接下来,咱们对电视剧进行相同的剖析。
折线图显现随时刻改变的前 5 种类型的电视节目数量。 类型包括“世界电视节目”、“电视剧”、“喜剧电视节目”、“违法电视节目”和“儿童电视节目”。
咱们能够看到,“世界电视节目”、“电视剧”和“电视喜剧”的数量逐年明显增加,特别是2010年之后。“违法电视节目”和“儿童电视节目”也有所增加, 但没有那么明显。
这些趋势标明 Netflix 制造和增加的内容类型产生了改变,电影和电视节目的世界内容和戏曲明显增加。
您还想在这个数据会集探究什么吗?
核算揣度
核算揣度 (Statistical Inference)这种办法依据有限的数据样本得出定论并对整体进行猜测。经过运用假设查验和置信区间等核算技能,咱们能够量化与咱们的估计相关的不确定性。
咱们来看下发行时刻 (release_year) 和增加时刻 (date_added) 这两列数据是否存在相关性。我给ChatGPT这样一个问题:
履行相关性检测以检查“release_year”和“date_added”之间是否存在明显的线性联系。
ChatGPT这样回复:
要履行相关性查验,咱们需求保证两个变量都是数值变量。 ‘release_year’ 现已是数字,但 ‘date_added’ 是一个日期时刻对象。 咱们需求从“date_added”中提取年份并将其用于咱们的相关性测验。
皮尔逊相联系数能够用来衡量两个变量之间线性联系的强度和方向。 取值规模为-1到1。挨近1的值标明强正联系,挨近-1的值标明强负联系,挨近0的值标明没有线性联系。
让咱们核算“release_year”与该节目增加到 Netflix 的年份之间的皮尔逊相联系数。 “release_year”和“year_added”之间的 Pearson 相联系数约为 0.11。 这标明这两个变量之间存在弱正线性联系。
换句话说,节目在挨近上映年份时有轻微的趋势被增加到 Netflix,但这种联系并不是很强。 其他因素(例如许可协议和内容战略)很或许在决议节目何时增加到 Netflix 时发挥重要作用。
您还想在这个数据会集探究什么吗?
数据发掘
数据剖析中的数据发掘是指从大型杂乱数据会集提取有用的信息并发现能够辅导决议计划的躲藏联系或趋势。它使咱们能够发现原本或许躲藏的有价值的信息,然后更好地了解并做出明智的决议计划。例如,在零售业,数据发掘能够协助辨认客户购买行为的形式,然后使企业能够拟定个性化营销战略并进步销售额。 在医疗保健范畴,它能够协助剖析患者记录以发现危险因素或猜测疾病成果,然后完成更好的医疗保健办理。
让咱们发现导演和节目类型这两组数据之间是否存在躲藏的联系。
发现导演和节目类型之间的相关。
ChatGPT的回复:
剖析导演和节目类型之间的相关能够深化了解某些导演为人们所熟知的特定内容类型。
为此,咱们需求:
- 拆分“导演”列,因为每个条目能够包括多个以逗号分隔的导演。
- 拆分“listed_in”列,因为每个条目能够包括多个节目类型。
- 按“导演”分组并核算每种类型的频率。
可是,请留意,这个操作或许会导致数据量太大,因为有许多共同的导演和节目类型。 为了便于剖析,咱们来看看执导过最多剧集的前 20 名导演。
让咱们持续选用这种办法。
上表代表了前 20 名导演(执导过最多节目的导演)与其节目类型之间的相关。 每个单元格代表导演在特定类型中的表演数量。
例如,凯茜加西亚-莫利纳 (Cathy Garcia-Molina) 执导了 7 部“喜剧”类型的节目,而苏哈斯卡达夫 (Suhas Kadav) 执导了 16 部“儿童和家庭电影”类型的节目。
为了更好地可视化这些数据,咱们能够生成热图。 热图能够协助咱们了解节目在导演和节目类型方面最会集的当地。 让咱们持续吧。
热图直观地展现了排名前 20 位的导演(执导过最多节目的导演)与其节目类型之间的相关。 每个单元格中的色彩强度代表导演在特定类型中的表演数量。 较暗的单元格标明显现次数较多。
例如,热图显现导演 Suhas Kadav 与“儿童和家庭电影”类型特别相关,而 Rajiv Chilaka 与“儿童电视”类型特别相关。 导演凯茜加西亚-莫利纳 (Cathy Garcia-Molina) 与“喜剧”相关,阿努拉格卡什亚普 (Anurag Kashyap) 与“惊悚片”相关。
请记住,一位导演能够与多种类型相相关,并且此剖析仅包括依据他们执导的节目数量排名前 20 位的导演。
您还想在这个数据会集探究什么吗?
机器学习建模
数据剖析中的机器学习建模是指练习核算机算法主动学习形式并依据输入数据做出猜测或决议计划的进程。该模型能够对新的、未见过的数据进行归纳并做出精确的猜测。
Code Interpreter运用Pyton丰富的机器学习库来建模,比方scikit-learn。在这个比如中,我问ChatGPT它能够建哪些模型:
您能够为此数据集构建哪些机器学习模型?
ChatGPT这样回复:
机器学习模型的挑选取决于您感爱好的具体问题或使命。以下是一些潜在的使命以及能够运用的相应模型:
内容引荐:假如您有爱好依据用户的观看历史记录向用户引荐类似的内容,则能够运用协作过滤模型(如矩阵分解)或依据内容的过滤模型(依据项目属性引荐类似的项目)。
类型猜测:假如您想依据其他特征(如导演、艺人、描绘)来猜测电影或电视节目的类型,您能够运用监督学习模型。 这些或许包括决议计划树、随机森林、支撑向量机或神经网络。
情绪剖析:假如您想猜测用户谈论的情绪,您能够运用自然言语处理模型,如朴素贝叶斯、逻辑回归,乃至更杂乱的模型,如循环神经网络 (RNN) 或 Transformer。
趋势猜测:假如您有爱好猜测未来趋势(例如特定类型的电影或电视节目的数量),您能够运用 ARIMA 或指数滑润等时刻序列猜测模型。
请留意,这些模型的有用性在很大程度上取决于数据的质量和数量,以及特征工程和模型调整进程。 此外,应细心进行模型解说和评估,以防止过度拟合并保证模型能够很好地推行到未见过的数据。
假如您有爱好的特定使命或问题,请告诉我,我能够供给更具体的主张。
尽管咱们的数据量不大,才8千多行,也能够让Code Interpreter建几个模型,看它是否在吹牛。我提交了如下Prompt:
运用文本数据(如标题和描绘)和分类数据(如导演、艺人、国家/区域和评级)构建依据内容的引荐体系。
来看看ChatGPT的回复:
当然,咱们能够构建一个依据内容的引荐体系。 依据内容的引荐体系经过运用项目特征来供给引荐。 在这种状况下,项目特征是电影或电视节目的各种特征,例如标题、描绘、导演、艺人、国家和评级。
以下是咱们怎么创立这样一个引荐体系的整体概述:
- 预处理:此进程触及整理和预备模型中运用的数据。 这包括填充缺失值以及将文本数据转换为模型能够运用的数字格局。
- 特征提取:在这一步中,咱们将运用 one-hot 编码等技能将分类数据转换为数值数据,并运用 TF-IDF或 CountVectorizer等技能将文本数据转换为数值数据。
- 类似度分数核算:接下来,咱们将核算不同项目(在本例中为电影或电视节目)之间的类似度分数。 核算类似度分数的办法有多种,例如余弦类似度、杰卡德类似度或欧几里德距离。
- 引荐:一旦咱们有了类似度分数,咱们就能够引荐与给定项目最类似的项目。
让咱们从预处理进程开端。 咱们之前现已处理了缺失值,因而咱们能够持续将文本和分类数据转换为咱们的模型能够运用的格局。 为简略起见,咱们将运用 CountVectorizer 技能,它将文本文档调集转换为符号计数矩阵。 咱们将其运用于“标题”、“描绘”、“导演”、“艺人”、“国家/区域”和“评级”列。
为此,咱们首要将这些列组合成每部电影或电视节目的单个文本文档,然后运用CountVectorizer。
CountVectorizer 将咱们组合的文本数据转换为符号计数矩阵。 生成的矩阵有 8790 行(对应于咱们的 8790 部电影和电视节目)和 53198 列(对应于文本数据中的不同符号)。
下一步是核算不同电影和电视节目之间的类似度得分。 有多种办法能够核算这些分数,例如余弦类似度、杰卡德类似度或欧几里得距离。 在这里,咱们将运用余弦类似度,这是文本数据的常见挑选。
余弦类似度核算两个向量之间视点的余弦。 假如向量相同,则余弦为 1(对应于 0 度的视点)。 假如向量正交(即底子不类似),则余弦为 0(对应于 90 度角)。 因而,余弦类似度越挨近1,项目越类似。
让咱们核算计数矩阵的余弦类似度分数。
余弦类似度矩阵已成功创立。 该矩阵的巨细为 8790×8790,这意味着每一行(和每一列)对应于一部电影或电视节目,矩阵中的每个单元格包括两部电影或电视节目之间的余弦类似度得分。
接下来,咱们定义一个函数,它将电影或电视节方针题作为输入,并输出最类似的电影或电视节目的列表。 该函数将履行以下进程:
- 获取与标题匹配的电影或电视剧的索引。
- 获取该电影或电视节目与一切其他电影或电视节目的余弦类似度分数列表。 将此列表转换为元组列表,其间第一个元素是方位,第二个元素是类似度分数。
- 依据类似度分数对元组列表进行降序排序。
- 获取排序列表的顶部元素。
- 返回顶部元素对应的标题。
引荐体系好像按预期工作。 关于电影《盗梦空间》,它引荐了以下10部电影:
- Final Account
- The World Is Not Enough
- The Last Shaman
- 9
- Mars Attacks!
- Dead in a Week (Or Your Money Back)
- High Risk
- Catch Me If You Can
- Snowden
- A Bridge Too Far
这些引荐依据内容特征的类似性,例如标题、描绘、导演、艺人、国家/区域和评级。
您想用另一部电影或电视节方针题来测验引荐体系吗?
整体而言,它构建的依据内容的引荐体系所选用的办法是可靠的。运用 CountVectorizer 将文本数据转换为数字形式是一个不错的挑选。 它十分简略,合适处理简略的计数功用。
可是,CountVectorizer潜在的弱点是只核算单词的呈现次数,没有考虑上下文,这或许会丢失一些信息。 更完善的办法是运用 TF-IDF 乃至 Word2Vec 或 Doc2Vec ,它们能够捕获更多语义信息。Code Interperter没有选用更杂乱的办法或许是因为当时的沙盒环境无法加载更庞大的Python库或许算力的约束。
咱们再来让它建一个模型:
依据导演、艺人、国家/区域、发行年份和类型等特征猜测电影的评级。
来看看ChatGPT的回复:
猜测电影评级是机器学习中的一个常见问题,一般被视为回归问题(假如猜测精确的评分)或分类问题(假如猜测评分类别)。 在咱们的比如中,评级是一个具有多个类其他分类变量,因而咱们能够运用多类别分类算法。
一些合适此使命的算法包括决议计划树、随机森林、朴素贝叶斯、支撑向量机,乃至神经网络。 为了简略起见,咱们能够从决议计划树分类器开端。
可是,在练习分类器之前,咱们需求对数据进行预处理。 您提到的功用(“导演”、“艺人”、“国家/区域”、“发行年份”、“节目类型”)大多是分类的,或许有许多共同的值。 咱们需求将它们转换为能够与分类器一同运用的格局,这一般触及将分类变量编码为数字变量。
让咱们首要更具体地检查这些功用和方针变量(“评级”)。
这是咱们所具有的:
- 有 18 个共同的评级。 可是,好像存在一些过错,因为“74 分钟”、“84 分钟”和“66 分钟”不是有用的评分。 在运用“评级”变量作为分类方针之前,咱们需求整理它。
- 有 4,529 位共同的导演。 这是一个高基数分类变量,对其进行编码以与分类器一同运用或许会产生很多特征。 咱们或许需求考虑运用这些信息的其他办法,例如将不太常见的类别分组在一同。
- 大约有 36,440 名共同的艺人。 这是一个很大的数字,处理这个功用或许会很棘手。 一种挑选或许是仅考虑首要艺人(例如,列出的前几个),或许创立一个标明艺人数量的特征。
- 有 749 个共同的国家。 这是另一个高基数分类变量。 与“导演”功用一样,咱们或许需求将不太常见的类别分组在一同。
- 有 74 个共同的发行年份。 这是一个数值特征,能够直接与大多数分类器一同运用。
- 有 42 种共同的节目类型。 咱们能够运用 one-hot 编码对该变量进行编码,这会向数据集增加 42 个二进制特征。
在进行进一步的预处理和模型练习之前,咱们需求整理“评级”变量并处理缺失值和不正确的值。 接下来咱们就这样做吧。
我让它持续。
不正确的评级已替换为“不知道”。 整理后的“评级”变量现在具有以下仅有值:
- ‘PG-13’
- ‘TV-MA’
- ‘PG’
- ‘TV-14’
- ‘TV-PG’
- ‘TV-Y’
- ‘TV-Y7’
- ‘R’
- ‘TV-G’
- ‘G’
- ‘NC-17’
- ‘Unknown’
- ‘NR’
- ‘TV-Y7-FV’
- ‘UR’
这些代表用于对标题进行分类的不同内容评级体系。 有“PG-13”、“PG”、“R”、“G”、“NC-17”、“NR”和“UR”等电影分级,以及“TV-MA”等电视分级, “TV-14”、“TV-PG”、“TV-Y”、“TV-Y7”、“TV-G”和“TV-Y7-FV”。
接下来,让咱们评论高基数分类特征。 一种常见的战略是将不太常见的类别分组为“其他”类别。 关于这个数据集,咱们能够将此战略运用于“导演”、“艺人”和“国家”变量。 咱们将为每个功用设置一个阈值,呈现频率低于该阈值的类别将被分组到“其他”类别中。
之后,咱们将预备对这些分类特征进行编码并预备用于练习分类模型的数据。
让咱们持续这个计划。
我让ChatGPT持续:
将不太常见的类别分组为“其他”类别后,咱们现在有:
- 13位共同的导演
- 大约 459 名共同的艺人
- 60 个共同的国家
- 42 种共同的节目类型
这仍然是一个很大的类别,特别是关于“艺人”而言。 关于“艺人”和“节目类型”,咱们或许需求考虑其他办法,例如仅考虑前几个艺人或首要类型。
下一步是对这些分类特征进行编码。 为此,咱们能够运用one-hot编码或方针编码。 One-hot 编码将明显增加数据的维度,特别是关于高基数特征。 方针编码或许是更好的挑选,因为它将分类变量转换为单个新列并捕获有关方针变量的有价值的信息。
可是,在持续编码之前,将数据分红练习集和测验集是有利的。 这样,咱们能够保证咱们的编码办法不会将测验会集的信息走漏到练习会集。
让咱们持续拆分数据。 为了简略起见,咱们只考虑“director”、“country”和“release_year”作为猜测“ rating”的特征。 假如需求,咱们将在更高档的剖析中处理“艺人”和“节目类型”特征。
我让ChatGPT持续:
咱们已成功将数据拆分为包括 7,045 个实例的练习集和包括 1,762 个实例的测验集。 每个实例都有 3 个特征:“导演”、“国家”和“发行年份”。
下一步是对分类特征进行编码。 如前所述,咱们将为此运用方针编码。 方针编码将分类特征的每个类别替换为该类其他方针变量的均匀值。 例如,假如“导演 A”执导的电影的均匀评分为 7.5,则“导演 A”将在“导演”功用中替换为 7.5。
让咱们持续将方针编码运用于“导演”和“国家”特征。 咱们将在练习数据上装置编码器,然后转换练习数据和测验数据。
我带来的不便利标明歉意。
category_encoders
模块在此环境中不可用。 作为替代计划,咱们能够履行一种称为频率编码的简略编码类型,其间每个类别都被练习数据中的频率替换。 这种类型的编码仍然能够捕获有关方针变量的一些信息,因为呈现频率较高的类别或许与呈现频率较低的类别相比具有不同的均匀评级。让咱们持续对“导演”和“国家”特征进行频率编码。
咱们现已运用频率编码成功地对“导演”和“国家”特征进行了编码。 DataFrame 中的“导演”和“国家”列现在别离标明练习数据中每个导演和国家/区域的呈现频率。
以下是编码练习集和测验集的前几行:
练习集:
导演 国家 发布年份 5471 5471 0.683605 0.318524 2017 530 530 0.298935 0.298935 0.318524 2015 5594 0.683605 0.318524 2017 996 0.683605 0.026544 2021 6951 0.298935 0.298935 0.020014 0.020014 2018 测验集:
导演 国家 发布年份 4970 4970 0.683605 0.318524 2018 3362 3362 0.683605 0.318524 2019 5494 0.298935 0.298935 0.009510 0.009510 2017 1688 1688 0.298935 0.298935 0.318524 2020 1349 1349 0.298935 0.298935 0.003549 0.003549 2012 接下来,咱们需求对方针变量“评级”进行编码。 因为这是一个多类分类问题,咱们能够运用标签编码将每个仅有的评分简略地转换为仅有的整数。 之后,咱们能够练习咱们的分类模型。
我让ChatGPT持续:
咱们现已运用标签编码成功地对方针变量“评级”进行了编码。 每个仅有的评级都被分配了一个仅有的整数,如下所示:
- ‘G’: 0
- ‘NC-17’: 1
- ‘NR’: 2
- ‘PG’: 3
- ‘PG-13’: 4
- ‘R’: 5
- ‘TV-14’: 6
- ‘TV-G’: 7
- ‘TV-MA’: 8
- ‘TV-PG’: 9
- ‘TV-Y’: 10
- ‘TV-Y7’: 11
- ‘TV-Y7-FV’: 12
- ‘UR’: 13
- ‘Unknown’: 14
现在咱们的数据现已过正确的预处理,咱们能够持续练习分类模型。 如前所述,咱们将从决议计划树分类器开端,因为它简略且可解说。 让咱们持续吧。
我让ChatGPT持续:
关于造成的混乱,我深表歉意。 测验会集的仅有类数量与整个数据会集的仅有类数量好像存在差异,导致分类陈述不匹配。
当练习集和测验集不包括一切相同的类时,或许会产生这种状况,这或许是因为数据的随机切割而产生的。 在这种状况下,方针变量中好像存在测验会集未标明的类。
为了处理这个问题,咱们能够在“classification_report”函数中指定“labels”参数,以保证它考虑一切或许的类。 让咱们纠正这个问题并再次生成分类陈述。
我为忽略标明歉意。 看来我忘记导入此代码中运用的“numpy”库。 让我纠正这个问题并再次生成分类陈述。
这是决议计划树分类器的分类陈述:
`precisionrecallf1-scoresupport
G0.000.000.0012
NC-170.000.000.000
NR0.140.060.0916
PG0.280.110.1662
PG-130.250.290.2787
R0.220.190.20163
TV-140.450.460.46414
TV-G0.000.000.0043
TV-MA0.480.700.57662
TV-PG0.280.080.13185
TV-Y0.210.060.0952
TV-Y70.500.110.1865
TV-Y7-FV0.000.000.000
UR0.000.000.000
Unknown0.000.000.001microavg0.420.420.421762
macroavg0.190.140.141762
weightedavg0.380.420.381762`该模型好像难以猜测某些类别,例如“G”、“NC-17”、“TV-G”、“TV-Y7-FV”、“UR”和“不知道”。 这或许是因为这些类别在数据中代表性缺少。
加权均匀精度、召回率和 F1 分数约为 0.38 至 0.42,标明还有改善的空间。
这是一个在可用特征的子集上练习的简略模型,它不处理高基数分类特征(例如“cast”和“genre”)或文本特征(例如“description”)。 能够处理这些功用的更杂乱的模型或许能够完成更好的功能。 此外,类平衡或模型调整等技能也能够协助改善成果。
我让ChatGPT持续:
为了进步模型的功能,咱们能够测验更杂乱的办法。 咱们能够运用随机森林分类器,经过组合多个决议计划树的猜测,它往往比单个决议计划树体现得更好。 此外,随机森林不太容易呈现过度拟合。
可是,咱们应该留意到,处理“艺人”和“节目类型”等高基数分类特征并不简略。 如前所述,一种办法或许是仅考虑首要艺人或首要类型。 为了演示,咱们将扫除这些功用并要点重视“导演”、“国家”和“发行年份”。
让咱们持续依据咱们的数据练习随机森林分类器。 咱们还将运用交叉验证来更好地估计模型的功能。
随机森林分类器的交叉验证分数约为:
- 0.41
- 0.42
- 0.42
- 0.42
- 0.40
这些分数代表分类器在数据的不同分区上的精确性。 正如咱们所看到的,分数略低于决议计划树分类器的分数。 这或许是因为随机森林算法固有的随机性,也或许是决议计划树过度拟合练习数据。
相同重要的是要留意,精确性或许不是这个问题的最佳指标,特别是假如方针变量中的类不平衡的话。 其他指标(例如精确率、召回率或 F1 分数)或许供给更多信息。
最终,如前所述,能够处理高基数分类特征(“艺人”和“节目类型”)和文本特征(“节目描绘”)的更高档模型或许能够完成更好的功能。 这样的模型或许触及用于“描绘”特征的自然言语处理(NLP)技能,以及用于“艺人”和“节目类型”特征的更杂乱的编码办法。 可是,开发这样的模型将是一项更杂乱的使命,并且超出了此交互的规模。
假如您想进一步操作或需求其他协助,请告诉我。
总结一下:我让ChatGPT创立两个机器学习模型,第一个内容引荐体系对它而言仍是比较轻松的,第二个猜测电影评级就很费劲了。因为沙盒环境的约束,Code Interpreter无法导入sklearn的category_encodes
模块。在建模进程中,也会忘记导入要害的库,尽管它自己会纠错。
在树立猜测电影评级的进程中,它先测验了简略的决议计划树分类器,可是因为加权均匀精度、召回率和 F1 分数都不太抱负,又测验了随机森林分类器。可是作用并不抱负,需求更杂乱的编码办法来创立更高档的模型,这些现已超出Code Interpreter的才干了。
Code Interpreter对数据剖析范畴的影响
你是否曾听过一句话—人人都是数据剖析师。在ChatGPT和Code Interpreter呈现之前,咱们离这个美好的希望还有一段距离。可是自从Code Interpreter呈现今后,我信任这句话不再是一句口号,而是越来越成为现实。
经过以上案例的测验,咱们能够看到Code Interpreter的才干。我用来测验的办法现已触及专业的数据剖析了,可是对大多数用Excel来进行数据剖析的人而言,Code Interpreter堪称完美。大多数日常工作触及的数据剖析对Code Interpreter来说底子不在话下。你能够直接上传Excel,经过对话的办法让ChatGPT帮你进行数据剖析,生成各种漂亮的图表。
关于专业的数据剖析师或许数据科学家而言,Code Interperter依然会帮你做很多深重的工作。你需求的是精通核算学,熟知不同情景下的数据剖析办法,这样才干更好地辅导Code Interpreter完结很多杂乱的工作。关于更杂乱的触及机器学习建模的数据剖析,Code Interpreter就比较费劲了,所能供给的是一些底子的建模和思路,因为沙盒环境的约束,短少很多必要的代码库和核算资源。
总的来说,咱们能看到低代码在数据剖析范畴的趋势。咱们会越来越少地亲身写代码,更多地是办理数据剖析的流程,让ChatGPT这样的人工智能东西依据咱们的辅导来剖析数据。咱们用ChatGPT帮咱们省下来的时刻能够去熟悉业务,强化数学和核算学知识,精通机器学习建模的各个环节。
Code Interpreter在数据剖析上的缺少
尽管Code Interpreter在数据剖析方面有革命性的影响,可是还存在许多约束:
- 需求Plus账号。Code Interpreter这个OpenAI自研的功用现在只对Plus会员敞开,势必会影响它的大规模遍及。并且就算有Plus账号的话,每三个小时50条会话的约束关于一些大型的项目运用起来不太便利。
- 无法联网。Code Interpreter用来进行剖析的Python库都是内置在沙盒环境中的,一些没有内置的库无法经过联网下载。并且假如你要剖析的论题比较新,那么ChatGPT因为缺少实时的知识,或许会不了解你的项目,然后影响判别的精确性。
- 不安稳。现在它对你上传的数据所记忆的时刻是有约束的,超过了时刻约束你或许需求重新上传数据。因为模型本身的随机性,每次它的剖析办法或许有差异。
- 短少一些中文支撑。在数据剖析进程中,最好仍是用英文来对话,不然或许会显现不正常或许剖析的才干会不如英文环境。
- 机器学习才干缺少。关于惯例的数据剖析,Code Interpreter是没有问题的,可是假如触及杂乱的机器学习建模,它就有些费劲了。
我的总结
Code Interpreter让咱们只是经过对话就能剖析庞大而杂乱的数据。咱们更需求重视的是假如辅导这些人工智能东西为咱们处理杂乱而深重的工作,而不是写代码本身。
尽管Code Interpreter现在存在一些约束,但它无疑是一个强大的东西。跟着它的不断迭代,这些约束应该也会越来越少。代码解说器让咱们离每个人都能够成为数据剖析师的未来又近了一步。
假如本文对你有协助,辛苦帮我点个赞哦
相关阅览
- ChatGPT Plus深度体验:你是否要晋级呢