์ ๊ฒ์๊ธ์์ ์นด์นด์คํก ์๋ณธ ๋ํ ๋ด์ฉ์ ๋ด๋ ค๋ฐ์ ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ์์ฑํ๊ณ ํจ์๋ก ๊ตฌํํด๋ณด์๋ค.
โผ ๊ฒ์๋ฌผ ํ์ธํ๊ธฐ
[DA][Python] (2์ฐจ ์ค๊ณ ๋ฐ ์์ฑ) ์นด์นด์คํก ๋ํ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ฝ๋ ์์ ์ค๊ณ
ํ์ฌ ํด๋น ๋ด์ฉ์ ํผ๋๋ฐฑ์ ๋ฐ์ ์ฝ๋ ์์ฑ์ ์๋ฃํ์์ผ๋ฉฐ ์ต์ข ์์ฑ๋ ์ฝ๋์ ๋ํ ์ค๋ช ์ด๋ค.์์ ์ฌํญ1. ํจ์๋ช ์ ๋ช ํํ๊ฒ ๋ณ๊ฒฝ2. ์๋ณธ ๋ฐ์ดํฐ์ ์กด์ฌํ๋ ์๋ก ๋ค๋ฅธ ํ์์ ๋ผ์ธ ๋ ๊ฐ์ง์
sundery.tistory.com
์ฒซ ๋ฒ์งธ ํจ์๋ ์ฌ์ฉ์๋ณ ๋ํ ๋น๋ ๋ถ์ ํจ์๋ฅผ ์์ฑํ์๊ณ , ์ด๋ฒ์๋ ์ด๋ชจํฐ์ฝ ์ฌ์ฉ ๋น๋๋ฅผ ๋ถ์ํด๋ณผ ์์ ์ด๋ค.
์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ ํ ์คํธ "์ด๋ชจํฐ์ฝ"์ผ๋ก ์ ๋ ฅ๋์ด์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Message ๊ฐ์ '์ด๋ชจํฐ์ฝ' ๋ฌธ์๊ฐ ํฌํจ๋์ด์๋ ์๋ฅผ ์ธ๋ฉด ์ํ๋ ๊ฐ์ ์ป์ ์ ์๋ค.
๋ถ์ ๋ด์ฉ
์ฌ์ฉ์๋ณ ์ด๋ชจํฐ์ฝ ์ฌ์ฉ ๋น๋ ๋ถ์
์ฐ์ ์ถ๋ ฅ๋์ด์ผ ํ๋ ๊ฐ์ Name๊ณผ ์ด๋ชจํฐ์ฝ์ด๋ผ๋ ๋ฌธ์๊ฐ ์ถ๋ ฅ๋ ํ์๋ฅผ ์ฌ์ฉ์๋ณ๋ก ์นด์ดํธํ ๊ฐ์ด๋ค
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํจ์๋ช ์ compare_emoticon_counts๋ก ์ ์ํ๋ค.
def compare_emoticon_counts(data, emoticon):
๋ํ ํฌํจ๋๋ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ๋ฐ๊ฟ์ ์ ๋ ฅํ์ฌ ๋ถ์ํ ์๋ ์๋ค.
emoticon์ด๋ผ๋ ๋งค๊ฐ๋ณ์์ ๋ค๋ฅธ ๊ฐ์ ๋ฃ์ด์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ฐ์ ํจ์๋ช ์ ์ ์ํ๊ณ ๋งค๊ฐ๋ณ์๊ฐ๋ ์ ์ํ์๋ค๋ฉด Name๋ณ๋ก ์ด๋ชจํฐ์ฝ์ด๋ผ๋ ๋จ์ด๊ฐ Message ์นผ๋ผ ๋ด์ ๋ฌธ์์ด์ ์ผ๋ง๋ ํฌํจ๋์๋ ์ง ์ ์ ์๋ ์ฝ๋๋ฅผ ์ง์ผํ๋ค.
์ฐ์ Message ๊ฐ์ emoticon์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ํฌํจ๋ ๋ฌธ์์ด์ ๋ฝ๊ธฐ์ํ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ค.
emoticon_count = df['Message'].str.contains(emoticon)
์ด ์ํ๋ก ์ถ๋ ฅํ์ ์ ์๋์ ๊ฐ์ด ๋์จ๋ค.
'์ด๋ชจํฐ์ฝ' ์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋์ด ์์ง ์์ ๊ฐ์ ๋ชจ๋ False๋ก ์ถ๋ ฅ๋๋ ๋ฐ ์ฌ๊ธฐ์ ํน์๋ ์์ ๊ฒฐ์ธก๊ฐ๋ False๋ก ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ na=False๋ฅผ ์ถ๊ฐํด์ค๋ค.
emoticon_count = df['Message'].str.contains(emoticon, na=False)
์ด์ ์ฌ๊ธฐ์ ์ฌ์ฉ์๋ณ๋ก ์ด๋ชจํฐ์ฝ ๋ฌธ์์ ๊ฐ์๋ฅผ ์ธ์ด์ผ ํ๋ค.
'Name' ์นผ๋ผ์ ์ด์ฉํด์ ์ฌ์ฉ์๋ณ๋ก ๋ฌถ์ ์ ์๊ธฐ ๋๋ฌธ์ 'Name' ์ด์ฉํ์ฌ ๊ทธ๋ฃน๋ณ๋ก ๋ฌถ์ด์ค๋ค.
(๋์ผํ 'Name'์ ๊ฐ์ง ํ๋ผ๋ฆฌ ๋ฌถ๋๋ค.)
emoticon_count = df[df['Message'].str.contains(emoticon, na=False)].groupby('Name')
๋ฌถ์ธ ํ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํด์ .size() ๋ฅผ ์ด์ฉํ ์ ์๋ค.
์ด ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ทธ๋ฃนํ๋ 'Name'์ ํ ๊ฐ์๋ฅผ ๋ฐํํ ์ ์๋ค. ๊ทธ๋ผ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
emoticon_count = df[df['Message'].str.contains(emoticon, na=False)].groupby('Name').size()
์ด์ ์ด ๊ฒฐ๊ณผ๊ฐ์ ์์ ์์ฑํ ๊ฒ์๋ฌผ์ฒ๋ผ ๋ฐ์ดํฐํ๋ ์ํ ํ ์ ์๋ค.
.reset_index๋ฅผ ํ์ฉํ์ฌ ์์ฑํ๊ณ ์ถ๋ ฅํ๋ค.
๊ทผ๋ฐ ์์ ์์ฑํ ๊ฒ์๋ฌผ์์๋ ๋ณ์๋ช ์ .columns ๋ฅผ ๋ถ์ฌ์ ์นผ๋ผ๋ช ์ ์ ์ํ์๋๋ฐ
reset_index ํจ์ ์์ name = '์ํ๋ ์นผ๋ผ๋ช '์ ์ ๋ ฅํ๋ฉด ๋ฐ๋ก ๊ฐ์ด ๋์์ ์์ ํจ์ ์ฝ๋๋ฅผ ์์ ํ์๋ค.
(ํจ์ ๊ตฌํ (1)์ ์์ฑ๋ ํจ์๋ฅผ ์๋ฏธํจ)
~~~ .size().reset_index(name = 'Emoticon_Count')
(~~~๋ ์์ ์์ฑ๋ ์ฝ๋์ ๋์ผํ๋ค.)
์ด์ ์ด ๊ฐ์ ์ถ๋ ฅํ๋ฉด ์๋์ ๊ฐ๋ค
์ฌ๊ธฐ๊น์ง๋ง ํด๋ ๋์ง๋ง ๋๋ ๋๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋์ง๋ ๊ถ๊ธํด์ ์ ๋ ฌ ์ฝ๋๋ ์ถ๊ฐํ๋ค.
์ ๋ ฌํ ๋๋ .sort_values()๋ฅผ ์ฐ๋ฉด ๋๋ค
์ด sort_values๋ ๋ฐ์ดํฐํ๋ ์ํ ๋์ด ์์๋๋ง ์ฌ์ฉํ ์ ์๋ค.
์ฐ์ Emoticon_Count ์นผ๋ผ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ sort_values์ ๊ธฐ์ค์ ๋ฃ๊ณ
๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด ascending=False๋ฅผ ์ ๋ ฅํ๋ค. (True๋ฅผ ์์ฑํ๋ฉด ์ค๋ฆ์ฐจ์์ด ๋๋ค. ์๋๋ฉด ์๋ตํด๋ ๋์ผํ๋ค.)
emoticon_count = emoticon_count.sort_values(by='Emoticon_Count', ascending=False)
์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ์์ฑ๋๋ฉฐ ์ฒ์์ ์ค๊ณํ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
(์ฌ์ค reset_index ๋ค์ ๋ถ์ฌ๋ ์ถ๋ ฅ์ ๋์ง๋ง ์ ๋๋๊ฒ ์์ฑํ๊ธฐ ์ํด ๋ฐ๋ก ์ผ๋ค.)
์ ์ฒด ์์ฑ๋ ์ฝ๋
#์ฌ์ฉ์๋ณ ์ด๋ชจํฐ์ฝ ์ฌ์ฉ ๋น๋ ๋ถ์
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
df = generate_dataframe(data)
compare_emoticon_counts(df, '์ด๋ชจํฐ์ฝ')