Data Analysis - kamchur/note GitHub Wiki
โปReference KT, ํ๊ธฐ์ ๊ฐ์ฌ๋
# ์ ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ
1. ๋ชจ๋ '์
'์ ๊ฐ์ด ์์ด์ผํ๋ค(NaN'๊ฒฐ์ธก์น ์กฐ์น'์์ ๊ธฐ)
2. ๋ชจ๋ ๊ฐ์ ์ซ์์ด์ด์ผํ๋ค(๊ฐ๋ณ์ํ)
3. ํ์์ ๋ฐ๋ผ ์ซ์์ ๋ฒ์๋ฅผ ์ผ์น์ํจ๋ค(์ค์ผ์ผ๋ง)
# ์ ์ฒ๋ฆฌ ์ ๋ต
1. NaN ๊ฒฐ์ธก์น ์ด๋กํ ๊บผ์ผ ๋ญ๋ก ๋งค๊ฟ๊บผ์ผ?
2. ๊ฐ๋ณ์ํ๋ ์ด๋ค๊ฑธ ํ ๊บผ์ผ
3. ์ค์ผ์ผ๋ง ํ ๊บผ์ผ?
์ถ์ฒ:๊ตฌ๊ธ์ด๋ฏธ์ง
mumble
p-value : `1`์ ๊ฐ๊น์ฐ๋ฉด ์๊ด์์, `0`์ ๊ฐ๊น์ฐ๋ฉด ์๊ด์์
์๊ด๊ณ์ : `0`์ ๊ฐ๊น์ฐ๋ฉด ์๊ด์์
normalize : ํฉ์ณ์ `1`์ ๋ง๋ค์ด๋ผ !
import
# pyplot : ์๋ธ๋ชจ๋
import matplotlib.pyplot as plt
- ํฐํธ์ค์
plt.rc('font', family='nanum')
sns.set(font="NanumGothicCoding",#"NanumGothicCoding",
rc={"axes.unicode_minus":False}, # ๋ง์ด๋์ค ๋ถํธ ๊นจ์ง ํ์ ํด๊ฒฐ
style='darkgrid')
- ๋ฆฌ์คํธํํ
# pyplot ๊ธฐ๋ณธ ๋ผ์ธ์ฐจํธ
plt.plot([2, 5, 3, 1, 2])
plt.show()
x = [1, 2, 3, 4, 5]
y = [10, 3, 2, 7, 5]
# ๊ฐ์ด ํ๋๋ฉด
# y(๊ฒฐ๊ณผ๊ฐ)๋ง ์
๋ ฅํด์ฃผ์ด๋ ๋จ
plt.plot(y)
# x์ถ, y์ถ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์
plt.plot(x, y)
- ๋์ ๋๋ฆฌํํ
dict = {'v1':[1,2,3,4,5], 'v2':[10,3,2,7,5]}
plt.plot('v1', 'v2', '', data=dict)
plt.show()
- ์ด๋ฆ
# x ์ถ ์ด๋ฆ
plt.xlabel('x_name')
# y ์ถ ์ด๋ฆ
plt.ylabel('y_name')
# ์ฐจํธ ์ ๋ชฉ
plt.title('chart_name')
- linestyle
description | solid | dashed | dash-dot | circle | square | tri | star | diamond |
---|---|---|---|---|---|---|---|---|
character | '-' | '--' | '-.' | 'o' | 's' | '^' | '*' | 'D' |
# ์ด๋ก์, ์, ์ ์ ์ ์ฉ
plt.plot('v1', 'v2', 'go--', data=dict)
- ์ฌ๋ฌ ๊ทธ๋ํ ๊ฒน์ณ๊ทธ๋ฆฌ๊ธฐ
dict = {'v1':[1,2,3,4,5], 'v2':[2,5,3,1,2], 'v3':[4,6,7,6,5]}
plt.plot('v1', 'v2', 'go--', data=dict) # ์ด๋ก์ ๋๊ทธ๋ผ๋ฏธ ์ ์
plt.plot('v1', 'v3', 'rs--', data=dict) # ๋นจ๊ฐ์ ๋ค๋ชจ ์ ์
plt.xlabel('month')
plt.ylabel('sales')
plt.title('Monthly Sales')
plt.show()
- ๋ฒ๋ก, ๊ทธ๋ฆฌ๋ ํ์
# ๋ฒ๋ก : ๋ ์ด๋ธ์ ๋ปํจ, ๊ทธ๋ํ(์ )๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง
# `plt.legend()` ๋ฅผ ์ฌ์ฉํด์ผ ๋ฒ๋ก๊ฐ ํ์๋จ
dict1 = {'v1': [1,2,3,4,5], 'v2': [2,5,3,1,2], 'v3':[4,6,7,6,5]}
# label -> ๋ฒ๋ก
plt.plot('v1', 'v2', 'go--', data = dict1, label = 'apple')
plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'mango')
plt.xlabel('month')
plt.ylabel('sales')
plt.title('Monthly Sales')
# plt.legend()๋ฅผ ์ฌ์ฉํด์ผ label์ด ํ์๋จ
plt.legend()
plt.grid()
plt.show()
- ์ถ ๋ฒ์ ์กฐ์
# xlim, ylim ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฒ์
# ํ
์คํธ๊ฐ ๋ ํ์ํ๋ค
dict1 = {'v1': [1,2,3,4,5], 'v2': [2,5,3,1,2], 'v3':[4,6,7,6,5]}
plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'mango')
plt.xlim(0, 6) # x์ถ ์ข์ฐ ๊ฐ๊ฒฉ์ด ์ข์์ง
plt.ylim(0, 8) # y์ถ ์ํ ๊ฐ๊ฒฉ์ด ์ข์์ง
plt.grid()
plt.show()
- ๊ทธ๋ํ ํฌ๊ธฐ์กฐ์
default size = (6.4, 4.4)
# plt.figure(figsize=(v1, v2))
dict = {'v1':[1,2,3,4,5], 'v2':[2,5,3,1,2], 'v3':[4,6,7,6,5]}
plt.figure(figsize=(4,3))
plt.plot('v1', 'v3', 'rs-', data=dict, label='mango')
plt.grid()
plt.show()
- ์ํ์ ์์ง์ ์ถ๊ฐ
# axvline(์์น, color='red', linestyle='--') : ์์ง์ (vertical)
# axhline(์์น, color='blue', linestyle='-') : ์ํ์ (horizontal)
dict={'v1':[1,2,3,4,5], 'v2':[4,6,8,1,5]}
plt.plot('v1', 'v2', '', data=dict)
plt.axhline(5.3, color='gray', linestyle='--')
plt.axvline(2.4, color='grey', linestyle='--')
plt.show()
- ๊ทธ๋ํ์ ํ ์คํธ ์ถ๊ฐ
# plt.text(x์ขํ, y์ขํ, 'input text')
- ์ฌ๋ฌ ๊ทธ๋ํ๋ก ๋๋ ๊ทธ๋ฆฌ๊ธฐ
# 2ํ 1์ด, `์-์๋`
# plt.subplot(row, column, index)
# index=์์
dict = {'v1':[1,2,3,4,5], 'v2':[2,5,3,1,2], 'v3':[4,6,7,6,5]}
plt.figure(figsize=(4,3))
plt.subplot(2,1,1)
plt.plot('v1', 'v2', 'go--', data=dict)
plt.subplot(2,1,2)
plt.plot('v1', 'v3', 'rs--', data=dict)
plt.tight_layout() # ๊ทธ๋ํ๊ฐ ๊ฐ๊ฒฉ์ ์ ์ ํ ๋ง์ถ๊ธฐ(์ฌ์ฉํ์ง ์์๋ ์๊ด์์)
plt.show()
# 1ํ 2์ด, `์์ผ๋ก, ์ข์ฐ`
dict={'v1': [1,2,3,4,5], 'v2': [2,5,3,1,2], 'v3':[4,6,7,6,5]}
plt.figure(figsize=(10, 5))
plt.subplot(1,2,1)
plt.plot('v1', 'v2', 'go--', data=dict)
plt.subplot(1,2,2)
plt.plot('v1', 'v3', 'rs-', data=dict)
plt.tight_layout()
plt.show()
import
import numpy as np
import pandas as pd
import matplotlob.pyplot as plt
impot seaborn as sns
ํ๊ท
์ฐ์ ํ๊ท , ๊ธฐํํ๊ท , ์กฐํํ๊ท
์ฐ์ ํ๊ท
np.mean(list)
,numpy
๋ผ์ด๋ธ๋ฌ๋ฆฌ์mean()
ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ๊ท ๊ฐ ๊ณ์ฐ
์กฐํํ๊ท
๋ถ์๊ฐ ๊ฐ๊ณ , ๋ถ๋ชจ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ํ๊ท ๊ณ์ฐ์ ์ฌ์ฉ(๊ฑฐ๋ฆฌ๋ ๊ฐ์๋ฐ ๋ค๋ฅธ ์๋ ฅ์ผ๋ก ์๋ณตํ ๊ฒฝ์ฐ)
- ๋ ์์ ์ญ์์ ํ๊ท :
$\frac{(\frac{1}{a}+\frac{1}{b})}{2}$
- 1)์ ์ญ์ : $\frac{2ab}{(a+b)}$
# ์ค์๊ฐ
np.median(list)
# ์ต๋น๊ฐ : ์ต๋ ๋น๋์
np.mode(list)
# 4๋ถ์ ์
np.percentile(list, [0, 25, 50, 75, 100])
- 4๋ถ์์
# titanic๋ฐ์ดํฐ์ 'Age'์ 4๋ถ์์๋ฅผ ๊ตฌํ๋๋ฐ
# np.percentile(titanic['Age'], [0, 25, 50, 75, 100]) ์ ์
๋ ฅํ๋ฉด ์๊พธ nan, nan...์ผ๋ก ์ถ๋ ฅ๋์๋ค
>>> np.percentile(titanic['Age'], [0, 25, 50 ,75, 100])
array([nan, nan, nan, nan, nan])
# ํด๊ฒฐ๋ฐฉ๋ฒ
>>> np.percentile(titanic[titanic['Age'].notnull()]['Age'], [0, 25, 50, 75, 100])
array([ 0.42 , 20.125, 28. , 38. , 80. ])
- ๊ธฐ์ดํต๊ณ๋
# ๋ํ๊ฐ์ ๊ฐ๋ค์ ํ๋๋ก ์์ธ๋ฌ์ฃผ๋ ๋ต : ๊ธฐ์ดํต๊ณ๋
sr.describe() # sr : series type
df.describe()
# ์๋๋ ์ซ์ํ์
๋ง ์กฐํํ๋๋ฐ '๋ฌธ์'์ธ ๊ฒ๋ ์นด์ดํธํด์ฃผ๋ ๋ฐฉ๋ฒ
df.describe(include='all')
- ํ์คํ ๊ทธ๋จ
plt.hist()
ํ์คํ ๊ทธ๋จ์ ์ ์ฅํ๋ฉด ํ์ ์ด<class 'tuple'>
์ด๋คhist1 = plt.hist(titanic.Fare, bins=5, edgecolor='gray')
๋น๋์ : hist1[0]
๊ตฌ๊ฐ๊ฐ : hist1[1]
# seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํํํ ์ ์์
sns.hisplot(data['Sale'], bins=20)
plt.show()
# ์ซ์ํ ๋ณ์์ ๋ถํฌ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋ด์ผํจ
# bins : ๊ตฌ๊ฐ, ๋ช ๊ตฌ๊ฐ์ผ๋ก ๋๋์ด์ ๋ณด์ฌ์ค์ง ๊ฒฐ์
# bins ๊ฐ์ด ํด์๋ก ์ธ๋ฐํด์ง๋ค
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.hist(titanic['Fare'], bins=5, edgecolor='gray')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.subplot(1,2,2)
plt.hist(titanic['Fare'], bins=30, edgecolor='red')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()
- ๋ฐ๋ํจ์ ๊ทธ๋ํ
๊ตฌ๊ฐ bin์ ๋๋น๋ฅผ ์ด๋ป๊ฒ ์ก๋์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ์์ด ๋ ์ ์์
Kernel Desity Estimation ์ปค๋ ๋ฐ๋ ์ถ์
๋ฐ๋ํจ์ ๊ทธ๋ํ ์์ ๋ฉด์ ์1
์ด๋ค
# seabon as sns : ๊ธฐ๋ณธ ๊ทธ๋ํ์ ๋ค์ํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ์ ์์
# density plot
sns.kdeplot(titanic['Fare'])
plt.show()
- boxplot
โป๊ฐ์
NaN
์ด ์์ผ๋ฉด ๊ทธ๋ ค์ง์ง ์์box = plt.boxplot(list)
type(box)
ํ์ ์<class 'dict'>
ํ์ ์ด๋ค
box.keys()
์๋์ชฝmax. min
,box['data'][0].get_ydata()
์์ชฝmin, max
,box['data'][1].get_ydata()
# ๊ธฐ๋ณธ(์ธ๋ก)
plt.boxplot(list)
# ๊ฐ๋ก๋ก ๋ณด๊ธฐ
plt.boxplot(list, vert=False) # vertical
plt.show()
- boxplot ๊ฐ ํ์ธ
IQR = 3์ฌ๋ถ์ - 1์ฌ๋ถ์
age = [19,20,23,46,21,25,26,25,28,31,37,24,28,34,38,33,32,29,27,24]
box1 = plt.boxplot(age)
plt.show()
>>> print(type(box1)
<class 'dict'>
>>> print(box1.keys())
dict_keys(['whiskers', 'caps', 'boxes', 'medians', 'fliers', 'means'])
>>> print(box1['whiskers'])
[<matplotlib.lines.Line2D object at 0x000001D5B44FB460>, <matplotlib.lines.Line2D object at 0x000001D5B44FB7C0>]
>>> print(box1['whiskers'][0].get_ydata()) # ์๋ max, min
[24. 19.]
>>> print(box1['whiskers'][1].get_ydata()) # ์ min, max
[32.25 38. ]
- ์๊ณ์ด ๋ฐ์ดํฐ
์๊ณ์ด ๋ฐ์ดํฐ๋ ๋ณดํต ์๊ฐ ์ถ(x์ถ)์ ๋ง๊ฒ ๊ฐ๋ค์ ๋ผ์ธ์ฐจํธ๋ก ํํํจ
air['Date'] = pd.to_datetime(air['Date']) # ๋ ์ง ํ์์ผ๋ก ๋ณํ
plt.plot('Date', 'Ozone', 'g-', data=air, label='Ozone')
plt.plot('Date', 'Temp', 'r-', data=air, label='Temp')
plt.xlabel('Date')
plt.legend()
plt.show()
import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
impot seaborn as sns
๋ฒ์ฃผํ ๋ณ์๋ ๋ฒ์ฃผ๋ณ ๋น๋์์ ๋น์จ์ ํ์ธ
๋ฆฌ์คํธ.count(๊ฐ)
: ํด๋น ๊ฐ์ด ๋ช ๊ฐ ์๋ countํด์ค
- ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ๊ธฐ์ดํต๊ณ๋
gender = ['F','M','F','F','F','M','F','M','M']
f_cnt = gender.count('F')
m_cnt = gender.count('M')
total_cnt = len(gender)
>>> print('F : ', f_cnt, f_cnt/total_cnt)
>>> print('M : ', m_cnt, m_cnt/total_cnt)
F 5 0.5555555555555556
M 4 0.4444444444444444
- ํ๋ค์ค๋ฅผ ์ด์ฉํ ๊ธฐ์ดํต๊ณ๋
data.value_counts()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ฃผ ๋ณ ๊ฐ์๋ฅผ countํด์ค
>>> print(titanic['Pclass'].value_counts()
3 491
1 216
2 184
# ๋น์จ๋ก ๋ํ๋
>>> print(titanic.shape)
>>> print(titanic['Pclass'].value_counts()/titanic.shape[0])
(891, 8)
3 0.551066
1 0.242424
2 0.206510
๊ธฐ๋ณธ์ฐจํธ
>>> gender
['F', 'M', 'F', 'F', 'F', 'M', 'F', 'M', 'M']
>>> f_cnt, m_cnt
(5, 4)
plt.bar(x=['F', 'M'], height=[f_cnt, m_cnt])
plt.show()
- ๋ฐ์ดํฐํ๋ ์์ผ๋ก barchart๊ทธ๋ฆฌ๊ธฐ
๋ฒ์ฃผ ์ด๋ฆ๊ณผ ๊ฐ์ด ํ์ํ๋ฏ๋ก, ์ง๊ณ์์ ์ ํํด์ผํจ
value_counts()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง๊ณ
๊ฒฐ๊ณผ.index
: ๋ฒ์ฃผ์ด๋ฆ,๊ฒฐ๊ณผ.values
: ๊ฐ
temp = titanic['Pclass'].value_counts()
>>> print(temp.index)
>>> print(temp.values)
Int64Index([3, 1, 2], dtype='int64')
[491 216 184]
plt.bar(x=temp.index, height=temp.values)
plt.show()
# bar + h : ๊ทธ๋ํ๊ฐ ์์ผ๋ก ๊ทธ๋ ค์ง
plt.barh(x=temp.index, height=temp.values)
plt.show()
- ์ง๊ณ์ barplot์ ํ๊บผ๋ฒ์
seaborn์
countplot
sns.countplot(x=titanic['Pclass'])
plt.show()
๋ฒ์ฃผ๋ณ ๋น์จ ๋น๊ตํ ๋ ํ์ด์ฐจํธ ์ฌ์ฉ
๋จผ์ ์ง๊ณ
plt.pie(๊ฐ, label=๋ฒ์ฃผ์ด๋ฆ, autopct='%.2f%%')
: ์์์ 2์๋ฆฌ๊น์ง ํ์
startangle = 90
: 90๋ ๋ถํฐ ์์
counterclock = False
: ์๊ณ๋ฐฉํฅ
explode = [0.05, 0.05, 0.05] : ์ค์ฌ์ผ๋ก ๋ถํฐ 1,2,3์ ์ผ๋งํผ ๋์ธ์ง ๊ฒฐ์ <br/>
shadow = True` : ๊ทธ๋ฆผ์ ์ถ๊ฐ
temp = titanic['Pclass'].value_counts()
# ๊ฐ, ์ธ๋ฐ์ค
# autopct = ํผ์ผํธ
# % .2fํํ ์ ๋์ ํผ์ผํธ ํ์
plt.pie(temp.values, label=temp.index, autopct='%.2f%%')
plt.show()
# ๊ฐ๋์ ๋ฐฉํฅ ์กฐ์ (startangle, counterclock)
plt.pie(temp.values, labels=temp.index, autopct='%.2f%%', startangle=90, counterclock=False)
plt.show()
# ์ค์ฌ์ผ๋ก๋ถํฐ ๊ฐ๊ฒฉ ๋์ฐ๊ณ , ๊ทธ๋ฆผ์์ถ๊ฐ
plt.pie(temp.values, labels=temp.index, autopct='%.2f%%', startangle=90, counterclock=False,
explode=[0.05, 0.05, 0.05], shadow=True)
plt.show()
์ค์น
!pip install -U seaborn
import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
- ๋ฐ์ดํฐ ์ค๋น
# ํ์ดํ๋ ๋ฐ์ดํฐ
titanic = pd.read_csv('https://bit.ly/3FsgwkJ')
# ์์ด๋ฆฌ์ค ๊ฝ ๋ถ๋ฅ ๋ฐ์ดํฐ
iris = pd.read_csv('https://bit.ly/3JiY7ZZ')
# ๋ณด์คํค ์ง๊ฐ ๋
๋นํฐ
boston = pd.read_csv('https://bit.ly/3EuWvZw')
# ๋ด์์ ๊ณต๊ธฐ ์ค์ผ๋ ๋ฐ์ดํฐ + ์๊ณ์ด ๋ฐ์ดํฐ(๋ ์ง ํ์์ผ๋ก ๋ณํ)
air = pd.read_csv('https://bit.ly/3qmthqZ')
air['Date'] = pd.to_datetime(air['Date'])
air['Month'] = air['Date'].dt.month
air['WeekDay'] = air['Date'].dt.weekday
- histogram : sns.histplot
sns.histplot(data=titanic, x='Age', bins=16)
plt.show()
sns.histplot(data=titanic, x='Age', bins=17, hue='Survived') # hue : ์์กด์ฌ๋ถ ๋ณ๋ก ์ชผ๊ฐ์ด ๋ณด์ฌ์ง
plt.show()
- densityplot : kdeplot
sns.kdeplot(data=titanic, x='Age')
plt.show()
sns.kdeplot(data=titatnic, x='Age', hue='Survived', common_norm=False) # hue ๊ฒน์ณ์ ๋ณด์ฌ์ค
plt.show()
- boxplot
sns.boxplot(data=titanic, y='Age')
plt.show()
sns.boxplot(data=titanic, y='Age', x='Survived') # ๋ฒ์ฃผ๋ณ๋ก ๋ฐ๋ก๋ฐ๋ก ๊ทธ๋ ค์ค ์ ์์
plt.show()
https://seaborn.pydata.org/generated/seaborn.distplot.html
hist_kew=dict()
: ํ์คํ ๊ทธ๋จ์ ๊พธ๋ฏธ๊ธฐ ์ํ ์ต์ , ๋์ ๋๋ฆฌ ํํ๋ก ์ ๋ ฅ
ํ์คํ ๊ทธ๋จ๊ณผ ๋ฐ๋ํจ์ ๊ทธ๋ํ๋ฅผ ๊ฒน์ณ์ ํํ
sns.distplot(titanic['Age'], bins=16, hist_kws = dict(edgecolor='grey'))
plt.show()
https://seaborn.pydata.org/generated/seaborn.jointplot.html
๋ ์ซ์ํ ๋ณ์์ ๋ถํฌ๋ฅผ ํ๊บผ๋ฒ์ ๋น๊ตํ์ฌ ๋ณด์ฌ์ค
seaborn๊ทธ๋ํ์ ๊ฐ์ฅ ํฐ ํน์ง์hue
์ต์ ์ผ๋ก ๋ฒ์ฃผ ์ฐจ์์ ์ถ๊ฐํ์ฌ ํ์ธ ๊ฐ๋ฅ
sns.jointplot(x='Petal.Length', y='Petal.Width', data=iris)
plt.show()
# ์ข
๋ฅ๋ณ๋ก ๊ตฌ๋ถ
sns.jointplot(x='Petal.Legnth', y='Petal.Width', data=iris, hue='Species')
plt.show()
https://seaborn.pydata.org/generated/seaborn.pairplot.html
๋ชจ๋ ์ซ์ํ ๋ณ์๋ค์ ๋ํด์ ์๋ก ๋น๊ตํ๋
์ฐ์ ๋
ํ์
๊ฐ ๋ณ์์ ๋ํด์ ํ์คํ ๊ทธ๋จ(or density plot) ํ์
sns.pairplot(iris, hue='Species')
plt.show()
https://seaborn.pydata.org/generated/seaborn.countplot.html
Matplotlib์์
barplot
์ ๊ทธ๋ฆด๋, ๋ฐ๋์ '์ง๊ณ'๊ฐ ์ ํ๋์ด์ผ ํจ
๊ทธ๋ฌ๋seaborn.countplot
์ ์ง๊ณ๋ฅผ ํฌํจํ์ฌbarplot
์ ๊ทธ๋ ค์ค
sns.countplot(x='Embarked', data=titanic)
plt.show()
# hue์ต์
์ฌ์ฉ
sns.countplot(x='Embarked', data=titanic, hue='Survived')
plt.show()
https://seaborn.pydata.org/generated/seaborn.barplot.html
seaborn.barplot
์ ์ผ๋ฐ์ ์ธbarplot
์ด ์๋
๋ฒ์ฃผ๋ณ(x
), ์ซ์(y
)์ ํ๊ท ์ ๋น๊ตํ๋ ๊ทธ๋ํโ
๊ฐ์ด๋ฐ ์ง์ ์์ ๋ขฐ๊ตฌ๊ฐ=error bar
์ ์๋ฏธ
sns.barplot(x='Embarked', y='Fare', data=titanic)
plt.show()
https://seaborn.pydata.org/generated/seaborn.heatmap.html
๋ ๋ฒ์ฃผ๋ฅผ ์ง๊ณํ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋๋๋ก ํํํ์ฃผ๋ ๊ทธ๋ํ
์ง๊ณ(groupby)์ ํผ๋ด(pivot)์ ๋จผ์ ๋ง๋ค์ด์ค์ผ ํจ
์ฌ๋ฌ ๋ฒ์ฃผ๋ฅผ ๊ฐ๋ ๋ณ์ ๋น๊ต์ ์ ์ฉ
dataframe.pivot(index, columns, values)
:pivot
ํจ์๋ฅผ ์ด์ฉํด ์ง๊ณ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ตฌ์ฑํ ์ ์์
temp1 = titanic.groupby(['Embarked', 'Pclass'], as_index=False)['PassengerId'].count() # ์ง๊ณ
temp2 = temp1.pivot('Embarked', 'Pclass', 'PassengerId')
# pivot์ ์๋๋๋ก ๋๋ ค๋์ผ๋ ค๋ฉด `unpivot`์ ์ฌ์ฉ
temp1
temp2
temp1 = titanic.groupby(['Embarked', 'Pclass'], as_index=False)['PassengerId'].count()
temp2 = temp1.pivot('Embarked', 'Pclass', 'PassengerId')
sns.heatmap(temp2, annot=True)
plt.show()
# ๊ฐ์ ์ ์๋ก, ๊ตฌ๊ฐ ๊ฐ๊ฒฉ์ ์ด์ง ๋ฒ๋ ค์ ๊ทธ๋ฆฌ์
# 1.3e+01 10์ 2์น, ์ด๋ฐ ์ง์๋ฅผ ์์ ๋ ๊ฒ์ `fmt='d'` ๋ผ๊ณ ํจ(๊พธ๋ฏธ๋๊ฒ)
sns.heatmap(temp2, annot=True, fmt='d', linewidth= .2)
plt.show()
- ์ฐ์ ๋
plt.scatter(x์ถ ๊ฐ, y์ถ ๊ฐ)
plt.scatter('x๋ณ์', 'y๋ณ์', data = dataframe)
plt.scatter(air['Temp'], air['Ozone'])
plt.show()
plt.scatter('Temp', 'Ozone', data=air)
plt.xlabel('Temp')
plt.ylabel('Ozone')
plt.show()
์ฐ์ ๋์์ ๋๋ ทํ ํจํด์ด ๋ณด์ธ๋ค๋ฉด, ๊ฐํ ๊ด๊ณ(์ง์ )
pairplot
: ์ซ์ํ ๋ณ์๋ค์ ๋ํ ์ฐ์ ๋๋ฅผ ํ๊บผ๋ฒ์ ๊ทธ๋ ค์ค
jointplot
: ์ฐ์ ๋์ ๊ฐ๊ฐ์ ํ์คํ ๊ทธ๋จ์ ๋ณด์ฌ์ค
์๊ด๊ณ์ : ๐ , ์ง์ ์ผ๋ก ๊ฐ๋ค์ด ์ผ๋ง๋ ๋ชจ์ฌ ์๋์ง ์์นํ
-1
๋๋1
์ ๊ฐ๊น์ธ์๋ก ๊ฐํ๊ด๊ณ,0
์ ๊ฐ๊น์ธ์๋ก ์ฝํ(๊ด๋ จ์์) ๊ด๊ณ
import
# scipy์ ํต๊ณ๋ชจ๋
import scipy.stats as spst
# ์๊ด๊ณ์์ p-value
>>> spst.pearsonr(air['Temp'], air['Ozone'])
(0.6833717861490114, 2.197769800200274e-22)
- ์ซ์๋ณ์๋ค์ ๋ํ ์๊ด๊ณ์
dataframe.corr()
na/null์ ์ ์ธ๋์ด ๊ณ์ฐ๋จ
air.corr()
- ์๊ด๊ณ์ heatmap์๊ฐํ
cmap(colormap) : https://matplotlib.org/stable/tutorials/colors/colormaps.html
plt.figure(figsize=8, 8))
sns.heatmap(air.corr(), annot = True, fmt = '.3f', cmap = 'RdYlBu_r', vmin = -1, vmax = 1)
plt.show()
'๋ฒ์ฃผ -> ์ซ์'์ ๊ด๊ณ์ ์ค์ํ๊ฑด 'ํ๊ท ๋น๊ต'์ด๋ค
ํ๊ท ๊ฐ์ด ๊ทธ ์ง๋จ์ ๋ํํ ์ ์๋?
ํ๊ท ๊ฐ์ด ๋ฏฟ์ ๋ง ํ๊ฐ?
s0 = titanic.loc[titanic['Survived'] == 0, 'Age']
s1 = titanic.loc[titanic['Survived'] == 1, 'Age']
# ์ฌ๋ง์์ ๋์ด ๋ถํฌ
sns.histplot(s0, bins=16)
plt.axvline(s0.mean(), color='r')
plt.show()
# ์์กด์์ ๋์ด ๋ถํฌ
sns.histplot(s1, bins=16)
plt.axvline(s1.mean(), color='r)
plt.show()
๋์๊ด์ ๋์ถ์ด์ฉ ๋์ด ํ๊ท ์ ๋ณด๋ฉด 20๋ ์ด๋ฐ์ด์ง๋ง, ์ค์ง์ ์ผ๋ก 20๋๋ ์ ๊ณ , 10๋์ 30~40๋ ๋์ถ์๊ฐ ๊ฐ์ฅ ๋๋ค
์ง๋จ์ ๋ํ๊ฐ์ผ๋ก ํ๊ท ์ ๊ตฌํ ๋
a = np.array([23, 54, 47, 64, 29, 15])
>>> print(f'ํ๊ท : {a.mean()}')
>>> print(f'ํ์คํธ์ฐจ : {a.std()}')
ํ๊ท : 38.666666666666664
ํ์คํธ์ฐจ : 17.53726191728787
# ํ์ดํ๋ ํ๊ท &ํ์คํธ์ฐจ
titanic.groupby(by='Survived')['Age'].agg(['mean', 'std'])
sem
์ผ๋ก ํ์ธ ํ๋ณธ(ํ์ง:sampling), ๋ชจ์ง๋จ์ ์ถ์
ํ๋ณธํ๊ท ์ ๋ชจํ๊ท ๊ณผ ์์ ํ ์ผ์นํ ์๋ ์์
# ํ์ค์ค์ฐจ
titanic.groupby(by='Survived')['Age'].agg(['mean', 'std', 'sem'])
- 95% ์ ๋ขฐ๊ตฌ๊ฐ
ํ์ค์ค์ฐจ :
1.96 * series.sem()
๋ชจํ๊ท :series.mean()
# ์์์ ๋ชจ์ง๋จ ์์ฑ
pop2 = [round(rd.normalvariate(160, 10), 1) for i in range(100000)]
# ๊ทธ๋ํ์์ฑ
plt.figure(figsize=(10, 6))
sns.histplot(pop2, bins = 100)
plt.axvline(np.mean(pop2), color='r')
plt.text(np.mean(pop2)+1, 3600, f'pop mean : {np.mean(pop2).round(2)}', color='r')
plt.show()
ํ๋ณธ์กฐ์ฌ
95% ์ ๋ขฐ๊ตฌ๊ฐ์ 100๋ฒ์ค 95๋ฒ์ ๋ชจํ๊ท ์ ํฌํจํ๋๊ฒ
# ํ๋ณธ์กฐ์ฌ 100๊ฑด
s1 = rd.sample(pop2, 100)
s1 = pd.Series(s1)
>>> s1.mean(), s1.std(), s1.sem()
(159.148, 8.561606570656416, 0.8561606570656416)
>>> 1.96 * s1.sem()
1.6780748878486575
# 95% ์ ๋ขฐ๊ตฌ๊ฐ
>>> s1.mean() - (1.96 * s1.sem()), s1.mean() + (1.96 * s1.sem())
(157.46992511215134, 160.82607488784865)
# ๋ชจํ๊ท
>>> np.mean(pop2)
160.026661
# 100๋ฒ ์ํ๋ง
samples = { 'id':[], 'values':[]}
for i in range(100):
samples['id'] += [i] * 100
samples['values'] += rd.sample(pop2, 100)
samples = pd.DataFrame(samples)
>>> samples.shape
(10000, 2)
# errorbar ์ฐจํธ
# ์ ๋ขฐ๊ตฌ๊ฐ, ํ์ค์ค์ฐจ ๊ตฌ๊ฐ ์๊ฐํ
plt.figure(figsize=(18, 8))
sns.pointplot(x='id', y='value', data=samples, join=False)
plt.axhline(np.mean(pop2), color='r')
plt.show()
# sns.barplot์ ๋ ๋ฒ์ฃผ์ ํ๊ท ๋น๊ต
sns.barplot(x='Survived', y='Age', data=titanic)
plt.show()
# boxplot
titanic.boxplot('Age', 'Survived')
plt.show()
t-test
๋ ์ง๋จ์ ํ๊ท ์ ๋น๊ต
NaN
์ด ์๋ ๊ฒฝ์ฐ ๊ณ์ฐ์ด ์๋จ,notnull()
๋กNaN
์ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผํจ
๋ ํ๊ท ์ ์ฐจ์ด๋ก ์ดํดํ๋ฉด ๋จ
tํต๊ณ๋ : t๊ฐ์ด -2๋ณด๋ค ์๊ฑฐ๋, 2๋ณด๋ค ํฌ๋ฉด ์ฐจ์ด๊ฐ ์๋ค๊ณ ๋ด
import scipy.stats as spst
import random as rd
# ๋ชจ์ง๋จ ๋ง๋ค๊ธฐ
pop1 = [round(rd.normalvariate(160, 10), 1) for i in range(100000)]
pop2 = [round(rd.normalvariate(170, 10), 1) for i in range(100000)]
plt.figure(figsize=(10, 6))
sns.distplot(pop1, hist=False, kde=True)
sns.distplot(pop2, hist=False, kde=True)
plt.show()
# ํ๋ณธ ์ถ์ถ
s1 = rd.sample(pop1, 100)
s2 = rd.sample(pop2, 100)
# t-test
>>> spst.ttest_ind(s1, s2)
Ttest_indResult(statistic=-1.9424343516120028, pvalue=0.053502918260016644)
ANalysis Of VAriance
Fํต๊ณ๋ = ๊ฐ์ด ๋๋ต 2~3์ด์์ด๋ฉด ์ฐจ์ด๊ฐ ์๋ค๊ณ ํ๋จ
# Pclass ---> Age
sns.barplot(x='Pclass', y='Age', data=titanic)
plt.show()
titanic.boxplot('Age', 'Pclass')
plt.show()
# Fํต๊ณ๋
P_1 = titanic.loc[titanic.Pclass == 1, 'Age']
P_2 = titanic.loc[titanic.Pclass == 2, 'Age']
P_3 = titanic.loc[titanic.Pclass == 3, 'Age']
>>> spst.f_oneway(P_1, P_2, P_3)
F_onewayResult(statistic=nan, pvalue=nan)
๋ฒ์ฃผ:๋ฒ์ฃผ ๋น๊ต ๋ถ์ํ๊ธฐ ์ํด์๋ ๋จผ์ '๊ต์ฐจํ'๋ฅผ ๋ง๋ค์ด์ผํจ
pd.crosstab(ํ, ์ด)
normalize='
columns: ์ปฌ๋ผ๋ด์ ํฉ์ด '1',
index: ํ์ ํฉ์ด '1',
all`์ ์ ์ฒด์ ํฉ๊ณ '1' ๋น์จ๋ก ๋ํ๋
# ๋น๋์ ๊ต์ฐจํ ๋ง๋ค๊ธฐ
pd.crosstab(titanic['Survived'], titanic['Sex'])
# normalize ์ ์ฉ
pd.crosstab(titanic['Survived'], titatnic['Sex'], normalize='all')
100% Stacked Bar, mosaic
- stacked bar
crosstab์ผ๋ก ์ง๊ณ :
pd.crosstab(feature, target, normalize='index')
.plot.bar(stacked=True)<br/> ์ ์ฒดํ๊ท ์ :
plt.axhline`
# Pclass -> Survived
temp = pd.crosstab(titanic['Pclass'], titanic['Survived'], normalize='index')
temp.plot.bar(stacked=True)
plt.axhline(1-titanic['Survived'].mean(), color='r') # ์์กด์จ์ด ์์ ๊ทธ๋ ค์ง๊ธฐ ๋๋ฌธ์ '1 - ํ๊ท '
plt.show()
- mosaic
`mosaic(dataframe, [feature, target])
from statsmodels.graphics.mosaicplot import mosaic
import scipy.stats as spst
# Pclass๋ณ ์์กด์ฌ๋ถ๋ฅผ mosaic plot์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ
mosaic(titanic, ['Pclass', 'Survived'])
plt.axhline(1-titanic['Survived'].mean(), color='r')
plt.show()
## ์ด๋ฆ์ ์์๋๋ก ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ : data๋ฅผ sorting
mosaic(titanic.sort_values(['Pclass', 'Survived']), ['Pclass', 'Survived'], gap=0.01)
plt.axhline(1-titanic['Survived'].mean(), color='r')
plt.show()
๋ฒ์ฃผํ ์ฌ์ด์ ์ด๋ค ๊ด๊ณ๊ฐ ์๋ ์ง, ์์นํํ๋ ๋ฐฉ๋ฒ
์นด์ด๋ ๊ทธ๋ฆฌ์ค์์ ์ํ๋ฒณ 'x'๋ฅผ ๋ปํจ
# ๋จผ์ ์ง๊ณ
table = pd.crosstab(titanic['Survived'], titanic['Pclass']) # ์นด์ด์ ๊ณฑ์ ํ, ์ด ์์ ์๊ด์์ง๋ง, normalize๋ ํ๋ฉด ์๋จ
# ์นด์ด์ ๊ณฑ๊ฒ์
result = spst.chi2_contingency(table)
>>> print('์นด์ด์ ๊ณฑํต๊ณ๋', result[0])
>>> print('p-value', result[1])
>>> print('๊ธฐ๋๋น๋', result[2])
์นด์ด์ ๊ณฑํต๊ณ๋ 102.88898875696056
p-value 4.549251711298793e-23
๊ธฐ๋๋น๋
[[133.09090909 113.37373737 302.53535354]
[ 82.90909091 70.62626263 188.46464646]]
# feature : Age , target : Survived
sns.histplot(x='Age', data=titanic, hue='Survived')
plt.show()
- kde.plot
sns.kdeplot(x='Age', data=titanic, hue='Survived')
plt.show()
sns.kdeplot(x='Age', data=titanic, hue='Survived', common_norm=False)
plt.show()
sns.kdeplot(x='Age', data=titanic, hue='Survived', multiple='fill')
plt.axhline(titanic['Survived'].mean(), color='r')
plt.show()
sns.histplot(x='Age', data=titanic, bins=16, hue='Survived', multiple='fill')
plt.axhline(titanic['Survived'].mean(), color='r')
plt.show()
๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ p-value๊ตฌํ๊ธฐ
'์ซ์->๋ฒ์ฃผ'๋ ๊ฐ์คใน๊ฒ์ ๋๊ตฌ๊ฐ ์๊ธฐ๋๋ฌธ์, ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ๋ก p-value๋ฅผ ๊ตฌํจ
# titanic : Age --> Survived
import statsmodels.api as sm
model = sm.Logit(titanic['Survived'], titanic['Age'])
result = model.fit()
>>> print(result.pvalues)
Optimization terminated successfully.
Current function value: 0.661967
Iterations 4
Age 3.932980e-13
dtype: float64
์ซ์ํ->์์นํ
์๊ฐํ : scatter(regplot), jointplot
plt.scatter(x, y, data)
sns.jointplot(x='Temp', y='Ozone', data = air)
sns.regplot(x='Advertising', y='Sales', data=data) # ์ง์ ์ ๊ทธ๋ ค์ค
=
[์๊ด๋ถ์]
import scipy.stats as spst
spst.pearsonr(x, y)
๋ฒ์ฃผํ->์ซ์
์๊ฐํ : ํ๊ท ๋น๊ต barplot
sns.barplot(x="Survived", y="Age", data=titanic)
์์นํ
2๊ฐ
male = temp.loc[temp['Sex']=='male', 'Fare']
female = temp.loc[temp['Sex']=='female', 'Fare']
spst.ttest_ind(male, female)
3๊ฐ anova
P_1 = titanic.loc[titanic.Pclass == 1, 'Age']
P_2 = titanic.loc[titanic.Pclass == 2, 'Age']
P_3 = titanic.loc[titanic.Pclass == 3, 'Age']
spst.f_oneway(P_1, P_2, P_3)
์ซ์->๋ฒ์ฃผ
์๊ฐํ
sns.histplot(x='Age', data = titanic, hue = 'Survived')
sns.kdeplot(x='Age', data = titanic, hue ='Survived')
sns.kdeplot(x='Age', data = titanic, hue ='Survived', common_norm = False)
# normalize ์ฐจ์ด
10๊ณผ,
*** normalize๊ฐ ๋์ฌ๋๋ ํฉ์ณ์ 1์ ๋ง๋ค์ด๋ผ, ์ด๋ฐ์๋ฏธ !
์์นํ : ๋ก์ง์คํฑํ๊ท
import statsmodels.api as sm
model = sm.Logit(titanic['Survived'], titanic['Age'])
result = model.fit()
print(result.pvalues)
๋ฒ์ฃผ->๋ฒ์ฃผ
์๊ฐํ
[cross]
temp = pd.crosstab(titanic['Pclass'], titanic['Survived'], normalize = 'index')
print(temp)
temp.plot.bar(stacked=True)
plt.axhline(1-titanic['Survived'].mean(), color = 'r')
pd.crosstab(titanic['Survived'], titanic['Sex'])
[mosaic]
mosaic(titanic, [ 'Pclass','Survived'])
plt.axhline(1- titanic['Survived'].mean(), color = 'r')
plt.show()
์์นํ
[๋จผ์ ์ง๊ณ]
table = pd.crosstab(titanic['Survived'], titanic['Pclass'])
[์นด์ด์ ๊ณฑ๊ฒ์ ]
result = spst.chi2_contingency(table)
print('์นด์ด์ ๊ณฑํต๊ณ๋', result[0])
print('p-value', result[1])
print('๊ธฐ๋๋น๋\n',result[3])
๋จ๋ณ๋ ์ซ์ํ
plt.hist(bins=, edgecolor)
sns.histplot(data, bins=)
sns.kdeplot(data)
plt.boxplot(vert=False)
๋จ๋ณ๋ ๋ฒ์ฃผํ
plt.bar(x, height,)
sns.countplot(data)
plt.pie(x, labels, autopct='')
histogram + density = sns.distplot (histplot)
sns.distplot(x=titanic['Fare'], bins=16, hist_kws={'edgecolor':'gray'})
scatter + histogram = sns.jointplot
sns.jointplot(x='Age', y='Fare', data=titanic)
scatter + histogram(densityplot ํ์ฅ) = sns.pairplot
sns.pairplot(data=air)
์ง๊ณ + bar plot = countplot : matplotlib์ ์ง๊ณ ํ bar plot์ ๊ทธ๋ ค์ผํจ
ํ๊ท ๋น๊ต bar plot = sns.barplot : seaborn์ barplot์ ์ผ๋ฐ bar plot์ด ์๋ ๋ฒ์ฃผ(x)๋ณ ์ซ์(y)์ ํ๊ท ์ ๋น๊ตํด์ฃผ๋๊ฒ, ๊ฐ์ด๋ฐ ์ง์ ์ ์ ๋ขฐ๊ตฌ๊ฐ์ ์๋ฏธ
sns.barplot(x='chas', y='medv', data=boston)
sns.boxplot(data=iris, y='Petal.Length', x='Species')
๋๋ฒ์ฃผ ์ง๊ณ ์๊ฐํ : = sns.heatmap
temp = ํ๋ณํ๋ ค๋ ๋ฐ์ดํฐ.pivot index, columns, values์ค์ ํ์
fmt = 'd'๋ก ์ค์ ํด์ฃผ๋ฉด decimal๊ฐ์ผ๋ก annotation์ ์ค์ ํด์ค ์ ์์
์ด๋ณ๋
๋ ๋ณ์์์ ๊ด๊ณ๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด '์๊ฐํ'์ '์์นํ'๋ฅผ ์ดํด๋ณผ ๊ฒ
'์์นํ'๋ ๋ง์ ๊ฐ์ค๊ฒ์ ๋๊ตฌ๊ฐ ํ์ํจ, ๋ง์ ๊ฐ์ค๊ฐ์ ์ด ํ์ํจ
[์ด๋ณ๋๊ณผ ์ซ์]
์ซ์vs์ซ์๋ฅผ ๋น๊ตํ ๋ ์ค์ํ๊ฒ์ '์ง์ '์ด๋ค
[์๊ฐํ]
์ฐ์ ๋:
plt.scatter(air['Temp'], air['Ozone'])
sns.scatterplot(x='Petal.Length', y='Petal.Width', data=iris, hue='Species')
sns.pairplot(air)
sns.jointplot(x='Temp', y='Ozone', data=air)
[์์นํ]
์๊ด๋ถ์ : -1 ~ 1 ์ฌ์ด์ ๊ฐ
import scipy.stats as spst
>>> spst.pearsonr(air['Temp'], air['Ozone'])
ใด๊ฐ์ 'NaN'์ด ์์ผ๋ฉด ๊ณ์ฐ๋์ง ์์,
>>> air.corr() # ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ถํฐ ์์นํ ๋ฐ์ดํฐ์ ๋ํ ์๊ด๊ณ์ ํ์ธ
ใด์ผ๋ง๋ ์๋ก ๊ด๋ จ์ด ์๋์ง ํ์ธํ๋๊ฒ
sns.heatmap(air.corr, annot=True
sns.heatmap(carseat.corr(),annot = True, fmt = '.3f', vmin = -1, vmax = 1, cmap = 'seismic')
๋ฒ์ฃผvs์ซ์
.sem() : ํ์คํธ์ฐจ
95% ์ ๋ขฐ๊ตฌ๊ฐ
[์๊ฐํ]
sns.histplot
sns.kdeplot
sns.barplot(x='Survived', y='Age', data=titanic)
sns.boxplot(x='Survived', y='Age', data=titanic)
sns.barplot(x='Sex', y='Fare', data=titanic)
[์์นํ]
sns.distplot()
t-test
t๊ฐ์ด -2๋ณด๋ค ์๊ฑฐ๋, 2๋ณด๋ค ํฌ๋ฉด ๊ด๋ จ์ด ์๋ค๊ณ ๋ด
temp = titanic.loc[titanic['Age'].notnull()]
died = temp.loc[temp['Survived']==0, 'Age']
survived = temp.loc[temp['Survived']==1, 'Age']
>> spst.ttest_ind(died, survived)
Ttest_indResult(statistic=2.06668694625381, pvalue=0.03912465401348249)
anova:(3๊ฐ์ด์)
Fํต๊ณ๋ ๊ฐ์ด 2~3์ด์์ด๋ฉด ๊ด๋ จ์ด ์๋ค๊ณ ๋ด
sns.barplot()
d1 = titanic.loc[titanic['Embarked']=='S', 'Fare']
d2 = titanic.loc[titanic['Embarked']=='C', 'Fare']
d3 = titanic.loc[titanic['Embarked']=='Q', 'Fare']
>>> spst.f_oneway(d1, d2, d3)
F_onewayResult(statistic=38.14030520011266, pvalue=1.2896450252631794e-16)
๋ฒ์ฃผvs๋ฒ์ฃผ
๋ฒ์ฃผ:๋ฒ์ฃผ๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ต์ฐจํ๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผํจ
crosstabํด์ฃผ์ด์ผํจ
pd.crosstab(ํ, ์ด) pd.crosstab(titanic['Survived'], titanic['Sex'])
[์๊ฐํ]
100%stacked bar
temp = pd.crosstab(titanic['Pclass'], titanic['Survived'], normalize = 'index')
print(temp)
temp.plot.bar(stacked=True)
plt.axhline(1-titanic['Survived'].mean(), color = 'r')
plt.show()
mosaic
from statsmodels.graphics.mosaicplot import mosaic
mosaic(titanic, [ 'Pclass','Survived'])
plt.axhline(1- titanic['Survived'].mean(), color = 'r')
plt.show()
์๊ฐํ ํ๋จํ๋ ๋ฐฉ๋ฒ์ '๋ชจํ๊ท '์ด mosaic์ ์ ์ผ์นํ๋ฉด ๊ท๋ฌด๊ฐ์ค ์์ฑ์ด๋ฉฐ
'๋ชจํ๊ท ' axhline์ ์ด ์ผ์นํ์ง ์์ผ๋ฉด ๊ด๋ จ์ด ์์์ ์ ์ ์์, ์ฐจ์ด๊ฐ ์๋ค
[์์นํ]
์นด์ด์ ๊ณฑ๊ฒ์
ํด์๋ก ๊ธฐ๋๋น๋๋ก๋ถํฐ ์ค์ ๊ฐ์ ์ฐจ์ด๊ฐ ํฌ๋ค๋ ์๋ฏธ(๊ฐ์ด 0์ ๊ฐ๊น์ธ์๋ก ๊ด๋ จ์ด ์๋๊ฒ์ด๊ณ )
๋ณดํต, ์์ ๋์ 2~3๋ฐฐ ๋ณด๋ค ํฌ๋ฉด, ์ฐจ์ด๊ฐ ์๋ค๊ณ ๋ณธ๋ค
Pclass : ๋ฒ์ฃผ๊ฐ 3๊ฐ, Survived : 2๊ฐ
(3-1) * (2-1) = 2
๊ทธ๋ฌ๋ฏ๋ก, 2์ 2 ~ 3๋ฐฐ์ธ 4 ~ 6 ๋ณด๋ค ์นด์ด์ ๊ณฑ ํต๊ณ๋์ด ํฌ๋ฉด, ์ฐจ์ด๊ฐ ์๋ค๊ณ ๋ณผ์ ์์.
# ๋จผ์ ์ง๊ณ
table = pd.crosstab(titanic['Survived'], titanic['Pclass'])
print('๊ต์ฐจํ\n', table)
print('-' * 100)
# ์นด์ด์ ๊ณฑ๊ฒ์ [์นด์ด์ ๊ณฑํต๊ณ๋, p-value, ๋ฒ์ฃผ์, ๊ธฐ๋๋น๋]
result = spst.chi2_contingency(table)
print('์นด์ด์ ๊ณฑํต๊ณ๋', result[0])
print('p-value', result[1])
print('๊ธฐ๋๋น๋\n',result[3])
temp = pd.crosstab(titanic['Sex'], titanic['Survived'])
spst.chi2_contingency(temp)
์ซ์:๋ฒ์ฃผ
[์๊ฐํ]
sns.histplot(x='Age', data = titanic, hue = 'Survived')
sns.kdeplot(x='Age', data = titanic, hue ='Survived')
โก kdeplot( , hue = 'Survived', common_norm = False)
์์กด์ฌ๋ถ ๊ฐ๊ฐ ์๋ ๋ฉด์ ์ ํฉ์ด 1์ธ ๊ทธ๋ํ
โข kdeplot( , hue = 'Survived', multiple = 'fill')
๋์ด์ ๋ฐ๋ผ ์์กด์ฌ๋ถ ๋น์จ์ ๋น๊ตํด๋ณผ ์ ์์. (์์ ๋น๊ต๊ฐ ์๋ ๋น์จ!)
[์์นํ]
์ซ์ -> ๋ฒ์ฃผ๋ ๊ฐ์ค๊ฒ์ ๋๊ตฌ๊ฐ ์์ด์ ๋ก์ง์คํฑ ํ๊ท๋ชจ๋ธ์ ์ฌ์ฉํจ
import statsmodels.api as sm
# ๋ก์ง์คํฑ ๋ชจํ์ ๋ง๋ค๊ณ ํต๊ณ๋์ ๊ตฌํด ๋ด
์๋ค.
model = sm.Logit(titanic['Survived'], titanic['Age'])
result = model.fit()
print(result.pvalues)
temp = sm.Logit(titanic['Fare'], titanic['Survived'])
result = temp.fit()
print(result.pvalues)
>>> sm.Logit (๋ฒ์ฃผ, ์์น)