πŸ’‘ Data Analysis/πŸ“‚ Project - Analysis of KakaoTalk (end)

[DA][Python] (μˆ˜μ •) λŒ€ν™” 뢄석 κΈ°λŠ₯ - μ‹œκ°ν™”ν•˜μ—¬ 좜λ ₯ μ½”λ“œλ‘œ μˆ˜μ •

Sun A 2024. 7. 23. 13:16

μ•žμ„œ λ§Œλ“  두 κ°€μ§€ ν•¨μˆ˜λŠ” μ‹œκ°ν™” μ½”λ“œκ°€ μ•„λ‹Œ λ°μ΄ν„°ν”„λ ˆμž„ν™” 된 κ²°κ³Όκ°’λ§Œ 좜λ ₯λ˜λ„λ‘ μž‘μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ—

μ‹œκ°ν™” 결과값이 좜λ ₯λ˜λ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •ν•œλ‹€.

β–Ό κΈ°μ‘΄ ν•¨μˆ˜ 2κ°€μ§€

  • μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„ 뢄석(1)
 

[DA][Python] λŒ€ν™” 뢄석 κΈ°λŠ₯ - μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„ 뢄석 (1)

μ•ž κ²Œμ‹œκΈ€μ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ 원본 λŒ€ν™” λ‚΄μš©μ„ λ‚΄λ €λ°›μ•„ μ „μ²˜λ¦¬ν•˜λŠ” 과정을 μž‘μ„±ν•˜κ³  ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€.β–Ό κ²Œμ‹œλ¬Ό ν™•μΈν•˜κΈ° [DA][Python] (2μ°¨ 섀계 및 μ™„μ„±) μΉ΄μΉ΄μ˜€ν†‘ λŒ€ν™” 데이터 μ „μ²˜λ¦¬ μ½”λ“œ 수

sundery.tistory.com

 

  • μ‚¬μš©μžλ³„ μ΄λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„ λΆ„석 (2)
 

[DA][Python] λŒ€ν™” 뢄석 κΈ°λŠ₯ - μ‚¬μš©μžλ³„ 이λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„ 뢄석 (2)

μ•ž κ²Œμ‹œκΈ€μ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ 원본 λŒ€ν™” λ‚΄μš©μ„ λ‚΄λ €λ°›μ•„ μ „μ²˜λ¦¬ν•˜λŠ” 과정을 μž‘μ„±ν•˜κ³  ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€.β–Ό κ²Œμ‹œλ¬Ό ν™•μΈν•˜κΈ° [DA][Python] (2μ°¨ 섀계 및 μ™„μ„±) μΉ΄μΉ΄μ˜€ν†‘ λŒ€ν™” 데이터 μ „μ²˜λ¦¬ μ½”λ“œ 수

sundery.tistory.com

 


μˆ˜μ •

μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„ λΆ„석(1)

β–Ό κΈ°μ‘΄ μ½”λ“œ

더보기
#μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„ 뢄석
def count_messages_by_name(df):

    #Name 칼럼 인덱슀 수 μ„ΈκΈ°
    """ λ°μ΄ν„°ν”„λ ˆμž„μ—μ„œ 'Name' 칼럼의 값을 μ„Έμ–΄ 각 이름별 λ©”μ‹œμ§€ 수λ₯Ό λ°˜ν™˜ν•œλ‹€."""
    messages_count = df['Name'].value_counts().sort_values(ascending = False).reset_index(name = 'Message_Count')
    
    messages_count.columns = ['Name', 'Message_Count']
    
    return messages_count

κΈ°μ‘΄ μ½”λ“œλŠ” μ•„μ£Ό κ°„λ‹¨ν–ˆλ‹€. 

여기에 μ‹œκ°ν™”λ˜μ–΄ 좜λ ₯될 수 μžˆλŠ” μ½”λ“œλ§Œ μΆ”κ°€ν•˜λ©΄ λœλ‹€.

ν•΄λ‹Ή μ°¨νŠΈλŠ” λ°” 차트둜 좜λ ₯ν•  것이기 λ•Œλ¬Έμ— bar 차트둜 좜λ ₯λ˜λ„λ‘ μž…λ ₯ν•œλ‹€.

plt.figure((figsize=(5, 4))
plt.bar(messages_count['Name'], messages_count['Message_Count'], color='green')
  • λ°”μ˜ κ°€λ‘œ μ„Έλ‘œ 길이λ₯Ό μ§€μ •ν•΄μ£Όκ³  (figsize) λ°”μ˜ 각 값을 칼럼λͺ…μœΌλ‘œ μ§€μ •ν•΄μ€€λ‹€.
  • 색은 green

 

좜λ ₯λ˜λŠ” μ‹œκ°ν™” 차트의 각 라벨을 μ§€μ •ν•΄μ€€λ‹€.

    plt.title('μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„')
    plt.xlabel('μ‚¬μš©μž')
    plt.ylabel('λŒ€ν™” λ©”μ‹œμ§€ 수')
    plt.show()
    
return messages_count

 

β–Ό μ΅œμ’… μˆ˜μ • μ½”λ“œ

#μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„ 뢄석
def count_messages_by_name(df):

    #Name 칼럼 인덱슀 수 μ„ΈκΈ°
    """ λ°μ΄ν„°ν”„λ ˆμž„μ—μ„œ 'Name' 칼럼의 값을 μ„Έμ–΄ 각 이름별 λ©”μ‹œμ§€ 수λ₯Ό λ°˜ν™˜ν•œλ‹€."""
    messages_count = df['Name'].value_counts().sort_values(ascending = False).reset_index(name = 'Message_Count')
    
    messages_count.columns = ['Name', 'Message_Count']
    
    #데이터 μ‹œκ°ν™”
    plt.figure(figsize=(5, 4))
    plt.bar(messages_count['Name'], messages_count['Message_Count'], color='green')

    #라벨 μ„€μ •
    plt.title('μ‚¬μš©μžλ³„ λŒ€ν™” λΉˆλ„')
    plt.xlabel('μ‚¬μš©μž')
    plt.ylabel('λŒ€ν™” λ©”μ‹œμ§€ 수')
    plt.show()
    
    return messages_count

count_messages_by_name(df)

μ‚¬μš©μžλ³„ μ΄λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„ λΆ„석 (2)

β–Ό κΈ°μ‘΄ μ½”λ“œ

더보기
#μ‚¬μš©μžλ³„ 이λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„ 뢄석
def compare_emoticon_counts(data, emoticon):
    #Name λ³„λ‘œ 이λͺ¨ν‹°μ½˜ μ΄λΌλŠ” 단어가 Message 칼럼 λ‚΄μ˜ λ¬Έμžμ—΄μ— μ–Όλ§ˆλ‚˜ ν¬ν•¨λ˜μ—ˆλŠ” μ§€ μ„Έμ„œ Emoticon_Count에 μ‚½μž…
    emoticon_count = df[df['Message'].str.contains(emoticon, na=False)].groupby('Name').size().reset_index(name='Emoticon_Count')
    
    #많이 μ‚¬μš©ν•œ 순으둜 μ •λ ¬
    emoticon_count = emoticon_count.sort_values(by='Emoticon_Count', ascending=False)
    return emoticon_count

μœ„μ˜ μ½”λ“œμ—μ„œ μ •λ ¬κΉŒμ§€λŠ” λ˜‘κ°™κ³  μ‹œκ°ν™” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것이닀.

 

μœ„μ™€ λ™μΌν•˜κ²Œ λ°” 차트λ₯Ό μ‚¬μš©ν•  것이며 μ‚¬μ΄μ¦ˆλŠ” 5, 4둜 μ„€μ •ν•œλ‹€.

plt.figure(figsize=(5, 4))
plt.bar(emoticon_count['Name'], emoticon_count['Emoticon_Count'], color='lightcoral')
  • 색상은 lightcoral

 

좜λ ₯λ˜λŠ” μ‹œκ°ν™” 차트의 각 라벨을 μ§€μ •ν•΄μ€€λ‹€.

    plt.title('μ‚¬μš©μžλ³„ 이λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„')
    plt.xlabel('μ‚¬μš©μž', fontsize=9, labelpad=15)
    plt.xticks(rotation=45)
    plt.ylabel('이λͺ¨ν‹°μ½˜ 수')
    plt.show()
   
   return emoticon_count

 

β–Ό μ΅œμ’… μˆ˜μ • μ½”λ“œ

#μ‚¬μš©μžλ³„ 이λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„ 뢄석
def count_emoticon_usage(df, emoticon):
    """λ°μ΄ν„°ν”„λ ˆμž„μ—μ„œ νŠΉμ • 이λͺ¨ν‹°μ½˜μ˜ μ‚¬μš© λΉˆλ„λ₯Ό μ΄λ¦„λ³„λ‘œ κ³„μ‚°ν•˜μ—¬ λ°˜ν™˜"""
    
    #Name λ³„λ‘œ 이λͺ¨ν‹°μ½˜ μ΄λΌλŠ” 단어가 Message 칼럼 λ‚΄μ˜ λ¬Έμžμ—΄μ— μ–Όλ§ˆλ‚˜ ν¬ν•¨λ˜μ—ˆλŠ” μ§€ μ„Έμ„œ Emoticon_Count에 μ‚½μž…
    emoticon_count = df[df['Message'].str.contains(emoticon, na=False)].groupby('Name').size().reset_index(name='Emoticon_Count')
    
    emoticon_count = emoticon_count.sort_values(by='Emoticon_Count', ascending = False)

    #데이터 μ‹œκ°ν™”
    plt.figure(figsize = (5,4))
    plt.bar(emoticon_count['Name'], emoticon_count['Emoticon_Count'], color='lightcoral')
    
    
    #라벨 μ„€μ •
    plt.title('μ‚¬μš©μžλ³„ 이λͺ¨ν‹°μ½˜ μ‚¬μš© λΉˆλ„')
    plt.xlabel('μ‚¬μš©μž', fontsize=9, labelpad=15)
    plt.xticks(rotation=45)
    plt.ylabel('이λͺ¨ν‹°μ½˜ 수')
    plt.show()

    return emoticon_count

count_emoticon_usage(df, '이λͺ¨ν‹°μ½˜')