๋ง์ผํ /๋ฐ์ดํฐ ๋ถ์22 RFM ๋ถ์ RFM ๋ถ์์ด๋RFM์ Recency, Frequency, Monetary ๊ฐ๊ฐ์ ์ ๊ธ์๋ฅผ ๋ฐ์ ๋ง๋ค์ด์ง ์ฝ์์ด๋ค.Recency: ๊ณ ๊ฐ์ด ์ผ๋ง๋ ์ต๊ทผ์ ์ํ์ ๊ตฌ๋งคํ๋๊ฐ?Frequency: ๊ณ ๊ฐ์ด ์ผ๋ง๋ ์์ฃผ ์ํ์ ๊ตฌ๋งคํ๋๊ฐ?Monetary: ๊ณ ๊ฐ์ด ์ํ ๊ตฌ๋งค์ ์ผ๋ง๋ ๋ง์ ๋์ ์ผ๋๊ฐ?RFM ๋ถ์์ ํ๋ค๋ ๊ฑด ์ ์ธ ํญ๋ชฉ์ ํ ๋๋ก ๊ณ ๊ฐ์ ๊ฐ์น๋ฅผ ํ๋จํด ๊ณ ๊ฐ์ ๋ถ๋ฅํ๋ค๋ ๋ป์ด๋ค. ๋ ์ต๊ทผ์ ๊ตฌ๋งคํ ์๋ก, ๋ ์์ฃผ ๊ตฌ๋งคํ ์๋ก, ๊ทธ๋ฆฌ๊ณ ๋์ ๋ ๋ง์ด ์ธ์๋ก ๊ฐ์น๊ฐ ํฐ ๊ณ ๊ฐ์ผ๋ก ์ฌ๊ธฐ๋ ๊ฒ์ด๋ค. ์) ์ต๊ทผ 1๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๊ณ ๊ฐ์ ๊ตฌ๋งค ํจํด์ ๋น๊ตํ๋ค. ๊ณ ๊ฐ A๋ ๊ณ ๊ฐ B๋ณด๋ค ๋ ์ต๊ทผ์ ์ํ์ ๊ตฌ๋งคํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ ๊ฐ A๋ ๊ณ ๊ฐ B์ ๋นํด 1๋ ๋์ ๊ตฌ๋งค ํ์๋ ๋ง๊ณ ๊ตฌ๋งค ๊ธ์ก๋ ๋ ํฌ๋ค. Re.. 2025. 3. 17. [ํ์ด์ฌ] ๊ทธ๋ฃน๋ณ๋ก ๋ถ์ํ๊ธฐ Groupby๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ๋ค.์ ๋ณด๋ค์ ๋ณธ๋ค. ๊ฒฐ์ธก๊ฐ์ ์๋ค. groupby()์ฅ๋ฅด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ค๋ค.count()ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณด์ฌ์ค๋ค.size()ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์๋ฆฌ์ฆ๋ก ๋ณด์ฌ์ค๋ค. ์ต์, ์ต๋, ํ๊ท , ํฉ๊ณ ๋ชจ๋ ๊ตฌํ ์ ์๋ค. numeric_only๋ ์ซ์๋ง ๋ณด์ฌ์ฃผ๋ ํ๋ผ๋ฏธํฐ์ด๋ค.์ง๊ธ๊น์ง ๋ฐํ์๊ณผ ์ค์ฝ์ด๊ฐ ๊ฐ์ด ๋์๋๋ฐ ์ค์ฝ์ด๋ง ๋ณด๊ณ ์ถ๋ค๋ฉด []๋ฅผ ์ด์ฉํ๋ค.๋ฌผ๋ก [] ์์ ๋ฆฌ์คํธ์ฒ๋ผ ์ฌ๋ฌ ์ปฌ๋ผ๋ช ์ ๋ฃ์์๋ ์๋ค. ์ค์ตimport pandas as pdolympic_df = pd.read_csv('data/olympic.csv')# ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์์ฑํ์ธ์.olympic_df.groupby('sport')['height', 'weight'].mean()cat.. 2025. 3. 14. [ํ์ด์ฌ] ๋ฐ์ดํฐ ํฉ์น๊ธฐ ๊ฐ์ ํ์์ ๋ฐ์ดํฐ ํฉ์น๊ธฐ : concat()๋ฐ์ดํฐ ํ๋ ์์ ๋ง๋ค์ด์คฌ๋ค.๊ฐ๊ฐ ๋ฐ์ดํฐํ๋ ์์ ํ์ธํ๋ฉด ์๋์ ๊ฐ๋ค.์ด์ฐจํผ ๊ฐ์ ์์ด ์ ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐ์ดํฐ ํ๋ ์์ด๋ผ ๋๊ฐ๋ฅผ ํฉ์น๋ค.concat()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ๋ฅผ ๋๊ฒจ์ค๋ค.๊ทธ๋ฌ๋ ์ธ๋ฑ์ค๊ฐ ์ด์ํ๊ฒ ๋์จ๋ค.ignore_indexํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด True๋ก ์ง์ ํด์ฃผ๋ฉด ์ธ๋ฑ์ค๋ ๊น๋ํ๊ฒ ๋์จ๋ค.์ด๋ฅผ ์๋ก์ด ๋ณ์๋ก ์ ์ฅํด์ค๋ค. ์ด๋ฒ์๋ ์ํ์ ์ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ค์ด์ฃผ์๋ค.์์ด ์ ์์ ์ํ ์ ์๋ฅผ ํฉ์ณ์ฃผ์๋๋ ๊ทธ๋ฅ ์ปฌ๋ผ ํ๋๋ฅผ ๋ ๋ง๋ค์ด ๋ถ์๋ค. ์ด์ํ ๊ฒฐ๊ณผ๋ค.axis=1 ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ผ๋ก ๋ถ์ฌ์ค๋ค. ์ค์ตimport pandas as pdsales_2020_df = pd.read_csv('data/sales_2020.csv')sales_2021_df.. 2025. 3. 14. [ํ์ด์ฌ] ๋ ์ง์ ์๊ฐ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ ๋ ์ง์ ์๊ฐ์ ์ํ ๋ฐ์ดํฐ ํ์ ์ค์ ํ๊ธฐ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ๋ฐ์ดํฐํ๋ ์์ ๋ฐ์ดํฐํ์ ์ ํ์ธํด๋ณธ๋ค.order_time๊ณผ shiping_time์ด ์ค๋ธ์ ํธ๋ก ๋์ด ์๋ค. to_datetime()ํ๋ค์ค์๋ ๋ฐ์ดํธํจ์ ํ์ ์ผ๋ก ๋ฐ๊พธ๋ ํจ์๊ฐ ์๋ค. order_time๊ณผ shiping_time์ ๋ฐ์ดํฐ ํ์ ์ ๋ฐ๊ฟ์ ์ ์ฅํด์ฃผ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ฉด ํ์ ์ด ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฒ์๋ถํฐ ๋ฐ์ดํฐํ์ ์ ์ง์ ํด์ ๋ถ๋ฌ์ฌ์๋ ์๋ค. ํ์ฌ ๋ฐ์ดํฐํ๋ ์์ ๋ณด๋ฉด ๊ฒฐ์ธก๊ฐ์ด ํ๋ ์๋ค.๊ฒฐ์ธก๊ฐ์ด ๋ ์๋์ง ํ์ธํด๋ณด๋ 1๊ฐ๋ง ์๋ค.1๊ฐ๋ง ์์ผ๋๊น ๊ทธ๋ฅ ์ง์์ค๋ค. dt.date์ํ๋ ๋ ์ง, ์ฐ๋, ์, ์ผ, ์๊ฐ, ๋ถ, ์ด, ์์ผ ๋ฑ ๋ถ๋ฌ์ฌ ์ ์๋ค.์ด๋ ๋ฌธ์์ด์ str์ ์ด ๊ฒ์ฒ๋ผ dt๋ฅผ ์จ์ค๋ค.dayofweek๋ ์์ผ์ ์๋ฏธํ๋ค. .. 2025. 3. 14. [ํ์ด์ฌ] ์ซ์ ๋ฐ์ดํฐ ๊ฐ๊ณตํ๊ธฐ ์๋ก์ด ๊ฐ ๊ณ์ฐํ๊ธฐ ๊ธฐ์กด ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ํ๋ฆฌ๋๋ /์๋ฉ์ด ๋๋ ๋ก ๋น๋ง๋๋ฅผ ๊ณ์ฐํ๋ค. round()ํจ์๋ฅผ ์ฌ์ฉํด ์์์ 2๋ฒ์งธ ์๋ฆฌ๊น์ง ํ์๋๊ฒ ๋ง๋ ๋ค. ์๋ก์ด ์ปฌ๋ผ์ ๋ง๋ค์ด ์ ์ฅํด์ค๋ค. ์ด๋ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋น๋ง๋์ ๋น๋จ(diabetes) ์ฌ์ด์ ์ด๋ค ์๊ด๊ด๊ณ๊ฐ ์๋์ง๋ ์์๋ณผ ์ ์๊ฒ ๋ค. ์ค์ต 1 import pandas as pdpatient_df = pd.read_csv('data/patient.csv')# ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์์ฑํ์ธ์.bmi = round(patient_df['weight'] / (patient_df['height'] * patient_df['height']), 1)patient_df['bmi'] = bmipatient_df ์ ๊ณฑ์ **2๋ผ๊ณ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋๋ค. ๊ธฐ์ตํด๋ฌ์ผ์ง. .. 2025. 3. 14. [ํ์ด์ฌ] ๋ฌธ์ ๋ฐ์ดํฐ ๊ฐ๊ณตํ๊ธฐ ๋์๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋จ์ด๋ค์ด ๋๋ฌธ์, ์๋ฌธ์ ๋ค ์์ฌ ์๋ค. str.lower()๋ชจ๋ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ str.upper()๋ชจ๋ ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ str.capitalize()์๊ธ์๋ง ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ๋ฐ์ดํฐ ํ๋ ์์ ์ ์ฉ ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐ str.split('๊ตฌ๋ถ์ ')ํด๋น ํจ์๋ก ๋ฌธ์์ด์ ๋๋์ด์ค๋ค. ๋๋ ๋ฌธ์์ด์ 0๋ฒ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ ธ์์ ์๋ก์ด ์ปฌ๋ผ์ ์ ์ฅํ๋ค. ๋๋ ๋ฌธ์์ด์ 1๋ฒ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ ธ์์ ์๋ก์ด ์ปฌ๋ผ์ ์ ์ฅํ๋ค. ์๋ ๋๋๊ธฐ ์ ๋ฌธ์์ด ์ปฌ๋ผ์ ์ญ์ ํ๋ค. ๋ถํ์ํ ๋ฌธ์ ์ ๊ฑฐํ๊ธฐ ์ํ๋ ๊ฐ์ด ์๋์จ๋ค. unique()ํจ์๋ก ํ์ธํด๋ณด๋ ์์ ๊ณต๋ฐฑ๋ ์๊ณ , ๋ค์ .๋ ์๋ค. str.strip() ์ ํจ์๋ฅผ ์จ์ ๊ณต๋ฐฑ์ ์์ ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฅํด์ค๋ค. str.replace(.. 2025. 3. 13. [ํ์ด์ฌ] ๋ฐ์ดํฐ ๋ค๋ฌ๊ธฐ ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฌ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ฒฐ์ธก๊ฐ ์ฐพ๊ธฐ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ info()๊ฒฐ์ธก๊ฐ ์ฐพ๋ ๋ฒ 1713๊ฐ์ row ์ค์ rating(๋ณ์ )๋ง 700๊ฐ๋ผ๋ ๊ฑธ ์ ์ ์๋ค. isna()๊ฒฐ์ธก๊ฐ์ด ์์ผ๋ฉด True, ์์ผ๋ฉด False ๋ก ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ณด์ฌ์ค๋ค. isna().sum()๊ทธ๋ฅ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณด๋ฉด ๋ถํธํ๋ค.sum()ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐํ๋ ์์์ true ๊ฐ(1)์ ๋ํด์ค๋ค. rating์ 13๊ฐ์ ๊ฒฐ์ธก๊ฐ์ด ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. isna().any(axis=1)๋ชจ๋ row๋ฅผ ๊ฒ์ฌํ๋ ํจ์0ํ๋ถํฐ 712ํ๊น์ง ๊ฒฐ์ธก๊ฐ์ด ์๋ ํ์ True๋ก ๋ณด์ฌ์ค๋ค. ์์์ ์ฐพ์ ๊ฐ๋ง ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๊ฒฐ์ธก๊ฐ์ด ์๋ row๋ง ์ถ๋ ฅ๋๋ค.๋ฐ์ดํฐ๋ฅผ .. 2025. 3. 13. [ํ์ด์ฌ] DataFrame ๊ธฐ๋ณธ๊ธฐ DataFrame ์ดํด๋ณด๊ธฐ info()๋ฐ์ดํฐ ํ๋ ์์ ์ ๋ณด ํ์ธํ๊ธฐ describe()๋ฐ์ดํฐ ํต๊ณ๋ ํ์ธํ๊ธฐ include='all' (ํ๋ผ๋ฏธํฐ)๋ชจ๋ ์ปฌ๋ผ์ ๋ํ ์์ฝ sort_values(by='์นผ๋ผ๋ช ')ํน์ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ (๊ธฐ๋ณธ์ด ์ค๋ฆ์ฐจ์)๋ด๋ฆผ์ฐจ์ ๊ธฐํ๊ดํธ๊ฐ ๋ถ์ด์๋ ๊ฒ์ ํจ์, ๊ดํธ๊ฐ ์๋ ๊ฒ์ ๋ณ์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.head() # ๋ฐ์ดํฐํ๋ ์์ ์์์ 5ํtail() # ๋ฐ์ดํฐํ๋ ์์ ๋ค์์ 5ํinfo() # ๋ฐ์ดํฐํ๋ ์ ์ ๋ณดsort_values()describe()dtypes # ๋ฐ์ดํฐ ํ๋ ์ ํ์ shape # ๋ฐ์ดํฐํ๋ ์ ํฌ๊ธฐ์์ ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ํญ์ csv๋ง ๋ถ๋ฌ์๋๋ฐ excel์ ๋ถ๋ฌ์ค๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.loan_df = pd.read_excel('data/loan.. 2025. 3. 13. [ํ์ด์ฌ] seaborn seaborn์ผ๋ก ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐseaborn : ๊ฐํธํ๊ฒ ๊ทผ์ฌํ ๊ทธ๋ํ ์์ฑmatplotlib : ์ํ๋๋๋ก ์ปค์คํ ํ๊ฒ ๊ทธ๋ํ ์์ฑ ์ฌ์ฉ ๋ฐฉ๋ฒ ์ผ๋ณ ๋ฐ์ดํฐ๋ก ์๋์ผ๋ก ํ๊ท ๊ฐ์ ๊ตฌํด month๋ก ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค์ค๋์์ธ set_theme()ํจ์๋ก ๊ทธ๋ํ ์ปค์คํฐ๋ง์ด์งํ๊ธฐ ์ค์ตimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltbike_df = pd.read_csv('data/bike.csv')sns.set_theme(rc={'figure.figsize': (10, 5)}, style='white')# ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์์ฑํ์ธ์.sns.barplot(data=bike_df, x='quarter', y='registered', errorb.. 2025. 3. 13. ์ด์ 1 2 3 ๋ค์