In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
from matplotlib import font_manager, rc
font_path = "C:\Windows\Fonts\gulim.ttc"
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
In [10]:
wine = pd.read_csv('./wine.csv')
In [11]:
wine.head()
Out[11]:
Unnamed: 0 | Unnamed: 0.1 | country | description | designation | points | price | province | region_1 | region_2 | taster_name | taster_twitter_handle | title | variety | winery | year | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | Italy | Aromas include tropical fruit, broom, brimston... | Vulkà Bianco | 87 | NaN | Sicily & Sardinia | Etna | NaN | Kerin O’Keefe | @kerinokeefe | Nicosia 2013 Vulkà Bianco (Etna) | White Blend | Nicosia | 2013 |
1 | 1 | 1 | Portugal | This is ripe and fruity, a wine that is smooth... | Avidagos | 87 | 15.0 | Douro | NaN | NaN | Roger Voss | @vossroger | Quinta dos Avidagos 2011 Avidagos Red (Douro) | Portuguese Red | Quinta dos Avidagos | 2011 |
2 | 2 | 2 | US | Tart and snappy, the flavors of lime flesh and... | NaN | 87 | 14.0 | Oregon | Willamette Valley | Willamette Valley | Paul Gregutt | @paulgwine | Rainstorm 2013 Pinot Gris (Willamette Valley) | Pinot Gris | Rainstorm | 2013 |
3 | 3 | 3 | US | Pineapple rind, lemon pith and orange blossom ... | Reserve Late Harvest | 87 | 13.0 | Michigan | Lake Michigan Shore | NaN | Alexander Peartree | NaN | St. Julian 2013 Reserve Late Harvest Riesling ... | Riesling | St. Julian | 2013 |
4 | 4 | 4 | US | Much like the regular bottling from 2012, this... | Vintner's Reserve Wild Child Block | 87 | 65.0 | Oregon | Willamette Valley | Willamette Valley | Paul Gregutt | @paulgwine | Sweet Cheeks 2012 Vintner's Reserve Wild Child... | Pinot Noir | Sweet Cheeks | 2012 |
전에 만든 year만 따로 빼낸 wine csv파일을 다운로드 하였다.
선형 회귀를 위해 sklearn 모듈을 import한다.
전 편에서 wine의 vintage가 오래될 수록 가격이 보다 높아보이는 경향이 느껴졌다. 이를 선형 회귀를 통해 실제로도 그러한지 알아보자
In [13]:
from sklearn.linear_model import LinearRegression as LR
NV의 경우 vintage유무를 따질 수 없으므로 제외하자.
In [26]:
df = wine[wine['year']!='NV']
In [36]:
df[df.year == 'NV'].count()
Out[36]:
Unnamed: 0 0 Unnamed: 0.1 0 country 0 description 0 designation 0 points 0 price 0 province 0 region_1 0 region_2 0 taster_name 0 taster_twitter_handle 0 title 0 variety 0 winery 0 year 0 dtype: int64
In [47]:
df=df.sort_values('year')
In [48]:
line_fitter = LR()
X = df["year"]
y = df["price"]
In [49]:
plt.plot(X,y,'o')
plt.xticks(rotation = 90, size=10)
plt.show()
이제 데이터를 fit해보자
line_fitter.fit(X.values.reshape(-1,1),y) 를 진행했더니, 결측치 에러가 발생했다.
In [91]:
df2 = df[['price', 'year']]
#두개만 집중해서 보기 위해 price, year를 따로 dataFrame으로 만듬
In [62]:
df2.dropna(inplace=True)
C:\Users\se99a\anaconda3\lib\site-packages\pandas\util\_decorators.py:311: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy return func(*args, **kwargs)
dropna를 사용해서 가격지표의 결측치를 제거했다.
In [65]:
X = df2["year"]
y = df2["price"]
In [66]:
line_fitter.fit(X.values.reshape(-1,1),y)
Out[66]:
LinearRegression()
In [71]:
line_fitter.coef_#기울기
Out[71]:
array([-0.42751435])
In [73]:
line_fitter.intercept_ #절편
Out[73]:
895.0574439192084
In [84]:
line_fitter.predict([[1850]])#1850년에 만든 와인가격의 예측값
Out[84]:
array([104.15589175])
In [85]:
line_fitter.predict([[2020]])#2020년에 만든 와인가격의 예측값
Out[85]:
array([31.47845182])
In [95]:
plt.plot(X,line_fitter.predict(X.values.reshape(-1,1)))
plt.xticks(rotation = 90)
plt.title('연도에 따른 와인가격 선형회귀 그래프')
plt.xlabel('왼쪽으로 갈 수록 1800년대, 오른쪽으로 갈 수록 현재', size = 15)
plt.show()
만약 기원 후 1000년에 누가 와인을 만들었다면 그 가격이 얼마일까?
In [89]:
line_fitter.predict([[1000]])
Out[89]:
array([467.54309139])
467달러면 한 50만원쯤 한다.¶
생각보다 싸서 너무 실망스럽다.¶
와인은 투자수단으로는 부적절한 듯 하다. 그냥 싼 와인 사서 먹자.
'데이터 시각화 분석' 카테고리의 다른 글
취미로 하는 데이터 분석 시리즈06(웹사이트 크롤링 어플리케이션) (0) | 2022.03.05 |
---|---|
취미로 하는 데이터 분석 시리즈05(이미지 분류/Dacon 공모전 CNN 클론 코딩) (0) | 2022.03.04 |
취미로 하는 데이터 분석 시리즈04-1(와인 가격 데이터 분석) (0) | 2022.02.28 |
취미로 하는 데이터 분석 시리즈03(Instagram 팔로워 수 데이터 분석) (0) | 2022.02.23 |
취미로 하는 데이터 분석 시리즈02(Covid 확진자 데이터 분석) (0) | 2022.02.22 |