ํ•˜๋ฃจ๊ณต๋ถ€

์ œ 15์žฅ ๐Ÿ“’๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ_ํ‘œ์ค€ํ™” ๋“ฑ..๐Ÿ“’

ํ‚ด๋ฐ”๋‹ค 2022. 11. 1. 17:26

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

  • ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
    • ๊ณต๋ฐฑ ๋ฌธ์ž
      • str.strip() : ์–‘์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
      • str.lstrip() : ์™ผ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
      • str.rstip() : ์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
    • ๋ฐ์ดํ„ฐ ํƒ€์ž…
    • ๋ถˆ๊ทœ์น™ํ•œ ๋Œ€์†Œ๋ฌธ์ž
    • ๋ถˆ๊ทœ์น™ํ•œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ
    • ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์ž
    • ๋ถˆ๊ทœ์น™ํ•œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ํ‘œ๊ธฐ

1. ๋ผ๋ฒจ ํ˜•์‹ ํ†ต์ผ

  • ๋ฐ์ดํ„ฐ์˜ ์ธ์ฝ”๋”ฉ ์ž‘์—…์— ํฌํ•จ


1-1) dictionary ํƒ€์ž…์œผ๋กœ encoding map์„ ์ƒ์„ฑํ•ด์„œ ์ ์šฉ

โœ…df = pd.DataFrame({  })
           _map = {  }

 

1-2)  df ๋ณ€์ˆ˜์˜ '  ' ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ map ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด  ๋ณ€ํ™˜

โœ…  df['  '].map(  )

 

1-3)  ์ฐพ์•„ ๋ฐ”๊พธ๊ธฐ์ธ replace()๋ฅผ ์จ๋„ ๋ฉ๋‹ˆ๋‹ค.

โœ…  df['  '] = df['  '].replace([ ๊ธฐ์กด๊ฐ’  ], [ ๋ฐ”๊ฟ€๊ฐ’  ])

 

2. ๋ฌธ์ž ํ˜•์‹(๋Œ€์†Œ๋ฌธ์ž, ๊ธฐํ˜ธ ๋“ฑ) ํ†ต์ผ

2-1) ์›ํ•˜๋Š” ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

df1 = pd.DataFrame(data)
df1

 

2-2) ์ปฌ๋Ÿผ๋ช…์„ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•
     ๋นˆ ๋ฆฌ์ŠคํŠธ์— ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•œ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์ ์žฌํ•œ ๋’ค ๋Œ€์ž…
โœ…new_cols = list()#[]
    for col in df1.columns:
        print(col.lower())
        new_cols.append(col.lower())

 

โ€ป ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ ์ ์šฉ

โœ…  df1.columns = new_cols

 

2-3) df.columns์— ๋ฐ”๋กœ upper() ๋“ฑ์„ ๊ฑธ ์ˆ˜ ์žˆ์Œ

์œ„ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ๋Œ€๋ฌธ์ž๋กœ ๊ต์ฒด
โœ… df1.columns.str.upper()โคต

      df1.columns = new_colsโคต

      df1.columns= df1.columns.str.upper()

2-4) ๋‚ด๋ถ€ ์š”์†Œ์˜ ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ์†Œ๋ฌธ์ž๋กœ ํ†ต์ผ(์ •์ˆ˜ ์ž๋ฃŒ๋Š” ๋ฐฐ์ œ)

.apply(def๋กœ ์ง€์ •ํ•œ ํ•จ์ˆ˜๋ช…) = ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ์ปฌ๋Ÿผ ๋‚ด๋ถ€ ๊ฐ’์„ ์ผ๊ด„์ ์œผ๋กœ ๊ต์ฒด

โœ… def ํ•จ์ˆ˜๋ช…( x ):

        return x.lower()

 

๐Ÿ”‘ ๋งค์šฐ ์ค‘์š” ํ•จ์ˆ˜. apply()

โœ… df1[' ์ ์šฉํ•  ์ปฌ๋Ÿผ '].apply( x_lower)

                                     map์œผ๋กœ๋„ ๋Œ€์ฒด ๊ฐ€๋Šฅ.

 

๐Ÿ“Œ ex)   AGE ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ 20 ์ด์ƒ์ด๋ฉด "์„ฑ์ธ", 19 ์ดํ•˜๋ฉด "๋ฏธ์„ฑ๋…„์ž"๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก is_adult() ํ•จ์ˆ˜๋ฅผ

์ •์˜ ํ›„. apply()๋กœ ํ™œ์šฉํ•ด ์ผ๊ด„์ ์œผ๋กœ ๋ณ€๊ฒฝ

โœ…  def is_adult(value):
            if value >= 20:
                return "์„ฑ์ธ"
           else :
                return "๋ฏธ์„ฑ๋…„์ž"

 

โœ… df1['AGE']=df1['AGE'].apply(is_adult)

      df1

 

 

3. ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ

  • ๊ฒฐ์ธก๊ฐ’
  • ์ด์ƒ์น˜
  • ๋‹จ์ˆœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ
  • ๋™์ผํ•œ ์˜๋ฏธ, ๋‹ค๋ฅธ ๋ช…์นญ์˜ ์ค‘๋ณต ๋ฐ์ดํ„ฐ
  • ์ค‘๋ณต์†์„ฑ(๋‹ค์ค‘๊ณต์„ ์„ฑ) = ๋…๋ฆฝ๋ณ€์ˆ˜๋“ค ๊ฐ„์— ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋„ˆ๋ฌด ๊ฐ•ํ•˜๊ฒŒ(๊ทผ์ ‘ํ•˜๊ฒŒ) ์ž‘์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ
  • ๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘(๊ฐ„๊ฒฉ, ๋‹จ์œ„)

3-1) ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ - ์‚ญ์ œ

  • ๊ฒฐ์ธก์น˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
  • ๋ชจ๋“  ๊ฐ’์ด ๊ฒฐ์ธก์ธ ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
  • ๊ฒฐ์ธก์น˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒ

- ๊ฒฐ์ธก์น˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ธ ๋ ˆ์ฝ”๋“œ(row) ์‚ญ์ œ : df.dropna( )

- ๋ชจ๋“  ๊ฐ’์ด ๊ฒฐ์ธก์น˜์ธ ๋ ˆ์ฝ”๋“œ๋งŒ ์‚ญ์ œ : df.dropna(how='all')

- .isnull()์€ ๋ชจ๋“  ์…€์„ ๊ตฌ๋ถ„ํ•ด์„œ NaN๊ฐ€ ์žˆ๋Š” ์…€์€ True, ์•„๋‹Œ ์…€์€ False๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
- ์ปฌ๋Ÿผ๋ณ„ ๊ฒฐ์ธก์น˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฒ• df.isnull().sum()

 

 

3-2) ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ - ๋Œ€์ฒด ๊ฐ’

  • ์—ฐ์†ํ˜•(์ˆซ์ž) : ์ž„์˜ ๊ฐ’(0 ๋“ฑ ...), mean, median, ์˜ˆ์ธก๊ฐ’, ๋„๋ฉ”์ธ ์ง€์‹ ํ™œ์šฉ
  • ๋ช…๋ชฉํ˜•(๋ฌธ์ž) : mode(์ตœ๋นˆ๊ฐ’), ์˜ˆ์ธก๊ฐ’, ๋„๋ฉ”์ธ์ง€์‹ ํ™œ์šฉ

http://rfriend.tistory.com

-์—ฐ์†ํ˜• ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด : df.fillna( ์ž„์˜์˜ ๊ฐ’ )

- ์ปฌ๋Ÿผ๋ณ„๋กœ ํ‰๊ท ๊ฐ’ NaN๋ฅผ ์—†๋Š” ๊ฐ’์œผ๋กœ ๊ฐ€์ •ํ•˜๊ณ  ๊ตฌํ•œ ํ‰๊ท  : df.mean() 

- ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ค‘์œ„๊ฐ’์„ ๊ตฌํ•จ : df.median()

 

- df = pd.DataFrame({'label': ['A','B','B','C','C','C','D']})

์œ„ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ†ต๊ณ„ ๋ถ„์„ ํ•จ์ˆ˜ .describe()

 

4. ๋ฐ์ดํ„ฐ ๋‹จ์œ„ ํ†ต์ผ(์ •๊ทœ๋ถ„ํฌ, ํ‰๊ท /๋ถ„์‚ฐ/ํ‘œ์ค€ํŽธ์ฐจ ์ดํ•ด ํ•„์š”)

๐Ÿ”‘๋งค์šฐ ์ค‘์š” : ํ‘œ์ค€ํ™”(Standardization)

  • ํ‰๊ท ์„ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…
  • sklearn์—์„œ ์ œ๊ณตํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ํด๋ž˜์Šค
    • preprocessing ํด๋ž˜์Šค
      • scaler() : ์ „์ฒด ์ž๋ฃŒ์˜ ๋ถ„ํฌ๋ฅผ ํ‰๊ท  0, ํ‘œ์ค€ํŽธ์ฐจ 1์ด ๋˜๋„๋ก ์Šค์ผ€์ผ๋ง
      • minmax_scale() : ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์ด ๊ฐ๊ฐ 1, 0์ด ๋˜๋„๋ก ์Šค์ผ€์ผ๋ง
      • StandardScaler() : scaler() ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ๋™์ž‘
  • ํ‘œ์ค€ํ™” : (์š”์†Œ๊ฐ’(ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ) - ํ‰๊ท ) / ํ‘œ์ค€ํŽธ์ฐจ
  • ex)  ๋ชธ๋ฌด๊ฒŒ vs ํ‚ค
    • ํ‘œ์ค€ํ™” ๊ฒฐ๊ณผ : ๋ชธ๋ฌด๊ฒŒ ์Œ์ˆ˜, ํ‚ค ์–‘์ˆ˜
    • ํ•ด์„ : ๋ชธ๋ฌด๊ฒŒ๋Š” ํ‰๊ท  ์ดํ•˜, ํ‚ค๋Š” ํ‰๊ท  ์ด์ƒ(=>๋งˆ๋ฅธ๋ชธ)

- ์ „์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” scikitlearn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ
โœ… from sklearn.preprocessing import scale, minmax_scale

 

- ์ƒ์„ฑํ•œ ์•„๋ž˜ 3๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๋ถ™์ด๋Š” ์ฒ˜๋ฆฌ๊ณผ์ •

x, scale(x), minmax_scale(x) 

โœ… df = pd.DataFrame(np.hstack([x, scale(x), minmax_scale(x)]),
                                columns=['x', 'scale(x)', 'minmax_scale(x)'])

-  ๋ถ™์—ฌ์ค€ ์ปฌ๋Ÿผ๋ณ„๋กœ ์ˆ˜ํ–‰ํ•œ ์—ฐ์ƒ์„ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์ •์˜

np.hstack = ๊ฐ€๋กœ๋ฐฉํ–ฅ์œผ๋กœ ๋ถ™์—ฌ์คŒ ๋”ฐ๋ผ์„œ 3๊ฐœ์˜ ์ปฌ๋Ÿผ์ด๋‹ˆ 9 x 3 ํ˜•ํƒœ๋กœ ๋งŒ๋“ฆ

np.vstack = ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋ถ™์—ฌ์คŒ  ๋”ฐ๋ผ์„œ 27 x 1 ํ˜•ํƒœ๋กœ ๋งŒ๋“ฆ