๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ต์œก/์ŠคํŒŒ๋ฅดํƒ€

[TIL] ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ AI 9๊ธฐ - 8ํšŒ

by gomdeng 2024. 12. 4.

๐Ÿถ ํ•™์Šต ๋ฒ”์œ„

  • ๊ฐ•์ขŒ: ์ธ๊ณต์ง€๋Šฅ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ  4~5์ฃผ์ฐจ
    • ํ”ผ๋ฒ—ํ…Œ์ด๋ธ”, ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
  • ๊ฐœ์ธ๊ณผ์ œ
    • ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•, ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (numpy, pandas)

 

๐Ÿถ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณผ์ œ

โœจ ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๊ธฐ (read)

๐Ÿšฉ ๋‚ด์šฉ
 1. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณต
 2. read ํ•จ์ˆ˜๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ
 
๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    import pandas as pd
    
    โœ”๏ธ 1. read_csv(): CSV ํŒŒ์ผ์„ ๋กœ๋“œ (url ์ง€์›)
     1) pd.read_csv('filename.csv')
     2) url = "https://example.com/data.csv"
        pd.read_csv(url) 
    
    โœ”๏ธ 2. read_excel(): Excel ํŒŒ์ผ(xls, xlsx)์„ ๋กœ๋“œ
    pd.read_excel('filename.xlsx')
    
    โœ”๏ธ 3. read_json(): JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด์ด๋‚˜ ํŒŒ์ผ์„ ๋กœ๋“œ (url ์ง€์›)
     1) pd.read_json('filename.json')
     2) url = "https://example.com/data.json"
        pd.read_json(url)     
    
    โœ”๏ธ 4. read_sql(): SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๋“œ
    pd.read_sql('SELECT * FROM table_name', connection)
    
    โœ”๏ธ 0. ๊ธฐํƒ€
    1. read_html():
    2. read_parquet():
    3. read_feather():
    4. read_hdf():

 

โœจ DataFrame๊ณผ dictionary ๋ฐ์ดํ„ฐ ๋งคํ•‘ํ•˜๊ธฐ

๐Ÿšฉ ๋‚ด์šฉ
  - '๊ด€์„œ๋ช…' ์ปฌ๋Ÿผ์œผ๋กœ ๋งคํ•‘
  - '๊ตฌ๋ณ„' ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ƒ์„ฑ
  - ๋งค์นญ๋˜์ง€ ์•Š๋Š” ๊ฐ’์€ '๊ตฌ ์—†์Œ'์œผ๋กœ ํ‘œ์‹œ
 1. map() ํ•จ์ˆ˜ ์‚ฌ์šฉ
  - ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ
  - Series์—์„œ๋งŒ ์ž‘๋™ํ•˜๋ฉฐ DataFrame์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค
   โ—DataFrame์—์„œ map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋˜๋ฐ??
    ์˜ˆ์‹œ) df['์ปฌ๋Ÿผ๋ช…'].map()
     > ์ด๊ฑด DataFrame์ด ์•„๋‹Œ ํŠน์ •์—ด๊ณผ Series๋กœ ์ฒ˜๋ฆฌ๋œ๊ฒƒ
 2. ๋”•์…”๋„ˆ๋ฆฌ(dictionary) ๋ฐ์ดํ„ฐ → DataFrame ๋ณ€๊ฒฝ → merge๋กœ ์ฒ˜๋ฆฌ
 
๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    import pandas as pd
    
    # ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„
    url = "https://example.com/data.csv"
    df = pd.read_csv(url)
    
    # ๋”•์…”๋„ˆ๋ฆฌ
    dict_data = { '์„œ๋Œ€๋ฌธ์„œ': '์„œ๋Œ€๋ฌธ๊ตฌ', '์ˆ˜์„œ์„œ': '๊ฐ•๋‚จ๊ตฌ'... } 
    
    โœ”๏ธ 1. map() ํ•จ์ˆ˜ ์‚ฌ์šฉ
    # '๊ด€์„œ๋ช…'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งคํ•‘, ๋งค์นญ๋˜์ง€ ์•Š๋Š” ๊ฐ’์€ '๊ตฌ ์—†์Œ'์œผ๋กœ ํ• ๋‹นํ•ด์„œ '๊ตฌ๋ณ„' ์ปฌ๋Ÿผ์— ์ €์žฅ
    df['๊ตฌ๋ณ„'] = df['๊ด€์„œ๋ช…'].map(dict_data).fillna('๊ตฌ ์—†์Œ')
    
    โœ”๏ธ 2. merge() ํ•จ์ˆ˜ ์‚ฌ์šฉ
    # ๋”•์…”๋„ˆ๋ฆฌ → ๋ฆฌ์ŠคํŠธ ๋ณ€๊ฒฝ
    list_data = list(dict_data.items())
    
    # ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ 
    df2 = pd.DataFrame(list_data, columns=['๊ด€์„œ๋ช…', '๊ตฌ๋ณ„'])
    
    # merge๋กœ ๋งคํ•‘ ์ฒ˜๋ฆฌ
    mapping_df = pd.merge(df, df2, how='left', on='๊ด€์„œ๋ช…').fillna('๊ตฌ ์—†์Œ')

 

โœจ DataFrame๊ณผ Index ๋ณ€๊ฒฝ ๋ฐ pivot_table ์ƒ์„ฑ

๐Ÿšฉ ๋‚ด์šฉ
  - index๋ฅผ '๊ด€์„œ๋ช…'์—์„œ '๊ตฌ๋ณ„'๋กœ ๋ณ€๊ฒฝ
  - ๊ฐ™์€ '๊ตฌ'์˜ ๊ฒฝ์šฐ๋„ค๋Š” ์ค‘๋ณต์ œ๊ฑฐ ๋ฐ sum() ์ ์šฉ
 
  1. pivot_table
  - ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ์—ด์„ ์ƒˆ๋กœ์šด ํ–‰ ์ธ๋ฑ์Šค, ์—ด ์ธ๋ฑ์Šค, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ’์œผ๋กœ ์žฌ๊ตฌ์„ฑ
  - ๋‹ค์ฐจ์› ์š”์•ฝ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
  - Excel์˜ ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  โœ”๏ธ ์ฃผ์š”ํŠน์ง•
   1) values: ์ง‘๊ณ„ํ•  ๋ฐ์ดํ„ฐ ์—ด์˜ ์ด๋ฆ„ ์ง€์ •
   2) index: ํ”ผ๋ฒ— ํ…Œ์ด๋ธ” ํ–‰ ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋  ์—ด ์ด๋ฆ„ ์ง€์ •
   3) columns: ์ƒˆ๋กœ์šด ์—ด ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋  ์—ด ์ด๋ฆ„ ์ง€์ •
   4) aggfunc: ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ง€์ •, pandas์™€ numpy์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      sum, mean, count, min, max ๋“ฑ (๊ธฐ๋ณธ๊ฐ’: mean)
  
๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    import pandas as pd
    
    โœ”๏ธ 1. DataFrame ์ธ๋ฑ์Šค ๋ณ€๊ฒฝ
    df.set_index("๊ตฌ๋ณ„", inplace=True) # inplace=True๋กœ ์›๋ณธ df์— ์ ์šฉ

    โœ”๏ธ 2. pivot_table ์ƒ์„ฑ
    โ€ป columns, values๋Š” optional ํ•ญ๋ชฉ: ์ง€์ • ์•ˆํ•  ์‹œ, ๋ชจ๋“  ํ•ญ๋ชฉ ์„ ํƒ
	pivot = df.pivot_table(index='๊ตฌ๋ณ„', aggfunc='sum')

 

โœจ DataFrame ๋ฐ์ดํ„ฐ drop / del / rename

๐Ÿšฉ ๋‚ด์šฉ
  - '๊ตฌ ์—†์Œ' ํ–‰์€ drop ์„ ํ™œ์šฉํ•˜์—ฌ ์‚ญ์ œ
  - ํ•„์š”์—†๋Š” column์„ del ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œ
  - ์ปฌ๋Ÿผ๋ช…์„ rename ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ
  โœ”๏ธ del vs drop
   1) del
    - Python ๊ธฐ๋ณธ ๊ตฌ๋ฌธ 
    - ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ์‚ญ์ œ (๋ณต์› ๋ถˆ๊ฐ€)
    - ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ํ•œ ๋ฒˆ์— ์‚ญ์ œ ๋ถˆ๊ฐ€
   2) drop
    - axis: ํ–‰ ๋˜๋Š” ์—ด
    - ์œ ์—ฐ์„ฑ, ๋ณต์› ๊ฐ€๋Šฅ, ํŽธ๋ฆฌ์„ฑ (์‹ค๋ฌด์—์„œ ์„ ํ˜ธ)   
  
๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    import pandas as pd
    
    โœ”๏ธ 1. drop() ์‚ฌ์šฉ
    # '๊ตฌ ์—†์Œ'์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    pivot.drop('๊ตฌ ์—†์Œ', inplace=True)
    
    โœ”๏ธ 2. del()
    # '๊ด€์„œ๋ช…' ์ปฌ๋Ÿผ ์‚ญ์ œ
    del pivot['๊ด€์„œ๋ช…']
    
    โœ”๏ธ 3. rename()
    # 'ํญ๋ ฅ(๋ฐœ์ƒ)' → 'ํญ๋ ฅ'์œผ๋กœ ๋ณ€๊ฒฝ
    pivot.rename(columns={'ํญ๋ ฅ(๋ฐœ์ƒ)': 'ํญ๋ ฅ'}, inplace=True)

 

 

๐Ÿถ ๋А๋‚€์ 

1. ๊ฐœ์ธ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ, ๋‹น์—ฐํ•œ๊ฑฐ์ง€๋งŒ ์‹ค์Šต์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๋‹ค์‹œ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค.
2. ๊ทธ๋ฆฌ๊ณ , ์ƒ๊ฐ๋ณด๋‹ค ๋‚ด๊ฐ€ ์ž˜ ํ•ด๋‚ผ์ˆ˜ ์žˆ์„์ง€๋„ ๊ฑฑ์ •์ด ๋˜์—ˆ๋‹ค.. ใ…Žใ…Ž
3. ๋นก์„ธ๊ฒŒ ํ•˜๊ธฐ๋กœ ํ–ˆ์ž–์•„.. ๋‹ค์‹œ ์˜์ง€ ๋‹ค์žก์ž
4. ๋ชธ ๊ด€๋ฆฌ๋„ ์ž˜ํ•˜๋ฉด์„œ ๊ฐ€๋ณด์ž๊ตฌ์š”..