【机器学习实战中阶】基于机器学习的人格预测,通过可视化研究人格数据,MBTI(Myers-Briggs Type Indicator(迈尔斯-布里格斯类型指标))

在这里插入图片描述

人格预测项目

项目构思 – Myers Briggs 类型指标是一个人格类型系统,它根据内向性、直觉、思考和感知能力将人划分为16种不同的人格类型。

你可以通过一个人在社交媒体上发布的帖子类型来识别其人格特质。

数据集:人格预测数据集
数据集下载链接: 【机器学习实战中阶】基于机器学习的人格预测,测试你的人格

这个项目的目标是开发一个模型,该模型能够基于个人在社交媒体上的行为和发布的内容,预测他们的Myers Briggs人格类型。这涉及到收集和分析大量的社交网络数据,并利用机器学习算法来识别模式,从而进行人格类型的分类。为了实现这一目标,通常需要一个标注良好的数据集,其中包含来自不同人格类型个体的社交媒体帖子,以及他们相应的人格类型标签。这样,算法就可以从这些数据中学习,进而对新人格数据做出预测。

好的,以下是翻译内容:

关于数据集

背景

迈尔斯-布里格斯类型指标(简称MBTI)是一个个性类型系统,将每个人划分到4个轴上的16种不同的个性类型:

  • 内向(I) – 外向(E)
  • 直觉(N) – 感觉(S)
  • 思维(T) – 情感(F)
  • 判断(J) – 感知(P)
    Introversion (I) – Extroversion (E)
    Intuition (N) – Sensing (S)
    Thinking (T) – Feeling (F)
    Judging (J) – Perceiving §

例如,一个偏好内向、直觉、思维和感知的人在MBTI系统中会被标记为INTP,有很多基于个性的组件可以根据这个标签来建模或描述这个人的偏好或行为。

MBTI是世界上最受欢迎的个性测试之一,甚至可能是最受欢迎的。它被用于企业、线上、娱乐、研究等多个领域。简单的谷歌搜索就能显示出这个测试在不同时间被使用的所有方式。可以说,这个测试在当今世界仍然非常相关。

从科学或心理学的角度来看,MBTI基于卡尔·荣格(Carl Jung)对认知功能的研究,即荣格类型学。这是一个包含8种不同功能、思维过程或思维方式的模型,据说这些功能存在于人的思维中。后来,这一理论被转化为几种不同的个性系统,使其更易于理解,其中最著名的就是MBTI。

近年来,由于实验中的不可靠性和其他原因,MBTI的使用/有效性受到质疑。但 MbTI 仍然被视为在很多领域中非常有用的工具,而这个数据集的目的就是帮助发现特定类型和其写作风格之间是否有任何模式,总体上探索测试在分析、预测或分类行为方面的有效性。

内容

这个数据集包含超过8600行数据,每一行是一个人的:

  • 类型(该人的4字母MBTI代码/类型)
  • 他们最近发布的50篇文章的每个部分(每个条目用“|||”(三个竖线字符)分隔)
致谢

这些数据是通过PersonalityCafe论坛收集的,因为该论坛提供了大量的人群和他们的MBTI个性类型,以及他们所写的内容。

灵感

一些基本的用途可以包括:

  • 使用机器学习评估MBTI的有效性和其在线预测语言风格和行为的能力。
  • 生产一个机器学习算法,可以根据某人所写的一些文本尝试确定其个性类型。

接下来我们通过代码和可视化的方式来分析这个数据

在这里插入图片描述

引入必要的库

代码解释: 这段代码导入了四个常用的 Python 数据科学库,分别是 pandasnumpyseabornmatplotlib.pyplot。这些库分别用于数据处理、数值计算、数据可视化和绘图。

import pandas as pd  # 导入 pandas 库,用于数据处理和分析
import numpy as np   # 导入 numpy 库,用于数值计算
import seaborn as sns # 导入 seaborn 库,用于绘制统计图表
import matplotlib.pyplot as plt  # 导入 matplotlib.pyplot 库,用于绘图

读取数据

代码解释: 这段代码读取了一个 CSV 文件,并显示前五行数据,以便快速查看数据的内容和结构。

df = pd.read_csv('../input/mbti_1.csv')  # 读取 CSV 文件,文件路径为 '../input/mbti_1.csv'
df.head()  # 显示数据的前五行

在这里插入图片描述

定义一个计算每条评论中词数方差的函数

代码解释: 这段代码定义了一个函数 var_row,用于计算每条 MBTI 类型的帖子中每条评论的词数方差。每条评论用 ||| 分隔。

def var_row(row):
    l = []  # 初始化一个空列表,用于存储每条评论的词数
    for i in row.split('|||'):  # 将帖子内容按 '|||' 分隔成每条评论
        l.append(len(i.split()))  # 计算每条评论的词数,并添加到列表中
    return np.var(l)  # 返回列表中词数的方差

计算每条评论的平均词数和词数方差

代码解释: 这段代码计算了每条评论的平均词数和词数方差,并将结果添加到数据框中,最后显示前五行数据。

df['words_per_comment'] = df['posts'].apply(lambda x: len(x.split())/50)  # 计算每条评论的平均词数,并添加到数据框中
df['variance_of_word_counts'] = df['posts'].apply(lambda x: var_row(x))  # 计算每条评论的词数方差,并添加到数据框中
df.head()  # 显示数据的前五行

在这里插入图片描述

绘制不同类型用户的每条评论平均词数的 swarmplot 图

代码解释: 这段代码绘制了一个 swarmplot 图,展示了不同类型用户的每条评论的平均词数分布情况。

plt.figure(figsize=(15,10))  # 设置绘图窗口的大小
sns.swarmplot("type", "words_per_comment", data=df)  # 绘制 swarmplot 图,x 轴为用户类型,y 轴为每条评论的平均词数

在这里插入图片描述

统计每种类型的用户数量

代码解释: 这段代码使用 groupbyagg 方法,统计了每种 MBTI 类型的用户数量。

df.groupby('type').agg({'type':'count'})  # 按 'type' 列分组,统计每种类型的用户数量

在这里插入图片描述

筛选掉特定类型用户并计算每条评论中的 HTTP 链接数和问号数

代码解释: 这段代码创建了一个新的数据框 df_2,筛选掉特定的 MBTI 类型用户,并计算了每条评论中的 HTTP 链接数和问号数。

df_2 = df[~df['type'].isin(['ESFJ','ESFP','ESTJ','ESTP'])]  # 筛选掉 'ESFJ', 'ESFP', 'ESTJ', 'ESTP' 这几种类型的用户
df_2['http_per_comment'] = df_2['posts'].apply(lambda x: x.count('http')/50)  # 计算每条评论中的 HTTP 链接数,并添加到数据框中
df_2['qm_per_comment'] = df_2['posts'].apply(lambda x: x.count('?')/50)  # 计算每条评论中的问号数,并添加到数据框中
df_2.head()  # 显示筛选后的数据的前五行

在这里插入图片描述

计算每种类型的用户每条评论中的平均 HTTP 链接数和问号数

代码解释: 这段代码统计了每种类型的用户每条评论中的平均 HTTP 链接数和问号数,并打印结果。

print(df_2.groupby('type').agg({'http_per_comment': 'mean'}))  # 按 'type' 列分组,计算每种类型的用户每条评论中的平均 HTTP 链接数
print(df_2.groupby('type').agg({'qm_per_comment': 'mean'}))  # 按 'type' 列分组,计算每种类型的用户每条评论中的平均问号数

在这里插入图片描述

绘制不同类型用户的词数方差与每条评论平均词数的联合分布图

代码解释: 这段代码绘制了一个 hexbin 联合分布图,展示了不同类型用户的词数方差与每条评论平均词数的分布情况。

plt.figure(figsize=(15,10))  # 设置绘图窗口的大小
sns.jointplot("variance_of_word_counts", "words_per_comment", data=df_2, kind="hex")  # 绘制 hexbin 联合分布图,x 轴为词数方差,y 轴为每条评论的平均词数

在这里插入图片描述

定义一个绘制不同类型用户的联合分布图的函数

代码解释: 这段代码定义了一个函数 plot_jointplot,用于绘制特定类型用户的词数方差与每条评论平均词数的联合分布图。

def plot_jointplot(mbti_type, axs, titles):
    df_3 = df_2[df_2['type'] == mbti_type]  # 筛选指定类型的用户
    sns.jointplot("variance_of_word_counts", "words_per_comment", data=df_3, kind="hex", ax=axs, title=titles)  # 绘制 hexbin 联合分布图,x 轴为词数方差,y 轴为每条评论的平均词数

绘制所有类型用户的联合分布图

代码解释: 这段代码绘制了所有类型用户的词数方差与每条评论平均词数的联合分布图,每个类型一个子图。

i = df_2['type'].unique()  # 获取所有不同的用户类型
k = 0  # 初始化计数器
for m in range(0,2):  # 外层循环,控制行数
    for n in range(0,6):  # 内层循环,控制列数
        df_3 = df_2[df_2['type'] == i[k]]  # 筛选指定类型的用户
        sns.jointplot("variance_of_word_counts", "words_per_comment", data=df_3, kind="hex")  # 绘制 hexbin 联合分布图,x 轴为词数方差,y 轴为每条评论的平均词数
        plt.title(i[k])  # 设置子图的标题为用户类型
        k += 1  # 更新计数器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

绘制不同类型用户的词云图

代码解释: 这段代码绘制了所有类型用户的词云图,每个类型一个子图。词云图用于展示某个类型用户的帖子中最常见的词汇。

from scipy.misc import imread  # 从 scipy.misc 模块导入 imread 函数,用于读取图像
from wordcloud import WordCloud, STOPWORDS  # 从 wordcloud 模块导入 WordCloud 和 STOPWORDS 类,用于生成词云图
fig, ax = plt.subplots(len(df['type'].unique()), sharex=True, figsize=(15,10*len(df['type'].unique())))  # 创建多个子图,每个子图对应一个用户类型,设置共享 x 轴
k = 0  # 初始化计数器
for i in df['type'].unique():  # 遍历所有不同的用户类型
    df_4 = df[df['type'] == i]  # 筛选指定类型的用户
    wordcloud = WordCloud().generate(df_4['posts'].to_string())  # 生成词云图
    ax[k].imshow(wordcloud)  # 显示词云图
    ax[k].set_title(i)  # 设置子图的标题为用户类型
    ax[k].axis("off")  # 关闭坐标轴
    k += 1  # 更新计数器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配套的参考资料涵盖了数据科学、数据分析、可视化工具和 MBTI 相关的内容:

参考资料名称链接
Pandas 官方文档https://pandas.pydata.org/docs/
Numpy 官方文档https://numpy.org/doc/stable/
Seaborn 官方文档https://seaborn.pydata.org/tutorial.html
Matplotlib 官方文档https://matplotlib.org/stable/contents.html
MBTI 简介与应用https://www.verywellmind.com/what-is-mbti-2795965
数据科学入门https://www.dataquest.io/blog/learning-path-data-science/
Python 数据分析https://www.cnblogs.com/jasonfjliu/p/11357168.html
统计图表可视化https://www.jb51.net/article/123224.htm
MBTI 类型的统计分析https://www.researchgate.net/publication/332057668_Analysis_of_MBTI_Personality_Types_in_Social_Media_Posts
数据预处理技巧https://towardsdatascience.com/data-preprocessing-with-python-pandas-part-1-33c8b0a44e45
Hexbin 联合分布图详解https://matplotlib.org/stable/gallery/statistics/hexbin_demo.html
词云图生成工具https://amueller.github.io/word_cloud/
MBTI 类型与社交媒体行为https://www.tandfonline.com/doi/abs/10.1080/19317208.2018.1465568
数据分析中的统计方法https://www.kaggle.com/learn/statistics
Python 数据可视化教程https://www.cnblogs.com/ffli/p/10268122.html
MBTI 类型的性格特征https://www.psychologytoday.com/us/basics/mbti
数据科学项目实例https://www.kdnuggets.com/2020/06/top-10-data-science-projects.html
统计图表的高级用法https://seaborn.pydata.org/examples/index.html
Numpy 数值计算与应用https://numpy.org/doc/stable/user/whatisnumpy.html
数据处理与分析实战https://www.cnblogs.com/chengxiao/p/6128487.html
posted @   爱上编程技术  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示