๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก Data Analysis/๐Ÿ“‚ Project - Analysis of KakaoTalk (end)

[DA][Python] (์ˆ˜์ •) ๋Œ€ํ™” ๋ถ„์„ ๊ธฐ๋Šฅ - ์‹œ๊ฐํ™”ํ•˜์—ฌ ์ถœ๋ ฅ ์ฝ”๋“œ๋กœ ์ˆ˜์ •

by Sun A 2024. 7. 23.

์•ž์„œ ๋งŒ๋“  ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋Š” ์‹œ๊ฐํ™” ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ํ™” ๋œ ๊ฒฐ๊ณผ๊ฐ’๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ์ž‘์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์‹œ๊ฐํ™” ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

โ–ผ ๊ธฐ์กด ํ•จ์ˆ˜ 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, '์ด๋ชจํ‹ฐ์ฝ˜')