๐ผ pandas ๐ผ
- panel datas์ ์ฝ์
- ํ์ด์ฌ์ ํ์ฉํ ๋ฐ์ดํฐ ๋ถ์์์ ๊ฐ์ฅ ๋ง์ด ํ์ฉ๋จ
- Series : 1์ฐจ์ ๋ฐฐ์ด ํํ์ ๋ฐ์ดํฐ๊ตฌ์กฐ
- DataFrame : 2์ฐจ์ ๋ฐฐ์ด ํํ์ ๋ฐ์ดํฐ๊ตฌ์กฐ
๐ถ DataFrame ๐ถ
- ํ๊ณผ ์ด๋ก ๊ตฌ๋ถ
- ์ธ๋ฑ์ค : ํ์ ๊ตฌ๋ถ, ๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์ ์๋ก ์ง์ (ํ๋ฒ ์ค์ ๋๋ฉด ๋ณ๊ฒฝ๋ถ๊ฐ)
- ์ปฌ๋ผ :์ด์ ๊ตฌ๋ถ
- ์ ๊ณผ ์ ์ฐ์ฐ์ด ๊ฐ๋ฅ
๐ผ ๋ฐ์ดํฐ์ค๋น
๐ปโโ๏ธ pandas๋ฌธ๋ฒ
loc, iloc : ๋ฐ์ดํฐํ๋ ์์ row ๋๋ column์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
loc : label์ด๋ boolean array๋ก ์ ๊ทผ
- ์ฐธ๊ณ : https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html
iloc : index๊ฐ์ผ๋ก ์ ๊ทผ
- ์ฐธ๊ณ : https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html
axis
- axis=0 : ํ ๋ฐฉํฅ์ ์ถ์ผ๋ก ๊ณ์ฐ
- axis=1 : ์ด ๋ฐฉํฅ์ ์ถ์ผ๋ก ๊ณ์ฐ
import pandas as pd
df = pd.read_csv('/content/age_2019.csv', encoding='utf-8')
# ํ์ ๊ตฌ์ญ ์ปฌ๋ผ์ ํ์ ์ฝ๋๋ฅผ ์ญ์ ํ๊ณ ์ฃผ์ ๋ฐ์ดํฐ๋ง ์ฌ์ฉ
# ex) ์์ธํน๋ณ์ ์ข
๋ก๊ตฌ ์ผ์ฒญ๋(111105400) -> ์์ธํน๋ณ์ ์ข
๋ก๊ตฌ ์ผ์ฒญ๋
names_split = df['ํ์ ๊ตฌ์ญ'].str.split('(')
df['ํ์ ๊ตฌ์ญ'] = names_split.str.get(0)
# ํ์ ๊ตฌ์ญ์ ์ ์ธํ ์ปฌ๋ผ๋ช
๋ณ๊ฒฝ
columns_list = df.columns
final_col = {}
for col in columns_list[1:]: # slice ์ด์ ? ํ์ ๊ตฌ์ญ ์ ์ธํ๊ณ ์คํ
final_col[col] = col.split('_')[2] # dictionary ๋ฌธ๋ฒ
# ์ปฌ๋ผ๋ช
๋ณ๊ฒฝ
df.rename(columns=final_col, inplace=True)
# ๋ฐ์ดํฐ ์ฝค๋ง ์ ๊ฑฐํ๊ณ ์ซ์ํํ๋ก ๋ณํ
df.replace('[^\w]','', regex=True, inplace=True) # ์ ๊ท์์ ์ฌ์ฉํ ๋ชจ๋ ์ปฌ๋ผ์ ํน์๊ธฐํธ ์ ๊ฑฐ
# ์ธ๋ฑ์ค ๋ณ๊ฒฝ 0, 1, 2 -> ์์ธํน๋ณ์, ์์ธํน๋ณ์ ์ข
๋ก๊ตฌ . .
df.set_index(keys=['ํ์ ๊ตฌ์ญ'], inplace=True)
# ํ๋ณํ
df = df.astype('int')
df.info()
df.isna().sum() # NaN ๋ฐ์ดํฐ ํ์ธ
df.dropna(inplace=True) # NaN ๋ฐ์ดํฐ ์ ๊ฑฐ
# ์ ์ฒด๋ฐ์ดํฐ / ์ด์ธ๊ตฌ์
df = df.div(df['์ด์ธ๊ตฌ์'], axis=0)
# ์ด ์ธ๊ตฌ์์ ์ฐ๋ น๊ตฌ๊ฐ ์ธ๊ตฌ์ ์ญ์
del df['์ด์ธ๊ตฌ์'], df['์ฐ๋ น๊ตฌ๊ฐ์ธ๊ตฌ์']
โ ์ ์ ๋ ํ์ผ ์ ์ฅ df.tocsv('2019์ธ๊ตฌ๊ตฌ์กฐ_์ ์ ๋ฐ์ดํฐ.csv', encoding='utf-8-sig')
# ์ฌ์ฉ์๊ฐ ์ ํํ ์ธ๊ตฌ๊ตฌ์กฐ์ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ฐพ๊ธฐ home - away
df.sub(df2.iloc[0], axis=1)
# ์ฐ๋ฆฌ๋๋ค์ ๋น์ทํ ์ธ๊ตฌ๊ตฌ์กฐ ์ฐพ๊ธฐ
import numpy as np
np.power(df.sub(df2.iloc[0],axis=1),2).sum(axis=1).sort_values().index[1:6] # ์๊ธฐ์์ ์ ๋นผ๊ณ
# ์ฐ๋ฆฌ๋๋ค์ ๋น์ทํ ์ธ๊ตฌ๊ตฌ์กฐ ์๊ฐํ
df.loc[np.power(df.sub(df2.iloc[0],axis=1),2).sum(axis=1).sort_values().index[1:6]].T.plot()
plt.show()
# ๋ฐ์ดํฐ ์ฝ์ด์ค๊ธฐ import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_csv('/content/age_2019.csv', encoding='utf-8') # csvํ์ผ ๊ฐ์ ธ์ค๊ธฐ # ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ name_split = df['ํ์ ๊ตฌ์ญ'].str.split('(') # ํ์ ๊ตฌ์ญ ์ปฌ๋ผ์ stringํํ๋ก ๋ณํ ํ ( ๊ธฐ์ค์ผ๋ก ๋๋ df['ํ์ ๊ตฌ์ญ'] = name_split.str.get(0) # ๋๋ ์ง name_split์ 0๋ฒ์งธ ์ปฌ๋ผ๋ง์ ํ์ ๊ตฌ์ญ์ผ๋ก ์ง์ # ํ์ ๊ตฌ์ญ ์ ์ธ ์ปฌ๋ผ๋ช ๋ณ๊ฒฝ columns_list = df.columns # ์ปฌ๋ผ ๋ช ๋ค์ ์ ์ฅ final_col = {} # ๋์ ๋๋ฆฌ ํํ for col in columns_list[1:]:# ํ์ ๊ตฌ์ญ์ ์ ์ธํ ์ปฌ๋ผ๋ช ๋ค๋ง final_col[col] = col.split('_')[2] # _๊ธฐ์ค ๋๋ฒ์งธ๋ฅผ ๋์ ๋๋ฆฌ์ value๋ก ์ง์ # ์ปฌ๋ผ๋ช ๋ณ๊ฒฝ df.rename(columns=final_col, inplace=True) # inplace = True : ๋ฐ๋ก ์คํํด๋ผ # ๋ฐ์ดํฐ๋ค์ ์ฝค๋ง๋ฅผ ์ ๊ฑฐํ๊ณ ์ซ์ํํ๋ก ๋ณํ df.replace('[^\w]','', regex=True, inplace=True) # regex=True ์ ๊ท ํํ์์ผ๋ก ๋ฌธ์์ด ์นํ์ ์ํ๋ ๋ถ๋ถ๋ง # ์ธ๋ฑ์ค ๋ณ๊ฒฝ df.set_index(keys=['ํ์ ๊ตฌ์ญ'], inplace=True) # ์ธ๋ฑ์ค๋ฅผ 0,1,2..๊ฐ์๊ฐ๋ค์ด ์๋ ํ์ ๊ตฌ์ญ ๋ช ์ผ๋ก ์ง์ ํด์ค # ํ๋ณํ df = df.astype('int') # df์ type์ int(์ ์ํ)๋ก ๋ณ๊ฒฝ df.dropna(inplace=True) #NaN๋ฐ์ดํฐ ์ ๊ฑฐ # ์ ์ฒด ๋ฐ์ดํฐ / ์ด ์ธ๊ตฌ์ => ๋น์จ๊ณ์ฐ df = df.div(df['์ด์ธ๊ตฌ์'], axis=0) # ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ด ์ธ๊ตฌ์๋ก ๋๋ # ์ด ์ธ๊ตฌ์, ์ฐ๋ น๊ตฌ๊ฐ ์ธ๊ตฌ์ ์ญ์ (๋น์จ๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ทธ ๊ฐ์ด 1์ด๋ฏ๋ก ํ์์์ ) del df['์ด์ธ๊ตฌ์'], df['์ฐ๋ น๊ตฌ๊ฐ์ธ๊ตฌ์'] # ์ ์ ๋ ํ์ผ ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด df.to_csv('age_2019์ ์ ๋ฐ์ดํฐ.csv', encoding='utf-8-sig') # ๊ถ๊ธํ ์ง์ญ ์ด๋ฆ ์ ๋ ฅ๋ฐ๊ณ ํด๋น ์ง์ญ ์ธ๊ตฌ๊ตฌ์กฐ ์ ์ฅ address = input('์ธ๊ตฌ๊ตฌ์กฐ๊ฐ ์๊ณ ์ถ์ ์ง์ญ์ ์ฃผ์(์๋ฉด๋๋จ์)๋ฅผ ์ ๋ ฅํ์ธ์ >> ') a = df.index.str.contains(address) # input์ผ๋ก ๋ฐ์ ํด๋น์ง์ญ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ df2 = df[a] # ํด๋น ์ง์ญ์ ์ธ๊ตฌ๊ตฌ์กฐ ์ ์ฅ # ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ง์ญ์ ์ธ๊ตฌ๊ตฌ์กฐ์ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ฐพ๊ธฐ # ์ฐ๋ฆฌ ๋๋ค์ ๋น์ทํ ์ธ๊ตฌ๊ตฌ์กฐ ์ฐพ๊ธฐ # df.sub(df2.iloc[0], axis=1) -> df(์ ์ ํ ์ ์ฒด๋ฐ์ดํฐ)์์ ํด๋น์ง์ญ์ ์ธ๊ตฌ๊ตฌ์กฐ๋ฅผ ๋นผ์ค # np.power(df.sub~~) -> ๋นผ์ค ์ธ๊ตฌ๊ตฌ์กฐ ์ ๊ณฑ # .sum(axis=1) ์ปฌ๋ผ๊ธฐ์ค ํฉ # .sort_values().index[1:6] ์๊ธฐ์์ ์ ์ ์ธํ๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ # .T.plot() row์ column์ ๋ฐ๊พธ๊ณ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆผ df.loc[np.power(df.sub(df2.iloc[0], axis=1),2).sum(axis=1).sort_values().index[1:6]].T.plot() plt.style.use('ggplot') # ๊ฒฉ์๋ฌด๋ฌ plt.show()
์ฒ์ pandas๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ถ์ ์์ ์ ์งํํ์ จ๋๋ฐ, ์ด์ ๊น์ง ๋ฐฐ์ด ๊ณผ์ ๋ณด๋ค๋ ๊ฐ๋จํด์ง๊ฑด ํ์คํ๋ฐ ์ฒ์๋ฐฐ์ฐ๋ ๋ฌธ๋ฒ .. ?์ด๋ผ ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ค. ํนํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ ํผ์ด ์ ๋น ์ก๋นใ .ใ .ใ ....ใ ............์์ง ๋ญ๊ฐ ๋ด ๋จธ๋ฆฟ์์์ ์ ๋ฆฌ๊ฐ ์๋๊ฒ๊ฐ์์ ์ ๋ฆฌํ๋ ์๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฒ ๊ฐ๋ค.
๊ธ์ ๋ณด๋ ์ด๋ฏธ Pandas์ ๋ํ ์ ๋ฆฌ๋ฅผ ์ ํ ๊ฒ ๊ฐ์๋ฐ.. ๋ฌด๋ ค ์์ฃผ์ ์ธ์ฅ์ ํ๋ค์ธ๋ฐ ใ ใ ํ๋ค์ ์ฅ์ธ์ด ๋์ด ๋ด ์๋ค ใ ใ