240513 Today I Learn
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ
iris ๋ฐ์ดํฐ์ ์ ํ์ฉํด์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
iris_data = sns.load_dataset('iris')
iris_data.head()
- Q1. 'species' ์ด ๊ฐ์ด 'setosa'์ธ ๋ฐ์ดํฐ ์ ํํ๊ธฐ
iris_data[iris_data['species']=='setosa']
→ ์กฐ๊ฑด ์ธ๋ฑ์ฑํ๊ธฐ dataframe[์กฐ๊ฑด]
→ .loc๋ฅผ ํ์ฉํ ์๋ ์์. `iris_data.loc[iris_data['species'] == 'setosa']`
- Q2. 10๋ถํฐ 20๊น์ง์ ํ๊ณผ 1๋ถํฐ 3๊น์ง์ ์ด ์ ํํ๊ธฐ
iris_data.iloc[10:21,1:4]
๐ .iloc : ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ ํ๋ ์ ์ฌ๋ผ์ด์ฑํ๊ธฐ
tips ๋ฐ์ดํฐ์ ์ ํ์ฉํด์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
tips_data = sns.load_dataset('tips')
tips_data.head()
- Q1. total_bill์ด 30 ์ด์์ธ ๋ฐ์ดํฐ๋ง ์ ํํ๊ธฐ
tips_data[tips_data['total_bill']>=30]
- Q2. ์ฑ๋ณ('sex')์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ ๊ทธ๋ฃนํํ์ฌ ํ(tip)์ ํ๊ท ๊ณ์ฐ
tips_data.groupby('sex')['tip'].mean()
## sex
## Male 3.089618
## Female 2.833448
→ dataframe.groupby('๊ธฐ์ค์ผ๋ก ๋ ์ปฌ๋ผ')['๊ณ์ฐํ ์ปฌ๋ผ'].์ง๊ณํจ์()
- Q3. 'day'์ 'time'์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ ๊ทธ๋ฃนํํ์ฌ ์ ์ฒด ์ง๋ถ ๊ธ์ก(total_bill)์ ํฉ ๊ณ์ฐ
tips_data.groupby(['day','time'])['total_bill'].sum()
## day time
## Thur Lunch 1077.55
## Dinner 18.78
## Fri Lunch 89.92
## Dinner 235.96
## Sat Lunch 0.00
## Dinner 1778.40
## Sun Lunch 0.00
## Dinner 1627.16
→ ๊ธฐ์ค์ผ๋ก ๋ ์นผ๋ผ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ ์์์ ๋ฐ๋ผ ๋๊ดํธ([])์์ ๋ฆฌ์คํธ ํํ๋ก ๋ฃ์ด์ฃผ๊ธฐ
- Q4. 'day' ์ด์ ๊ธฐ์ค์ผ๋ก ๊ฐ ์์ผ๋ณ๋ก ํ(tip)์ ํ๊ท ์ ์๋ก์ด ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ง๋ ํ, ์ด๋ฅผ ๊ธฐ์กด์ `tips` ๋ฐ์ดํฐ์ ์ ํฉ์ณ๋ณด์
# day์ ๋ฐ๋ฅธ tip์ ํ๊ท
avg_tips = tips_data.groupby(['day'])['tip'].mean().reset_index()
avg_tips.columns = ['day', 'avg_tip']
avg_tips
# ์๋ tips_data์ ๊ฒฐํฉํ๊ธฐ
new = pd.merge(tips_data, avg_tips, on = 'day', how = 'left')
new.head()
→ ์ปฌ๋ผ๋ช ๋ฐ๊พธ๊ธฐ : dataframe.colums = [๋ฐ๊ฟ ์ปฌ๋ผ๋ช ๋ชจ๋ ์ ๊ธฐ]
→ merge๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ฐ๋์ pd.merge(๊ฒฐํฉํ df1, ๊ฒฐํฉํ df2, on = '๋ ๋ฐ์ดํฐํ๋ ์์ด ๊ณต์ ํ๋ ํค', how= '๊ฒฐํฉ๋ฐฉ์)
๋ฐ์ดํฐ ์๊ฐํํ๊ธฐ
flights ๋ฐ์ดํฐ์ ์ ํ์ฉํด์ ๋ฐ์ดํฐ ์๊ฐํ
flights_data = sns.load_dataset('flights')
flights_data.head()
- ์ฐ๋๋ณ ์ด ์น๊ฐ์(์ ํ ๊ทธ๋ํ)
# ์ง๊ณํจ์ ์ฌ์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(anuual_tot_passenger)
annual_tot_passenger = flights_data.groupby('year')['passengers'].sum().reset_index()
annual_tot_passenger.columns = ['year','tot_passenger']
annual_tot_passenger
# plot ๊ทธ๋ฆฌ๊ธฐ
plt.plot(annual_tot_passenger['year'],annual_tot_passenger['tot_passenger'], marker = 'o')
plt.title('Annual number of Passengers')
- ์ฐ๋๋ณ ํ๊ท ์น๊ฐ์ (๋ง๋๊ทธ๋ํ)
# ์ง๊ณํจ์ ์ด์ฉํด ์ฐ๋๋ณ ํ๊ท ์น๊ฐ์ ๊ตฌํ๊ธฐ(annual_avg_passenger)
annual_avg_passenger = flights_data.groupby('year')['passengers'].mean().reset_index()
annual_avg_passenger.columns = ['year','avg_passengers']
annual_avg_passenger
# ๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
plt.bar(annual_avg_passenger['year'],annual_avg_passenger['avg_passengers'], color = 'green')
plt.title('Annual Average number of Passengers')
- ์น๊ฐ์ ๋ถํฌ (ํ์คํ ๊ทธ๋จ)
plt.hist(flights_data['passengers'], bins=20)
plt.title('Distribution of Passengers')
- ์ฐ๋๋ณ ์น๊ฐ์์ ์๊ฐ ์น๊ฐ์
for month in flights_data['month'].unique():
plt.scatter(flights_data[flights_data['month'] == month]['year'],
flights_data[flights_data['month'] == month]['passengers'],
label=month, alpha=0.7)
→ ๋ ๊ฐ ์ด์์ ๋ฒ์ฃผ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์์ ๊ฐ์ด label์ ์ง์ ํ์ฌ ๋ํ๋ผ ์ ์๋ค.
- ์๋ณ ์น๊ฐ์ ๋ถํฌ
plt.boxplot([flights_data[flights_data['month']==month]['passengers'] for month in flights_data['month'].unique()],
labels=flights_data['month'].unique())
plt.title('Passengers Distribution by Month')
→ flights_data์์ flights_data์ month๊ฐ ๋ฐ๋ณต๋ฌธ ์ month์ ๊ฐ์ ๊ฒฝ์ฐ passengers์ ์ `flights_data[flights_data['month'] == month]['passengers']`
→ flights_data['month'].unique()์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
flights_data['month'].unique()
## ['Jan', 'Feb', 'Mar', 'Apr', 'May', ..., 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
๐ก boxplot์ ๋ง๋ค ๋์๋ ์์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ์ ํํ๋ฅผ ์ ๊ฐ๊ณตํด์ค์ผ ํ๋ค.
tips ๋ฐ์ดํฐ์ ์ ํ์ฉํด ๋ฐ์ดํฐ ์๊ฐํ
- ์์ผ๋ณ ํ ๊ธ์ก์ ํ๊ท (Line Chart)
# ์ง๊ณ ํจ์ ์ด์ฉํด ์ ์ฒ๋ฆฌ
daily_avg_tips = tips_data.groupby('day')['tip'].mean().reset_index()
daily_avg_tips.columns = ['day','avg_tips']
# plot ๊ทธ๋ฆฌ๊ธฐ
plt.plot(daily_avg_tips['day'],daily_avg_tips['avg_tips'],color = 'pink', marker='o')
plt.title('Average Tips by Day')
plt.xlabel('Day of the Week')
plt.ylabel('Average Tip Amount')
plt.show()
- ์์ผ๋ณ ์ด ํ ๊ธ์ก (๋ง๋ ๊ทธ๋ํ)
# ์ง๊ณํจ์ ์ด์ฉํด ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
daily_tot_tips = tips_data.groupby('day')['tip'].sum().reset_index()
daily_tot_tips.columns = ['day','tot_tips']
# ๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
plt.bar(daily_tot_tips['day'],daily_tot_tips['avg_tips'],color = 'green')
# ์ ๋ชฉ ๋ฐ ์ถ์ ๋ชฉ ์ ์ฉ
plt.title('Total Tips by Day')
plt.xlabel('Day of the Week')
plt.ylabel('Total Tip Amount')
plt.show()
- ์์ฌ ๊ธ์ก ๋ถํฌ (ํ์คํ ๊ทธ๋จ)
# ํ์คํ ๊ทธ๋จ ๊ทธ๋ฆฌ๊ธฐ
plt.hist(tips_data['total_bill'],bins = 10, color = 'orange')
# ๊ทธ๋ํ ์ ๋ชฉ ๋ฐ ์ถ์ ๋ชฉ
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill Amount')
plt.ylabel('Frequency')
plt.show()
- ์์ฌ ๊ธ์ก๊ณผ ํ ๊ธ์ก์ ๊ด๊ณ(์ฐ์ ๋)
# ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(tips_data['total_bill'],tips_data['tip'],color = 'red', alpha=0.5)
# ๊ทธ๋ํ ์ ๋ชฉ ๋ฐ ์ถ์ ๋ชฉ
plt.title('Tip Amount vs Total Bill')
plt.xlabel('Total Bill Amount')
plt.ylabel('Tip Amount')
plt.show()
- ์์ผ๋ณ ์์ฌ ๊ธ์ก ๋ถํฌ(boxplot)
# boxplot ๊ทธ๋ฆฌ๊ธฐ
plt.boxplot([tips_data[tips_data['day']==d]['total_bill'] for d in tips_data['day'].unique()],
labels=tips_data['day'].unique())
# ๊ทธ๋ํ ์ ๋ชฉ ๋ฐ ์ถ์ ๋ชฉ
plt.title('Total Bill Distribution by Day')
plt.xlabel('Day of the Week')
plt.ylabel('Total Bill Amount')