ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기술통계분석] 와인 품질 예측하기
    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()

     

     

     

    출처: 데이터 과학 기반의 파이썬 빅데이터 분석(이지은 지음)책을 공부하며 작성한 내용입니다.

Designed by Tistory.