-
[기술통계분석] 와인 품질 예측하기DataAnalysis/모델 분석 2022. 6. 1. 00:48
<개념>
1. 기술 통계(요약 통계)
-데이터의 특성을 나타내는 수치를 이용해 분석하는 기본적인 통계 방법
-평균,중앙값,최빈값 등을 구할 수 있음
2.회귀 분석
-독립 변수 x,종속변수 y간의 상호 연관성 정도를 파악하기 위한 분석 기법
-하나의 변수가 변함에 따라 대응 되는 변수가 어떻게 변하는지를 측정하는 것
-변수 간의 인과관계를 분석 할 때 많이 사용
-독립 변수가 한 개이면 단순 회귀 분석, 두 개 이상이면 다중 회귀 분석
-독립 변수와 종속 변수의 관계에 따라 선형 회귀 분석과 비선형 회귀 분석으로 나눠짐
-선형 회귀 분석 식: y=b0+b1x1+b2x2...
3.t-검정
-데이터에서 찾은 평균으로 두 그룹에 차이가 있는지 확인하는 방법
4.히스토그램
- 데이터 값의 범위를 몇 개 구간으로 나누고 각 구간에 해당하는 값의 숫자나 상대적 빈도 크기를 차트로 나타낸 것
<프로젝트>
목표: 와인의 속성을 분석한 뒤 품질 등급을 예측하는것
-레드와인,화이트 와인 그룹의 품질에 대한 t-검정 수행
-와인 속성을 독립 변수, 품질 등급을 종속 변수로 선형 회귀 분석 수행
데이터 준비 및 정리
import pandas as pd red_df = pd.read_csv('winequality-red.csv', sep = ';', header = 0, engine = 'python') white_df = pd.read_csv('winequality-white.csv', sep = ';', header = 0, engine= 'python') red_df.insert(0, column = 'type', value = 'red') white_df.insert(0, column='type', value='white') wine = pd.concat([red_df, white_df]) print(wine.shape) #wine.to_csv('C:/Users/kmj/My_Python/7장_data/wine.csv', index = False) wine.columns = wine.columns.str.replace(' ', '_') wine.describe() sorted(wine.quality.unique()) #qualtiy속정값 중 유일한 값 wine.quality.value_counts()
데이터 모델링
1) describe() 함수로 그룹 비교하기
#레드 와인과 화이트 와인을 구분하는 속성인 type을 기준으로 그룹을 나눈 뒤 그룹 안에서 quality 속성을 기준으로 기술 통계를 구함 wine.groupby('type')['quality'].describe() wine.groupby('type')['quality'].agg(['mean', 'std'])
2) t-검정과 회귀 분석으로 그룹 비교하기
from scipy import stats from statsmodels.formula.api import ols, glm red_wine_quality = wine.loc[wine['type'] == 'red', 'quality'] white_wine_quality = wine.loc[wine['type'] == 'white', 'quality'] #stats.ttest_ind() 함수를 사용하여 t-검정을 하고 두 그룹 간 차이를 확인 stats.ttest_ind(red_wine_quality, white_wine_quality, equal_var = False) #선형 회귀 분석식의 종속 변수(y)와 독립 변수(x1~x10)를 구성 Rformula = 'quality ~ fixed_acidity + volatile_acidity + citric_acid +residual_sugar + chlorides + free_sulfur_dioxide + total_sulfur_dioxide +density + pH + sulphates + alcohol' #선형 회귀 모델 중에서 OLSOrdinary Least Squares 모델을 사용 regression_result = ols(Rformula, data = wine).fit() #선형 회귀 분석과 관련된 통계값을 출력 regression_result.summary()
stats.ttest_ind()함수를 사용하여 t-검정을 하고 두 그룹 간 차이를 확인한다.
선형회귀 분석을 수행한다.
회귀 분석 모델로 새로운 샘플의 품질 등급 예측하기
1)첫번째 샘플 만들어서 예측하기
#wine에서quality와type 열은제외 회귀분석모델에사용할독립변수만추출하여sample1에저장 sample1 = wine[wine.columns.difference(['quality', 'type'])] sample1 = sample1[0:5][:] #첫번째샘플의quality 예측하기 sample1_predict = regression_result.predict(sample1) print(sample1_predict) print(wine[0:5]['quality']) #확인
2)두번째 샘플 만들어서 예측하기
#두번째샘플의quality 예측하기 data = {"fixed_acidity" : [8.5, 8.1], "volatile_acidity":[0.8, 0.5],"citric_acid":[0.3, 0.4], "residual_sugar":[6.1, 5.8], "chlorides":[0.055, 0.04], "free_sulfur_dioxide":[30.0, 31.0], "total_sulfur_dioxide":[98.0,99], "density":[0.996, 0.91], "pH":[3.25, 3.01], "sulphates":[0.4, 0.35],"alcohol":[9.0, 0.88]} sample2 = pd.DataFrame(data, columns= sample1.columns) sample2_predict = regression_result.predict(sample2) print(sample2_predict)
와인 유형에 따른 품질 등급 히스토그램 그리기
import matplotlib.pyplot as plt import seaborn as sns sns.set_style('dark') sns.distplot(red_wine_quality, kde = True, color = "red", label = 'redwine') sns.distplot(white_wine_quality, kde = True, label = 'white wine') plt.title("Quality of Wine Type") plt.legend() #차트 범례설정 plt.show() #x축: quality y축:확률 밀도 함수값
부분 회귀 플롯으로 시각화하기
1) fixed_acidity가 종속 변수 quality에 미치는 영향력 시각화 하기: sm.graphics.plot_partregress
import statsmodels.api as sm #fixed_acidity가 종속변수quality에 미치는 영향력을 시각화하기 others = list(set(wine.columns).difference(set(["quality", "fixed_acidity"]))) #나머지변수는 고정하고 fixed_acidity가 종속변수quality에미치는영향에부분회귀를수행 p, resids = sm.graphics.plot_partregress("quality", "fixed_acidity", others, data = wine, ret_coords = True) plt.show()
2) 각 독립 변수가 종속 변수 quality에 미치는 영향력을 시각화하기: sm.graphics.plot_partregress_grid
#각 독립변수가 종속변수 quality에 미치는 영향력을 시각화하기 fig = plt.figure(figsize = (8, 13)) #차트 크기 지정 #다중선형회귀분석결과를 가지고있는 regression_result를 이용해 각 독립변수의 부분회귀플롯을 구함 sm.graphics.plot_partregress_grid(regression_result, fig = fig) plt.show()
출처: 데이터 과학 기반의 파이썬 빅데이터 분석(이지은 지음)책을 공부하며 작성한 내용입니다.
'DataAnalysis > 모델 분석' 카테고리의 다른 글
[결정 트리 분석] 센서 데이터로 움직임 분류하기 (0) 2022.06.02 [로지스틱 회귀 분석] 특징데이터로 유방암 진단하기 (0) 2022.06.01 [선형 회귀] 자동차 예상 연비 예측하기 (0) 2022.06.01 [선형회귀분석+ 산점도/선형회귀그래프] 환경에따른주택가격예측하기 (0) 2022.06.01 [상관분석+히트맵] 타이타닉호 생존율 분석하기 (0) 2022.06.01