Study_note(zb_data)/EDA

์Šคํ„ฐ๋”” ๋…ธํŠธ (EDA) Pandas ๊ธฐ์ดˆ

KloudHyun 2023. 8. 5. 18:28

๐Ÿ“Œ Pandas ๊ธฐ์ดˆ

  • python์—์„œ R ๋งŒํผ์˜ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ํ•ธ๋“ค๋ง ์„ฑ๋Šฅ์„ ์ œ๊ณต
  • ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค์—์„œ ์ตœ๋Œ€์˜ ํšจ์œจ
  • ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์‘์šฉ๊ฐ€๋Šฅํ•œ ์—‘์…€ (๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๋Š”๋ฐ์— ๋งŽ์ด ์“ฐ์ธ๋‹ค)

๐Ÿ“Œ Series

  • index์™€ value๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ํ•œ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค (float, object, int ๋“ฑ)
  • ํ•˜๋‚˜๋ผ๋„ ๋ฌธ์ž์—ด์ด ์„ž์—ฌ์žˆ์œผ๋ฉด "object" ๋กœ ์ธ์‹ (int๋กœ ์—ฐ์‚ฐ ๋ถˆ๊ฐ€)

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ

  • import pandas
  • ๊ธฐ๋ณธ์ ์œผ๋กœ csv, ์—‘์…€ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DataFrame ํ˜•ํƒœ๋กœ import ํ•  ์ˆ˜ ์žˆ๋‹ค.

 ๐ŸšฉColumn(ํ–‰), Index(), Value๋กœ ๋‚˜๋‰œ๋‹ค

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

 ๐Ÿšฉhead, tail ๋ช…๋ น์–ด

  • head() - ์ƒ์œ„ 5๊ฐœ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค. (๊ฐœ์ˆ˜๋กœ ์ง€์ • ๊ฐ€๋Šฅ)
  • tail() - ํ•˜์œ„ 5๊ฐœ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

 ๐Ÿšฉrename ๋ช…๋ น์–ด

  • rename์œผ๋กœ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
    • rename={xxx.columns[0] : "๊ตฌ๋ณ„"}, inplace=True
    • 0๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ "๊ตฌ๋ณ„"๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค
    • inplace - ์•ž์œผ๋กœ ํ‘œ์— ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ ํƒ (์ผ์‹œ์  or ์˜๊ตฌ)

 ๐Ÿšฉ๋‚ ์งœ ๋ฐ์ดํ„ฐ (date datas)

  • import Pandas
  • date_range("๋‚ ์งœ", period = (์ผ์ž๊ฐœ์ˆ˜))

 ๐ŸšฉSeries์™€ DataFrame ์ฐจ์ด

  • pandas.Series() - data(value), index 
    • data = 1์ฐจ์›์ ์ธ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€๋Šฅ.
    • data์™€ index๋Š” ๊ธธ์ด๊ฐ€ ๋งž์•„์•ผ ํ•œ๋‹ค.
  • pandas.DataFrame() - data(value), index, columns
  • csv, excel ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜, DataFrame์„ ํ†ตํ•ด ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

  • ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํ™œ์šฉ, column๊ณผ data๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

๋”•์…”๋„ˆ๋ฆฌ ์•ˆ์˜ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ { "column" : ["Value"]}
๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ ["column" : "Value"]

๐Ÿšฉindex, value, columns

  • DataFrame์˜ ๊ฐ๊ฐ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 ๐Ÿšฉinfo() ๋ช…๋ น์–ด

  • info() ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๊ธฐ ์ „, info ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ•œ๋ฒˆ ๋” ํ™•์ธํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 ๐Ÿšฉdescribe()

  • ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ธฐ์ˆ  ํ†ต๊ณ„ ์ •๋ณด ํ™•์ธ
  • min, 25%, 50%, 75%, max ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 ๐Ÿšฉ๋ฐ์ดํ„ฐ ์ •๋ ฌ sort_values(), sort_index()

  • sort_values(by = "column", ascending=True or False, inplace=True)
  • sort_index() -> index๋ฅผ ์ •๋ ฌ (๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ)
    • ascending, inplace ์ž…๋ ฅ ํ™•์ธ
  • inplace=True ์•ˆํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ๋˜ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ผญ ํ™•์ธํ•˜์ž!
  • by์— ๊ธฐ์ค€์œผ๋กœ ์‚ผ์„ ์ปฌ๋Ÿผ์„ ์ž‘์„ฑ

ํŠน์ • ์ปฌ๋Ÿผ์ธ "B" ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

 ๐Ÿšฉ๋ฐ์ดํ„ฐ ์„ ํƒ ["columns"]

  • ํŠน์ • ์ปฌ๋Ÿผ์„ ์„ ํƒํ•˜์—ฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ทธ๋ƒฅ ์ปฌ๋Ÿผ์„ ์ž…๋ ฅํ•ด๋„ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค
  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•  ๋•, list ํ˜•ํƒœ๋กœ๋งŒ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ ์„ ํƒ

 ๐Ÿšฉoffset index [n:m]

  • [n:m] - n๋ถ€ํ„ฐ m-1 ๊นŒ์ง€ index๋ฅผ ์Šฌ๋ผ์ด์‹ฑ.
    • ex) df[0:3] 0๋ถ€ํ„ฐ 2๊นŒ์ง€ index๋ฅผ ํ‘œ์‹œ.

df๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ index 0 ~ 2 ๊นŒ์ง€ ์Šฌ๋ผ์ด์‹ฑ

  • ["index name":"index name2"] ์œผ๋กœ๋„ ์Šฌ๋ผ์ด์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

index๋ฅผ ์ง€์ •ํ•ด์„œ ์Šฌ๋ผ์ด์‹ฑ ๊ฐ€๋Šฅ

 ๐Ÿšฉloc [[index:index],["columns:columns"]]

  • loc = location
  • index ์ด๋ฆ„์œผ๋กœ ํŠน์ • ํ–‰, ์—ด์„ ์„ ํƒ.
  • " , " / " : " ์˜ ์ฐจ์ด๋ฅผ ์œ ๋…ํ•ด์•ผํ•œ๋‹ค.

index - ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€, columns - "A"์™€ "B"๋งŒ
index - 20230802~20230804๊นŒ์ง€, columns - "A" ~ "D"

  • Series ํ˜•ํƒœ์™€ dataframe ํ˜•ํƒœ๊ฐ€ ๊ตฌ๋ถ„์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 ๐Ÿšฉiloc [[index:index],["columns:columns"]]

  • iloc : inter location
    • ์ปดํ“จํ„ฐ๊ฐ€ ์ธ์‹ํ•˜๋Š” ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ์„ ํƒ

index ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ถœ๋ ฅ
index 3,4 / column 0, 1 ์ถœ๋ ฅ

 ๐Ÿšฉloc์™€ iloc์˜ ์ฐจ์ด?

  • index, column์˜ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์“ฐ๋А๋ƒ, ์ˆœ๋ฒˆ์„ ๊ธฐ์ค€์œผ๋กœ ์“ฐ๋А๋ƒ
    • ex) ์ด๋ฆ„ : [20230804], [A, B] / ์ˆœ๋ฒˆ : [0:4], [1, 3] ๋“ฑ

 ๐Ÿšฉcondition

  • ์กฐ๊ฑด์„ ๊ฑฐ๋Š” ๊ฒƒ ex) df["A"] > 0 ๋“ฑ
  • ํŠน์ • ์ปฌ๋Ÿผ์˜ ์กฐ๊ฑด์„ ํ™•์ธํ•˜์—ฌ Series ๋˜๋Š” Dataframe ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ
  • NaN : Not a Number

 ๐Ÿšฉcolumn ์ถ”๊ฐ€

  • ๊ธฐ์กด ์ปฌ๋Ÿผ์ด ์—†์œผ๋ฉด, ์ถ”๊ฐ€
  • ๊ธฐ์กด ์ปฌ๋Ÿผ์ด ์žˆ์œผ๋ฉด, ์ˆ˜์ •

๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์ปฌ๋Ÿผ์„ ์ž…๋ ฅํ•˜๊ณ , value ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค

 ๐Ÿšฉisin()

  • ํŠน์ • ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

isin์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์ปฌ๋Ÿผ์— value๊ฐ€ ์žˆ๋Š”์ง€ Series ํ˜•ํƒœ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Dataframe ํ˜•ํƒœ๋กœ๋„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 ๐ŸšฉํŠน์ • ์ปฌ๋Ÿผ ๋ฐ ์ธ๋ฑ์Šค ์ œ๊ฑฐ del, drop

  • del df_name["column"]
    • ํŠน์ • ์ปฌ๋Ÿผ ์ œ๊ฑฐ

del ํ•จ์ˆ˜ ์ด์šฉ, ํŠน์ • ์ปฌ๋Ÿผ ์ œ๊ฑฐ

  • df_name.drop(["column"], axis = 1) / df_name.drop("index", axis = 0)
    • ํŠน์ • ์ปฌ๋Ÿผ๊ณผ ์ธ๋ฑ์Šค ๋‘˜๋‹ค ์ œ๊ฑฐ
    • axis = 0 ๊ฐ€๋กœ (์ธ๋ฑ์Šค) /  axis = 1 ์„ธ๋กœ (์ปฌ๋Ÿผ)

drop ์‚ฌ์šฉ, ํŠน์ • ์ธ๋ฑ์Šค, ์ปฌ๋Ÿผ ๋‘˜๋‹ค ์ œ๊ฑฐ ๊ฐ€๋Šฅ

 ๐Ÿšฉapply()

  • Dataframe์— ์ผ๊ด„์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ์ ์šฉ
    • axis๋ฅผ ํ™œ์šฉํ•ด index, column ๊ธฐ์ค€์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค
  • apply("def")
    • sum, mean, min, max ๋“ฑ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

axis๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ธฐ์ค€์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค