基于机器学习的人格预测:通过可视化研究人格数据
创作时间:
作者:
@小白创作中心
基于机器学习的人格预测:通过可视化研究人格数据
引用
1
来源
1.
https://www.cnblogs.com/ai168/p/18713523
在当今数据驱动的时代,机器学习不仅在技术领域大放异彩,更在心理学领域展现出独特魅力。本文将带领读者深入探索如何运用机器学习技术,基于社交媒体数据预测个体的人格类型。我们将以MBTI(Myers-Briggs Type Indicator)人格类型系统为切入点,通过数据集分析、可视化研究,揭示社交媒体行为与人格特征之间的潜在关联。
项目背景与数据集介绍
MBTI人格类型系统简介
迈尔斯-布里格斯类型指标(简称MBTI)是一个广泛流行的人格类型系统,它根据四个维度将人划分为16种不同的人格类型:
- 内向(I) – 外向(E)
- 直觉(N) – 感觉(S)
- 思维(T) – 情感(F)
- 判断(J) – 感知(P)
例如,一个偏好内向、直觉、思维和感知的人在MBTI系统中会被标记为INTP。MBTI基于卡尔·荣格的认知功能理论,尽管近年来其科学性和有效性受到质疑,但仍在多个领域被广泛应用。
数据集内容与来源
本项目使用的数据集包含超过8600行数据,每行数据包括:
- 类型(该人的4字母MBTI代码/类型)
- 他们最近发布的50篇文章的每个部分(每个条目用“|||”分隔)
数据集来源于PersonalityCafe论坛,该论坛提供了大量人群及其MBTI个性类型和所写内容的数据。
数据集的基本用途
- 使用机器学习评估MBTI的有效性和其在线预测语言风格和行为的能力。
- 开发一个机器学习算法,尝试根据某人所写的一些文本确定其个性类型。
数据分析与可视化
数据读取与预处理
首先,我们需要导入必要的Python库:
import pandas as pd # 用于数据处理和分析
import numpy as np # 用于数值计算
import seaborn as sns # 用于绘制统计图表
import matplotlib.pyplot as plt # 用于绘图
然后,读取CSV文件并查看前五行数据:
df = pd.read_csv('../input/mbti_1.csv') # 读取 CSV 文件
df.head() # 显示数据的前五行
特征工程
定义一个函数来计算每条评论的词数方差:
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图:
plt.figure(figsize=(15,10)) # 设置绘图窗口的大小
sns.swarmplot("type", "words_per_comment", data=df) # 绘制 swarmplot 图
统计每种类型的用户数量:
df.groupby('type').agg({'type':'count'}) # 按 'type' 列分组,统计每种类型的用户数量
筛选掉特定类型用户并计算每条评论中的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链接数和问号数:
print(df_2.groupby('type').agg({'http_per_comment': 'mean'})) # 按 'type' 列分组,计算每种类型的用户每条评论中的平均 HTTP 链接数
print(df_2.groupby('type').agg({'qm_per_comment': 'mean'})) # 按 'type' 列分组,计算每种类型的用户每条评论中的平均问号数
绘制不同类型用户的词数方差与每条评论平均词数的联合分布图:
plt.figure(figsize=(15,10)) # 设置绘图窗口的大小
sns.jointplot("variance_of_word_counts", "words_per_comment", data=df_2, kind="hex") # 绘制 hexbin 联合分布图
定义一个函数来绘制不同类型用户的联合分布图:
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 联合分布图
绘制所有类型用户的联合分布图:
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 联合分布图
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()))) # 创建多个子图
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 # 更新计数器
参考资料
- 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
热门推荐
纯净水、矿泉水、白开水...一文看清水的分类与特性
“国风旅游”带火三千年古都,看邯郸如何靠成语“破圈”
探究红茶泡饮新境界:为何茶水分离成为红茶品鉴的关键步骤
汽车打不着火的原因有哪些?针对这些原因有哪些解决办法?
鱼缸过滤系统怎样装?鱼缸过滤棉多久换一次?
上海南站周边游全攻略:景点、美食、交通一站式指南
CPU 计算本质:算力、敏感度与发展趋势
何谓清明?清明习俗知多少
孩子聪明却混乱?试试这个新方法!
半山 精彩蝶变展新颜
主机游戏圈的崛起:数字化时代的商业新浪潮
瑜伽冥想中说的当下究竟是什么
汽车"倒爷"的困境:中国汽车出口俄罗斯遇阻
打造转化神器!深度解析客服系统的产品设计之道
AI写作的含义、应用范围及优势:深度解析人工智能在内容创作中的角色与影响
武当九蒸九制黄精
维多利亚时期的英国:辉煌与局限并存
哈佛专家推荐:这5种运动对身体最好
循文献之径 启文体学新程——评介《中国古代文体学史》
笑一笑,十年少!揭秘笑容背后的健康密码
张择端的艺术成就与历史贡献
2025展望之科技篇:中国航天将发射新型货运飞船并开展小行星采样任务
梅花鹿鹿膏可以调理气血吗?
铸造工艺模拟软件:原理、功能与应用案例详解
三月三上巳节,除了吃鸡蛋,这3种食物也要吃,寓意:消灾保平安
中国联通反诈中心:高效精准劝阻 守护民众财产安全
什么是牛大力
上海街头艺人“持证上岗”十年:更有气韵的街道,不能缺少正在发生的艺术
头孢克肟是不是消炎药
提升400米跑成绩的全面策略与训练方法总结