😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Kaggle]MBTI_Myers-Briggs Personality Type Dataset(성격연ꡬ) λ³Έλ¬Έ

πŸ‘©‍πŸ’» 컴퓨터 ꡬ쑰/Kaggle

[Kaggle]MBTI_Myers-Briggs Personality Type Dataset(성격연ꡬ)

μ§•μ§•μ•ŒνŒŒμΉ΄ 2022. 1. 22. 22:13
728x90
λ°˜μ‘ν˜•

220122 μž‘μ„±

<λ³Έ λΈ”λ‘œκ·ΈλŠ” Kaggle 을 μ°Έκ³ ν•΄μ„œ μ €λ§Œμ˜ 풀이λ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€>

https://www.kaggle.com/laowingkin/mbti-study-personality

 

MBTI - Study personality

Explore and run machine learning code with Kaggle Notebooks | Using data from (MBTI) Myers-Briggs Personality Type Dataset

www.kaggle.com

 

 

 

 

μ•ˆκΆκΈˆν•˜κ² μ°Œλ§Œ,,, γ…Ž

μ“°λ‹ˆμ˜ MBTI λŠ” ENFJ!!
μ§•μ§•μ•ŒνŒŒμΉ΄μ˜ MBTI λŠ” INSF!!

 

 

 

 

 

1. MBTI 데이터 

: MBTI λŠ” 4가지 μ£Όμš” 심리적 κΈ°λŠ₯인 감각, 직관, λŠλ‚Œ 및 사고λ₯Ό μ‚¬μš©ν•˜μ—¬ 인간이 κ²½ν—˜ν•˜λŠ” μΌμ’…μ˜ 심리학적 λΆ„λ₯˜

 

  • λ‚΄ν–₯μ„±(I) – μ™Έν–₯μ„±(E)
  • 직관(N) – 감각(S)
  • 생각(T) – λŠλ‚Œ(F)
  • νŒλ‹¨(J) – 인식(P)

 

: 데이터 μ„ΈνŠΈμ—λŠ” 8600개 μ΄μƒμ˜ 데이터 행이 ν¬ν•¨λ˜μ–΄ 있으며 각 ν–‰μ—λŠ” λ‹€μŒμ΄ 포함

  • μœ ν˜• (이 μ‚¬λžŒ 4κΈ€μž MBTI μ½”λ“œ/μœ ν˜•)
  • μ΅œκ·Όμ— κ²Œμ‹œν•œ 50개 ν•­λͺ©μ˜ μ„Ήμ…˜(각 ν•­λͺ©μ€ "|||"(νŒŒμ΄ν”„ 문자 3개)둜 ꡬ뢄됨)

 

: κΈ°λ³Έ μš©λ„

  • 기계 ν•™μŠ΅μ„ μ‚¬μš©ν•˜μ—¬ MBTI의 μœ νš¨μ„±κ³Ό μ˜¨λΌμΈμ—μ„œ μ–Έμ–΄ μŠ€νƒ€μΌ 및 행동을 μ˜ˆμΈ‘ν•˜λŠ” λŠ₯λ ₯을 평가
  • 그듀이 μž‘μ„±ν•œ 일뢀 ν…μŠ€νŠΈλ₯Ό 기반으둜 μ‚¬λžŒμ˜ 성격 μœ ν˜•μ„ κ²°μ •ν•˜λ €κ³  μ‹œλ„ν•  수 μžˆλŠ” 기계 ν•™μŠ΅ μ•Œκ³ λ¦¬μ¦˜μ˜ 생산

mbti_1.csv

 

 

 

 

2. 데이터 뢄석

- import

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

- read_csv

df = pd.read_csv("/content/drive/MyDrive/></2022/MBTI/mbti_1.csv")
df.head()

- info()

df.info()

- value_counts()

df['type'].value_counts()

 

- "|||" 으둜 ꡬ뢄 λ˜μ–΄ μžˆλŠ” κ±Έ split!

- comment λ§ˆλ‹€μ˜ words 와, words 의 개수λ₯Ό λΆ„μ‚°μœΌλ‘œ γ„± γ„±

def var_row(row) :
    l = []
    for i in row.split("|||") :     # 50개 ν•­λͺ©μ˜ μ„Ήμ…˜(각 ν•­λͺ©μ€ "|||"(νŒŒμ΄ν”„ 문자 3개)둜 ꡬ뢄됨)
        l.append(len(i.split()))
    return np.var(l)
    # numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, *, where=<no value>)[source]
    # μ§€μ •λœ 좕을 따라 뢄산을 계산

# μ—΄ 생성
df['words_per_comment'] = df['posts'].apply(lambda x : len(x.split())/50)  # μ™œ 50으둜 λ‚˜λˆŒκΉŒ μ•„ 적은 ν¬μŠ€νŠΈκ°€ 50개!
df['variance_of_word_counts'] = df['posts'].apply(lambda x : var_row(x))   # λΆ„μ‚°!
df.head()

+) 뢄산은! μ–΄μΌ€ κ΅¬ν•˜λƒ! 

numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, *, where=<no value>)[source]

: κ΄€μΈ‘κ°’μ—μ„œ ν‰κ· μ„ λΊ€ 값을 μ œκ³±ν•˜κ³ , 그것을 λͺ¨λ‘ λ”ν•œ ν›„ 전체 개수둜 λ‚˜λˆ μ„œ κ΅¬ν•œλ‹€

: 즉, μ°¨μ΄κ°’μ˜ 제곱의 평균

 

 

- sns 을 μ‚¬μš©ν•˜μ—¬

plt.figure(figsize = (15,10))
sns.swarmplot("type", "words_per_comment", data = df)

음 μ•Œλ‘λ‹¬λ‘ μ΄λΏŒλ‹€

 

 

- groupby 와 agg ν•©ν•΄μ„œ count 적용

# dfμ—μ„œ type λ₯Ό κ·Έλ£Ή(λ¬Άκ³ )λ§Œλ“€κ³ , aggν•΄μ„œ type 의 count κ΅¬ν•˜κΈ°
df.groupby("type").agg({"type" : "count"})

 

 

 

 

- 이해가 μ•ˆλ¨. μ™œ μ € λ„€κ°œλ₯Ό λΉΌλŠ”κ±°μ§€ ?

# μ™œ μ € λ„€κ°œμ˜ MBTI λŠ” λΊμ„κΉŒ??
# isin() λ©”μ†Œλ“œ μ•ˆμ˜ 값이 λ“€μ–΄ 있으면 True, μ•„λ‹ˆλ©΄ False λ°˜ν™˜

df_2 = df[~df['type'].isin(['ESFJ', 'ESFP', 'ESTJ', 'ESTP'])]
df_2['http_per_comment'] = df_2['posts'].apply(lambda x : x.count("http")/50)
df_2['qm_per_comment'] = df_2['posts'].apply(lambda x : x.count("?")/50)
df_2.head()

: 4개의 MBTIλ₯Ό λΊ€ df_2 μ—μ„œ http λ‚˜ ? κ°€ λ“€μ–΄κ°„ κ²ƒμ˜ 개수λ₯Ό 50으둜 λ‚˜λˆ”~

 

 

 

- 평균도 λ§Œλ“€κ³ 

df_2.groupby("type").agg({"http_per_comment" : "mean"})
df_2.groupby("type").agg({"qm_per_comment" : "mean"})

 

 

 

- MBTI λ§ˆλ‹€ μ΄λ³€λŸ‰ 및 μΌλ³€λŸ‰ κ·Έλž˜ν”„λ₯Ό μ‚¬μš©ν•˜μ—¬ 두 λ³€μˆ˜μ˜ ν”Œλ‘― 을 κ·Έλ¦Ό

https://seaborn.pydata.org/generated/seaborn.jointplot.html μ°Έκ³ 

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)

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")
        plt.title(i[k])
        k += 1

: 이런게 12개 펼쳐짐

: ν•œλˆˆμ— 비ꡐ도 쉽움

 

 

 

 

 

- 핡심단어 μ‹œκ°ν™”

from scipy.misc import imread
from wordcloud import WordCloud, STOPWORDS
# μ›Œλ“œ ν΄λΌμš°λ“œ (wordcloud) : νŠΉμ • λ°μ΄ν„°λ‚˜ ν…μŠ€νŠΈμ— 자주 λ“±μž₯ν•˜λŠ” 핡심단어 μ‹œκ°ν™”

fig, ax = plt.subplots(len(df['type'].unique()), sharex = True, figsize = (155, 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

μ“°λ‹ˆμ˜ MBTI
μ§•μ§•μ•ŒνŒŒμΉ΄μ˜ MBTI

.. 흠 μ§•μ§•μ΄λŠ” YOUTUBE λ₯Ό μ’‹μ•„ν•˜λ‚˜λ΄₯

 

 

 

728x90
λ°˜μ‘ν˜•
Comments