Study Anything ๐ง
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ ๋ณธ๋ฌธ
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ
์ 2022. 3. 13. 21:06์ง๋ ํฌ์คํธ์์๋ ํฌ๋กค๋ง์ผ๋ก ์์งํ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ ์์ ๊ณต๊ฒฉ๊ณผ ์๋น ์งํ๋ก ์ธ ์ ์๋
๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ , ๋ฆฌ์๋ธ ํจ์จ, ์ธํธ๋น ์๋ธ/์ธํธ/๋ธ๋กํน/๋๊ทธ ์ ๋ฑ์ ๊ตฌํ๋ค.
ํ์ง๋ง ๊ณต๊ฒฉ ์งํ ์ค์๋ ๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ ๋ฟ ์๋๋ผ ๊ณต๊ฒฉ์ด ์ผ๋งํผ์ ํจ๊ณผ๋ฅผ ๋๋์ง ๋ณด๋ '๊ณต๊ฒฉ ํจ์จ' ๋ํ ์ค์ํ๋ค.
๊ณต๊ฒฉ ํจ์จ์ (๊ณต๊ฒฉ ์ฑ๊ณต-๊ณต๊ฒฉ ๋ฒ์ค)/๊ณต๊ฒฉ ์๋ ๋ก ๊ตฌํ๋ค.
๊ทธ๋ฌ๋ ํฌ๋กค๋ง ๋น์ ์ ์ฒด ๋ฒ์ค ๊ฐ์๋ง ์ ์ฅํ๊ณ ๊ณต๊ฒฉ์์์ ๋ฒ์ค์ ์ ์ฅํ์ง ์์์ ์ถ๊ฐ๋ก ๊ณต๊ฒฉ ๋ฒ์ค ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
( ๋ฐ์ดํฐ ์๋ก ์ป๋ ๊ณผ์ ์ ์๋ต )
์๋กญ๊ฒ ์ป์ ๋ฐ์ดํฐ์ด๋ค.
์ด์ ๊ธฐ์กด์ ์์ฑํ๋ ์ฝ๋ ์ค ๊ณต๊ฒฉ ํจ์จ(at_rate)์ ๊ณ์ฐํ๋ ๋ถ๋ถ์ ์ถ๊ฐํ๋ค.
๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ , ๊ณต๊ฒฉ ํจ์จ, ๋ฆฌ์๋ธ ํจ์จ์ ๋ชจ๋ ๋ฐฑ๋ถ์จ์ด๋ฏ๋ก ์ด์ ์ ์ ์ฒ๋ฆฌ ํ ๋ ๋์ณค๋ ๋ฐฑ๋ถ์จ ๋ณํ ๋ถ๋ถ๋ ์ถ๊ฐํ๋ค.
# ๊ฒฝ๊ธฐ ์งํ ๊ณ์ฐํ ํ
์ด๋ธ ๋ง๋ค๊ธฐ
player_rate = spark.sql("""
select name,team,pos,score,error,setcount,
round(at_succ/at_try*100,2) as at_srate,round((at_succ-at_err)/at_try*100,2) as at_rate,
...
round((rs_corr-rs_fail)/rs_try*100,2) as rs_rate,...
from player
""")
player_rate.show()
ํ์ง๋ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์ค๊ฐ์ค๊ฐ ๊ฒฐ์ธก๊ฐ๋ค์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ๋ ์ ์๋ค์ ํฌ์ง์ ํน์ฑ ๋๋ฌธ์ด๋ค.
๋ฐ์ดํฐ์์ ๋ณด์ด๋ ๋ฆฌ๋ฒ ๋ก ํฌ์ง์ ์ ์๋น ์ ๋ฌธ ํฌ์ง์ ์ผ๋ก,
๊ณต๊ฒฉ์๋ ์ฐธ์ฌํ์ง ์์ผ๋ฉฐ ๊ณต๊ฒฉ์ผ๋ก ํ๋จ๋๋ ํ์๋ฅผ ํ๋ฉด ์ด๋ ๋ฒ์ค๋ก ์ฒ๋ฆฌ๋๋ค.
๋ฐ๋ผ์ ๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ , ๊ณต๊ฒฉ ํจ์จ์ด null ์ธ ๊ฒฝ์ฐ๋ ๊ณต๊ฒฉ ์๋๊ฐ 0์ด๊ธฐ ๋๋ฌธ์ด๊ณ
๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ ์ด 0, ๊ณต๊ฒฉ ํจ์จ์ด -100 ์ธ ๊ฒฝ์ฐ๋ ๊ณต๊ฒฉ์ ์๋ํ๋ค๊ณ ํ๋จ๋์ผ๋ ๋ฒ์ค๋ก ๊ธฐ๋ก๋์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์๋ธ ํจ์จ์ด null ์ธ ๊ฒฝ์ฐ ๋ํ ๋ฆฌ์๋ธ ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
# ์ฐธ๊ณ
๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ (%) : ์ฑ๊ณต/์๋
๊ณต๊ฒฉ ํจ์จ(%) : (์ฑ๊ณต-๋ฒ์ค)/์๋
๋ฆฌ์๋ธ ํจ์จ(%) : (์ ํ-์คํจ)/์๋
์ธํธ๋น ~ (๊ฐ) : ์ฑ๊ณต/์ฐธ์ฌํ ์ธํธ์
์ด ๊ฒฐ์ธก๊ฐ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
SQL ์ CASE ๋ฌธ ์ค 'CASE WHEN ~ THEN ~ ELSE ~ END AS ์ปฌ๋ผ๋ช ' ํํ์ ์ฌ์ฉํด์
๊ณต๊ฒฉ ์ฑ๊ณต๋ฅ ๊ณผ ๊ณต๊ฒฉ ํจ์จ, ๋ฆฌ์๋ธ ํจ์จ์์ null ์ด๊ฑฐ๋ -100 ์ธ ๊ฐ๋ค์ 0์ผ๋ก ๋ณ๊ฒฝํ๋ค.
# null ๊ฐ, ์๋ฏธ์๋ ๊ฐ 0์ผ๋ก ๋ณ๊ฒฝ
player_rate2 = spark.sql("""
select ...,
case when at_srate is null then 0.0 else at_srate end as at_srate,
case when at_rate is null or at_rate = -100.0 then 0.0 else at_rate end as at_rate,
...,
case when rs_rate is null then 0.0 else rs_rate end as rs_rate,...
from player_rate
""")
player_rate2.show()
๋ฐ์ดํฐ๋ค์ด ์ ๋ณ๊ฒฝ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ํด์ ๋๋ฝ๋๋ ๊ณต๊ฒฉ ํจ์จ๊ณผ ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ง์ณค๋ค!
(์ฐธ๊ณ ) ํ๋ก์์ ํ์ผ, ๋๋ ํ ๋ฆฌ ์ญ์ ํ๋ ๋ฐฉ๋ฒ
์ถ๊ฐ์ ์ผ๋ก ์ด์ ์ ์๋ชป ๋ง๋ ๋ฐ์ดํฐ๋ค์ ํ๋ก์์ ์ญ์ ํ๋ ๋ฐฉ๋ฒ๋ ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค.
๋จผ์ > hadoop fs -rm /data/[ํ์ผ๋ช ] ๋ช ๋ น์ด๋ก ์ด๋ค ๋ฐ์ดํฐ๋ค์ด ์๋์ง ํ์ธํ๋ค.
ํ์ง๋ง ๋๋ ํ ๋ฆฌ๋ผ๋ฉฐ ์ญ์ ๊ฐ ๋์ง ์๊ณ > hadoop fs -ls /data ๋ช ๋ น์ด๋ก ํ์ธํด๋ดค์ ๋ ํ์ผ๋ค์ด ๊ทธ๋๋ก์ธ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ํํ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์คํํฌ๋ฅผ ํตํด ์ ์ฅํ ๋ฐ์ดํฐ๋ ๋๋ ํ ๋ฆฌ์ฒ๋ผ ์ธ์๋๋ ๊ฒ ๊ฐ๋ค.
(๊ทธ๋์์ธ์ง ํฌ๊ธฐ๋ 0์ด๋ผ๊ณ ๋์ด)
๊ทธ๋์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ญ์ ํ๋ ๋ช ๋ น์ด๋ก ์ญ์ ํด์ฃผ์๋ค.
> hadoop fs -rm -r /data/[ํ์ผ๋ช ] ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฆฌ๋ ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก * ๊ธฐํธ๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฏธํ๋ฏ๋ก
๋ง์ฝ > hadoop fs -rm -r /data/dogong*.csv ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด
dogong.csv, dogong-2.csv, dogong_r.csv ๋ค์ด ๋ชจ๋ ์ญ์ ๋๋ค.
์ด ๋ '.csv' ๋ถ๋ถ์ ํ์ฅ์๋ช ์ด๋ผ์ ๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง * ๋ค์ ์๋ตํ๋ฉด ์ ๋๋ค.
์ญ์ ํ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ์ญ์ ํ๊ณ ํ์ธํด ๋ณธ ๋ชจ์ต์ด๋ค.
'ํ๋ก์ ํธ > [DA] ๋ฐ์ดํฐ ๋ถ์ : ๋ฐฐ๊ตฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (3) - ๊ฒฝ๊ธฐ ์ธ๋ถ ๋ฐ์ดํฐ (0) | 2022.03.27 |
---|---|
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (2) - ๊ฒฝ๊ธฐ ๋ฐ์ดํฐ (0) | 2022.03.26 |
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - PySpark์์ SQL ์ฌ์ฉํ๊ธฐ (0) | 2022.03.12 |
ํ๋ก์ ํธ ์ค๋ช & ๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง), ์ ์ฅ - ์ ์ ๋ฐ์ดํฐ (0) | 2022.03.11 |