이 변수는 어떻게 생겼는가? 어떠한 형태? 어떠한 패턴?
한 변수가 다른 변수에 영향을 주는가?
필요에 따라 파생 변수 생성 등 활용
Wine Quality 데이터셋: 포르투갈 “Vinho Verde” 와인의
화학적 성질과 전문가들에 의해 매겨진 품질 점수(0~10)를 기록한 것이다.
레드 와인과 화이트 와인 두 버전이 있으며,
와인의 품질이 어떤 물리·화학적 요소와 관련되는지 분석하기 위해 만들어졌다.
(와인의 품질(quality)을 예측하기 위한 회귀/분류 연구)
winequality-red.csv : 레드 와인 데이터셋| 컬럼 이름 | 설명 |
|---|---|
fixed acidity | 고정 산도 |
volatile acidity | 휘발성 산도 |
citric acid | 시트르산 |
residual sugar | 잔류 당분 |
chlorides | 염화물 |
free sulfur dioxide | 유리 이산화황 |
total sulfur dioxide | 총 이산화황 |
density | 밀도 |
pH | 산성도 |
sulphates | 황산염 |
alcohol | 알코올 도수 |
quality | 품질 점수 (0-10점); 타겟 변수 |
을 각각 정리해보세요!
내가 한 풀이
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 시각화 한글 깨짐 방지 설정
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams["axes.unicode_minus"] = False
df = pd.read_csv('winequality-red.csv', sep=';')# 콤마가 아닌 ;로 구분되어있음 이걸 읽기 위해 옵션에 ;을 넣어주시면 그 값을 구분자로 파일을 읽는다.
# 데이터의 정보 파악하기
# 데이터의 요약 통계량, 데이터 타입 등 확인
# df.describe()
print('데이터 타입: ', df.dtypes)
# df.shape
# 변수의 단위 파악 (산도, 당도, 알콜, 밀도 등)
# print(df['pH'])
# 타겟 변수인 quality의 분포(0~10), 통계량 확인
# sns.countplot(data=df, x="quality")
## 데이터의 품질 확인하기
# 결측치 탐색(확인, 비율)
ratio = df.isna().sum() / len(df)
# print(ratio)
# 중복 데이터 확인
duplicate_count = df.duplicated().sum()
print(f"전체 중복 행의 개수: {duplicate_count}개")
# boxplot으로 각 feature의 이상치 탐색
Q1 = df['quality'].quantile(0.25)
Q3 = df['quality'].quantile(0.75)
# IQR로 정량적 이상치 판단 (개수, 비율 등)
IQR = Q3 - Q1
outlier = df[(df['quality'] < Q1 - 1.5 * IQR) | (df['quality'] > Q3 + 1.5 * IQR)]
## 단변량 분석
# - 타겟 변수인 quality의 분포를 다양하게 확인해보기
# - ex) 좋은 와인 vs 나쁜 와인 처럼 이분화하여 그룹 비교
# 나는 0~4, 5~9이라고 해보기
bins = [0, 5, 9]
labels = ['0~4(나쁜와인)', '5~9(좋은와인)']
df['QualityBin'] = pd.cut(df['quality'], bins = bins, labels = labels)
print(df['QualityBin'])
rate_by_bin = df.groupby('QualityBin')['quality'].count().reset_index() # column 병합
# - 변수의 분포 파악 (데이터 유형에 따라)
# sns.barplot(data=rate_by_bin, x='QualityBin', y='quality') # Could not interpret value `Qualitybin` for `x`. An entry with this name does not appear in `data`.
# sns.countplot(data=df, x='QualityBin')
# 좋은와인 5점이상인 와인이 800개 이상 나쁜와인 4점이하가 750개정도된다.
## 이변량, 다변량 분석
# - 타겟 변수인 quality 변수와 다른 각각의 변수와의 관계성 파악하기
# - 산점도, 막대 그래프, 상관관계
# - ex) alchol vs. quality, quality별 평균 값 비교
# - 그 외의 변수 간의 관계 파악하기
# 알콜과 퀄리티간의 상관관계? 와인농도가 높을수록 퀄리티가 전반적으로 높다
plt.bar(df['quality'], df['alcohol'])
plt.xlabel('알콜')
plt.ylabel('퀄리티')
plt.title('알콜과 퀄리티간의 상관관계')
# alchol vs. quality, quality별 평균 값 비교
# grouped = df.groupby('quality')['alcohol'].mean().reset_index()
# sns.barplot(data=grouped, x='quality', y='alcohol', hue='quality', errorbar=None)
# plt.title('와인 품질별 평균 알콜')
#상관관계랑 corr도 구해보기 선그래프로 표현하는게 더 나을듯 결론 와인 품질과 와인 농도는 상관관계가 있다.
# grouped_corr = grouped.corr(numeric_only=True)
# print(grouped_corr)
plt.boxplot
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 시각화 한글 깨짐 방지 설정
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams["axes.unicode_minus"] = False
df = pd.read_csv('winequality-red.csv', sep=';')# 콤마가 아닌 ;로 구분되어있음 이걸 읽기 위해 옵션에 ;을 넣어주시면 그 값을 구분자로 파일을 읽는다.
# 데이터의 정보 파악하기
# 데이터의 요약 통계량, 데이터 타입 등 확인
# df.describe()
print('데이터 타입: ', df.dtypes)
# df.shape
# 변수의 단위 파악 (산도, 당도, 알콜, 밀도 등)
# print(df['pH'])
# 타겟 변수인 quality의 분포(0~10), 통계량 확인
# sns.countplot(data=df, x="quality")
## 데이터의 품질 확인하기
# 결측치 탐색(확인, 비율)
ratio = df.isna().sum() / len(df)
# print(ratio)
# 중복 데이터 확인
duplicate_count = df.duplicated().sum()
print(f"전체 중복 행의 개수: {duplicate_count}개")
# boxplot으로 각 feature의 이상치 탐색
Q1 = df['quality'].quantile(0.25)
Q3 = df['quality'].quantile(0.75)
# IQR로 정량적 이상치 판단 (개수, 비율 등)
IQR = Q3 - Q1
outlier = df[(df['quality'] < Q1 - 1.5 * IQR) | (df['quality'] > Q3 + 1.5 * IQR)]
## 단변량 분석
# - 타겟 변수인 quality의 분포를 다양하게 확인해보기
# - ex) 좋은 와인 vs 나쁜 와인 처럼 이분화하여 그룹 비교
# 나는 0~4, 5~9이라고 해보기
bins = [0, 5, 9]
labels = ['0~4(나쁜와인)', '5~9(좋은와인)']
df['QualityBin'] = pd.cut(df['quality'], bins = bins, labels = labels)
print(df['QualityBin'])
rate_by_bin = df.groupby('QualityBin')['quality'].count().reset_index() # column 병합
# - 변수의 분포 파악 (데이터 유형에 따라)
# sns.barplot(data=rate_by_bin, x='QualityBin', y='quality') # Could not interpret value `Qualitybin` for `x`. An entry with this name does not appear in `data`.
# sns.countplot(data=df, x='QualityBin')
# 좋은와인 5점이상인 와인이 800개 이상 나쁜와인 4점이하가 750개정도된다.
## 이변량, 다변량 분석
# - 타겟 변수인 quality 변수와 다른 각각의 변수와의 관계성 파악하기
# - 산점도, 막대 그래프, 상관관계
# - ex) alchol vs. quality, quality별 평균 값 비교
# - 그 외의 변수 간의 관계 파악하기
# 알콜과 퀄리티간의 상관관계? 와인농도가 높을수록 퀄리티가 전반적으로 높다
plt.bar(df['quality'], df['alcohol'])
plt.xlabel('알콜')
plt.ylabel('퀄리티')
plt.title('알콜과 퀄리티간의 상관관계')
# alchol vs. quality, quality별 평균 값 비교
# grouped = df.groupby('quality')['alcohol'].mean().reset_index()
# sns.barplot(data=grouped, x='quality', y='alcohol', hue='quality', errorbar=None)
# plt.title('와인 품질별 평균 알콜')
#상관관계랑 corr도 구해보기 선그래프로 표현하는게 더 나을듯 결론 와인 품질과 와인 농도는 상관관계가 있다.
# grouped_corr = grouped.corr(numeric_only=True)
# print(grouped_corr)
plt.boxplot
데이터 타입: fixed acidity float64
volatile acidity float64
citric acid float64
residual sugar float64
chlorides float64
free sulfur dioxide float64
total sulfur dioxide float64
density float64
pH float64
sulphates float64
alcohol float64
quality int64
dtype: object
전체 중복 행의 개수: 240개
0 0~4(나쁜와인)
1 0~4(나쁜와인)
2 0~4(나쁜와인)
3 5~9(좋은와인)
4 0~4(나쁜와인)
...
1594 0~4(나쁜와인)
1595 5~9(좋은와인)
1596 5~9(좋은와인)
1597 0~4(나쁜와인)
1598 5~9(좋은와인)
