Data analysis/๋ฐ์ดํ„ฐ ๋ถ„์„

Pandas ์‚ฌ์šฉ๋ฒ• - ํ•จ์ˆ˜์ ์šฉ, ๊ทธ๋ฃนํ™” [๊ธฐ๋ณธ]

Mainyoung 2022. 1. 22. 00:31

ํ•จ์ˆ˜ ์ ์šฉ

data = {
    '์ด๋ฆ„' : ['์ฑ„์น˜์ˆ˜', '์ •๋Œ€๋งŒ', '์†กํƒœ์„ญ', '์„œํƒœ์›…', '๊ฐ•๋ฐฑํ˜ธ', '๋ณ€๋•๊ทœ', 'ํ™ฉํƒœ์‚ฐ', '์œค๋Œ€ํ˜‘'],
    'ํ•™๊ต' : ['๋ถ์‚ฐ๊ณ ', '๋ถ์‚ฐ๊ณ ', '๋ถ์‚ฐ๊ณ ', '๋ถ์‚ฐ๊ณ ', '๋ถ์‚ฐ๊ณ ', '๋Šฅ๋‚จ๊ณ ', '๋Šฅ๋‚จ๊ณ ', '๋Šฅ๋‚จ๊ณ '],
    'ํ‚ค' : [197, 184, 168, 187, 188, 202, 188, 190],
    '๊ตญ์–ด' : [90, 40, 80, 40, 15, 80, 55, 100],
    '์˜์–ด' : [85, 35, 75, 60, 20, 100, 65, 85],
    '์ˆ˜ํ•™' : [100, 50, 70, 70, 10, 95, 45, 90],
    '๊ณผํ•™' : [95, 55, 80, 75, 35, 85, 40, 95],
    '์‚ฌํšŒ' : [85, 25, 75, 80, 10, 80, 35, 95],
    'SWํŠน๊ธฐ' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}
df = pd.DataFrame(data,index =['1๋ฒˆ','2๋ฒˆ','3๋ฒˆ','4๋ฒˆ','5๋ฒˆ','6๋ฒˆ','7๋ฒˆ','8๋ฒˆ'])
df.index.name = '์ง€์›๋ฒˆํ˜ธ'

๊ธฐ์กด dataframe์„ ํ™œ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

df['ํ•™๊ต'] = df['ํ•™๊ต'] + '๋“ฑํ•™๊ต'

๊ธฐ์กด์— ๊ฐ data์˜ 'ํ•™๊ต'์— +'๋“ฑํ•™๊ต'๋ฅผ ํ•˜๋ฉด์„œ '~~๊ณ ๋“ฑํ•™๊ต' ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿผ 'ํ‚ค' column์— cm๋ฅผ ๋ถ™์—ฌ '~~~cm'์„ ๋งŒ๋“ค์–ด ๋ณด์ž

df['ํ‚ค'] = df['ํ‚ค'] + 'cm' #์˜ค๋ฅ˜ ๋ฐœ์ƒ!

์ด๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 'ํ‚ค'๋Š” int์ด๊ธฐ ๋•Œ๋ฌธ์— int ์™€ str์„ ํ•ฉ์น˜๋ ค๋ฉด intํ˜•์„ str๋กœ ์ ์šฉํ•ด์ค˜์•ผํ•œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฐ”๊ฟ”๋ณด์ž. DataFrame์˜ apply๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด  ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

def add_cm(height):
  return str(height) + 'cm'

df['ํ‚ค'] = df['ํ‚ค'].apply(add_cm) #ํ‚ค ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ add_cm ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜

ํ•จ์ˆ˜๋ฅผ ๋‘๋ฒˆ ์ ์šฉํ•ด๋ฒ„๋ ค์„œ...

๋‹ค๋ฅธ ํ•จ์ˆ˜๋„ ์ ์šฉํ•ด๋ณด์ž! SWํŠน๊ธฐ์˜ ์ฒซ ์•ŒํŒŒ๋ฒณ์„ ๋Œ€๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.

def capitalize(lang):
  if pd.notnull(lang): #NaN์ด ์•„๋‹Œ์ง€
    return lang.capitalize()
  return lang

df['SWํŠน๊ธฐ'] = df['SWํŠน๊ธฐ'].apply(capitalize)
df

ํ•˜์ง€๋งŒ capitalize๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

df['SWํŠน๊ธฐ'].str.capitalize()


๊ทธ๋ฃนํ™”

๊ทธ๋ฃนํ™”๋Š” ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ๋“ค๋ผ๋ฆฌ ํ•ฉ์ณ์„œ ํ†ต๊ณ„ ๋˜๋Š” ํ‰๊ท  ๋“ฑ์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. groupby ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์„ฑํ–ˆ๋˜ DataFrame์—์„œ 'ํ•™๊ต'๋ฅผ ๊ทธ๋ฃน๋ณ„๋กœ ๋ฌถ๋Š”๋‹ค๋ฉด '๋ถ์‚ฐ๊ณ '์™€ '๋Šฅ๋‚จ๊ณ '๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.

df.groupby('ํ•™๊ต')
df.groupby('ํ•™๊ต').get_group('๋ถ์‚ฐ๊ณ ')

df.groupby('ํ•™๊ต').get_group('๋Šฅ๋‚จ๊ณ ')

์—ฌ๊ธฐ์„œ groupby์˜ mean ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์˜ ํ‰๊ท  ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

df.groupby('ํ•™๊ต').mean() #๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์˜ ํ‰๊ท  ๊ฐ’

>>> df.groupby('ํ•™๊ต').size() #๊ฐ ๊ทธ๋ฃน์˜ ํฌ๊ธฐ
ํ•™๊ต
๋Šฅ๋‚จ๊ณ     3
๋ถ์‚ฐ๊ณ     5
dtype: int64

>>> df.groupby('ํ•™๊ต').size()['๋Šฅ๋‚จ๊ณ '] #ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ๋Šฅ๋‚จ๊ณ ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜
3

>>> df.groupby('ํ•™๊ต')['ํ‚ค'].mean() # ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ํ‚ค์˜ ํ‰๊ท  ๋ฐ์ดํ„ฐ
ํ•™๊ต
๋Šฅ๋‚จ๊ณ     193.333333
๋ถ์‚ฐ๊ณ     184.800000
Name: ํ‚ค, dtype: float64

>>> df.groupby('ํ•™๊ต')[['๊ตญ์–ด','์˜์–ด','์ˆ˜ํ•™']].mean() #ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ๊ตญ์–ด, ์˜์–ด, ์ˆ˜ํ•™ ํ‰๊ท  ๋ฐ์ดํ„ฐ

์ด๋ฒˆ์—” ํ•™๋…„ ์—ด์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

df['ํ•™๋…„'] = [3,3,2,1,1,3,2,2] #ํ•™๋…„ column ์ถ”๊ฐ€
df

์ด๋ฅผ ๊ทธ๋ฃนํ™” ํ• ๊ป€๋ฐ, ํ•™๊ต๋ณ„ ํ•™๋…„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค.

df.groupby(['ํ•™๊ต','ํ•™๋…„']).mean() #ํ•™๊ต๋ณ„, ํ•™๋…„๋ณ„ ํ‰๊ท  ๋ฐ์ดํ„ฐ

>>> df.groupby('ํ•™๋…„').mean() #ํ•™๋…„๋ณ„ ํ‰๊ท  ๋ฐ์ดํ„ฐ
>>> df.groupby('ํ•™๋…„').mean().sort_values('ํ‚ค') #ํ•™๋…„๋ณ„ ํ‰๊ท ์„ ๋‚ด๊ณ  ํ‚ค๋กœ ์ •๋ ฌํ•œ๋‹ค.

>>> df.groupby('ํ•™๊ต')[['์ด๋ฆ„','SWํŠน๊ธฐ']].count() #ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ๊ฐ ํ•™๊ต๋ณ„ SWํŠน๊ธฐ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ด
ํ•™๊ต	์ด๋ฆ„	SWํŠน๊ธฐ
๋Šฅ๋‚จ๊ณ 	3	3
๋ถ์‚ฐ๊ณ 	5	3

๊ทธ๋ฃนํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์ž๊ธฐ๊ฐ€ ์›ํ•˜๋Š” ๊ทธ๋ฃน๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•œ ์ ์ด ๋งŽ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋„ ํ™•์ธํ•ด๋ณด์ž.

>>> school = df.groupby('ํ•™๊ต')
>>> school['ํ•™๋…„'].value_counts().loc['๋ถ์‚ฐ๊ณ '] #ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ๋ถ์‚ฐ๊ณ ์— ๋Œ€ํ•ด์„œ ํ•™๋…€๋…ˆ ํ•™์ƒ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ด
ํ•™๋…„
1    2
3    2
2    1
Name: ํ•™๋…„, dtype: int64

>>> school['ํ•™๋…„'].value_counts().loc['๋Šฅ๋‚จ๊ณ '] #ํ•™๊ต๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•œ ๋’ค์— ๋Šฅ๋‚จ๊ณ ์— ๋Œ€ํ•ด์„œ ํ•™๋…„๋ณ„ ํ•™์ƒ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ด
ํ•™๋…„
2    2
3    1
Name: ํ•™๋…„, dtype: int64

>>> school['ํ•™๋…„'].value_counts(normalize=True).loc['๋ถ์‚ฐ๊ณ '] #ํ•™์ƒ๋“ค์˜ ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ํผ์„ผํŠธ๋กœ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์ ธ์˜ด
ํ•™๋…„
1    0.4
3    0.4
2    0.2
Name: ํ•™๋…„, dtype: float64
728x90