<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ddaddo_data.log</title>
        <link>https://velog.io/</link>
        <description>따또의 DA 벨로그</description>
        <lastBuildDate>Wed, 11 Aug 2021 08:28:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ddaddo_data.log</title>
            <url>https://images.velog.io/images/ddaddo_data/profile/766daf5e-6246-4db9-83cf-9b63e48a192a/KakaoTalk_20210715_134750131.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ddaddo_data.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ddaddo_data" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[머신러닝의 개념]]></title>
            <link>https://velog.io/@ddaddo_data/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@ddaddo_data/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Wed, 11 Aug 2021 08:28:05 GMT</pubDate>
            <description><![CDATA[<h3 id="1-머신러닝의-개념">1) 머신러닝의 개념</h3>
<ul>
<li><p>애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법을 통칭</p>
</li>
<li><p>데이터를 기반으로 통계적인 신뢰도를 강화하고 예측 오류를 최소화하기 위한 다양한 수학적 기법을 적용해 데이터 내의 패턴을 스스로 인지하고 신뢰도 있는 예측 결과를 도출해 냄</p>
</li>
<li><p>머신러닝의 가장 큰 단점은 데이터에 매우 의존적이라는 점</p>
</li>
</ul>
<h3 id="2-머신러닝의-분류">2) 머신러닝의 분류</h3>
<h4 id="1-지도학습">1. 지도학습</h4>
<p>분류, 회귀, 추천 시스템, 시각/음성감지/인지, 텍스트분석, NLP</p>
<h4 id="2-비지도학습">2. 비지도학습</h4>
<p>클러스터링, 차원 축소, 강화학습</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[31. 군집, k-Means]]></title>
            <link>https://velog.io/@ddaddo_data/31.-%EA%B5%B0%EC%A7%91-k-Means</link>
            <guid>https://velog.io/@ddaddo_data/31.-%EA%B5%B0%EC%A7%91-k-Means</guid>
            <pubDate>Sat, 31 Jul 2021 04:25:18 GMT</pubDate>
            <description><![CDATA[<h3 id="1-k-means">1) k-Means</h3>
<ul>
<li>데이터 간의 유사성을 측정하는 기준으로 각 클러스터의 중심까지의 거리를 이용</li>
<li>벡터 공간에 위치한 어떤 데이터에 대하여 k개의 클러스터가 주어졌을 때 클러스터의 중심까지 거리가 가장 가까운 클러스터로 해당 데이터 할당</li>
<li>k값에 따라 모형의 성능이 달라짐</li>
<li>일반적으로 k가 클수록 모형의 정확도가 개선되지만 k값이 너무 커지면 분석의 효과가 사라짐<h3 id="2-데이터-전처리">2) 데이터 전처리</h3>
<pre><code>import pandas as pd
import matplotlib.pyplot as plt
</code></pre></li>
</ul>
<p>uci_path = &#39;<a href="https://archive.ics.uci.edu/ml/machine-learning-databases/00292/Wholesale%20customers%20data.csv&#39;">https://archive.ics.uci.edu/ml/machine-learning-databases/00292/Wholesale%20customers%20data.csv&#39;</a>
df = pd.read_csv(uci_path, header=0)</p>
<p>X = df.iloc[:,:]</p>
<p>from sklearn import preprocessing</p>
<p>X = preprocessing.StandardScaler().fit(X).transform(X)</p>
<h1 id="정규화">정규화</h1>
<pre><code>### 3) 모델 학습 및 예측</code></pre><p>from sklearn import cluster</p>
<p>kmeans = cluster.KMeans(init = &#39;k-means++&#39;, n_clusters = 5, n_init = 10)</p>
<h1 id="5개의-클러스터-생성">5개의 클러스터 생성</h1>
<p>kmeans.fit(X)</p>
<h1 id="모델-학습">모델 학습</h1>
<p>cluster_label = kmeans.labels_</p>
<h1 id="모델-예측">모델 예측</h1>
<p>df[&#39;Cluster&#39;] = cluster_label
df.head()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/9f7ca750-0c09-4115-8f73-06636c7ab11b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-31%20123841.jpg)
### 4) 시각화</code></pre><p>df.plot(kind = &#39;scatter&#39;, x =&#39;Grocery&#39;, y= &#39;Frozen&#39;, c =&#39;Cluster&#39;, cmap =&#39;Set1&#39;, colorbar = False, figsize =  (10,10))</p>
<h1 id="x축이-grocery-y축이-frozen">x축이 Grocery, y축이 Frozen</h1>
<h1 id="산점도-방식으로-표현">산점도 방식으로 표현</h1>
<h1 id="colorbar-없이-출력">colorbar 없이 출력</h1>
<p>df.plot(kind = &#39;scatter&#39;, x = &#39;Milk&#39;, y = &#39;Delicassen&#39;, c = &#39;Cluster&#39;, cmap = &#39;Set1&#39;, colorbar = True, figsize = (10,10))</p>
<h1 id="x축이-milk-y축이-delicassen">x축이 Milk, y축이 Delicassen</h1>
<h1 id="산점도-방식으로-표현-1">산점도 방식으로 표현</h1>
<h1 id="colorbar-출력">colorbar 출력</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/2bb8a0f0-7943-4c89-b278-bcc0fafd6cf1/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-31%20124352.jpg)
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[30. 분류]]></title>
            <link>https://velog.io/@ddaddo_data/30.-%EB%B6%84%EB%A5%98</link>
            <guid>https://velog.io/@ddaddo_data/30.-%EB%B6%84%EB%A5%98</guid>
            <pubDate>Fri, 30 Jul 2021 13:47:29 GMT</pubDate>
            <description><![CDATA[<h3 id="1-knn">1) KNN</h3>
<ul>
<li>기존 데이터 중에서 가장 속성이 비슷한 k개의 이웃을 찾음</li>
<li>가까운 이웃들이 가지고 있는 목표 값과 같은 값으로 분류하여 예측<h4 id="1-1-데이터-전처리">1-1. 데이터 전처리</h4>
<pre><code>import pandas as pd
import seaborn as sns
</code></pre></li>
</ul>
<p>df = sns.load_dataset(&#39;titanic&#39;)
pd.set_option(&#39;display.max_columns&#39;, 15)</p>
<p>rdf = df.drop([&#39;deck&#39;, &#39;embark_town&#39;], axis = 1)
rdf = rdf.dropna(subset = [&#39;age&#39;], how = &#39;any&#39;, axis = 0)</p>
<h1 id="age-열에-나이-데이터가-없는-모든-행-삭제">age 열에 나이 데이터가 없는 모든 행 삭제</h1>
<p>most_freq = rdf[&#39;embarked&#39;].value_counts(dropna=True).idxmax()</p>
<h1 id="embarked-열의-nan-값을-승선도시-중에서-가장-많이-출현한-값-도출">embarked 열의 NaN 값을 승선도시 중에서 가장 많이 출현한 값 도출</h1>
<p>rdf[&#39;embarked&#39;].fillna(most_freq, inplace = True)</p>
<h1 id="가장-많이-출현한-값인-s로-nan값을-대체">가장 많이 출현한 값인 s로 NaN값을 대체</h1>
<p>ndf = rdf[[&#39;survived&#39;, &#39;pclass&#39;, &#39;sex&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;embarked&#39;]]</p>
<p>onehot_sex = pd.get_dummies(ndf[&#39;sex&#39;])</p>
<h1 id="sex-열-데이터인-female와-male을-더미-변수-열로-만들기">sex 열 데이터인 female와 male을 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_sex], axis = 1)</p>
<p>onehot_embarked = pd.get_dummies(ndf[&#39;embarked&#39;], prefix = &#39;town&#39;)</p>
<h1 id="열-이름에-접두어-town을-추가">열 이름에 접두어 &#39;town&#39;을 추가</h1>
<h1 id="embarked-열-데이터를-더미-변수-열로-만들기">embarked 열 데이터를 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_embarked], axis = 1)</p>
<p>ndf.drop([&#39;sex&#39;, &#39;embarked&#39;], axis = 1, inplace = True)</p>
<h1 id="원래-존재했던-sex와-embarked-열을-제거">원래 존재했던 sex와 embarked 열을 제거</h1>
<pre><code>#### 1-2. 훈련/검증 데이터 분할</code></pre><p>X = ndf[[&#39;pclass&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;female&#39;, &#39;male&#39;]]
y = ndf[&#39;survived&#39;]</p>
<p>from sklearn import preprocessing</p>
<p>X = preprocessing.StandardScaler().fit(X).transform(X)</p>
<p>from sklearn.model_selection import train_test_split</p>
<p>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<pre><code>#### 1-3. 모델 학습 및 예측, 성능 측정</code></pre><p>from sklearn.neighbors import KNeighborsClassifier</p>
<p>knn = KNeighborsClassifier(n_neighbors=5)</p>
<p>knn.fit(X_train, y_train)</p>
<h1 id="모델-학습">모델 학습</h1>
<p>y_hat = knn.predict(X_test)</p>
<h1 id="모델-예측">모델 예측</h1>
<p>from sklearn import metrics</p>
<p>knn_report = metrics.classification_report(y_test, y_hat)</p>
<h1 id="모델-성능-평가-지표-확인-가능">모델 성능 평가 지표 확인 가능</h1>
<p>print(knn_report)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/7aa19b6d-936c-437d-8ec3-f4d46253028b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-30%20222824.jpg)
### 2) SVM
* 벡터 공간에 위치한 훈련 데이터의 좌표와 각 데이터가 어떤 분류값을 가져야 하는지 정답을 입력 받아서 학습함
#### 2-1. 데이터 전처리</code></pre><p>import pandas as pd
import seaborn as sns</p>
<p>df = sns.load_dataset(&#39;titanic&#39;)
pd.set_option(&#39;display.max_columns&#39;, 15)</p>
<p>rdf = df.drop([&#39;deck&#39;, &#39;embark_town&#39;], axis = 1)
rdf = rdf.dropna(subset = [&#39;age&#39;], how = &#39;any&#39;, axis = 0)</p>
<h1 id="age-열에-나이-데이터가-없는-모든-행-삭제-1">age 열에 나이 데이터가 없는 모든 행 삭제</h1>
<p>most_freq = rdf[&#39;embarked&#39;].value_counts(dropna=True).idxmax()</p>
<h1 id="embarked-열의-nan-값을-승선도시-중에서-가장-많이-출현한-값-도출-1">embarked 열의 NaN 값을 승선도시 중에서 가장 많이 출현한 값 도출</h1>
<p>rdf[&#39;embarked&#39;].fillna(most_freq, inplace = True)</p>
<h1 id="가장-많이-출현한-값인-s로-nan값을-대체-1">가장 많이 출현한 값인 s로 NaN값을 대체</h1>
<p>ndf = rdf[[&#39;survived&#39;, &#39;pclass&#39;, &#39;sex&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;embarked&#39;]]</p>
<p>onehot_sex = pd.get_dummies(ndf[&#39;sex&#39;])</p>
<h1 id="sex-열-데이터인-female와-male을-더미-변수-열로-만들기-1">sex 열 데이터인 female와 male을 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_sex], axis = 1)</p>
<p>onehot_embarked = pd.get_dummies(ndf[&#39;embarked&#39;], prefix = &#39;town&#39;)</p>
<h1 id="열-이름에-접두어-town을-추가-1">열 이름에 접두어 &#39;town&#39;을 추가</h1>
<h1 id="embarked-열-데이터를-더미-변수-열로-만들기-1">embarked 열 데이터를 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_embarked], axis = 1)</p>
<p>ndf.drop([&#39;sex&#39;, &#39;embarked&#39;], axis = 1, inplace = True)</p>
<h1 id="원래-존재했던-sex와-embarked-열을-제거-1">원래 존재했던 sex와 embarked 열을 제거</h1>
<pre><code>#### 2-2. 훈련/검증 데이터 분할</code></pre><p>X = ndf[[&#39;pclass&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;female&#39;, &#39;male&#39;, &#39;town_C&#39;, &#39;town_Q&#39;, &#39;town_S&#39;]]
y = ndf[&#39;survived&#39;]</p>
<p>from sklearn import preprocessing</p>
<p>X = preprocessing.StandardScaler().fit(X).transform(X)</p>
<p>from sklearn.model_selection import train_test_split</p>
<p>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<pre><code>#### 2-3. 모델 학습 및 예측, 성능 측정</code></pre><p>from sklearn import svm</p>
<p>svm_model = svm.SVC(kernel = &#39;rbf&#39;)</p>
<p>svm_model.fit(X_train, y_train)</p>
<h1 id="모델-학습-1">모델 학습</h1>
<p>y_hat = svm_model.predict(X_test)</p>
<h1 id="모델-예측-1">모델 예측</h1>
<p>from sklearn import metrics</p>
<p>svm_matrix = metrics.confusion_matrix(y_test, y_hat)</p>
<h1 id="모형-성능-평가-지표-확인-가능-confusion-matrix">모형 성능 평가 지표 확인 가능 (confusion matrix)</h1>
<p>print(svm_matrix)
print(&#39;\n&#39;)</p>
<p>svm_report = metrics.classification_report(y_test, y_hat)</p>
<h1 id="모델-성능-평가-지표-확인-가능-1">모델 성능 평가 지표 확인 가능</h1>
<p>print(svm_report)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/5c124e1a-a122-4403-bfdb-598bf3906890/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-30%20222836.jpg)
### 3) Decision Tree
* 트리 구조 사용
* 각 분기점(node)에는 분석 대상의 속성들이 위치
* 각 분기점마다 목표 값을 가장 잘 분류할 수 있는 속성을 찾아서 배치
* 해당 속성이 갖는 값을 이용하여 새로운 가지를 만드는 구조
* Entropy가 일정 수준 이하로 낮아질 때까지 앞의 과정 반복
#### 3-1. 데이터 전처리</code></pre><p>import pandas as pd
import seaborn as sns</p>
<p>df = sns.load_dataset(&#39;titanic&#39;)
pd.set_option(&#39;display.max_columns&#39;, 15)</p>
<p>rdf = df.drop([&#39;deck&#39;, &#39;embark_town&#39;], axis = 1)
rdf = rdf.dropna(subset = [&#39;age&#39;], how = &#39;any&#39;, axis = 0)</p>
<h1 id="age-열에-나이-데이터가-없는-모든-행-삭제-2">age 열에 나이 데이터가 없는 모든 행 삭제</h1>
<p>most_freq = rdf[&#39;embarked&#39;].value_counts(dropna=True).idxmax()</p>
<h1 id="embarked-열의-nan-값을-승선도시-중에서-가장-많이-출현한-값-도출-2">embarked 열의 NaN 값을 승선도시 중에서 가장 많이 출현한 값 도출</h1>
<p>rdf[&#39;embarked&#39;].fillna(most_freq, inplace = True)</p>
<h1 id="가장-많이-출현한-값인-s로-nan값을-대체-2">가장 많이 출현한 값인 s로 NaN값을 대체</h1>
<p>ndf = rdf[[&#39;survived&#39;, &#39;pclass&#39;, &#39;sex&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;embarked&#39;]]</p>
<p>onehot_sex = pd.get_dummies(ndf[&#39;sex&#39;])</p>
<h1 id="sex-열-데이터인-female와-male을-더미-변수-열로-만들기-2">sex 열 데이터인 female와 male을 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_sex], axis = 1)</p>
<p>onehot_embarked = pd.get_dummies(ndf[&#39;embarked&#39;], prefix = &#39;town&#39;)</p>
<h1 id="열-이름에-접두어-town을-추가-2">열 이름에 접두어 &#39;town&#39;을 추가</h1>
<h1 id="embarked-열-데이터를-더미-변수-열로-만들기-2">embarked 열 데이터를 더미 변수 열로 만들기</h1>
<p>ndf = pd.concat([ndf, onehot_embarked], axis = 1)</p>
<p>ndf.drop([&#39;sex&#39;, &#39;embarked&#39;], axis = 1, inplace = True)</p>
<h1 id="원래-존재했던-sex와-embarked-열을-제거-2">원래 존재했던 sex와 embarked 열을 제거</h1>
<pre><code>#### 3-2. 훈련/검증 데이터 분할</code></pre><p>X = ndf[[&#39;pclass&#39;, &#39;age&#39;, &#39;sibsp&#39;, &#39;parch&#39;, &#39;female&#39;, &#39;male&#39;]]
y = ndf[&#39;survived&#39;]</p>
<p>from sklearn import preprocessing</p>
<p>X = preprocessing.StandardScaler().fit(X).transform(X)</p>
<p>from sklearn.model_selection import train_test_split</p>
<p>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<pre><code>#### 3-3. 모델 학습 및 예측, 성능 측정</code></pre><p>from sklearn import tree</p>
<p>tree_model = tree.DecisionTreeClassifier(criterion=&#39;entropy&#39;, max_depth = 5)</p>
<p>tree_model.fit(X_train, y_train)</p>
<h1 id="모델-학습-2">모델 학습</h1>
<p>y_hat = tree_model.predict(X_test)</p>
<h1 id="모델-예측-2">모델 예측</h1>
<p>from sklearn import metrics</p>
<p>tree_report = metrics.classification_report(y_test, y_hat)</p>
<h1 id="모델-성능-평가-지표-확인-가능-2">모델 성능 평가 지표 확인 가능</h1>
<p>print(tree_report)</p>
<p>```
<img src="https://images.velog.io/images/ddaddo_data/post/1db1eb48-6a36-46e1-b0a4-ed00768720ea/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-30%20224620.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[29. 회귀분석]]></title>
            <link>https://velog.io/@ddaddo_data/29.-%ED%9A%8C%EA%B7%80%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@ddaddo_data/29.-%ED%9A%8C%EA%B7%80%EB%B6%84%EC%84%9D</guid>
            <pubDate>Thu, 29 Jul 2021 08:22:38 GMT</pubDate>
            <description><![CDATA[<h3 id="1-단순회귀분석">1) 단순회귀분석</h3>
<ul>
<li>두 변수 사이에 일대일로 대응되는 확률적, 통계적 상관성을 찾는 알고리즘</li>
<li>대표적인 지도학습 유형<pre><code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
</code></pre></li>
</ul>
<p>df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)
df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;, &#39;acceleration&#39;, 
             &#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]</p>
<p>pd.set_option(&#39;display.max_columns&#39;, 10)</p>
<p>df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace=True)
df.dropna(subset=[&#39;horsepower&#39;], axis = 0, inplace = True)
df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)</p>
<p>ndf = df[[&#39;mpg&#39;, &#39;cylinders&#39;, &#39;horsepower&#39;, &#39;weight&#39;]]
ndf.plot(kind = &#39;scatter&#39;, x = &#39;weight&#39;, y = &#39;mpg&#39;, c = &#39;coral&#39;, s = 10, figsize = (10,5))</p>
<h1 id="산점도-그리기">산점도 그리기</h1>
<h1 id="x축은-weight-y축은-mpg-산점도의-색은-코랄색-점의-크기는-10-그래프-사이즈는-105">x축은 weight, y축은 mpg, 산점도의 색은 코랄색, 점의 크기는 10, 그래프 사이즈는 (10,5)</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/41b9f374-d735-45b0-9cb4-5b6b6cce0722/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20112948.jpg)</code></pre><p>fig = plt.figure(figsize = (10,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)</p>
<p>sns.regplot(x = &#39;weight&#39;, y = &#39;mpg&#39;, data = ndf, ax = ax1)</p>
<h1 id="회귀선-표시">회귀선 표시</h1>
<h1 id="regplot-함수를-이용하여-두-변수에-대한-산점도-그리기-가능">regplot() 함수를 이용하여 두 변수에 대한 산점도 그리기 가능</h1>
<p>sns.regplot(x = &#39;weight&#39;, y = &#39;mpg&#39;, data = ndf, ax = ax2, fit_reg = False)</p>
<h1 id="회귀선-미표시">회귀선 미표시</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/1e86c8b1-0b6c-4319-9eba-78deceb1f434/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20113234.jpg)</code></pre><p>sns.jointplot(x = &#39;weight&#39;, y = &#39;mpg&#39;, data = ndf)</p>
<h1 id="산점도-히스토그램">산점도, 히스토그램</h1>
<h1 id="회귀선-없음">회귀선 없음</h1>
<p>sns.jointplot(x = &#39;weight&#39;, y = &#39;mpg&#39;, kind = &#39;reg&#39;, data = ndf)</p>
<h1 id="산점도-히스토그램-1">산점도, 히스토그램</h1>
<h1 id="회귀선-있음">회귀선 있음</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/41f3245f-7ab4-448a-9ddf-7b86b32856f8/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20114805.jpg)</code></pre><p>grid_ndf = sns.pairplot(ndf)</p>
<h1 id="ndf에-속한-4가지-변수에-대한-모든-경우의-수-그리기">ndf에 속한 4가지 변수에 대한 모든 경우의 수 그리기</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/30569903-fb86-4bab-9f68-0d14d9a99d86/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20115013.jpg)</code></pre><p>X = ndf[[&#39;weight&#39;]]</p>
<h1 id="독립변수-weight">독립변수 weight</h1>
<p>y = ndf[&#39;mpg&#39;]</p>
<h1 id="종속변수-mpg">종속변수 mpg</h1>
<p>from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression</p>
<p>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<h1 id="전체-데이터를-test--train--3--7로-나누기">전체 데이터를 test : train = 3 : 7로 나누기</h1>
<p>lr = LinearRegression()</p>
<h1 id="단순회귀분석-모형-객체-생성">단순회귀분석 모형 객체 생성</h1>
<p>lr.fit(X_train, y_train)</p>
<h1 id="train-data를-가지고-모형-학습">train data를 가지고 모형 학습</h1>
<p>print(&#39;기울기 : &#39;, lr.coef_)
print(&#39;y 절편 : &#39;, lr.intercept_)</p>
<p>y_hat = lr.predict(X)</p>
<h1 id="x를-통해-예측한-값을-y_hat에-저장">X를 통해 예측한 값을 y_hat에 저장</h1>
<p>plt.figure(figsize = (10, 5))
ax1 = sns.distplot(y, hist = False, label = &quot;y&quot;)</p>
<h1 id="실제-y값">실제 y값</h1>
<p>ax2 = sns.distplot(y_hat, hist = False, label =&quot;y_hat&quot;, ax = ax1)</p>
<h1 id="예측한-y값">예측한 y값</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/fa602539-7447-4879-9be1-18d282e54091/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20115912.jpg)
![](https://images.velog.io/images/ddaddo_data/post/1bb2d4e4-b5ef-4cf2-ae7f-fdfa1787734f/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20115924.jpg)
### 2) 다항회귀분석
* 다항 함수를 사용하면 보다 복잡한 곡선 형태의 회귀선 표현 가능
* 2차함수 이상의 다항함수를 사용</code></pre><p>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns</p>
<p>df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)
df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;, &#39;acceleration&#39;, 
             &#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]</p>
<p>pd.set_option(&#39;display.max_columns&#39;, 10)</p>
<p>df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace=True)
df.dropna(subset=[&#39;horsepower&#39;], axis = 0, inplace = True)
df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)</p>
<p>ndf = df[[&#39;mpg&#39;, &#39;cylinders&#39;, &#39;horsepower&#39;, &#39;weight&#39;]]</p>
<p>X = ndf[[&#39;weight&#39;]]</p>
<h1 id="독립변수-weight-1">독립변수 weight</h1>
<p>y = ndf[&#39;mpg&#39;]</p>
<h1 id="종속변수-mpg-1">종속변수 mpg</h1>
<p>from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<h1 id="전체-데이터를-test--train--3--7로-나누기-1">전체 데이터를 test : train = 3 : 7로 나누기</h1>
<p>from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures</p>
<p>poly = PolynomialFeatures(degree = 2)</p>
<h1 id="2차항-적용">2차항 적용</h1>
<p>X_train_poly = poly.fit_transform(X_train)</p>
<h1 id="x_train-데이터를-2차항으로-변환">X_train 데이터를 2차항으로 변환</h1>
<p>pr = LinearRegression()
pr.fit(X_train_poly, y_train)</p>
<p>X_test_poly = poly.fit_transform(X_test)
y_hat_test = pr.predict(X_test_poly)</p>
<p>fig = plt.figure(figsize = (10, 5))
ax = fig.add_subplot(1,1,1)</p>
<p>ax.plot(X_train, y_train, &#39;o&#39;, label = &#39;Train Data&#39;)</p>
<h1 id="train-데이터-값을-o으로-표현">train 데이터 값을 o으로 표현</h1>
<p>ax.plot(X_test, y_hat_test, &#39;r+&#39;, label = &#39;Predicted Value&#39;)</p>
<h1 id="예측한-값을--로-표현">예측한 값을 + 로 표현</h1>
<p>ax.legend(loc = &#39;best&#39;)</p>
<p>plt.xlabel(&#39;weight&#39;)
plt.ylabel(&#39;mpg&#39;)
plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/001dc4e2-79f0-4f1a-acc5-9db00c0c96ae/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20125237.jpg)</code></pre><p>X_poly = poly.fit_transform(X)
y_hat = pr.predict(X_poly)</p>
<p>plt.figure(figsize = (10,5))
ax1 = sns.distplot(y, hist = False, label = &quot;y&quot;)</p>
<h1 id="실제-y값-1">실제 y값</h1>
<p>ax2 = sns.distplot(y_hat, hist = False, label = &quot;y_hat&quot;, ax = ax1)</p>
<h1 id="예측한-y값-1">예측한 y값</h1>
<p>plt.show()</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/780368ed-b3ba-43cd-a53b-43e8d36537ac/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20125707.jpg)
### 3) 다중회귀분석</code></pre><p>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns</p>
<p>df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)
df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;, &#39;acceleration&#39;, 
             &#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]</p>
<p>pd.set_option(&#39;display.max_columns&#39;, 10)</p>
<p>df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace=True)
df.dropna(subset=[&#39;horsepower&#39;], axis = 0, inplace = True)
df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)</p>
<p>ndf = df[[&#39;mpg&#39;, &#39;cylinders&#39;, &#39;horsepower&#39;, &#39;weight&#39;]]</p>
<p>X = ndf[[&#39;cylinders&#39;, &#39;horsepower&#39;, &#39;weight&#39;]]</p>
<h1 id="독립변수-cylinders-horsepower-weight">독립변수 cylinders, horsepower, weight</h1>
<p>y = ndf[&#39;mpg&#39;]</p>
<h1 id="종속변수-mpg-2">종속변수 mpg</h1>
<p>from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)</p>
<h1 id="전체-데이터를-test--train--3--7로-나누기-2">전체 데이터를 test : train = 3 : 7로 나누기</h1>
<p>from sklearn.linear_model import LinearRegression</p>
<p>lr = LinearRegression()</p>
<p>lr.fit(X_train, y_train)</p>
<p>print(&#39;X 변수의 계수 a : &#39;, lr.coef_)
print(&#39;\n&#39;)
print(&#39;상수항 b : &#39;, lr.intercept_)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/459dab80-ac57-4f3b-9075-ad8d40957eaa/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20171659.jpg)</code></pre><p>y_hat = lr.predict(X_test)</p>
<p>plt.figure(figsize = (10,5))</p>
<p>ax1 = sns.distplot(y_test, hist= False, label = &quot;y_test&quot;)</p>
<h1 id="실제-y값-2">실제 y값</h1>
<p>ax2 = sns.distplot(y_hat, hist=False, label = &quot;y_hat&quot;, ax = ax1)</p>
<h1 id="예측한-y값-2">예측한 y값</h1>
<p>plt.show()</p>
<p>```
<img src="https://images.velog.io/images/ddaddo_data/post/8562c3e9-20ad-4f63-91bb-5ebe26dee58b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-29%20171939.jpg" alt=""></p>
<ul>
<li>단순회귀분석 -&gt; 다항회귀분석 -&gt; 다중회귀분석으로 갈수록 데이터가 어느 한쪽으로 편향되는 경향은 그대로 남아있지만 그래프의 첨도가 약간 누그러짐</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[28. 머신러닝 개요]]></title>
            <link>https://velog.io/@ddaddo_data/28.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@ddaddo_data/28.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Tue, 27 Jul 2021 01:14:25 GMT</pubDate>
            <description><![CDATA[<h3 id="1-머신러닝이란">1) 머신러닝이란?</h3>
<p>기계 스스로 데이터를 학습하여 서로 다른 변수 간의 관계를 찾아 나가는 과정</p>
<h3 id="2-지도-학습-vs-비지도-학습">2) 지도 학습 vs 비지도 학습</h3>
<ul>
<li><p>지도 학습 : 정답 데이터를 다른 데이터와 함께 컴퓨터 알고리즘에 입력하는 방식
ex) 회귀분석, 분류 모형</p>
</li>
<li><p>비지도 학습 : 정답 데이터없이 컴퓨터 알고리즘 스스로 데이터로부터 숨은 패턴을 찾아내는 방식
ex) 군집 분석</p>
</li>
</ul>
<h3 id="3-머신러닝-프로세스">3) 머신러닝 프로세스</h3>
<ol>
<li>데이터 정리</li>
<li>데이터 분리 (train data와 test data로 분리)</li>
<li>알고리즘 준비</li>
<li>모형 학습 (train data 이용)</li>
<li>예측 (test data 이용)</li>
<li>모형 평가</li>
<li>모형 활용 </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[27. 피벗]]></title>
            <link>https://velog.io/@ddaddo_data/27.-%ED%94%BC%EB%B2%97</link>
            <guid>https://velog.io/@ddaddo_data/27.-%ED%94%BC%EB%B2%97</guid>
            <pubDate>Tue, 27 Jul 2021 01:07:08 GMT</pubDate>
            <description><![CDATA[<h3 id="1-피벗테이블">1) 피벗테이블</h3>
<pre><code>import pandas as pd
import seaborn as sns

pd.set_option(&#39;display.max_columns&#39;, 10)
pd.set_option(&#39;display.max_colwidth&#39;, 20)

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;sex&#39;, &#39;class&#39;, &#39;fare&#39;, &#39;survived&#39;]]

pdf1 = pd.pivot_table(df,
                     index = &#39;class&#39;, # 행 위치에 들어갈 열
                     columns = &#39;sex&#39;, # 열 위치에 들어갈 열
                     values = &#39;age&#39;, # 데이터로 사용할 열
                     aggfunc = &#39;mean&#39;) # 데이터 집계 함수

# class 와 sex 별 age 평균 계산

print(pdf1.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/cbb25ad6-cf87-471b-ab47-b9b900cedafe/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-27%20095203.jpg" alt=""></p>
<pre><code>pdf2 = pd.pivot_table(df,
                     index = &#39;class&#39;, # 행 위치에 들어갈 열
                     columns = &#39;sex&#39;, # 열 위치에 들어갈 열
                     values = &#39;survived&#39;, # 데이터로 사용할 열
                     aggfunc = [&#39;mean&#39;, &#39;sum&#39;]) # 데이터 집계 함수

# class 와 sex 별 survived 평균과 합 계산

print(pdf2.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/cd9f37f6-8173-49e4-9600-c6d6c2a201d1/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-27%20095340.jpg" alt=""></p>
<pre><code>pdf3 = pd.pivot_table(df,
                     index = [&#39;class&#39;, &#39;sex&#39;], # 행 위치에 들어갈 열
                     columns = &#39;survived&#39;, # 열 위치에 들어갈 열
                     values = [&#39;age&#39;, &#39;fare&#39;], # 데이터로 사용할 열
                     aggfunc = [&#39;mean&#39;, &#39;max&#39;]) # 데이터 집계 함수

# class 와 sex, survived 별 age, fare 평균과 최대값계산

print(pdf3.xs(&#39;First&#39;))
# First class만 출력</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/9304e3be-6871-45ef-812f-d4cab0976cae/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-27%20095631.jpg" alt=""></p>
<pre><code>print(pdf3.xs((&#39;First&#39;, &#39;female&#39;)))
# First class이고 female인 데이터에 해당하는 결과만 출력</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/69f4dfa3-2b48-41c9-8991-2bf3017e9674/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-27%20095815.jpg" alt=""></p>
<pre><code>print(pdf3.xs(&#39;male&#39;, level = &#39;sex&#39;))
# 행 인덱스의 sex 레벨이 male인 행 선택

print(&#39;\n&#39;)

print(pdf3.xs((&#39;Second&#39;, &#39;male&#39;), level = [0, &#39;sex&#39;]))
# class가 Second이고 sex가 male인 행 선택

print(&#39;\n&#39;)

print(pdf3.xs(&#39;mean&#39;, axis = 1))
# 열 인덱스가 mean인 열을 선택 (평균값이 계산된 열 선택)

print(&#39;\n&#39;)

print(pdf3.xs((&#39;mean&#39;, &#39;age&#39;), axis = 1))
# 열 인덱스가 mean과 age인 열을 선택 (나이의 평균값 반환)

print(&#39;\n&#39;)

print(pdf3.xs(1, level = &#39;survived&#39;, axis = 1))
# survived 열이 1 인 것만 선택

print(&#39;\n&#39;)

print(pdf3.xs((&#39;max&#39;, &#39;fare&#39;, 0), level = [0,1,2], axis = 1))
# max, fare, survived열이 0인 것만 선택</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/8d2ad762-4b43-498a-81d7-801c11a6819f/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-27%20100548.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[26. 멀티 인덱스]]></title>
            <link>https://velog.io/@ddaddo_data/26.-%EB%A9%80%ED%8B%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4</link>
            <guid>https://velog.io/@ddaddo_data/26.-%EB%A9%80%ED%8B%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4</guid>
            <pubDate>Mon, 26 Jul 2021 08:45:27 GMT</pubDate>
            <description><![CDATA[<h3 id="1-멀티-인덱스">1) 멀티 인덱스</h3>
<pre><code>import pandas as pd
import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;sex&#39;, &#39;class&#39;, &#39;fare&#39;, &#39;survived&#39;]]

grouped = df.groupby([&#39;class&#39;, &#39;sex&#39;])
# class와 sex로 그룹화
# 3 * 2 = 6가지 경우

gdf = grouped.mean()
# 그룹별 연산 가능한 열에 대하여 평균값 구하기

print(gdf)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/02bdba28-c3ba-48ab-8c5c-b7bd4bc81f4b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20173708.jpg" alt=""></p>
<pre><code>print(gdf.loc[(&#39;First&#39;, &#39;female&#39;)])
# class가 First 이고 sex가 female인 값만 추출</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/487b9e85-2bab-41f3-b310-cab8e71c4b3c/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20174223.jpg" alt=""></p>
<pre><code>print(gdf.xs(&#39;male&#39;, level = &#39;sex&#39;))
# sex가 male인 것만 구하기</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/f9fa9fe4-cfe3-4592-9da9-ab7a27761a67/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20174414.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[25. 그룹 연산]]></title>
            <link>https://velog.io/@ddaddo_data/25.-%EA%B7%B8%EB%A3%B9-%EC%97%B0%EC%82%B0</link>
            <guid>https://velog.io/@ddaddo_data/25.-%EA%B7%B8%EB%A3%B9-%EC%97%B0%EC%82%B0</guid>
            <pubDate>Mon, 26 Jul 2021 08:34:38 GMT</pubDate>
            <description><![CDATA[<h3 id="1-그룹-객체-만들기-분할-단계">1) 그룹 객체 만들기 (분할 단계)</h3>
<pre><code>import pandas as pd
import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;sex&#39;, &#39;class&#39;, &#39;fare&#39;, &#39;survived&#39;]]

grouped = df.groupby([&#39;class&#39;])
# class 별로 데이터프레임을 분할

for key, group in grouped:
    print(&#39;key : &#39;, key) # 그룹의 key 값인 class 값 출력
    print(&#39;number: &#39;, len(group)) # 그룹에 속한 데이터 값의 수 출력
    print(group.head()) # 그룹별 상위 5개 항목 출력
    print(&#39;\n&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/7c400833-412b-464d-abd5-1bcc7ebde560/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20130838.jpg" alt=""></p>
<pre><code>average = grouped.mean()
# group 별 연산 가능한 다른 열에 대해서 평균값 계산

print(average)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/7f42dae6-1cb2-4e52-bf5e-49bbee197288/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20130956.jpg" alt=""></p>
<pre><code>group3 = grouped.get_group(&#39;Third&#39;)
# Third class만 선택

print(group3.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/5bad3466-76bd-4440-85fa-819cd789c242/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20131105.jpg" alt=""></p>
<pre><code>grouped_two = df.groupby([&#39;class&#39;, &#39;sex&#39;])

for key, group in grouped_two:
    print(&#39;key : &#39;, key) # 그룹의 key 값인 class와 sex 값 출력 (경우가 3 * 2 = 6 가지)
    print(&#39;number: &#39;, len(group)) # 그룹에 속한 데이터 값의 수 출력
    print(group.head()) # 그룹별 상위 5개 항목 출력
    print(&#39;\n&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/5d08fa0b-e7e5-4a37-bf04-89c0e484c374/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20131318.jpg" alt=""></p>
<pre><code>average_two = grouped_two.mean()
# class와 성별을 기준으로 그룹화한 것을 연산 가능한 다른 열에 대해서 평균값 계산
print(average_two)
print(&#39;\n&#39;)

group3f = grouped_two.get_group((&#39;Third&#39;, &#39;female&#39;))
# class가 Third 이고 sex가 female인 그룹만 추출

print(group3f.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/70a48bbf-6b9a-4d8c-ad3a-d5e20ffebcb8/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20131745.jpg" alt=""></p>
<h3 id="2-그룹-연산-메소드-적용---결합-단계">2) 그룹 연산 메소드 (적용 - 결합 단계)</h3>
<pre><code>import pandas as pd
import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;sex&#39;, &#39;class&#39;, &#39;fare&#39;, &#39;survived&#39;]]

grouped = df.groupby([&#39;class&#39;])
# class 별로 데이터프레임을 분할

std_all = grouped.std()
# 각 그룹에 대한 모든 열의 표준편차를 데이터프레임으로 만드는 작업

print(std_all)
print(&#39;\n&#39;)

std_fare = grouped.fare.std()
# 각 그룹에 대한 fare열의 표준편차를 집계하여 시리즈로 반환
print(std_fare)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6e5e3919-4b4b-47e2-b3bc-a93282160d1d/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20132040.jpg" alt=""></p>
<pre><code>def min_max(x):
    return x.max() - x.min()
# 각 그룹의 최대값과 최소값을 반환하는 함수

agg_minmax = grouped.agg(min_max)
print(agg_minmax)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/a9932304-4067-411b-9cb8-15ed36a62bbe/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20132231.jpg" alt=""></p>
<pre><code>agg_all = grouped.agg([&#39;min&#39;, &#39;max&#39;])
# 모든 열에 동일 함수인 min과 max 함수 적용

print(agg_all)
print(&#39;\n&#39;)

agg_sep = grouped.agg({&#39;fare&#39; : [&#39;min&#39;, &#39;max&#39;], &#39;age&#39;:&#39;mean&#39;})
# fare 열에는 min과 max 함수 적용
# age 열에는 mean 함수 적용

print(agg_sep)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/31132df9-64a5-4e7e-9909-c6a506e99685/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20132552.jpg" alt=""></p>
<pre><code>age_mean = grouped.age.mean()
# 그룹별 age 열의 평균값 구하기

print(age_mean)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/df87a7da-5bdf-48d2-af87-6319e648df41/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20132752.jpg" alt=""></p>
<pre><code>def z_score(x):
    return (x-x.mean())/x.std()
# z-score 를 구하는 함수

age_zscore = grouped.age.transform(z_score)
# 그룹별 age열의 z-score를 구하는 함수

print(age_zscore.loc[0:9])
# 첫 10개의 z-score 출력</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/1c7c8987-f105-482f-a911-8bfd0a9b38aa/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20133147.jpg" alt=""></p>
<pre><code>grouped_filter = grouped.filter(lambda x : len(x) &gt;= 200)
# 그룹별 데이터 수가 200개 이상만 출력

print(grouped_filter.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/bc2e5d82-0e66-4816-8e35-ea268299c5e3/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20172424.jpg" alt=""></p>
<pre><code>agg_grouped = grouped.apply(lambda x : x.describe())
# 각 그룹별 요약 통계 정보 집계

print(agg_grouped)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/c0ce5866-a2a1-4893-8609-e5a6442294e4/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20172704.jpg" alt=""></p>
<pre><code>def z_score(x):
    return (x - x.mean()) / x.std()

age_zscore = grouped.age.apply(z_score)
# 그룹별 age열의 z-score를 구하는 함수

print(age_zscore)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/51fd2786-f441-4f70-b0aa-ab813cfec472/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20173115.jpg" alt=""></p>
<pre><code>age_filter = grouped.apply(lambda x : x.age.mean() &lt; 30)
# age 열의 데이터 평균이 30보다 작은 그룹만을 필터링하여 출력

for x in age_filter.index:
    if age_filter[x]==True:
        age_filter_df = grouped.get_group(x)
        print(age_filter_df.head())
        print(&#39;\n&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6a892d67-df5f-4b82-8c17-697a8aa087f4/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-26%20173354.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[24. 데이터프레임 합치기]]></title>
            <link>https://velog.io/@ddaddo_data/24.-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%94%84%EB%A0%88%EC%9E%84-%ED%95%A9%EC%B9%98%EA%B8%B0</link>
            <guid>https://velog.io/@ddaddo_data/24.-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%94%84%EB%A0%88%EC%9E%84-%ED%95%A9%EC%B9%98%EA%B8%B0</guid>
            <pubDate>Sun, 25 Jul 2021 04:36:49 GMT</pubDate>
            <description><![CDATA[<h3 id="1-데이터프레임-연결">1) 데이터프레임 연결</h3>
<pre><code>import pandas as pd

df1 = pd.DataFrame({&#39;a&#39; : [&#39;a0&#39;, &#39;a1&#39;, &#39;a2&#39;, &#39;a3&#39;],
                   &#39;b&#39; :  [&#39;b0&#39;, &#39;b1&#39;, &#39;b2&#39;, &#39;b3&#39;],
                   &#39;c&#39; :  [&#39;c0&#39;, &#39;c1&#39;, &#39;c2&#39;, &#39;c3&#39;]},
                  index = [0,1,2,3])

df2 = pd.DataFrame({&#39;a&#39; : [&#39;a2&#39;, &#39;a3&#39;, &#39;a4&#39;, &#39;a5&#39;],
                   &#39;b&#39; :  [&#39;b2&#39;, &#39;b3&#39;, &#39;b4&#39;, &#39;b5&#39;],
                   &#39;c&#39; :  [&#39;c2&#39;, &#39;c3&#39;, &#39;c4&#39;, &#39;c5&#39;],
                    &#39;d&#39; :  [&#39;d2&#39;, &#39;d3&#39;, &#39;d4&#39;, &#39;d5&#39;] },
                  index = [2,3,4,5])

result1 = pd.concat([df1, df2])
# 2개의 데이터프레임을 위 아래 행 방향으로 이어붙이듯 연결

print(result1)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/7f786930-39c5-4bf3-bee4-e8e0a37f2ba1/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20125252.jpg" alt=""></p>
<pre><code>result2 = pd.concat([df1, df2], ignore_index = True)
# 2개의 데이터프레임을 위 아래 행 방향으로 이어붙이듯 연결
# 기존 행 인덱스 무시 &amp; 새로운 행 인덱스 설정

print(result2)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/14c66bb5-b061-4965-bbcc-13e0b2d40b13/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20125422.jpg" alt=""></p>
<pre><code>result3 = pd.concat([df1,df2], axis =1)
# 2개의 데이터프레임을 좌우 열 방향으로 이어붙이듯 연결

print(result3)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/09bb1462-2f52-43ff-b8c0-e891f78e521a/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20125556.jpg" alt=""></p>
<pre><code>result4 = pd.concat([df1, df2], axis = 1, join = &#39;inner&#39;)
# 2개의 데이터프레임 내 공통으로 존재하는 데이터만 반환

print(result4)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/14123e32-9ed1-4a2b-8499-da3e118b8c75/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20125901.jpg" alt=""></p>
<pre><code>sr1 = pd.Series([&#39;e0&#39;, &#39;e1&#39;, &#39;e2&#39;, &#39;e3&#39;], name = &#39;e&#39;)
sr2 = pd.Series([&#39;f0&#39;, &#39;f1&#39;, &#39;f2&#39;], name = &#39;f&#39;, index = [3,4,5])
sr3 = pd.Series([&#39;g0&#39;, &#39;g1&#39;, &#39;g2&#39;, &#39;g3&#39;], name = &#39;g&#39;)

result5 = pd.concat([df1, sr1], axis =1, sort = True)
# df1 데이터프레임에 e열 추가

print(result5)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/ddda17c8-56fa-4908-a83e-54423d0705d9/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20130355.jpg" alt=""></p>
<pre><code>result6 = pd.concat([sr1,sr3], axis =0)
print(result6)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/1bf00903-ab93-42d2-a104-db03aeb33390/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20130528.jpg" alt=""></p>
<h3 id="2-데이터프레임-병합">2) 데이터프레임 병합</h3>
<pre><code>import pandas as pd

pd.set_option(&#39;display.max_columns&#39;, 10) # 출력할 최대 열의 개수
pd.set_option(&#39;display.max_colwidth&#39;, 20) # 출력할 열의 너비
pd.set_option(&#39;display.unicode.east_asian_width&#39;, True) # 유니코드 사용 너비 조정

df1 = pd.read_excel(&#39;./stock price.xlsx&#39;)
df2 = pd.read_excel(&#39;./stock valuation.xlsx&#39;)

merge_inner = pd.merge(df1,df2)
# df1과 df2 합치기 (교집합)

print(merge_inner)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/3841630e-6832-421e-900c-8a4d18b919d1/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20131003.jpg" alt=""></p>
<pre><code>merge_outer = pd.merge(df1,df2, how = &#39;outer&#39;, on = &#39;id&#39;)
# df1과 df2 합치기 (합집합)
# id 열을 기준으로 합침

print(merge_outer)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/05bbee9b-98ef-4bcd-98f4-98e880493429/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20131145.jpg" alt=""></p>
<pre><code>merge_left = pd.merge(df1,df2, how = &#39;left&#39;, left_on = &#39;stock_name&#39;, right_on = &#39;name&#39;)
# df1과 df2 합치기 (왼쪽 데이터프레임 기준)
# df1의 stock_name 열과 df2의 name 열을 기준으로 병합

print(merge_left)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/b968030e-2585-4a39-8759-69223cb27cba/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20131440.jpg" alt=""></p>
<pre><code>merge_right = pd.merge(df1,df2, how = &#39;right&#39;, left_on = &#39;stock_name&#39;, right_on = &#39;name&#39;)
# df1과 df2 합치기 (오른쪽 데이터프레임 기준)
# df1의 stock_name 열과 df2의 name 열을 기준으로 병합

print(merge_right)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/272d2a56-a693-4942-a495-e629c583e1b0/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20131645.jpg" alt=""></p>
<pre><code>price = df1[df1[&#39;price&#39;] &lt; 50000]
# df1 중 가격이 50000 미만인 것

value = pd.merge(price, df2)
# df1 중 가격이 50000 미만이면서 df2에 존재하는 것

print(value)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/e4214148-c73e-40ad-a7cd-e7fb3f13ecd0/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20131926.jpg" alt=""></p>
<h3 id="3-데이터프레임-결합">3) 데이터프레임 결합</h3>
<p>join() 메소드는 두 데이터프레임의 행 인덱스를 기준으로 결합
on = &#39;keys&#39; 옵션을 사용하면 열을 기준으로 결합하는 것이 가능</p>
<pre><code>import pandas as pd

pd.set_option(&#39;display.max_columns&#39;, 10) # 출력할 최대 열의 개수
pd.set_option(&#39;display.max_colwidth&#39;, 20) # 출력할 열의 너비
pd.set_option(&#39;display.unicode.east_asian_width&#39;, True) # 유니코드 사용 너비 조정

df1 = pd.read_excel(&#39;./stock price.xlsx&#39;, index_col = &#39;id&#39;)
df2 = pd.read_excel(&#39;./stock valuation.xlsx&#39;, index_col = &#39;id&#39;)

df3 = df1.join(df2)
# df1과 df2 결합
# df1을 기준으로 df2 결합(df2에 존재하지 않아도 df1에 존재하면 결합), how = &#39;left&#39; 옵션이 기본으로 적용됨

print(df3)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/bf8236bf-b454-4e99-93aa-45d8c24bd311/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20132716.jpg" alt=""></p>
<pre><code>df4 = df1.join(df2, how = &#39;inner&#39;)
# df1과 df2 교집합
# df1과 df2에 모두 존재하는 값만 추출

print(df4)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/ad7fe46d-3bde-49ed-9942-313f6bf1d288/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20133356.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[23. 필터링]]></title>
            <link>https://velog.io/@ddaddo_data/23.-%ED%95%84%ED%84%B0%EB%A7%81</link>
            <guid>https://velog.io/@ddaddo_data/23.-%ED%95%84%ED%84%B0%EB%A7%81</guid>
            <pubDate>Sun, 25 Jul 2021 03:46:59 GMT</pubDate>
            <description><![CDATA[<h3 id="1-불린-인덱싱">1) 불린 인덱싱</h3>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)

mask1 = (titanic.age &gt;=10) &amp; (titanic.age &lt;20)
# 10세 이상 20세 미만

df_teenage = titanic.loc[mask1, :]

print(df_teenage.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6ef25ef2-5f64-4830-ab97-6a842f95f284/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20123519.jpg" alt=""></p>
<pre><code>mask2 = (titanic.age &lt;10) &amp; (titanic.sex == &#39;female&#39;)
# 10세 미만 여자

df_female_under10 = titanic.loc[mask2, :]

print(df_female_under10.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/91522793-964a-4c76-8f58-fd01deede198/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20123712.jpg" alt=""></p>
<pre><code>mask3 = (titanic.age &lt;10) | (titanic.age &gt; 60)
# 10세 미만 혹은 60세 초과

df = titanic.loc[mask3, :]

print(df.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/1411d615-d061-4514-ab86-2e08773bf4be/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20123826.jpg" alt=""></p>
<h3 id="2-isin-메소드-활용">2) isin() 메소드 활용</h3>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
isin_filter = titanic[&#39;sibsp&#39;].isin([3,4,5])
# sibsp 열의 값이 3 혹은 4 혹은 5인 값만 추출

df_isin = titanic[isin_filter]
print(df_isin.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/c90f990f-eb14-4c53-8cf1-beadf67d49e4/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-25%20124625.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[22. 열 재구성]]></title>
            <link>https://velog.io/@ddaddo_data/22.-%EC%97%B4-%EC%9E%AC%EA%B5%AC%EC%84%B1</link>
            <guid>https://velog.io/@ddaddo_data/22.-%EC%97%B4-%EC%9E%AC%EA%B5%AC%EC%84%B1</guid>
            <pubDate>Fri, 23 Jul 2021 08:30:05 GMT</pubDate>
            <description><![CDATA[<h3 id="1-열-순서-변경">1) 열 순서 변경</h3>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[0:4, &#39;survived&#39;:&#39;age&#39;]

columns = list(df.columns.values)
# 열 이름을 list로 만들기

columns_sort = sorted(columns)
# 열 이름을 알파벳 순으로 정렬하기

df_sorted = df[columns_sort]
print(df_sorted)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/2e90bb93-66ce-45e1-aee3-a1963d905fe7/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20171110.jpg" alt=""></p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[0:4, &#39;survived&#39;:&#39;age&#39;]

columns = list(df.columns.values)
# 열 이름을 list로 만들기

columns_reversed = list(reversed(columns))
# 열 이름을 기존 순서의 역순으로 정렬하기

df_reversed = df[columns_reversed]
print(df_reversed)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/eea0a766-cd6f-47dc-abaa-b6e26aed97a7/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20171357.jpg" alt=""></p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[0:4, &#39;survived&#39;:&#39;age&#39;]

columns = list(df.columns.values)
# 열 이름을 list로 만들기

columns_custom = [&#39;pclass&#39;, &#39;sex&#39;, &#39;age&#39;, &#39;survived&#39;]
df_customed = df[columns_custom]
print(df_customed)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6886f948-4e53-4026-a25e-7e1a762fd889/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20171410.jpg" alt=""></p>
<h3 id="2-열-분리">2) 열 분리</h3>
<pre><code>import pandas as pd

df = pd.read_excel(&#39;./주가데이터.xlsx&#39;)
print(df.head())
print(&#39;\n&#39;)

df[&#39;연월일&#39;] = df[&#39;연월일&#39;].astype(&#39;str&#39;)
# 연월일 데이터 형을 string 형으로 변환

dates = df[&#39;연월일&#39;].str.split(&#39;-&#39;)
# &#39;-&#39;을 기준으로 데이터를 분리

df[&#39;연&#39;] = dates.str.get(0)
# dates 변수의 원소 리스트 0 번째 인덱스 값

df[&#39;월&#39;] = dates.str.get(1)
# dates 변수의 원소 리스트 1 번째 인덱스 값

df[&#39;일&#39;] = dates.str.get(2)
# dates 변수의 원소 리스트 2 번째 인덱스 값</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[21. 함수 매핑]]></title>
            <link>https://velog.io/@ddaddo_data/21.-%ED%95%A8%EC%88%98-%EB%A7%A4%ED%95%91</link>
            <guid>https://velog.io/@ddaddo_data/21.-%ED%95%A8%EC%88%98-%EB%A7%A4%ED%95%91</guid>
            <pubDate>Fri, 23 Jul 2021 08:07:39 GMT</pubDate>
            <description><![CDATA[<h3 id="1-개별-원소에-함수-매핑">1) 개별 원소에 함수 매핑</h3>
<p>시리즈 객체에 apply() 메소드를 적용하면 인자로 전달하는 매핑 함수에
시리즈의 모든 원소를 하나씩 입력하고 함수의 리턴값을 돌려받음</p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

df[&#39;ten&#39;] = 10

def add_10(n):
    return n+10

def add_two_obj(a,b):
    return a + b

sr1 = df[&#39;age&#39;].apply(add_10)
print(sr1.head())
print(&#39;\n&#39;)

sr2 = df[&#39;age&#39;].apply(add_two_obj, b = 10)
# a = age열의 값, b = 10

print(sr2.head())
print(&#39;\n&#39;)

sr3 = df[&#39;age&#39;].apply(lambda x : add_10(x))
# x = age열의 값

print(sr3.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6be3773c-5c7e-4a4e-a260-5986b94e6834/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20153123.jpg" alt=""></p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

df[&#39;ten&#39;] = 10

def add_10(n):
    return n+10

def add_two_obj(a,b):
    return a + b

df_map = df.applymap(add_10)
# 데이터프레임 전체에 함수 적용
# 모든 데이터 값에 10을 더함

print(df_map.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/a071788c-a0b0-4070-979f-718464c22dad/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20153139.jpg" alt=""></p>
<h3 id="2-시리즈-객체에-함수-매핑">2) 시리즈 객체에 함수 매핑</h3>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

def missing_value(series):
    return series.isnull()
# 시리즈 객체가 null값인지 여부 반환

result = df.apply(missing_value, axis = 0)
# 데이터프레임을 반환

print(result.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/425dc86f-365f-4da9-a516-3ee71c133989/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20153533.jpg" alt=""></p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

def max_min(x):
    return x.max() - x.min()
# 각 열별로 최대값 - 최소값

result = df.apply(max_min)
# 데이터프레임을 반환

print(result)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/72ca33c9-8de2-4d31-ba65-292271edf49e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20153728.jpg" alt=""></p>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

df[&#39;ten&#39;] = 10

def add_two_obj(a,b):
    return a + b

df[&#39;add&#39;] = df.apply(lambda x: add_two_obj(x[&#39;age&#39;], x[&#39;ten&#39;]), axis =1)
# a = age열, b = ten열
# age 열에 10을 더한 값을 반환

print(df.head())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/51a3b1e6-0dd8-4965-8b01-b1bdb47862ea/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20154333.jpg" alt=""></p>
<h3 id="3-데이터프레임-객체에-함수-매핑">3) 데이터프레임 객체에 함수 매핑</h3>
<pre><code>import seaborn as sns

titanic = sns.load_dataset(&#39;titanic&#39;)
df = titanic.loc[:, [&#39;age&#39;, &#39;fare&#39;]]

def missing_value(x):
    return x.isnull()

def missing_count(x):
    return missing_value(x).sum()

def total_number_missing(x):
    return missing_count(x).sum()

result_df = df.pipe(total_number_missing)
# pipe 메소드를 통해 전체 데이터프레임 내 null 값의 수를 반환

print(result_df)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/2479a0c2-5ddf-40f3-bf0c-a1e36355d7d4/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-23%20170555.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[20. 시계열 데이터]]></title>
            <link>https://velog.io/@ddaddo_data/20.-%EC%8B%9C%EA%B3%84%EC%97%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0</link>
            <guid>https://velog.io/@ddaddo_data/20.-%EC%8B%9C%EA%B3%84%EC%97%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0</guid>
            <pubDate>Thu, 22 Jul 2021 02:54:58 GMT</pubDate>
            <description><![CDATA[<ul>
<li>Timestamp : 특정한 시점을 기록</li>
<li>Period : 두 시점 사이의 일정한 기간을 나타냄<h3 id="1-다른-자료형을-시계열-객체로-변환---timestamp-ver">1) 다른 자료형을 시계열 객체로 변환 - Timestamp ver.</h3>
<pre><code>import pandas as pd
</code></pre></li>
</ul>
<p>df = pd.read_csv(&#39;./stock-data.csv&#39;)
print(df.info())</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/46dc0de6-1dbd-45e0-9339-a093fb494fba/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20110619.jpg)</code></pre><p>df[&#39;new_Date&#39;] = pd.to_datetime(df[&#39;Date&#39;])</p>
<h1 id="to_datetime을-활용하여-timestamp로-변환">to_datetime을 활용하여 timestamp로 변환</h1>
<p>print(df.info())
print(&#39;\n&#39;)</p>
<p>df.set_index(&#39;new_Date&#39;, inplace = True)
df.drop(&#39;Date&#39;, axis = 1, inplace = True)</p>
<p>print(df.head())
print(&#39;\n&#39;)
print(df.info())</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/4a7711ee-d605-4c90-819e-3b76d0ad9597/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20111111.jpg)
### 2) 다른 자료형을 시계열 객체로 변환 - Period ver.</code></pre><p>import pandas as pd</p>
<p>dates =  [&#39;2019-01-01&#39;, &#39;2020-03-01&#39;, &#39;2021-06-21&#39;]</p>
<p>ts_dates = pd.to_datetime(dates)
print(ts_dates)</p>
<p>pr_day = ts_dates.to_period(freq = &#39;D&#39;)</p>
<h1 id="freq-옵션이-d인-경우-1일의-기간">freq 옵션이 D인 경우, 1일의 기간</h1>
<p>print(pr_day)</p>
<p>pr_month = ts_dates.to_period(freq = &#39;M&#39;)</p>
<h1 id="freq-옵션이-m인-경우-1달의-기간">freq 옵션이 M인 경우, 1달의 기간</h1>
<p>print(pr_month)</p>
<p>pr_year = ts_dates.to_period(freq = &#39;A&#39;)</p>
<h1 id="freq-옵션이-a인-경우-1년의-기간">freq 옵션이 A인 경우, 1년의 기간</h1>
<p>print(pr_year)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/1c9db7c9-33a5-4559-ba54-d3e2c7a3039e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20111523.jpg)

### 3) 시계열 데이터 만들기 - Timestamp 배열</code></pre><p>import pandas as pd</p>
<p>ts_ms = pd.date_range(start = &#39;2019-01-01&#39;, # 시작일
                     end = None, # 날짜 범위의 끝
                     periods = 6, # 생성할 Timestamp 수
                     freq = &#39;MS&#39;, # 월의 시작일 기준으로 한달 간격
                     tz = &#39;Asia/Seoul&#39;) # 아시아/서울 시간대</p>
<p>print(ts_ms)
print(&#39;\n&#39;)</p>
<p>ts_m = pd.date_range(start = &#39;2019-01-01&#39;, # 시작일
                     periods = 3, # 생성할 Timestamp 수
                     freq = &#39;M&#39;, # 월의 마지막일 기준으로 한달 간격
                     tz = &#39;Asia/Seoul&#39;) # 아시아/서울 시간대</p>
<p>print(ts_m)
print(&#39;\n&#39;)</p>
<p>ts_3m = pd.date_range(start = &#39;2019-01-01&#39;, # 시작일
                     periods = 6, # 생성할 Timestamp 수
                     freq = &#39;3M&#39;, # 월의 마지막일 기준으로 3달 간격
                     tz = &#39;Asia/Seoul&#39;) # 아시아/서울 시간대</p>
<p>print(ts_3m)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/a81cf174-de96-40b3-980b-0fbe2ef7ce87/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20113110.jpg)
### 4) 시계열 데이터 만들기 - Period 배열</code></pre><p>import pandas as pd</p>
<p>pr_m = pd.period_range(start = &#39;2019-01-01&#39;, # 시작일
                     end = None, # 날짜 범위의 끝
                     periods = 6, # 생성할 Period 수
                     freq = &#39;M&#39;) # 기간의 길이 (월)</p>
<p>print(pr_m)
print(&#39;\n&#39;)</p>
<p>pr_h = pd.period_range(start = &#39;2019-01-01&#39;, # 시작일
                     end = None, # 날짜 범위의 끝
                     periods = 6, # 생성할 Period 수
                     freq = &#39;H&#39;) # 기간의 길이 (시간)</p>
<p>print(pr_h)
print(&#39;\n&#39;)</p>
<p>pr_2h = pd.period_range(start = &#39;2019-01-01&#39;, # 시작일
                     end = None, # 날짜 범위의 끝
                     periods = 6, # 생성할 Period 수
                     freq = &#39;2H&#39;) # 기간의 길이 (2시간)</p>
<p>print(pr_2h)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/021d10b9-86b0-47c4-b4a6-86d5c38c6876/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20113457.jpg)
### 5) 시계열 데이터 활용 - 날짜 데이터 분리</code></pre><p>import pandas as pd</p>
<p>df = pd.read_csv(&#39;./stock-data.csv&#39;)
df[&#39;new_Date&#39;] = pd.to_datetime(df[&#39;Date&#39;])</p>
<h1 id="to_datetime을-활용하여-timestamp로-변환-1">to_datetime을 활용하여 timestamp로 변환</h1>
<p>df[&#39;Year&#39;] = df[&#39;new_Date&#39;].dt.year</p>
<h1 id="년도만-분리">년도만 분리</h1>
<p>df[&#39;Month&#39;] = df[&#39;new_Date&#39;].dt.month</p>
<h1 id="달만-분리">달만 분리</h1>
<p>df[&#39;Day&#39;] = df[&#39;new_Date&#39;].dt.day</p>
<h1 id="일만-분리">일만 분리</h1>
<p>df[&#39;Date_yr&#39;] = df[&#39;new_Date&#39;].dt.to_period(freq = &#39;A&#39;)</p>
<h1 id="년도만-표기">년도만 표기</h1>
<p>df[&#39;Date_m&#39;] = df[&#39;new_Date&#39;].dt.to_period(freq = &#39;M&#39;)</p>
<h1 id="년-월-표기">년-월 표기</h1>
<p>print(df.head())</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/0796122c-01ad-4280-8489-049e76dc573e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20114034.jpg)
### 6) 시계열 데이터 활용 - 날짜 인덱스 활용</code></pre><p>import pandas as pd</p>
<p>df = pd.read_csv(&#39;./stock-data.csv&#39;)
df[&#39;new_Date&#39;] = pd.to_datetime(df[&#39;Date&#39;])</p>
<h1 id="to_datetime을-활용하여-timestamp로-변환-2">to_datetime을 활용하여 timestamp로 변환</h1>
<p>df.set_index(&#39;new_Date&#39;, inplace = True)</p>
<p>df_2018 = df.loc[&#39;2018&#39;]
df_2018</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/d5831f96-f466-495d-be8d-413ab6b62cd5/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20114620.jpg)</code></pre><p>df_201807 = df.loc[&#39;2018-07&#39;]
df_201807</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/edabece1-5912-498b-9ae3-554a360878bc/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20114722.jpg)</code></pre><p>df_ym_cols = df.loc[&#39;2018-07&#39;, &#39;Start&#39;:&#39;High&#39;]</p>
<h1 id="2018-07에-해당하는-데이터의-start-열과-high열-값-추출">2018-07에 해당하는 데이터의 Start 열과 High열 값 추출</h1>
<p>print(df_ym_cols)</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/2c4dd127-221f-447f-bb73-d60b0014296d/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20114902.jpg)</code></pre><p>df_range = df[&#39;2018-06-30&#39; : &#39;2018-06-20&#39;]
df_range</p>
<pre><code>![](https://images.velog.io/images/ddaddo_data/post/3835d067-9cca-4431-8fe9-670ca1a0ccaf/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20115047.jpg)</code></pre><p>today = pd.to_datetime(&#39;2018-12-25&#39;)</p>
<h1 id="기준날짜-설정">기준날짜 설정</h1>
<p>df[&#39;time_delta&#39;] = today - df.index</p>
<h1 id="기준-날짜와-각-데이터값의-차이">기준 날짜와 각 데이터값의 차이</h1>
<p>df.set_index(&#39;time_delta&#39;, inplace = True)
df_180 = df[&#39;180 days&#39;:&#39;189 days&#39;]</p>
<h1 id="차이값이-180일-이상-189일-이하인-값만-추출">차이값이 180일 이상 189일 이하인 값만 추출</h1>
<p>print(df_180)</p>
<p>```
<img src="https://images.velog.io/images/ddaddo_data/post/326f692f-ffec-4bbe-8812-ff77e3f79604/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20115424.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[19. 정규화]]></title>
            <link>https://velog.io/@ddaddo_data/19.-%EC%A0%95%EA%B7%9C%ED%99%94</link>
            <guid>https://velog.io/@ddaddo_data/19.-%EC%A0%95%EA%B7%9C%ED%99%94</guid>
            <pubDate>Thu, 22 Jul 2021 01:53:57 GMT</pubDate>
            <description><![CDATA[<ul>
<li>각 변수에 들어 있는 숫자 데이터의 상대적 크기 차이 때문에 머신러닝 분석 결과가 달라질 수 있음</li>
<li>숫자 데이터의 상대적인 크기 차이를 제거할 필요가 있음</li>
</ul>
<h3 id="1-정규화---해당-열의-최대값으로-나누는-방법">1) 정규화 - 해당 열의 최대값으로 나누는 방법</h3>
<p>: 각 열에 속하는 데이터 값을 동일한 크기 기준으로 나눈 비율로 나타내는 것
: 정규화를 거친 데이터의 범위는 0<del>1 또는 -1</del>1이 됨</p>
<pre><code>import pandas as pd
import numpy as np

df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)
df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;, &#39;acceleration&#39;, &#39;model year&#39;,
          &#39;origin&#39;, &#39;name&#39;]
df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace = True)
df.dropna(subset = [&#39;horsepower&#39;], axis = 0, inplace = True)
df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)

print(df.horsepower.describe())

df.horsepower = df.horsepower/abs(df.horsepower.max())
# horsepower열의 값을 최대값으로 나누는 과정 (정규화 과정)

print(df.horsepower.head())
print(df.horsepower.describe())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/bdc3e74f-bbb7-4c41-baf9-de589b1f5e0c/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20104427.jpg" alt=""></p>
<h3 id="2-정규화---해당-열의-최대값-최소값으로-나누는-방법">2) 정규화 - 해당 열의 (최대값-최소값)으로 나누는 방법</h3>
<p>: 각 값에서 해당 열의 최소값을 뺀 것(값 - 최소값)을
해당 열의 (최대값 - 최소값)으로 나누는 방법</p>
<pre><code>import pandas as pd
import numpy as np

df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)
df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;, &#39;acceleration&#39;, &#39;model year&#39;,
          &#39;origin&#39;, &#39;name&#39;]
df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace = True)
df.dropna(subset = [&#39;horsepower&#39;], axis = 0, inplace = True)
df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)

print(df.horsepower.describe())
print(&#39;\n&#39;)

min_x = df.horsepower - df.horsepower.min()
# 열의 값에서 최소값을 뺌

min_max = df.horsepower.max() - df.horsepower.min()
# 최대값에서 최소값을 뺌

df.horsepower = min_x / min_max
# (값 - 최소값) / (최대값 - 최소값)

print(df.horsepower.head())
print(&#39;\n&#39;)
print(df.horsepower.describe())</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/432fb04d-d043-4f75-899c-cdde88c46fc8/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-22%20105217.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[18. 범주형(카테고리) 데이터 처리]]></title>
            <link>https://velog.io/@ddaddo_data/18.-%EB%B2%94%EC%A3%BC%ED%98%95%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@ddaddo_data/18.-%EB%B2%94%EC%A3%BC%ED%98%95%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Wed, 21 Jul 2021 02:02:40 GMT</pubDate>
            <description><![CDATA[<h3 id="1-구간-분할">1) 구간 분할</h3>
<pre><code>import pandas as pd
import numpy as np

df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)

df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;,&#39;acceleration&#39;,&#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]
df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace = True)
# ?을 NaN 값으로 대체

df.dropna(subset = [&#39;horsepower&#39;], axis = 0, inplace = True)
# horsepower 내 NaN 값 drop

df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)
# object 형을 float 형으로 변환

count , bin_dividers = np.histogram(df[&#39;horsepower&#39;], bins = 3)
# np.histogram 함수로 3개의 bin으로 나누는 경계값의 리스트 구하기
print(bin_dividers)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/a296bc65-7bac-49dc-bf89-ba06cf9ece9d/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20104553.jpg" alt=""></p>
<pre><code>bin_name = [&#39;저출력&#39;, &#39;보통출력&#39;, &#39;고출력&#39;]
# 3개의 bin 이름 지정

df[&#39;hp_bin&#39;] = pd.cut(x = df[&#39;horsepower&#39;],
                     bins = bin_dividers,
                     labels = bin_name,
                     include_lowest = True) # 첫 경계값 포함
# pd.cut 함수로 각 데이터를 3개의 bin에 할당

print(df[[&#39;horsepower&#39;, &#39;hp_bin&#39;]].head(10))</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/b8f690bf-503d-49b7-990e-81aa4ad42628/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20104951.jpg" alt=""></p>
<h3 id="2-더미-변수">2) 더미 변수</h3>
<p>숫자 0 또는 1로 표현되는 더미 변수
특성이 있는지 없는지를 표현하는 변수
해당 특성이 존재하면 1
해당 특성이 존재하지 않으면 0</p>
<pre><code>horsepower_dummies = pd.get_dummies(df[&#39;hp_bin&#39;])
# hp_bin 열의 범주형 데이터를 더미 변수로 변환 (원핫인코딩)
print(horsepower_dummies.head(10))</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/38c8ace0-732d-4863-93eb-e49fb8b896c8/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20105458.jpg" alt=""></p>
<h3 id="3-sklearn을-활용한-원핫인코딩">3) sklearn을 활용한 원핫인코딩</h3>
<pre><code>from sklearn import preprocessing

label_encoder = preprocessing.LabelEncoder()
onehot_encoder = preprocessing.OneHotEncoder()

onehot_labeled = label_encoder.fit_transform(df[&#39;hp_bin&#39;].head(15))
# label_encoder로 문자열 범주를 숫자형 범주로 변환

print(onehot_labeled)

onehot_reshaped = onehot_labeled.reshape(len(onehot_labeled),1)
# 2차원 행렬로 형태 변경

print(onehot_reshaped)

onehot_fitted = onehot_encoder.fit_transform(onehot_reshaped)
# 희소행렬로 변환
# (행, 열)에 데이터 값이 있음을 1.0으로 표현

print(onehot_fitted)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/0b99c50a-9150-4852-b544-0e4df70a6b90/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20110114.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[17. 데이터 표준화]]></title>
            <link>https://velog.io/@ddaddo_data/17.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%91%9C%EC%A4%80%ED%99%94</link>
            <guid>https://velog.io/@ddaddo_data/17.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%91%9C%EC%A4%80%ED%99%94</guid>
            <pubDate>Wed, 21 Jul 2021 01:36:48 GMT</pubDate>
            <description><![CDATA[<h3 id="1-단위-환산">1) 단위 환산</h3>
<p>mpg 열 : 갤런당 마일
1마일 : 1.690934km
1갤런 : 3.78541L</p>
<pre><code>import pandas as pd

df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)

df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;,&#39;acceleration&#39;,&#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]

mpg_to_kpl = 1.60934/3.78541
# mpg를 kpl로 변환하기 위한 과정
# 1마일 / 1km

df[&#39;kpl&#39;] = df[&#39;mpg&#39;] * mpg_to_kpl
# mpg * (1마일 / 1km)

df[&#39;kpl&#39;] = df[&#39;kpl&#39;].round(2)

print(df.head(3))</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/2c93d8fb-ff79-4833-851d-ea05879107d8/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20101753.jpg" alt=""></p>
<h3 id="2-자료형-변환-object---float">2) 자료형 변환 (object -&gt; float)</h3>
<pre><code>import pandas as pd

df = pd.read_csv(&#39;./auto-mpg.csv&#39;, header = None)

df.columns = [&#39;mpg&#39;, &#39;cylinders&#39;, &#39;displacement&#39;, &#39;horsepower&#39;, &#39;weight&#39;,&#39;acceleration&#39;,&#39;model year&#39;, &#39;origin&#39;, &#39;name&#39;]

print(df.dtypes)
# 각 열의 자료형 확인

print(df[&#39;horsepower&#39;].unique())
# horsepower 열의 고유값 확인</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/8310082b-55be-46ee-b806-91daa3bab2ef/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20102121.jpg" alt=""></p>
<pre><code>import numpy as np

df[&#39;horsepower&#39;].replace(&#39;?&#39;, np.nan, inplace = True)
# ?을 NaN 값으로 대체

df.dropna(subset = [&#39;horsepower&#39;], axis = 0, inplace = True)
# horsepower 내 NaN 값 drop

df[&#39;horsepower&#39;] = df[&#39;horsepower&#39;].astype(&#39;float&#39;)
# object 형을 float 형으로 변환

print(df[&#39;horsepower&#39;].dtypes)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/8fd92703-3c06-42e9-a45c-0710ac34c335/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20102437.jpg" alt=""></p>
<h3 id="3-자료형-변환-int---object">3) 자료형 변환 (int -&gt; object)</h3>
<pre><code>print(df[&#39;origin&#39;].unique())

df[&#39;origin&#39;].replace({1: &#39;USA&#39;, 2: &#39;EU&#39;, 3: &#39;JPN&#39;}, inplace = True)
# 정수형 데이터를 문자형 데이터로 변환

print(df[&#39;origin&#39;].unique())
print(df[&#39;origin&#39;].dtypes)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/11295465-fbdf-43e3-9684-4b40b69ba29e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20102847.jpg" alt=""></p>
<h3 id="4-자료형-변환-object---category">4) 자료형 변환 (object -&gt; category)</h3>
<pre><code>df[&#39;origin&#39;] = df[&#39;origin&#39;].astype(&#39;category&#39;)
print(df[&#39;origin&#39;].dtypes)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/00d2de01-0fa9-455a-9267-033be4ac105d/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20103117.jpg" alt=""></p>
<h3 id="5-자료형-변환-category---object">5) 자료형 변환 (category -&gt; object)</h3>
<pre><code>df[&#39;origin&#39;] = df[&#39;origin&#39;].astype(&#39;str&#39;)
print(df[&#39;origin&#39;].dtypes)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/9591ec1c-dd25-4f47-b7cb-bef99f8841ad/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20103223.jpg" alt=""></p>
<h3 id="6-자료형-변환-int---category">6) 자료형 변환 (int -&gt; category)</h3>
<pre><code>print(df[&#39;model year&#39;].sample(3))

df[&#39;model year&#39;] = df[&#39;model year&#39;].astype(&#39;category&#39;)
print(df[&#39;model year&#39;].sample(3))</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/9a31ea9c-5f11-4fd6-81dc-5ee003cb4b76/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-21%20103600.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[16. 중복 데이터 처리]]></title>
            <link>https://velog.io/@ddaddo_data/16.-%EC%A4%91%EB%B3%B5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@ddaddo_data/16.-%EC%A4%91%EB%B3%B5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Tue, 20 Jul 2021 12:52:02 GMT</pubDate>
            <description><![CDATA[<h3 id="1-중복-데이터-확인">1) 중복 데이터 확인</h3>
<pre><code>import pandas as pd

df = pd.DataFrame({&#39;c1&#39; : [&#39;a&#39;, &#39;a&#39;,&#39;b&#39;,&#39;a&#39;,&#39;b&#39;],
                  &#39;c2&#39; : [1,1,1,2,2],
                  &#39;c3&#39; : [1,1,2,2,2]})

print(df)
df_dup = df.duplicated()
# 데이터 중에서 중복값 찾기

print(df_dup)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/9d10e072-849f-4dd6-9f85-8422a1bd2a07/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20213309.jpg" alt=""></p>
<h3 id="2-중복-데이터-제거">2) 중복 데이터 제거</h3>
<pre><code>df2 = df.drop_duplicates()</code></pre><p>subset 옵션을 통해 중복 데이터 제거 가능
데이터 중복 여부를 판단할 때, subset 옵션에 해당하는 열을 기준으로 판단</p>
<pre><code>df3 = df.drop_duplicates(subset = [&#39;c2&#39;, &#39;c3&#39;])
# c2 열과 c3열을 기준으로 데이터 중복 판단</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[15. 누락 데이터 처리]]></title>
            <link>https://velog.io/@ddaddo_data/15.-%EB%88%84%EB%9D%BD-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@ddaddo_data/15.-%EB%88%84%EB%9D%BD-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Tue, 20 Jul 2021 12:11:37 GMT</pubDate>
            <description><![CDATA[<p>** 누락 데이터가 NaN으로 표시되지 않는 경우도 있음**
** 해당 값을 NaN으로 치환해야함</p>
<pre><code>df.replace(&#39;?&#39;, np.nan, inplace = True)</code></pre><h3 id="1-누락-데이터-확인">1) 누락 데이터 확인</h3>
<pre><code>import seaborn as sns

df = sns.load_dataset(&#39;titanic&#39;)
df.info()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6b50bd75-2b98-4958-b5c0-aacc18caf22e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20202443.jpg" alt="">
age, embarked, deck, embark_town 컬럼에 NULL 값이 존재함을 알 수 있음</p>
<pre><code>nan_deck = df[&#39;deck&#39;].value_counts(dropna = False)
# 누락된 데이터를 함께 확인하기 위해서는 반드시 dropna = False

print(nan_deck)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/92c13f67-1a3d-494b-b2d4-b066d869a6a5/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20202818.jpg" alt=""></p>
<pre><code>print(df.head().isnull())
# 상위 5개의 행에 대해 nan값 존재여부 확인
# isnull() 의 경우, nan 값이면 True
# notnull() 의 경우, nan 값이면 False</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/cf60d3ed-8618-4336-a3b2-9df399b32915/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20202957.jpg" alt=""></p>
<pre><code>print(df.isnull().sum(axis = 0))
# 열별 nan값의 수</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/4f777f4d-4252-45f9-9fd6-7fb1082fa952/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20203223.jpg" alt=""></p>
<h3 id="2-누락-데이터-제거">2) 누락 데이터 제거</h3>
<pre><code>import seaborn as sns

df = sns.load_dataset(&#39;titanic&#39;)

missing_df = df.isnull()
# nan 값이 포함되어 있는 데이터 선택

for col in missing_df.columns:
    missing_count = missing_df[col].value_counts()
    # 열별로 nan 값인 데이터 수 구하기
    try:
        print(col, &#39;: &#39;, missing_count[True])
        # nan 값이 있으면 개수 출력
    except:
        print(col, &#39;: &#39;, 0)
        # nan 값이 없으면 0 출력</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/0a1e4ac8-ac0d-4e0a-9b57-6ce28f57898a/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20203645.jpg" alt=""></p>
<pre><code>df_thresh = df.dropna(axis =1, thresh = 500)
# nan 값이 500개 이상인 열을 모두 삭제

print(df_thresh.columns)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/c53d2bff-4e7a-43ea-9c58-e3da93acb59b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-20%20204200.jpg" alt=""></p>
<pre><code>df_age = df.dropna(subset = [&#39;age&#39;], how = &#39;any&#39;, axis = 0)
# age 열에 nan이 있으면 삭제
# how = &#39;any&#39; 의 경우, nan 값이 하나라도 존재하면 삭제한다는 뜻
# how = &#39;all&#39; 의 경우, 모든 데이터가 nan 값이면 삭제한다는 뜻</code></pre><h3 id="3-누락-데이터-치환---평균-ver">3) 누락 데이터 치환 - 평균 ver.</h3>
<pre><code>import seaborn as sns

df = sns.load_dataset(&#39;titanic&#39;)

mean_age = df[&#39;age&#39;].mean(axis = 0)
# age 열의 평균값 (nan 제외)

df[&#39;age&#39;].fillna(mean_age, inplace = True)
# age 열 중, nan 값인 데이터를 평균으로 대체</code></pre><h3 id="4-누락-데이터-치환---최빈-ver">4) 누락 데이터 치환 - 최빈 ver.</h3>
<pre><code>import seaborn as sns

df = sns.load_dataset(&#39;titanic&#39;)

most_freq = df[&#39;embark_town&#39;].value_counts(dropna = True).idxmax()
# embark_town 열의 최빈값 구하기

df[&#39;embark_town&#39;].fillna(most_freq, inplace = True)
# embark_town 열 중, nan 값인 데이터를 최빈값으로 대체</code></pre><h3 id="5-누락-데이터-치환---이웃-ver">5) 누락 데이터 치환 - 이웃 ver.</h3>
<pre><code>import seaborn as sns

df = sns.load_dataset(&#39;titanic&#39;)

df[&#39;embark_town&#39;].fillna(method = &#39;ffill&#39;, inplace = True)
# embark_town 열 중, nan 값인 데이터를 바로 직전 데이터로 대체
# method = &#39;bfill&#39;을 사용하면 nan 값인 데이터 바로 직후 데이터로 대체</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[14. Folium 라이브러리 - 지도 활용]]></title>
            <link>https://velog.io/@ddaddo_data/14.-Folium-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%A7%80%EB%8F%84-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@ddaddo_data/14.-Folium-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%A7%80%EB%8F%84-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Mon, 19 Jul 2021 03:23:30 GMT</pubDate>
            <description><![CDATA[<ul>
<li><strong>Folium 설치 방법</strong>
아나콘다 프롬프트를 실행한 후,
conda install -c conda-forge folium 입력</li>
</ul>
<h3 id="1-지도-만들기">1) 지도 만들기</h3>
<pre><code>import folium

seoul_map = folium.Map(location = [37.55, 126.98], zoom_start = 12)
# 위도, 경도 수치를 입력하면 그 지점을 중심으로 지도를 보여줌
# zoom_start 를 통해 확대 비율 조절

seoul_map.save(&#39;./seoul.html&#39;)
# 지도 저장</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/a06d6cfa-4b7a-417d-a312-4bb7af63d370/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20112857.jpg" alt=""></p>
<h3 id="2-지도-스타일-적용하기">2) 지도 스타일 적용하기</h3>
<pre><code>import folium

seoul_map = folium.Map(location = [37.55, 126.98], tiles = &#39;Stamen Terrain&#39;, zoom_start = 12)
# 위도, 경도 수치를 입력하면 그 지점을 중심으로 지도를 보여줌
# zoom_start 를 통해 확대 비율 조절

seoul_map.save(&#39;./seoul2.html&#39;)
# 지도 저장</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/27dbf144-4337-45ca-a5c9-98718f13a67e/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20113054.jpg" alt=""></p>
<h3 id="3-지도에-마커-표시하기">3) 지도에 마커 표시하기</h3>
<pre><code>import pandas as pd
import folium

df = pd.read_excel(&#39;./서울지역 대학교 위치.xlsx&#39;)

seoul_map = folium.Map(location = [37.55, 126.98], tiles = &#39;Stamen Terrain&#39;, zoom_start = 12)

for name, lat, lng in zip(df.index, df.위도, df.경도):
    folium.Marker([lat, lng], popup = name).add_to(seoul_map)
# 대학교 위치 정보를 Marker로 표시

seoul_map.save(&#39;./seoul_colleges.html&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/380f1e00-0781-4606-b625-cf3f0dc9debe/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20113437.jpg" alt=""></p>
<pre><code>import pandas as pd
import folium

df = pd.read_excel(&#39;./서울지역 대학교 위치.xlsx&#39;)

seoul_map = folium.Map(location = [37.55, 126.98], tiles = &#39;Stamen Terrain&#39;, zoom_start = 12)

for name, lat, lng in zip(df.index, df.위도, df.경도):
    folium.CircleMarker([lat, lng],
                        radius = 10,
                        color = &#39;brown&#39;,
                        fill = True,
                        fill_color = &#39;coral&#39;,
                        fill_opacity = 0.7,
                        popup = name).add_to(seoul_map)
# 대학교 위치 정보를 CircleMarker로 표시
# popup = name은 해당 마커를 클릭하면 지정한 열의 값이 보임

seoul_map.save(&#39;./seoul_colleges.html&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/46bd90ac-af78-4022-a49d-e6a094ab7c8d/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20115508.jpg" alt="">
+) 팝업 박스 크기 조절</p>
<pre><code>import pandas as pd
import folium

df = pd.read_excel(&#39;./서울지역 대학교 위치.xlsx&#39;)

seoul_map = folium.Map(location = [37.55, 126.98], tiles = &#39;Stamen Terrain&#39;, zoom_start = 12)

for name, lat, lng in zip(df.name, df.위도, df.경도):
    iframe = folium.IFrame(name)
    popup = folium.Popup(iframe, min_width=150, max_width=150)
    # popup 크기 설정

    folium.CircleMarker([lat, lng],
                        radius = 10,
                        color = &#39;brown&#39;,
                        fill = True,
                        fill_color = &#39;coral&#39;,
                        fill_opacity = 0.7,
                        popup = popup).add_to(seoul_map)
# 대학교 위치 정보를 CircleMarker로 표시
# popup = name은 해당 마커를 클릭하면 지정한 열의 값이 보임

seoul_map.save(&#39;./seoul_colleges.html&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/49930588-2cad-4d7b-8efa-ff6ba65037b0/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20122126.jpg" alt="">
<img src="https://images.velog.io/images/ddaddo_data/post/8849c3c0-e944-4fbe-a5a8-b78a75c6f8d9/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20122153.jpg" alt=""></p>
<h3 id="4-지도-영역에-단계구분도choropleth-map-표시하기">4) 지도 영역에 단계구분도(Choropleth Map) 표시하기</h3>
<pre><code>import pandas as pd
import folium
import json

file_path = &#39;./경기도인구데이터.xlsx&#39;
df = pd.read_excel(file_path, index_col = &#39;구분&#39;)
df.columns = df.columns.map(str)

geo_path = &#39;./경기도행정구역경계.json&#39;
try:
    geo_data = json.load(open(geo_path, encoding = &#39;utf-8&#39;))
except:
    geo_data = json.load(open(geo_path, encoding = &#39;utf-8-sig&#39;))

g_map = folium.Map(location = [37.5502, 126.982],
                  tiles = &#39;Stamen Terrain&#39;, zoom_start = 9)

year = &#39;2007&#39;
# 출력할 년도 선택

folium.Choropleth(geo_data = geo_data, # 지도 경계
                 data = df[year], # 표시하려는 데이터
                 columns = [df.index, df[year]], # 열 지정
                 fill_color = &#39;YlOrRd&#39;, fill_opacity = 0.7, line_opacity = 0.3,
                 threshold_scale = [10000, 100000, 300000, 500000, 700000],
                 key_on = &#39;feature.properties.name&#39;,).add_to(g_map)

g_map.save(&#39;./gyeonggi_population_&#39;+year+&#39;.html&#39;)</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/d1bda193-8578-4938-8d5b-5ac70eabba4a/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20120533.jpg" alt="">
+) 2017년도 버전
<img src="https://images.velog.io/images/ddaddo_data/post/e60687ff-8e10-4046-ad4c-2ac9a1b53700/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20120810.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[13. Seaborn 라이브러리 - 고급 그래프 도구]]></title>
            <link>https://velog.io/@ddaddo_data/13.-Seaborn-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B3%A0%EA%B8%89-%EA%B7%B8%EB%9E%98%ED%94%84-%EB%8F%84%EA%B5%AC</link>
            <guid>https://velog.io/@ddaddo_data/13.-Seaborn-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B3%A0%EA%B8%89-%EA%B7%B8%EB%9E%98%ED%94%84-%EB%8F%84%EA%B5%AC</guid>
            <pubDate>Mon, 19 Jul 2021 02:15:30 GMT</pubDate>
            <description><![CDATA[<h3 id="1-회귀선이-있는-산점도">1) 회귀선이 있는 산점도</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)
# Seaborn 제공 titanic 데이터 셋 사용

sns.set_style(&#39;darkgrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
# 그래프 객체 생성

sns.regplot(x = &#39;age&#39;,
           y = &#39;fare&#39;,
           data = titanic,
           ax = ax1)
# 그래프 그리기 - 선형 회귀선 표시

sns.regplot(x = &#39;age&#39;,
           y = &#39;fare&#39;,
           data = titanic,
           ax = ax2,
           fit_reg = False)
# fit_reg = False 는 선형 회귀선 미표시

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/a14d7183-904a-4b0e-a085-34c777b63a15/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20100941.jpg" alt=""></p>
<h3 id="2-히스토그램커널-밀도-그래프">2) 히스토그램/커널 밀도 그래프</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;darkgrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize = (15, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

sns.distplot(titanic[&#39;fare&#39;], ax = ax1)
# 기본값

sns.distplot(titanic[&#39;fare&#39;], hist = False, ax = ax2)
# hist = False 인 경우 (히스토그램이 표시되지 않음)

sns.distplot(titanic[&#39;fare&#39;], kde = False, ax = ax3)
# kde = False 인 경우 (커널 밀도 그래프를 표시하지 않음)

ax1.set_title(&#39;titanic fare - hist/ked&#39;)
ax2.set_title(&#39;titanic fare - ked&#39;)
ax3.set_title(&#39;titanic fare - hist&#39;)

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/9ef87c89-0b1e-45eb-bba0-10b3a9e545dc/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20102950.jpg" alt=""></p>
<h3 id="3-히트맵">3) 히트맵</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

table = titanic.pivot_table(index = [&#39;sex&#39;], columns = [&#39;class&#39;], aggfunc = &#39;size&#39;)
# 피벗테이블을 활용하여 범주형 변수를 행은 성별, 열은 클래스로 재구분하여 정리
# aggfunc = &#39;size&#39;는 데이터 값의 크기를 기준으로 집계

sns.heatmap(table, #데이터 프레임
           annot = True, fmt = &#39;d&#39;, # 데이터 값 표시 여부, 정수형 포맷
           cmap = &#39;YlGnBu&#39;, # 컬러 맵
           linewidth = .5, # 구분 선 굵기
           cbar = False) # 컬러바 표시 여부</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/e835f89c-4eb4-43ab-b28e-c28f9ec345c9/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20103424.jpg" alt=""></p>
<h3 id="4-범주형-데이터의-산점도">4) 범주형 데이터의 산점도</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize = (15, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

sns.stripplot(x = &#39;class&#39;,
             y = &#39;age&#39;,
             data = titanic,
             ax = ax1)
# 이산형 변수의 분포 (데이터 분산 미고려)

sns.swarmplot(x = &#39;class&#39;,
             y = &#39;age&#39;,
             data = titanic,
             ax = ax2)
# 이산형 변수의 분포 (데이터 분산 고려 - 중복 X)

sns.swarmplot(x = &#39;class&#39;,
             y = &#39;age&#39;,
             data = titanic,
             ax = ax3,
             hue = &#39;sex&#39;)
# 이산형 변수의 분포 (데이터 분산 고려 - 중복 X)
# 성별 열의 데이터 값인 남/여 성별을 색상으로 구분하여 출력

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/be8051b4-5b8d-4367-909a-fa4d5c674b44/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20104120.jpg" alt=""></p>
<h3 id="5-막대-그래프">5) 막대 그래프</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize = (15, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

sns.barplot(x = &#39;sex&#39;, y = &#39;survived&#39;, data = titanic, ax = ax1)
# x축, y축에 변수 할당
sns.barplot(x = &#39;sex&#39;, y = &#39;survived&#39;, hue = &#39;class&#39;, data = titanic, ax = ax2)
# x축, y축에 변수 할당 / hue 옵션 추가(class 별로 색상 다르게)
sns.barplot(x = &#39;sex&#39;, y = &#39;survived&#39;, hue = &#39;class&#39;, dodge = False, data = titanic, ax = ax3)
# # x축, y축에 변수 할당 / hue 옵션 추가(class 별로 색상 다르게) / 누적</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/aedb58a0-e252-430e-b5c9-707a87072d48/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20104452.jpg" alt=""></p>
<h3 id="6-빈도-그래프">6) 빈도 그래프</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize = (15, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

sns.countplot(x = &#39;class&#39;, palette = &#39;Set1&#39;, data = titanic, ax = ax1)
# 기본값
# palette를 다르게 하여 색상 변경 가능

sns.countplot(x = &#39;class&#39;, hue = &#39;who&#39;, palette = &#39;Set2&#39;, data = titanic, ax = ax2)
# who 별로 다르게 하여 색상 표현

sns.countplot(x = &#39;class&#39;, hue = &#39;who&#39;, palette = &#39;Set3&#39;, dodge = False, data = titanic, ax = ax3)
# who 별로 다르게 하여 색상 표현
# 누적 출력

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/847f661c-a09b-4f06-b55c-051c55e37219/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20104925.jpg" alt=""></p>
<h3 id="7-박스-플롯바이올린-그래프">7) 박스 플롯/바이올린 그래프</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

fig = plt.figure(figsize = (15, 10))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

sns.boxplot(x = &#39;alive&#39;, y = &#39;age&#39;, data = titanic, ax = ax1)
# 박스 플롯 (기본값)

sns.boxplot(x = &#39;alive&#39;, y = &#39;age&#39;, hue = &#39;sex&#39;, data = titanic, ax = ax2)
# 성별을 나눠서 박스 플롯을 그림

sns.violinplot(x = &#39;alive&#39;, y = &#39;age&#39;, data = titanic, ax = ax3)
# 바이올린 그래프 (기본값)

sns.violinplot(x = &#39;alive&#39;, y = &#39;age&#39;, hue = &#39;sex&#39;, data = titanic, ax = ax4)
# 성별을 나눠서 바이올린 그래프를 그림

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/20b4bc79-32b9-4be8-8de0-4498fd44df32/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20105416.jpg" alt=""></p>
<h3 id="8-조인트-그래프">8) 조인트 그래프</h3>
<p>조인트 그래프는 산점도를 기본으로 표시하고
x-y축에 각 변수에 대한 히스토그램을 동시에 보여줌
: 두 변수의 관계와 데이터가 분산되어 있는 정도를 한눈에 파악하기 좋음</p>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

j1 = sns.jointplot(x = &#39;fare&#39;, y = &#39;age&#39;, data = titanic)
# 산점도
j2 = sns.jointplot(x = &#39;fare&#39;, y = &#39;age&#39;, kind = &#39;reg&#39;, data = titanic)
# 회귀선
j3 = sns.jointplot(x = &#39;fare&#39;, y = &#39;age&#39;, kind = &#39;hex&#39;, data = titanic)
# 육각 그래프
j4 = sns.jointplot(x = &#39;fare&#39;, y = &#39;age&#39;, kind = &#39;kde&#39;, data = titanic)
# 커럴 밀집 그래프

j1.fig.suptitle(&#39;titanic fare - scatter&#39;, size = 15)
j2.fig.suptitle(&#39;titanic fare - reg&#39;, size = 15)
j3.fig.suptitle(&#39;titanic fare - hex&#39;, size = 15)
j4.fig.suptitle(&#39;titanic fare - kde&#39;, size = 15)

plt.show()</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/6258624e-34b8-48bc-adf6-03aa197cfacf/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20110604.jpg" alt="">
<img src="https://images.velog.io/images/ddaddo_data/post/2e239bff-5970-4cc5-bd40-0cbed548ad69/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20110622.jpg" alt=""></p>
<h3 id="9-조건을-적용하여-화면을-그리드로-분할하기">9) 조건을 적용하여 화면을 그리드로 분할하기</h3>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

g = sns.FacetGrid(data = titanic, col = &#39;who&#39;, row = &#39;survived&#39;)
# 조건에 따라 그리드 나누기
# who열과 row열에 따라 나누기

g = g.map(plt.hist, &#39;age&#39;)
# 그래프 적용하기
# 각 조건에 맞는 탑승객을 구분하여 age열의 나이를 기준으로 히스토그램을 그림</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/1a52364b-f6dc-40d4-8bb5-492937367ef5/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20111125.jpg" alt=""></p>
<h3 id="10-이변수-데이터의-분포">10) 이변수 데이터의 분포</h3>
<p>pairplot() 함수는 인자로 전달되는 데이터프레임의 열을
2개씩 짝을 지을 수 있는 모든 조합에 대해 표현함</p>
<pre><code>import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset(&#39;titanic&#39;)

sns.set_style(&#39;whitegrid&#39;)
# 스타일 테마 설정

titanic_pair = titanic[[&#39;age&#39;, &#39;pclass&#39;, &#39;fare&#39;]]
# 3개의 변수 선택
g = sns.pairplot(titanic_pair)
# 조건에 따라 그리드 나누기
# 변수가 3개이므로, 3*3 = 9개의 그리드가 만들어짐</code></pre><p><img src="https://images.velog.io/images/ddaddo_data/post/00c11c24-78f2-49d3-b725-383d4bd3df24/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202021-07-19%20111451.jpg" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>