<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ddoy_eon.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 09 Sep 2022 17:34:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. ddoy_eon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ddoy_eon" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[n213]]></title>
            <link>https://velog.io/@ddoy_eon/n213-v444e4dt</link>
            <guid>https://velog.io/@ddoy_eon/n213-v444e4dt</guid>
            <pubDate>Fri, 09 Sep 2022 17:34:10 GMT</pubDate>
            <description><![CDATA[<h4 id="nonetype-object-is-not-subscriptable">&#39;NoneType&#39; object is not subscriptable</h4>
<pre><code>df.dtypes == &#39;object&#39;
df_object=df[[&#39;Suburb&#39;,&#39;Address&#39;,&#39;Type&#39;,&#39;Method&#39;,&#39;SellerG&#39;,&#39;Regionname&#39;,&#39;CouncilArea&#39;]]

for i in df_object:
    if len(df[i].unique())&gt; 50:
    # if df[i].nunique() &gt; 50 : 이어도 error
        df= df.drop(i, axis=1, inplace=True)


&gt;&gt;&gt; &#39;NoneType&#39; object is not subscriptable</code></pre><p>원인 : df = df.drop으로 썼음
해결 : df.drop(i, axis=1, inplace=True) 이렇게 작성함</p>
<h4 id="dropna">dropna</h4>
<p>원하는 행은 꼭 subset=[&#39;컬럼명&#39;]</p>
<pre><code>df.dropna(subset=[&#39;Price&#39;],inplace=True)</code></pre><h4 id="중복제거">중복제거</h4>
<pre><code>df.drop_duplicates(inplace=True)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[n213[정규화 회귀모델, 릿지,라쏘]]]></title>
            <link>https://velog.io/@ddoy_eon/n213%EC%A0%95%EA%B7%9C%ED%99%94-%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8-%EB%A6%BF%EC%A7%80%EB%9D%BC%EC%8F%98</link>
            <guid>https://velog.io/@ddoy_eon/n213%EC%A0%95%EA%B7%9C%ED%99%94-%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8-%EB%A6%BF%EC%A7%80%EB%9D%BC%EC%8F%98</guid>
            <pubDate>Thu, 08 Sep 2022 05:18:38 GMT</pubDate>
            <description><![CDATA[<pre><code>import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import LinearRegression, Ridge, Lasso
import warnings
warnings.filterwarnings(action=&#39;ignore&#39;)</code></pre><pre><code>#결측치 확인
df.isna().sum()[df.isna().sum() !=0]/len(df)</code></pre><ul>
<li>[] len(df)를 나눠주는 이유는 ..?
<img src="https://velog.velcdn.com/images/ddoy_eon/post/2de88c0f-89f2-41c9-9399-17992957a573/image.png" alt=""><pre><code># 고유한 값이 너무 많은 컬럼도 예측에 도움이 되지 않으니 확인하고 삭제해주겠습니다. 
df.nunique()[df.nunique()/len(df)&gt;0.7]
cols = [&#39;Id&#39;, &#39;LotArea&#39;]
df.drop(cols, axis=1, inplace=True)</code></pre><pre><code>#타겟분포확인
# 왼쪽으로 치우쳐진 분포입니다. 주택 판매 가격이 400000을 넘지 않는 샘플만 다시 추출하도록 하겠습니다.
df = df[df[&#39;SalePrice&#39;]&lt;400000]
sns.histplot(df[&#39;SalePrice&#39;], bins=50)
# 수치형 컬럼과 타겟간의 상관관계를 확인해보겠습니다. 상관관계가 높은 상위 10개 컬럼만 보도록하겠습니다. 
# target = SalePrice
df.corr()[&#39;SalePrice&#39;].sort_values(ascending=False).head(11)</code></pre><h4 id="modeling">Modeling</h4>
<pre><code>from sklearn.model_selection import train_test_split
X = df.drop(&#39;SalePrice&#39;, axis=1)
y = df[&#39;SalePrice&#39;]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)</code></pre><h4 id="모델링에-필요한-두-가지-전처리">모델링에 필요한 두 가지 전처리</h4>
</li>
</ul>
<ol>
<li>Scaling scaler = StandardScaler()</li>
<li>Encoding<pre><code># 결측치를 먼저 평균으로 모두 채워주겠습니다. 
X_trian.fillna(X_train.mean(), inplace=True)
X_test.fillna(X_test.mean(), inplace=True)</code></pre><pre><code>#수치형 변수만 스케일링
#dtype으로 수치형 변수 판별하기 
numeric_feats = X_train.dtypes[X_train.dtypes != &quot;object&quot;].index
scaler = StandardScaler()
X_train[numeric_feats] = scaler.fit_transform(X_train[numeric_feats])
X_test[numeric_feats] = scaler.transform(X_test[numeric_feats])</code></pre><pre><code># .T가 행과 열 위치 바꿈
X_train[numeric_feats].describe().T[[&#39;mean&#39;,&#39;std&#39;]]</code></pre><h4 id="one-hot-encoding">One-Hot encoding</h4>
<pre><code>from category_encoders import OneHotEncoder
ohe = OneHotEncoder()
</code></pre></li>
</ol>
<p>X_train_ohe = ohe.fit_transform(X_train)
X_test_ohe = ohe.fit_transform(X_test)</p>
<pre><code></code></pre><p>(X_train_ohe.dtypes == &#39;object&#39;).sum()</p>
<pre><code></code></pre><p>mszoning_cols = [x for x in X_train_ohe.columns if &#39;MSZoning&#39; in x]
X_train_ohe[mszoning_cols].head(3)</p>
<p>#범주형 특성이 어떻게 변환이 되었는지 확인
ohe.category_mapping</p>
<pre><code>#### 기준모델 : 평균이용</code></pre><p>from sklearn.metrics import r2_score, mean_absolute_error</p>
<p>baseline = [y_train.mean()]*len(y_train)
baseline_r2 = r2_score(y_train, baseline)
baseline_mae = mean_absolute_error(y_train, baseline)</p>
<pre><code>#### 다중선형회귀 OLS</code></pre><p>def print_score(model, X_train, y_train, X_test, y_test) :
    train_score = np.round(model.score(X_train, y_train) , 3)
    val_score = np.round(np.mean(cross_val_score(model, X_train, y_train, scoring=&#39;r2&#39;, cv=3).round(3)),3)
    test_score = np.round(model.score(X_test, y_test),3)</p>
<pre><code>return train_score, val_score, test_score</code></pre><pre><code></code></pre><p>from sklearn.model_selection import cross_val_score</p>
<h1 id="선형회귀를-ols라는-객체에-저장합니다">선형회귀를 ols라는 객체에 저장합니다.</h1>
<p>ols = LinearRegression()</p>
<h1 id="모델-학습">모델 학습</h1>
<p>ols.fit(X_train_ohe, y_train)</p>
<h1 id="성능-비교">성능 비교</h1>
<p>ols_train, ols_val, ols_test = print_score(ols,X_train_ohe, y_train, X_test_ohe, y_test)</p>
<pre><code>#### ridge regression 모델 만들기</code></pre><p>for alpha in [0.01, 0.1, 1.0, 1, 100.0, 1000.0, 10000.0]:
    print(f&quot;Ridge Regression, alpha={alpha}&quot;)</p>
<pre><code>#모델학습
ridge = Ridge(alpha=alpha)
ridge.fit(X_train_ohe, y_train)

#성능확인()#print_score 위에서 만들었던 함수
print_score(ridge,X_train_ohe, y_train, X_test_ohe, y_test)

#coefficients 계수
#절대값 상위 40개의 회귀계수만 불러오기 
coefficients = pd.Series(ridge.coef_, X_train_ohe.columns)
idx = np.abs(coefficients).head(40).index</code></pre><p>```</p>
<h4 id="sklearn에서-내장된-교차검증-알고리즘-ridgecv">sklearn에서 내장된 교차검증 알고리즘 ridgeCV</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[함수 찐 찐 정복 ]]></title>
            <link>https://velog.io/@ddoy_eon/%ED%95%A8%EC%88%98-%EC%B0%90-%EC%B0%90-%EC%A0%95%EB%B3%B5</link>
            <guid>https://velog.io/@ddoy_eon/%ED%95%A8%EC%88%98-%EC%B0%90-%EC%B0%90-%EC%A0%95%EB%B3%B5</guid>
            <pubDate>Wed, 07 Sep 2022 22:53:28 GMT</pubDate>
            <description><![CDATA[<h4 id="return이-없는-함수">return이 없는 함수</h4>
<pre><code>def selfintroduction(name, age, address):
    print(f&quot;나는 {name}이고, {age}살이고 {address}에 거주합니다.&quot;)

selfintroduction(&quot;똑똑2&quot;, 24, &quot;경기도&quot;)

&gt;&gt;&gt;나는 똑똑2이고, 24살이고 경기도에 거주합니다. </code></pre><h4 id="파라미터가-존재하지-않지만-return-함수">파라미터가 존재하지 않지만, return 함수</h4>
<pre><code>import random

def sundaySchedule():
    li = [&quot;하루종일 공부하기&quot;,&quot;하루종일 놀기&quot;,&quot;털기춤&quot;,&quot;섹시 웨이븡&quot;]
    tjob = random.choice(li)
    return tjob

x = sundaySchedule()
print(&quot;일요일인 오늘은 &quot;+x+&quot;를  하는 날로 당첨되었습니다.&quot;)
# print(&quot;일요일인 오늘은 &quot;+sundaySchedule()+&quot;를 하는 날로 당첨되었습니다. )

&gt;&gt;&gt; 일요일인 오늘은 하루종일 공부하기를  하는 날로 당첨되었습니다.
#예시도 무슨 하루종일 공부야 !!!!!!!!! 어이없어</code></pre><h4 id="2개의-리스트를-인자로-받아서-동일한-인덱스에-위치한-원소들을-곱하여-새로운-리스트를-도출하는-프로그램-예제">2개의 리스트를 인자로 받아서 동일한 인덱스에 위치한 원소들을 곱하여 새로운 리스트를 도출하는 프로그램 예제</h4>
<pre><code>def listMul(x1, x2): #입력으로 2개의 리스트를 받음
    tlist=[] #동일한 인덱스 두 원소를 곱한 결과를 저장할 리스트
    for i in range(len(x1)):
        tlist.append(x1[i]*x2[i])
    return tlist #리스트로 값을 돌려줌

li1 = [2,4,6,8,10]
li2= [1,2,3,7,9]

newList = listMul(li1,li2) #함수의 리턴 값 list를 newList에 할당함

print(f&quot;li1 = {li1}&quot;)
print(f&quot;li2 = {li2}&quot;)
print(f&quot;두 리스트의 동일 인데스 원소의 곱셈 결과:{newList}&quot;)

&gt;&gt;&gt; 
li1 = [2, 4, 6, 8, 10]
li2 = [1, 2, 3, 7, 9]
두 리스트의 동일 인데스 원소의 곱셈 결과:[2, 8, 18, 56, 90]</code></pre><pre><code>def evOdGrouping(): #입력받은 데이터를 짝수와 홀수로 그룹핑하는 함수
    i=1 #함수 내에서 할당한 변수는 함수 내에서만 유효
    while i &lt;= 10:
        in1 = int(input(f&quot;{i}번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :&quot;))
        if in1 % 2 == 0 : #짝수이면
            elist.append(in1) #짝수들
        else : #홀수이면
            olist.append(in1) #홀수들
        i += 1 #i값을 1씩 증가시킴

def mulElements(li):#리스트의 원소들을 모두 곱해 리턴
    mul =1 #곱셈의 결과 저장 변수
    for el in li:
        mul*=el
    return mul #return시 mul값을 돌려줌

elist = [] #짝수의 모음
olist = [] #홀수의 모음

evOdGrouping() #gkatnghcnf

print(f&quot;elist = {elist}, olist ={olist}&quot;)
print(f&quot;짝수들의 곱 :{mulElements(elist)}&quot;)
print(f&quot;홀수들의 곱 :{mulElements(olist)}&quot;)

&gt;&gt;&gt; 1번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. : [입력창]
1번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :1
2번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :2
3번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :3
4번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :4
5번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :5
6번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :6
7번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :7
8번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-8
9번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-9
10번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-10
elist = [2, 4, 6, -8, -10], olist =[1, 3, 5, 7, -9]
짝수들의 곱 :3840
홀수들의 곱 :-945</code></pre><h4 id="함수를-이용해서-평균과-분산-구하기">함수를 이용해서 평균과 분산 구하기</h4>
<pre><code>#variance 구하기_함수 응용
import random
li1 =[] #리스트
li1_avg = None #리스트 1의 평균값

for _ in range(50):#range에서 넘겨주는 값을 사용하지 않을 때 _를 사용함
    li1.append(random.randint(1,50))

print(f&quot;li1 = {li1}&quot;)

#함수의 정의를 함수의 호출 이전에 하면 문제없음.
def average(li):
    sum = 0
    for i in li:
        sum += i 
        return (sum/len(li))

def variance(li,avg):
    squaredAdd = 0
    for i in li:
        squaredAdd += (i-avg)**2
    return squaredAdd/len(li)

li1_avg = average(li1)
li1_var = variance(li1, li1_avg)

print(f&quot;li1의 평균 : {li1_avg}, li1의 분산 : {li1_var:.4f}&quot;)</code></pre><h4 id="람다함수">람다함수</h4>
<p>람다함수는 익명함수 
def가 정상함수 </p>
<p>lambda 넘겨줄 인자들 (arguments) : 표현식(expression)
lambda 함수는 return구문을 사용하지 않는다. </p>
<pre><code>lambda 넘겨줄 인자들 (arguments) : 표현식(expression)
square = lambda a:a**2
x = square(3)
print(x)</code></pre><pre><code>#인자의 갯수는 일치해야 함(선언과 동시에 호출)
x = (lambda a,b : a+b)(3,5)
print(f&quot;a+b의 결과는 {x}&quot;)</code></pre><pre><code>def power(n):
    return lambda x : x**n

 orderPower = power(4)
 print(f&quot;3**4의 값은 : {orderPower(3)}&quot;)

 &gt;&gt; 3**4의 값은 : 81</code></pre><h4 id="mapfunction-iterable1-iterable2">map(function, iterable1, iterable2,...)</h4>
<pre><code>def mul(x,y):
    return x,y
x = map(mul,(&quot;orange&quot;,&#39;banana&#39;,&#39;strawberry&#39;),(&#39;노랗다&#39;,&quot;길다&quot;,&quot;빨갛다&quot;))

x=list(x)
print(f&quot;x={x}&quot;)

y=map(lambda a,b : a+b,(&quot;orange&quot;,&#39;banana&#39;,&#39;strawberry&#39;),(&#39;노랗다&#39;,&quot;길다&quot;,&quot;빨갛다&quot;))
y = list(y)
print(f&quot;y = {y}&quot;)
&gt;&gt;&gt;
x=[(&#39;orange&#39;, &#39;노랗다&#39;), (&#39;banana&#39;, &#39;길다&#39;), (&#39;strawberry&#39;, &#39;빨갛다&#39;)]
y = [&#39;orange노랗다&#39;, &#39;banana길다&#39;, &#39;strawberry빨갛다&#39;]</code></pre><h4 id="filter조건함수function-iterable-함수">filter(조건함수(function), iterable) 함수</h4>
<pre><code>def odd(x):
    return True if x %2 ==1 else False

li = list(range(1,11))
oddlterator = filter(odd, li)

oddList = list(oddlterator)
pritn(f&quot;일반함수를 사용한 홀수 원소들의 필터링 결과 : {oddList}&quot;)
&gt;&gt;&gt;일반함수를 사용한 홀수 원소들의 필터링 결과 : [1, 3, 5, 7, 9]

### 람다함수 이용
oddlter = filter(lambda x : x%2 == 1, li)
oddLi = list(oddlter)
print(f&quot;람다함수를 사용한 홀수 원소들의 필터링 결과 : {oddLi}&quot;)
&gt;&gt;&gt;람다함수를 사용한 홀수 원소들의 필터링 결과 : [1, 3, 5, 7, 9]</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[n211, 기준모델, 선형회귀모델, 다항선형회귀, 회귀평가지표]]></title>
            <link>https://velog.io/@ddoy_eon/n211-%EA%B8%B0%EC%A4%80%EB%AA%A8%EB%8D%B8-%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8-%EB%8B%A4%ED%95%AD%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80-%ED%9A%8C%EA%B7%80%ED%8F%89%EA%B0%80%EC%A7%80%ED%91%9C</link>
            <guid>https://velog.io/@ddoy_eon/n211-%EA%B8%B0%EC%A4%80%EB%AA%A8%EB%8D%B8-%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8-%EB%8B%A4%ED%95%AD%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80-%ED%9A%8C%EA%B7%80%ED%8F%89%EA%B0%80%EC%A7%80%ED%91%9C</guid>
            <pubDate>Wed, 07 Sep 2022 02:09:06 GMT</pubDate>
            <description><![CDATA[<p><a href="https://colab.research.google.com/github/codestates/ds-section2-sprint1/blob/main/n211-linear-regression/n211-Linear-regression.ipynb#scrollTo=q9Np6K5avKdF">링크텍스트</a></p>
<pre><code>#con에서 지상생활면적이 1700보다 크고 1800보다 작은 값에서 가격을 비교
con = (df[&#39;GrLivArea&#39;]&gt;=1700) &amp; (df[&#39;GrLivArea&#39;]&lt; 1800)
df.loc[con, &#39;SalePrice].min()</code></pre><h4 id="set_option">.set_option</h4>
<pre><code>#판다스 객체들의 결과에서 쉼표를 넣고 소수점 아래는 생략하도록 설정할 수 있습니다.
#float 형식 소숫점 1자리, 쉼표 포함
pd.set_option.display.float_format = &#39;{:,.1f}&#39;.format
pd.set_option(&#39;display.float_format&#39;, &#39;{:,.1f}&#39;.format)</code></pre><pre><code>#기본세팅
pd.set_option(&#39;display.float_format&#39;,None)</code></pre><p><img src="https://velog.velcdn.com/images/ddoy_eon/post/4e251cad-4890-4f86-b1a8-47f1e4bbcc8a/image.png" alt="">
<img src="https://velog.velcdn.com/images/ddoy_eon/post/81f3ddcc-eb1c-43e3-b9e5-971117985694/image.png" alt=""></p>
<h5 id="distplot">distplot</h5>
<p>kind = &#39; histplot&#39;, &#39;kdeplot&#39;, &#39;ecdfplo&#39; 3가지 plot그릴 수 있음
kde(Kernel Density Estimator) 커널밀도추정 = 곡선화 시켜 줌</p>
<blockquote>
<p>산점도에 가장 잘 맞는 직선을 그려주면 그것이 회귀 
회귀선 : 실제값- 모델의 예측값[잔차] RSS를 최소로 하는 직선 찾기
RSS : 선형회귀모델의 비용함수. 모델을 학습한다: 비용함수를 최소로 하는 파라미터를 찾는 것.
OLS : Ordinary Least Square : 최소제곱법, 잔차의 제곱을 최대한 작게함.</p>
</blockquote>
<h5 id="snsregplot">sns.regplot</h5>
<p> 추세선 95% 신뢰구간을 나타냄</p>
<hr>
<blockquote>
<p>종속변수는 반응(Response)변수, 레이블(Label), 타겟(Target)등으로 불립니다.
독립변수는 예측(Predictor)변수, 설명(Explanatory)변수, 특성(feature) 등으로 불립니다.</p>
</blockquote>
<p> scikit-learn 이용해서 선형회귀모델 만들기 
 특성행렬(독립변수) = X 타겟배열(종속변수) = y
 <code>.fit()</code> : 모델학습 <code>predict()</code> : 새로운 데이터 예측</p>
<h3 id="다중선형회귀">다중선형회귀</h3>
<pre><code>from sklearn.linear_model import LinearRegression
#feature과 target을 먼저 지정해줌
feature = [&#39;GrLivArea&#39;, &#39;OverallQual&#39;]
target = &#39;SalePrice&#39;

X=df[feature]
y=df[target]</code></pre><ul>
<li><input disabled="" type="checkbox"> 3차원 그래프 그리는 것도 해보기 ~ 라고 미뤄두기 😉<pre><code>변수 3개 2차원 그래프 그리기
#독립변수 하나를 hue로 지정해줌
#size
sns.scatterplot(x=dff[&#39;GrLivArea&#39;], y=df[&#39;SalePrice&#39;], hue=df[&#39;OverallQual&#39;], size=df[&#39;OverallQual&#39;], alpha=0.6)</code></pre><pre><code>#모델학습
multiple_ols = LinearRegression()
multiple_ols.fit(X,y)</code></pre><h4 id="다항선형회귀">다항선형회귀</h4>
<pre><code>from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
</code></pre></li>
</ul>
<h2 id="polynomialfeatures를-사용하면-다항회귀를-만들-수-있습니다">PolynomialFeatures를 사용하면 다항회귀를 만들 수 있습니다.</h2>
<p>#degree=2 이차항
def PolynomialRegression(degree=2, <strong>kwargs)
    return make_pipline(PolynomialFeatures(degree)),
                        LinearRegression(</strong>kwargs))</p>
<p>features = [&#39;GrLivArea&#39;, &#39;OverallQual&#39;]
target = &#39;SalePrice&#39;</p>
<p>X = df[features]
y = df[target]</p>
<p>#2차항의 다항선형회귀
poly_ols = PolynomialRegression(degree=2)
poly_ols.fit(X,y)</p>
<pre><code>[링크텍스트](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline)
pipeline : 데이터변환(전처리)과 모델을 연결하여 코드를 줄이고 재사용성 높임
scaler를 불러오고 , fit, transform한 후 모델을 학습하는 일련의 작업이 있었지만 pipeline 을 사용하면 **단순히 어떤 스케일러를 쓰고 모델을 쓸것인지만 입력하면 됨**
make_pipeline : 여러 개의 사이킷런 변환기(fit, transform)와 그 뒤에 fit와 predict를 구현한 사이킷런 추정기 연결
따로 튜플로 단계를 작성할 필요가 없다. 모델만 써줘도 자동으로 class 이름을 소문자로 생성
[링크텍스트](https://hhhh88.tistory.com/6)

#### 회귀 평가지표
- MSE RMSE MAE R-sqaured</code></pre><p>from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error</p>
<h1 id="실제값">실제값</h1>
<p>y_real = df[&#39;SalePrice&#39;]
#기준모델
y_base = [predict]*len(df)</p>
<pre><code></code></pre><p>#단순선형회귀 모델 학습
simple_ols = LinearRegression()
simple_ols.fit(X,y)</p>
<p>feature = [&#39;GrLivArea&#39;] #독립변수 입력
X_simple = df[feature]  #X에 독립변수 넣어주기<br>y_simple = simple_ols.predict(X_simple) #학습한 x로 y값 예측</p>
<pre><code></code></pre><p>#다중선형회귀 모델학습
multiple_ols = LinearRegression()
multiple_ols.fit(X,y)</p>
<p>features = [&#39;GrLivArea&#39;, &#39;OverallQual&#39;]
X_multiple = df[features]
y_multiple = multiple_ols.predict(X_multiple)</p>
<pre><code></code></pre><p>#다항선형회귀
y_poly = poly_ols.predict(X_multiple)</p>
<pre><code>* [ ] 헷갈리는 부분 꼭 확인하기 함수 !!! </code></pre><p>#위에서 y_real = df[&#39;SalePrice&#39;] #종속변수
#mse, rmse, mae, r2[error]를 출력하는 함수입니다.</p>
<h1 id="여기서-y_pred가-밑에-y_basey_simple가-들어가는-건가-뭐지">여기서 y_pred가 밑에 y_base,y_simple가 들어가는 건가?? 뭐지</h1>
<p>def eval_models(y_pred, y_real=y_real):
     mse = mean_squared_error(y_real, y_pred)
    rmse = np.sqrt(mse) #제곱근
    mae = mean_absolute_error(y_real, y_pred)
    r2 = r2_score(y_real, y_pred)</p>
<pre><code>return mse, rmse, mae, r2</code></pre><pre><code></code></pre><p>#평가지표 값
base_mse, base_rmse, base_mae, base_r2 = eval_models(y_base) #기준모델
simple_mse, simple_rmse, simple_mae, simple_r2 = eval_models(y_simple)
multiple_mse, multiple_rmse, multiple_mae, multiple_r2 = eval_models(y_multiple)
poly_mse, poly_rmse, poly_mae, poly_r2 = eval_models(y_poly)</p>
<pre><code></code></pre><h1 id="표만들기">표만들기</h1>
<p>comparison_metrics = pd.DataFrame(index=[&#39;mse&#39;, &#39;rmse&#39;, &#39;mae&#39;, &#39;r2&#39;], columns=[&#39;Base&#39;,&#39;Simple&#39;, &#39;Multiple&#39;, &#39;Polynomial&#39;])
comparison_metrics[&#39;Base&#39;] = [base_mse, base_rmse, base_mae, base_r2 ]
comparison_metrics[&#39;Simple&#39;] = [simple_mse, simple_rmse, simple_mae, simple_r2]
comparison_metrics[&#39;Multiple&#39;] = [multiple_mse, multiple_rmse, multiple_mae, multiple_r2]
comparison_metrics[&#39;Polynomial&#39;] = [poly_mse, poly_rmse, poly_mae, poly_r2]
comparison_metrics</p>
<pre><code>#### 선형회귀모델의 계수 Coefficients
- 선형회귀모델의 큰 장점: 직관적 해석이 가능
- `coef_`</code></pre><p>#다중선형회귀
#회귀계수
print(&quot;coefficient :&quot;, multiple_ols.coef_)</p>
<h2 id="절편intercept">절편(intercept)</h2>
<p>print(&#39;Intercept : &#39;, multiple_ols.intercept_)
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] [Pandas]]]></title>
            <link>https://velog.io/@ddoy_eon/Python-Pandas</link>
            <guid>https://velog.io/@ddoy_eon/Python-Pandas</guid>
            <pubDate>Thu, 01 Sep 2022 20:01:54 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.datamanim.com/dataset/99_pandas/pandasMain.html">링크텍스트</a></p>
<blockquote>
<p>제주 날씨,인구에 따른 교통량데이터 : 출처 제주 데이터 허브 DataUrl = ‘<a href="https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv%E2%80%99">https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv’</a></p>
</blockquote>
<pre><code>url =‘https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv’
df = pd.read_csv(url, encoding=&#39;euc-kr&#39;)</code></pre><h4 id="수치형-변수를-가진-컬럼을-출력-select_dtypes">수치형 변수를 가진 컬럼을 출력 .select_dtypes</h4>
<h4 id="범주형-변수를-가진-컬럼을-출력">범주형 변수를 가진 컬럼을 출력</h4>
<pre><code>#df.columns == 이렇게 시도했다.
ans = df.select_dtypes(exclude=object).columns
ans = df.select_dtypes(include = object).columns</code></pre><h4 id="평균-속도-컬럼의-4분위-범위iqr-값을-구하여라">평균 속도 컬럼의 4분위 범위(IQR) 값을 구하여라</h4>
<pre><code>ans = df[&#39;평균속도&#39;].quantile(0.75) - df[&#39;평균속도&#39;].quantile(0.25)</code></pre><h4 id="읍면동명-컬럼의-유일값-갯수를-출력하라-nunique-unique">읍면동명 컬럼의 유일값 갯수를 출력하라 .nunique(), .unique()</h4>
<pre><code>ans = df.읍면동명.nunique()</code></pre><blockquote>
<p>url = &#39;<a href="https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv&#39;">https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv&#39;</a></p>
</blockquote>
<h4 id="quantity컬럼-값이-3인-데이터를-추출하여-index를-0부터-정렬하고--첫-5행을-출력하라">quantity컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬하고  첫 5행을 출력하라</h4>
<pre><code>ans = df.loc[df[&#39;quantity&#39;]==3].head().reset_index(drop=True)</code></pre><h4 id="item_price-컬럼의-달러표시-문자를-제거하고-float-타입으로-저장하여-new_price-컬럼에-저장하라">item_price 컬럼의 달러표시 문자를 제거하고 float 타입으로 저장하여 new_price 컬럼에 저장하라</h4>
<pre><code>df[&#39;new_price&#39;] = df[&#39;item_price&#39;].str[1:].astype(&#39;float&#39;)
ans = df[&#39;new_price&#39;].head()</code></pre><h4 id="new_price-컬럼이-5이하의-값을-가지는-데이터프레임을-추출하고-전체-갯수를-구하여라">new_price 컬럼이 5이하의 값을 가지는 데이터프레임을 추출하고, 전체 갯수를 구하여라</h4>
<pre><code>ans = len(df.loc[df.new_price &lt;=5])</code></pre><h4 id="item_name명이-chicken-salad-bowl-인-데이터-프레임을-추출하라고-index-값을-초기화-하여라">item_name명이 Chicken Salad Bowl 인 데이터 프레임을 추출하라고 index 값을 초기화 하여라</h4>
<pre><code>ans = df.loc[df.item_name == &#39;Chicken Salad Bowl&#39;].reset_index(drop=True)</code></pre><h4 id="new_price값이-9-이하이고-item_name-값이-chicken-salad-bowl-인-데이터-프레임을-추출하라">new_price값이 9 이하이고 item_name 값이 Chicken Salad Bowl 인 데이터 프레임을 추출하라</h4>
<pre><code>ans = df.loc[(df.new_price &lt;=9) &amp; (df.item_name == &#39;Chicken Salad Bowl&#39;)]</code></pre><h4 id="df의-new_price-컬럼-값에-따라-오름차순으로-정리하고-index를-초기화-하여라">df의 new_price 컬럼 값에 따라 오름차순으로 정리하고 index를 초기화 하여라</h4>
<pre><code>ans  = df.sotr_values(&#39;new_price).reset_index(drop=True)</code></pre><h4 id="df의-item_name-컬럼-값중-chips-포함하는-경우의-데이터를-출력하라">df의 item_name 컬럼 값중 Chips 포함하는 경우의 데이터를 출력하라</h4>
<pre><code>ans = df.loc[df.item_name.str.contains(&#39;Chips&#39;)]</code></pre><h4 id="df의-item_name-컬럼-값이-steak-salad-또는-bowl-인-데이터를-데이터-프레임화-한-후-item_name를-기준으로-중복행이-있으면-제거하되-첫번째-케이스만-남겨라-drop_duplicates">df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, item_name를 기준으로 중복행이 있으면 제거하되 첫번째 케이스만 남겨라 drop_duplicates()</h4>
<pre><code>ans = df.loc[(df.item_name == &#39;Steak Salad&#39;) | (df.item_name == &#39;Bowl&#39;)]
ans = ans.drop_duplicates(&#39;item_name&#39;)
ans = ans.drop_duplicates(&#39;item_name&#39;, keep=&#39;last&#39;)</code></pre><h4 id="df의-데이터-중-item_name의-값이-izze-데이터를-fizzy-lizzy로-수정하라">df의 데이터 중 item_name의 값이 Izze 데이터를 Fizzy Lizzy로 수정하라</h4>
<pre><code>df.loc[df.item_name == &#39;Izze&#39;,&#39;item_name&#39;
ans =df
ans</code></pre><h4 id="df의-데이터-중-choice_description-값이-nan-인-데이터를-nodata-값으로-대체하라loc-이용-">df의 데이터 중 choice_description 값이 NaN 인 데이터를 NoData 값으로 대체하라(loc 이용) ~</h4>
<pre><code>df.loc[df.choice_description.isnull(),&#39;choice_description&#39;] = &#39;NoData&#39;
ans = df</code></pre><h4 id="df의-데이터-중-choice_description-값에-vegetables-들어가지-않는-경우의-갯수를-출력하라">df의 데이터 중 choice_description 값에 Vegetables 들어가지 않는 경우의 갯수를 출력하라</h4>
<pre><code>ans = len(df.loc[~df.choice_description.str.contains(&#39;Vegetables&#39;)])
ans</code></pre><h4 id="df의-데이터-중-item_name-값이-n으로-시작하는-데이터를-모두-추출하라-startswith">df의 데이터 중 item_name 값이 N으로 시작하는 데이터를 모두 추출하라 .startswith()</h4>
<pre><code>ans = df[df.item_name.str.startswtih(&#39;N&#39;)]
ans</code></pre><h4 id="df의-데이터-중-item_name-값의-단어개수가-15개-이상인-데이터를-인덱싱하라">df의 데이터 중 item_name 값의 단어개수가 15개 이상인 데이터를 인덱싱하라</h4>
<pre><code>ans = df[df.item_name.str.len() &gt;=15]
ans.head(3)</code></pre><h4 id="df의-데이터-중-new_price값이-lst에-해당하는-경우의-데이터-프레임을-구하고-그-갯수를-출력하라-lst-169-239-339-445-925-1098-1175-1698-isin">df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98] isin</h4>
<pre><code>st1 = [1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]
ans = df.loc[df.new_pric.isin(st1)]

display(ans.head(3))
prin(len(ans))</code></pre><h4 id="데이터의-각-host_name의-빈도수를-구하고-host_name으로-정렬하여-상위-5개를-출력하라-size-value_countssort_index">데이터의 각 host_name의 빈도수를 구하고 host_name으로 정렬하여 상위 5개를 출력하라 .size() .value_counts().sort_index()</h4>
<pre><code>ans = df.groupby(&#39;host_name&#39;).size()
ans = df.host_name.value_counts().sort_inex()</code></pre><h4 id="데이터의-각-host_name의-빈도수를-구하고-빈도수-기준-내림차순-정렬한-데이터-프레임을-만들어라-빈도수-컬럼은-counts로-명명하라">데이터의 각 host_name의 빈도수를 구하고 빈도수 기준 내림차순 정렬한 데이터 프레임을 만들어라. 빈도수 컬럼은 counts로 명명하라</h4>
<pre><code>Ans = df.groupby(&#39;host_name&#39;).size().\
                to_frame().rename(columns={0:&#39;counts&#39;}).\
                sort_values(&#39;counts&#39;,ascending=False)</code></pre><h4 id="neighbourhood_group의-값에-따른-neighbourhood컬럼-값의-갯수를-구하여라-크기--size-as_index--false">neighbourhood_group의 값에 따른 neighbourhood컬럼 값의 갯수를 구하여라 크기  .size(), as_index = False</h4>
<pre><code>ans = df.groupby([&#39;neighbourhood_group&#39;,&#39;neighbourhood&#39;],as_index = False).size()</code></pre><h4 id="nighbourhood_group의-값에-따른-neighbourhood컬럼-값-중-neighbourhood_group그룹의-최댓값들을-출력하라-size-갯수">nighbourhood_group의 값에 따른 neighbourhood컬럼 값 중 neighbourhood_group그룹의 최댓값들을 출력하라 .size() 갯수</h4>
<pre><code>ans = df.groupby([&#39;nighbourhood_group&#39;,&#39;neighbourhood&#39;],as_index=False).size()\
        .groupby([&#39;neighbourhood_group&#39;], as_index=False).max()</code></pre><h4 id="neighbourhood-값과-neighbourhood_group-값에-따른-price-의-평균을-계층적-indexing-없이-구하라-unstack">neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 계층적 indexing 없이 구하라 .unstack()</h4>
<pre><code>ans = df.groupby([&#39;neighbourhood&#39;,&#39;neighbourhood_group&#39;]).price.mean().unstack()</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[scatterplot]]></title>
            <link>https://velog.io/@ddoy_eon/scatterplot</link>
            <guid>https://velog.io/@ddoy_eon/scatterplot</guid>
            <pubDate>Thu, 01 Sep 2022 03:49:27 GMT</pubDate>
            <description><![CDATA[<pre><code>import matplotlib.pyplot as plt
import seaborn as sns</code></pre><pre><code>plt.scatter(x,y)
plt.scatter(파일[&#39;컬럼명&#39;],파일[&#39;컬럼2&#39;])</code></pre><pre><code>sns.scatter(파일[&#39;컬럼명&#39;],파일[&#39;컬럼2&#39;], hue=&#39;카테고리지정&#39;)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Unnamed: 0 삭제하는 방법]]></title>
            <link>https://velog.io/@ddoy_eon/Unnamed-0-%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@ddoy_eon/Unnamed-0-%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Thu, 01 Sep 2022 02:56:06 GMT</pubDate>
            <description><![CDATA[<p>Unnamed: 0을 DataFrame에서 삭제하는 방법</p>
<ol>
<li>index_col=0<pre><code>df1 = pd.reda_csv(url, index_col=0)</code></pre></li>
<li>drop 사용<pre><code>df2 = df2.drop(df2.columns[0], axis=1)</code></pre><pre><code>#원본 데이터에 지정하지 않아도 원본 데이터프레임에 바로 반영
df3.drop([&#39;Unnamed: 0&#39;],axis=1, inplace =True)</code></pre><a href="https://jkim83.tistory.com/169">링크텍스트</a></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[3주차 문제정리하기 ]]></title>
            <link>https://velog.io/@ddoy_eon/3%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ddoy_eon/3%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 01 Sep 2022 02:20:30 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/eb470bbb-4211-4cd4-86e6-60680ccaa504/image.png" alt=""></p>
<ul>
<li><p>barplot, 이산형 자료에 대해 범주별로 빈도나 합계 등을 비교하는 데에 유용하다.
<img src="https://velog.velcdn.com/images/ddoy_eon/post/ad46a52b-55a0-427f-9040-fe8ea2ddb718/image.png" alt=""></p>
</li>
<li><p>df[[&#39;total_bill&#39;,&#39;tip&#39;]].plot(kind=&#39;box&#39;)</p>
</li>
</ul>
<p>tmp = &#39;12,578&#39;을 정수 12578로 변환하는 코드  </p>
<pre><code>#tmp,를 공백으로 바꿔준 뒤에 정수로 변환
int(tmp.replace(tmp[2],&quot;&quot;))
#tmp를 , 기준으로 나눈 다음에 다시 합쳐주기 
a,b = tmp.split(&quot;,&quot;)
int(a+b)
</code></pre><p><img src="https://velog.velcdn.com/images/ddoy_eon/post/c03cc07b-595e-4416-a868-c738497032a9/image.png" alt=""><img src="https://velog.velcdn.com/images/ddoy_eon/post/c8e2a46a-6630-4ab8-8dfe-265593faf551/image.png" alt=""></p>
<p> 변환코드</p>
<pre><code>df.groupby(&#39;sex&#39;)[&#39;species&#39;].count()</code></pre><p><img src="https://velog.velcdn.com/images/ddoy_eon/post/3630b641-765e-4895-8f63-a0b9df5fb136/image.png" alt=""></p>
<pre><code>pd.merge(df1, df2, on=&#39;No.&#39;,how=&#39;right&#39;)</code></pre><p><img src="https://velog.velcdn.com/images/ddoy_eon/post/c72e2d45-6b45-46e2-bbbe-66298f50de0c/image.png" alt=""></p>
<pre><code># df1 에다가 df2그냥 가져다가 사용
df1.append(df2)
pd.concat([df1,df2])</code></pre><blockquote>
</blockquote>
<p><strong>append</strong> 세로로만 결합가능 is the specific case (axis=0, join=&#39;outer&#39;)of concat
<strong>concat</strong> 가로, 세로 모두 결합 가능 gives the flexibility to join based on the axis(all rows or all columns)
<strong>join</strong> is based on the indexes(set by set_index)on how variable = [&#39;left&#39;,&#39;right&#39;,&#39;inner&#39;,&#39;counter&#39;]
<strong>merge</strong> is based on any particular column each of the two dataframes, this columns are variables on like &#39;left_on&#39;,&#39;right_on&#39;,&#39;on&#39;</p>
<blockquote>
<p><em>** p-value**</em></p>
</blockquote>
<ul>
<li><p>p-value가 0에 가까울수록 대립가설이 힘을 얻는다.</p>
</li>
<li><p>p-value는 0과 1사이의 확률이다.</p>
</li>
<li><p>p-value를 통합 귀무가설이 맞다는 전제하여 simulation을 진행한다.</p>
</li>
<li><p>p-value는 sample size와는 무관하다.</p>
</li>
<li><p>귀무가설 :null hypothesis</p>
</li>
<li><p>단측검정 : One-sided T-test</p>
</li>
<li><p>양측검정 : Two-sided T-test</p>
</li>
</ul>
<blockquote>
<p>중심극한정리 큰 수의 법칙</p>
</blockquote>
<ul>
<li>중심극한 정리 Central Limit Theorem : 어떠한 모양의 임의의 분포에서 추출한 표본집단들의 평균의 분포는 정규분포를 이룬다. </li>
<li>큰 수의 법칙 Law of Large Numbers : 어떤 모집단에서 표본집단들을 추출할 때, 각 표본집단의 크기가 커지면 그 표본집단들의 평균은 모집단의 평균과 같아지고, 표본집단들의 분산은 0에 가까워 진다. </li>
</ul>
<p>암에 걸릴 확률은 1% 이고, 암 검사가 정확히 암을 양성이라고 진단할 확률은 90% 입니다. 또한 암이 아닌데 양성이라고 진단할 확률은 10%입니다. 어떤 사람이 암 검사 결과에서 양성 반응이 나타났을 때, 실제로 이 사람이 암에 걸렸을 확률을 구하는 공식은 아래와 같습니다.
<a href="https://sumniya.tistory.com/29">링크텍스트</a></p>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/d8547828-15d1-4259-bf18-2c5ddb44d75e/image.png" alt=""></p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/068a9e51-f373-4a49-8227-169cdfcdf769/image.png" alt=""></p>
</blockquote>
<ul>
<li>A와 B 모두 square matrix이다.
<img src="https://velog.velcdn.com/images/ddoy_eon/post/94d2cd61-bbab-45f7-a981-3767e56202e6/image.png" alt=""><a href="https://velog.velcdn.com/images/ddoy_eon/post/e231647c-5a35-41f0-aeb4-e2b26144945c/image.png"></a></li>
</ul>
<blockquote>
<ul>
<li>2개의 데이터 셋이 동일한 연관성을 가지지만, 공분산 값이 다를 수 있다.</li>
</ul>
</blockquote>
<ul>
<li>어느 벡터이던 단위 벡터의 선형 조합으로 나타낼 수 있다.</li>
<li>상관계수의 절대값은 1을 넘을 수 없다.</li>
</ul>
<p>K-means clustering을 실행하기 전, 데이터에 Data Standardization 필수 진행</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[sklearn ]]></title>
            <link>https://velog.io/@ddoy_eon/sklearn</link>
            <guid>https://velog.io/@ddoy_eon/sklearn</guid>
            <pubDate>Mon, 22 Aug 2022 05:12:28 GMT</pubDate>
            <description><![CDATA[<pre><code>pip install scikit-learn #설치
from sklearn.model_selection import train_test_split #라이브러리 import
From sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X,Y) #fit 학습 명령어 #문제, 정답
predictions(Y&#39;) = model.predic(X&#39;) #학습을 했으니 예측을 한다.(X&#39;) 새로운 값</code></pre><p>#train_test_split(X,Y,test_size =0.25)
평가세트를 새로 만듦 (학습에 사용되지는 않음) 25%정도 학습</p>
<h3 id="경사하강법">경사하강법</h3>
<p>Y(정답) =WX(입력) + b(잔차)
<img src="https://velog.velcdn.com/images/ddoy_eon/post/d7e16d99-92cd-438c-8c42-437be143c664/image.png" alt=""></p>
<h4 id="modelpredictx">model.predict(&#39;X&#39;)</h4>
<p>학습된 규칙과 모델을 활용해 새로운 입력에 대한 예측 값 제공</p>
<h4 id="modelfitxy">model.fit(X,Y)</h4>
<p>: 학습</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[martix]]]></title>
            <link>https://velog.io/@ddoy_eon/martix</link>
            <guid>https://velog.io/@ddoy_eon/martix</guid>
            <pubDate>Wed, 17 Aug 2022 12:35:35 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/82042e72-ceef-425a-a0fa-240fdbae7b28/image.png" alt="">
#데이터사이언스 데이터와 행렬
<a href="https://datascienceschool.net/02%20mathematics/02.01%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80%20%ED%96%89%EB%A0%AC.html">링크텍스트</a></p>
<h2 id="martix">martix</h2>
<ul>
<li>수 또는 변수를 ()안에 행과 열로 배열</li>
<li>2차원 형태의 array 또는 list로 나타냄</li>
<li>행과 열의 개수는 매트릭스의 차원을 의미 .shape을 통해 확인</li>
<li>두 매트릭스 일치 = 차원과 성분이 동일해야 함. <h3 id="ndim">.ndim</h3>
</li>
<li>배열의 차원 확인<h3 id="shape">.shape</h3>
</li>
<li>벡터의 차원 확인 </li>
<li>콤마 앞의 수는 벡터의 차원, 즉 <strong>성분의 개수</strong><pre><code>2d = np.array([[1,2,3],[4,5,6]])
2d
&gt;&gt;array([[1, 2, 3],
     [4, 5, 6]])</code></pre><pre><code>#.ndim을 사용하여 배열의 차원확인
2d.ndim
&gt;&gt; 2</code></pre><pre><code>#.shape을 사용하여 매트릭스의 차원(행의 수, 열의 수)확인
2d.shape
&gt;&gt;(2,3)
# 1차원일 경우 #1d = np.array([1,2,3,4,5])
1d.shape
&gt;&gt;(5, )</code></pre></li>
</ul>
<h2 id="행렬의-연산">행렬의 연산</h2>
<h3 id="행렬의-전치-transpose">행렬의 전치 Transpose</h3>
<ul>
<li>행과 열을 바꾸어 나타내는 것입니다.</li>
<li>일반적으로 $A^T$로 표기합니다. </li>
<li><code>.T</code> 또는 <a href="https://numpy.org/doc/stable/reference/generated/numpy.transpose.html"><code>np.transpose()</code></a>를 사용하여 구할 수 있습니다. </li>
<li>전치의 전치는 자기 자신입니다.<blockquote>
<p>$(A^T)^T=A$ </p>
</blockquote>
</li>
</ul>
<pre><code>a=np.array([[1,2,3],[4,5,6]])
a
&gt;&gt;array([[1, 2, 3],
       [4, 5, 6]])</code></pre><pre><code>a.T
&gt;&gt;array([[1, 4],
       [2, 5],
       [3, 6]])</code></pre><pre><code>(a.T).T
&gt;&gt;array([[1, 2, 3],
       [4, 5, 6]])</code></pre><pre><code>#np.transpose(a)
&gt;&gt;array([[1, 4],
       [2, 5],
       [3, 6]])</code></pre><h3 id="행렬곱matrix-multiplication">행렬곱Matrix Multiplication</h3>
<ul>
<li>두 행렬에 대해서 앞 행렬의 열과 뒷 행렬의 행의 수가 같으면 행렬끼리 곱할 수 있습니다. </li>
<li><a href="https://numpy.org/doc/stable/reference/generated/numpy.matmul.html"><code>np.matmul()</code></a>을 사용하여 구할 수 있습니다.</li>
<li>행렬곱의 결과는 행렬입니다. </li>
<li>두 행렬의 차원이 $m\times l$, $l\times n$이면 행렬곱으로 얻은 행렬의 차원은 $m\times n$입니다. <blockquote>
<img src="https://i.imgur.com/x6ePoVz.png" width=450> 
</blockquote>
</li>
</ul>
<h3 id="정사각형-행렬square-martix">정사각형 행렬Square Martix</h3>
<h4 id="대각-행렬-diagonal-martix">대각 행렬 Diagonal Martix</h4>
<p>: 주 대각선(principal diagonal)을 제외한 모든 성분이 0인 정사각 행렬</p>
<blockquote>
<p>$D =
\begin{bmatrix}
a_{1,1} &amp; 0 &amp; 0 \
0 &amp; a_{2,2} &amp; 0 \
0 &amp; 0 &amp; a_{3,3} 
\end{bmatrix}$</p>
</blockquote>
<h4 id="단위-행렬identity-matrix">단위 행렬Identity Matrix</h4>
<ul>
<li>대각 행렬 중에서 주 대각선 성분이 모두 1인 매트릭스</li>
<li><code>np.identity()</code> 또는 <code>np.eye()</code>를 사용하여 나타낼 수 있습니다<blockquote>
<p>$I_1 =
\begin{bmatrix}
1
\end{bmatrix}
\qquad
I_2 =
\begin{bmatrix}
1 &amp; 0 \
0 &amp; 1
\end{bmatrix}
\qquad
I_3 =
\begin{bmatrix}
1 &amp; 0 &amp; 0 \
0 &amp; 1 &amp; 0 \
0 &amp; 0 &amp; 1 
\end{bmatrix}$</p>
</blockquote>
</li>
<li>임의의 정사각 행렬에 단위 행렬을 곱한 것은 자기 자신과 같습니다.<blockquote>
<p>$AI=A$</p>
</blockquote>
</li>
</ul>
<h4 id="npidentity와-npeye의-차이"><code>np.identity()</code>와 <code>np.eye()</code>의 차이</h4>
<p><a href="https://yeowool0217.tistory.com/474">링크텍스트</a></p>
<h4 id="역행렬">역행렬</h4>
<ul>
<li><code>np.linalg.inv()</code> 사용하여 역행렬 구함. </li>
</ul>
<h4 id="npmultiply-행령의-요소-별-곱셈">np.multiply() 행령의 요소 별 곱셈</h4>
<p>: 행렬의 특정 행, 열 또는 부분 행렬의 요소 별 곱셈을 수행</p>
<h3 id="nplinalgmatrix_rank">np.linalg.matrix_rank()</h3>
<p>np.linalg.matrix_rank(A, tol=None)
 : Return matrix rank of array using SVD method
 <a href="https://numpy.org/doc/stable/reference/generated/numpy.linalg.matrix_rank.html">링크텍스트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vector]]]></title>
            <link>https://velog.io/@ddoy_eon/vector</link>
            <guid>https://velog.io/@ddoy_eon/vector</guid>
            <pubDate>Wed, 17 Aug 2022 11:31:50 GMT</pubDate>
            <description><![CDATA[<h2 id="pltxticksnparange">plt.xticks(np.arange(,))</h2>
<pre><code>#범위 지정해줌
#밑에 식과 같이 작성해야 함. 셀을 분리해서 작성하면 화면 분리됨
plt.xticks(np.arange(x,y))
plt.yticks(np.arange(x,y))</code></pre><h2 id="pltxlim-pltylim">plt.xlim, plt.ylim</h2>
<pre><code>#데이터 범위 지정
plt.xlim(-4, 2)          
plt.ylim(0, 4)</code></pre><h2 id="pltaxvline">plt.axvline()</h2>
<ul>
<li>축을 따라 수평선 작성<pre><code>plt.axvline(x=0,ylim=0,ymax=1)
x : 수직선을 배치할 데이터 좌표x 위치
ylim : y축의 시작 위치, 0과 1사이의 값을 사용, 0을 축의 하단, 1은 축의 상단
ymax :수직선 y축의 끝 위치, 0과 1 사이의 값을 취합니다. 0은 축의 맨 아래, 1은 축의 맨 위 
plt.axvline(0, 0, 1, color=&#39;lightgray&#39;, linestyle=&#39;--&#39;, linewidth=1)</code></pre><img src="https://velog.velcdn.com/images/ddoy_eon/post/9d9aaefe-ad66-4936-9def-9f0a10649684/image.png" alt=""></li>
</ul>
<p><a href="https://www.geeksforgeeks.org/matplotlib-pyplot-axvline-in-python/">링크텍스트</a></p>
<h2 id="matplotlibpyplot화살표-xydxdy">matplotlib.pyplot.화살표 (x,y,dx,dy)</h2>
<ul>
<li>x,y 화살표 밑면의 좌표</li>
<li>dx, dy : x 및 y 방향을 따른 화살표의 길이 #벡터는 화살표의 길이로 크기를 나타냄
<a href="https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.arrow.html">https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.arrow.html</a><pre><code>import matplotlib.pyplot as plt
v1 = [2, 1]
#벡터는 계산을 제외하고는 원점에서 시작
#head_with = float 또는 없음, 기본값: 3*with : 전체 화살촉의 총 너비입니다.
#v1[0] = x좌표 2
#v1[1] = y좌표 1
plt.arrow(0,0,v1[0], v1[1], head_width=0.1, color=&#39;#790D90&#39;)
#글씨 위치 입력
plt.text(2.2, 1.1, &#39;v1&#39;)</code></pre><pre><code>#벡터는 행렬이므로 계산을 하기 위해 array로 바꿔줘서 수학적인 계산이 가능하게 함. 
w1 = np.array(v1)*2</code></pre><h4 id="벡터의-스칼라곱실수배">벡터의 스칼라곱(실수배)</h4>
벡터의 실수배 연산을 벡터에 스칼라를 곱한다.
벡터 : 크기와 방향을 갖는 물리량
스칼라 : 크기만 갖는 물리량
<img src="https://velog.velcdn.com/images/ddoy_eon/post/a6b82dc2-969e-4cc9-99ea-c000c62ed23a/image.png" alt="">
<a href="https://ballpen.blog/%EB%B2%A1%ED%84%B0%EC%9D%98-%EC%8B%A4%EC%88%98%EB%B0%B0/#1-1">링크텍스트</a></li>
</ul>
<h2 id="npdot-벡터의-내적-구하기">np.dot 벡터의 내적 구하기</h2>
<pre><code>#np.dot을 사용하지 않을 경우에는 

#벡터값
v1 = [2, 1]
v2 = [-3, 2]
#벡터 계산할 수 있도록 array로 배열
arr_v1 = np.array(v1)
arr_v2 = np.array(v2)
#각각 곱하기 
arr_v1 * arr_v2

&gt;&gt; array([-6,  2])</code></pre><pre><code># 벡터내적계산하는 방법을 알고 있어야 함. 
(arr_v1 * arr_v2).sum()
&gt;&gt; -4</code></pre><pre><code>#np.dot()으로 벡터의 내적 구하기
np.dot(v1, v2)

&gt;&gt; -4</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[list와 array차이 ]]></title>
            <link>https://velog.io/@ddoy_eon/list%EC%99%80-array%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@ddoy_eon/list%EC%99%80-array%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 17 Aug 2022 09:45:31 GMT</pubDate>
            <description><![CDATA[<h2 id="list">List</h2>
<ul>
<li>데이터를 연속적인 공간에 저장</li>
<li>순서를 가지며 <strong>각 원소에 차례로 index가 할당</strong>됨</li>
<li>서로 다른 자료형을 원소로 가질 수 있음</li>
<li>수치적 연산은 불가능</li>
</ul>
<pre><code>#list()로 문자열 원소
df = list(&#39;cute&#39;)
df

&gt;&gt;  [&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;]</code></pre><pre><code>#index가 0~2인 원소 출력
for i in range(3):
    print(df[i])

&gt;&gt;&gt; c
    u
    t
</code></pre><pre><code>#문자열 반복
for i in range(3):
    print(df)

[&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;]
[&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;]
[&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;]</code></pre><pre><code># []로 숫자형 원소를 갖는 list 생성
numList = [1,2,3]
numList

&gt;&gt;&gt; [1, 2, 3]</code></pre><pre><code>#list의 합
df + numList

&gt;&gt;&gt; [&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;, 1, 2, 3]</code></pre><pre><code>#list의 곱
print(df*2)
print()

&gt;&gt;&gt; [&#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;, &#39;c&#39;, &#39;u&#39;, &#39;t&#39;, &#39;e&#39;]</code></pre><pre><code>#문자열과 숫자형을 원소로 갖는 list 생성
#자료형이 혼합되어도 본래 자료형은 그대로 유지
testList = [0,&#39;a&#39;,4.6]</code></pre><pre><code>
type(testList[0])</code></pre><h2 id="array">Array</h2>
<ul>
<li>numpy 배열</li>
<li>순서를 가지며 각 원소에 차례대로 index 할당</li>
<li><strong>동일한 자료형만 원소</strong>로 가질 수 있음</li>
<li><strong>수치적 연산 가능</strong></li>
</ul>
<p>```
np.array=()로 array생성</p>
<h1 id="자료형이-폰합되어-있는-경우-모두-문자열로-처리됨">자료형이 폰합되어 있는 경우 모두 문자열로 처리됨</h1>
<p>arr_a = np.array([5, 3.2, &#39;a&#39;])
type(arr_a[0])</p>
<blockquote>
<blockquote>
<blockquote>
<p>numpy.str</p>
</blockquote>
</blockquote>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[벡터]]></title>
            <link>https://velog.io/@ddoy_eon/%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@ddoy_eon/%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Wed, 17 Aug 2022 04:49:29 GMT</pubDate>
            <description><![CDATA[<h3 id="scalar">Scalar</h3>
<ul>
<li>하나의 숫자(실수)를 나타냅니다.</li>
<li>변수에 저장하여 표기할 수 있습니다.</li>
<li>양수, 음수 모두 가능합니다.<blockquote>
<p>$a = 5 \quad b = 1.81 \quad c=-3e \quad d=\pi$</p>
</blockquote>
</li>
</ul>
<h4 id="스칼라와-벡터">스칼라와 벡터</h4>
<ul>
<li>스칼라 : 크기</li>
<li>벡터 : 크기 + 방향이 존재</li>
</ul>
<h3 id="vector">Vector</h3>
<ul>
<li>순서를 갖는 1차원 형태의 배열로 list 또는 array로 나타냅니다. #2개면 2차원 3개면 3차원 ...</li>
<li>헤드부분이 벡터의 성분을 향해서 있음</li>
<li>성분의 개수는 <strong>벡터의 차원</strong>을 의미합니다.<blockquote>
<p>$\begin{align}
 \vec{a} = 
 \begin{bmatrix}</p>
<pre><code>     8\\
     9</code></pre><p>  \end{bmatrix}
  \qquad
  \vec{b} =
  \begin{bmatrix}</p>
<pre><code>    -4\\
     7\\
     1</code></pre><p>  \end{bmatrix}
  \qquad
  \vec{c} =
  \begin{bmatrix}</p>
<pre><code>     5.5332</code></pre><p>  \end{bmatrix}
  \qquad
  \vec{d} =
  \begin{bmatrix}</p>
<pre><code>     Pl\\
     x\\
     y\\
     \frac{2}{3}</code></pre><p>  \end{bmatrix}
\end{align}$</p>
</blockquote>
<h4 id="벡터의-스칼라곱">벡터의 스칼라곱</h4>
스칼라 + 스칼라 =&gt; 스칼라
스칼라 * 스칼라 =&gt; 스칼라 (#스칼라는 숫자)
스칼라 + 벡터 =&gt; 더하기 불가능 (같은 종류만 가능함)
스칼라 * 벡터 =&gt; 벡터 
벡터 + 벡터 =&gt; 벡터
벡터 * 벡터 =&gt; 스칼라 <pre><code>          벡터 (중간에 `x` 표시)
          텐서
          ![](https://velog.velcdn.com/images/ddoy_eon/post/0e07e627-954b-4c1a-add4-0ee0e5e645e3/image.png)
         ![](https://velog.velcdn.com/images/ddoy_eon/post/ddacd605-bc61-4319-9072-f398cb054847/image.png)</code></pre><h4 id="직각좌표계-단위벡터들-사이의-스칼라곱">직각좌표계 단위벡터들 사이의 스칼라곱</h4>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/b5a6d419-3b86-42ef-8ed6-ed985482a131/image.png" alt=""></p>
<ul>
<li>같은 단위벡터들 사이의 스칼라곱은 1</li>
<li>다른 단위벡터들 사이의 스칼라곱은 0<h4 id="직교하는-두-벡터와-스칼라곱">직교하는 두 벡터와 스칼라곱</h4>
<img src="https://velog.velcdn.com/images/ddoy_eon/post/dd18600a-c93e-477e-bc4f-22480aef468a/image.png" alt="">
직교는 스칼라 곱으로 판단 
<img src="https://velog.velcdn.com/images/ddoy_eon/post/b97a44ee-201f-4185-bcb3-721b3885f676/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/3586666e-91cd-4540-a789-59b80cef2f5e/image.png" alt=""></p>
<h4 id="벡터의-크기">벡터의 크기</h4>
<ul>
<li>벡터의 선의 길이 = 벡터의 크기</li>
<li>Norm 혹은 length, Magnitude라고 합니다. <ul>
<li>벡터의 길이를 나타냅니다. 따라서 음수가 될 수 없습니다.  </li>
<li>벡터의 모든 성분이 $0$이면 벡터의 크기도 $0$입니다. ;영벡터 : 방향을 고려하지 않음</li>
<li>벡터의 크기를 나타내는 기호 : $||v||$와 같이 표기합니다. <ul>
<li>값이 1이라면 <code>단위벡터</code> : 크기가 1로 조정, 방향을 나타내는 데 집중함.</li>
</ul>
</li>
<li>피타고라스 정리를 사용하여 구할 수 있습니다.
<img src="https://velog.velcdn.com/images/ddoy_eon/post/7bb8e6ef-dcb7-45e1-9af8-b781417133ba/image.png" alt=""></li>
</ul>
</li>
</ul>
<ul>
<li>두 벡터가 서로 같을 조건 <ul>
<li>크기와 방향이 동일하면 위치와 상관없음</li>
<li><img src="https://velog.velcdn.com/images/ddoy_eon/post/550b810a-8f50-4640-8cc1-b9f20563ba08/image.png" alt=""></li>
<li><code>-</code> 는 방향이 반대임을 나타냄</li>
</ul>
</li>
</ul>
<blockquote>
<p>$v = [a, b, c, \cdots]$</p>
<p>$||v|| = \sqrt{a^2 + b^2 + c^2 + \cdots}$</p>
</blockquote>
<h4 id="벡터의-내적">벡터의 내적</h4>
<ul>
<li>Dot Product라고 합니다. </li>
<li>두 벡터에 대해서 서로 대응하는 [인덱스가 같은 값]각각의 성분을 곱한 뒤 모두 합하여 구합니다. 이때 두 벡터의 차원이 같아야 합니다.[성분의 개수가 달라 짝이 맞지 않으면 내적 불가능] </li>
<li><a href="https://numpy.org/doc/stable/reference/generated/numpy.dot.html"><code>np.dot()</code></a>을 사용해 구할 수 있습니다. </li>
<li>벡터를 내적한 값은 스칼라입니다. <blockquote>
<p>$v_1 = [a_1, a_2, a_3, \cdots]$</p>
<p>$v_2 = [b_1, b_2, b_3, \cdots]$</p>
<p>$v_1 \cdot v_2 = a_1b_1 + a_2b_2 + a_3b_3 + \cdots$  </p>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/62cd80ae-f3da-4be6-95ce-142f97091ed2/image.png" alt="">
<img src="https://velog.velcdn.com/images/ddoy_eon/post/c6e7117d-6c11-416d-b763-c016a465993e/image.png" alt="">
: 벡터 F와 벡터 S의 내적은 두개의 벡터의 크기를 곱한 후 cos을 곱한 값</p>
<ul>
<li>벡터를 내적한 값 = 스칼라 </li>
</ul>
<h4 id="벡터의-직교orthogonality--두-벡터의-내적이-0이면-두-벡터는-서로-수직입니다">벡터의 직교(Orthogonality) : 두 벡터의 내적이 0이면 두 벡터는 서로 수직입니다.</h4>
<ul>
<li>영벡터가 아닌 두 벡가 직교하기 위한 필요충분조건은 a· b=0
<img src="https://velog.velcdn.com/images/ddoy_eon/post/753b1bc4-fe74-46dc-85fb-5e2c3080c1a2/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/ddoy_eon/post/81ca2c5a-0843-46ca-8181-d5a0e7c514c2/image.png" alt="">
<img src="blob:https://velog.io/9c91e3b1-34b3-4e11-8eaf-398cdf3d5760" alt="업로드중..">
<a href="https://deep-learning-study.tistory.com/379">링크텍스트</a></p>
<h4 id="단위-벡터-unit-vector">단위 벡터 Unit Vector</h4>
<ul>
<li>길이가 $1$인 벡터입니다. </li>
<li>모든 벡터는 단위 벡터의 선형 결합으로 표기할 수 있습니다. <blockquote>
<p>$v = [2,5] = [2,0] + [0,5] = 2[1,0] + 5[0,1] = 2\hat{i} + 5\hat{j}$
[2,5]는 [2,0] + [0,5] 의 합임
[2,0] 은 2[1,0] 이고 [0,5]은 5[0,1]라고 나타낼 수 있다. 
여기서[1,0] hat{i},[0,1] hat{j}은 단위가 1인 단위벡터가 된다.
💡<strong>Tip</strong></p>
</blockquote>
</li>
<li>크기가 $1$인 길이를 단위 길이(unit length)라고 합니다. </li>
<li>선형 결합(linear combination) : 벡터 $v_1, v_2, \cdots, v_n$와 스칼라 $a_1, a_2, \cdots, a_n$에 대하여 다음과 같이 벡터의 스칼라곱과 합으로 나타낸 것입니다.<blockquote>
<blockquote>
<p>$a_1v_1 + a_2v_2 + \cdots + a_nv_n$</p>
</blockquote>
</blockquote>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python][Pandas] dataframe 시각화]]></title>
            <link>https://velog.io/@ddoy_eon/PythonPandas-dataframe-%EC%8B%9C%EA%B0%81%ED%99%94</link>
            <guid>https://velog.io/@ddoy_eon/PythonPandas-dataframe-%EC%8B%9C%EA%B0%81%ED%99%94</guid>
            <pubDate>Mon, 15 Aug 2022 07:23:24 GMT</pubDate>
            <description><![CDATA[<h3 id="pandas-시각화">Pandas 시각화</h3>
<blockquote>
<p>Colab한글 깨짐 현상 해결 방법</p>
</blockquote>
<ul>
<li>Step 1. 폰트 설치 (아래 코드 실행)
Step 2. 런타임 재시작 (런타임 &gt; 런타임 다시 시작)
Step 3. 라이브러리 임포트 (폰트 설치 이후 코드 실행)<pre><code># 폰트 설치
!apt-get update -qq
!apt-get install fonts-nanum* -qq
!rm ~/.cache/matplotlib -rf입력하세요</code></pre></li>
</ul>
<pre><code>#폰트 설정 #정해져 있는 코드 #한글이 깨지지 않도록 하는 코드 
path = &#39;/usr/share/fonts/truetype/nanum/NanumGothic.ttf&#39; # 나눔 고딕
font_name = fm.FontProperties(fname=path, size=20).get_name() # 기본 폰트 사이즈 : 20
plt.rc(&#39;font&#39;, family=font_name)
fm._rebuild()
mpl.rcParams[&#39;axes.unicode_minus&#39;] = False
%matplotlib inline</code></pre><h4 id="시각화-하기-위해-필요한-라이브러리">시각화 하기 위해 필요한 라이브러리</h4>
<pre><code>import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.font_manager as fm
import matplotlib as mpl 
import seaborn as sns</code></pre><h3 id="plot-함수">plot 함수</h3>
<ul>
<li><code>plot</code> 데이터 집합을 도표, 그래프로 표시</li>
<li><code>plot</code> 함수는 <code>kind</code>라는 옵션으로 다양한 그래프 시각화 가능<ul>
<li><code>kind</code> 옵션: <code>line</code> <code>bar</code> <code>hist</code> <code>box</code> <code>pie</code> <code>scatter</code> <code>area</code></li>
</ul>
</li>
</ul>
<h4 id="라인line">라인(line)</h4>
<pre><code>#figsize 그래프의 크기 결정
df.plot(kind =&#39;line&#39;, figsize=(가로,세로), title =&#39;제목&#39;)</code></pre><pre><code>#원하는 컬럼만 따로 지정해서 그리기 
df1[&#39;원하는 컬럼명&#39;].plot(kind=&#39;line&#39;, figsize(가로,세로), title=&#39;제목&#39;)</code></pre><h4 id="바bar">바(bar)</h4>
<pre><code>#막대 그래프
#컬럼별로 평균을 냄
groupby한 컬럼| 컬럼1 |컬럼2 |컬럼3
해당1           평균   평균   평균
해당2           평균   평균   평균
해당3           평균   평균   평균
bar_df = df1.groupby(df1.컬럼).mean()</code></pre><pre><code>bar_df.plot(kind=&#39;bar&#39;, figsize=(가로,세로), title=&#39;제목&#39;)</code></pre><pre><code>#전치 연산
#행과 열을 바꿈
bar_df.T.plot(kind=&#39;bar&#39;, figsize=(가로,세로), title=&#39;제목&#39;)</code></pre><h4 id="히스토그램-hist">히스토그램 (hist)</h4>
<ul>
<li>빈도수를 알아볼 때 사용<pre><code>df1.plot(kind=&#39;hist&#39;, figsize=(가로,세로), title = &#39;제목&#39;)
</code></pre></li>
</ul>
<p>#빈(bin)개수 지정 #이진법
df1.plot(bins=숫자, kind=&#39;hist&#39;, figsize=(가로,세로), title = &#39;제목&#39;)</p>
<pre><code>#### 박스(box)</code></pre><p>df1.plot(kind =&#39;box&#39;, figsize=(가로,세로), title = &#39;제목&#39;)</p>
<pre><code>#### 파이(pie)</code></pre><p>#value_counts : 얼마나 반복되는 지
pie_df=df2[&#39;컬럼&#39;].value_counts()
df1.plot(kind =&#39;pie&#39;, figsize=(가로,세로), title = &#39;제목&#39;)</p>
<pre><code></code></pre><p>#레이블 추가 
#autopct = %자동계산, 소수점 첫째 자리까지 계산
#font 는 %값 나타냄
df1.plot(kind =&#39;pie&#39;, figsize=(가로,세로), title = &#39;제목&#39;,autopct=&#39;%.1f%%&#39;, fontsize=20)</p>
<pre><code>#### 산점도(scatter)</code></pre><p>#나이에 따른 타이타닉 승선 요금
f2.plot(kind=&#39;scatter&#39;, figsize=(가로,세로) , x=&#39;age&#39;, y=&#39;fare&#39;, title=&#39;나이에 따른 타이타닉 승선 요금&#39;)</p>
<pre><code></code></pre><p>#버블차트
#버블에 100을 곱하여 더 크게 볼 수 있음 
df2.plot(kind=&#39;scatter&#39;, figsize=(15,8) , x=&#39;age&#39;, y=&#39;fare&#39;, title=&#39;나이에 따른 타이타닉 승선 요금&#39;, s=df2[&#39;pclass&#39;]*100)
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python][Pandas] [apply, lambda, map]]]></title>
            <link>https://velog.io/@ddoy_eon/PythonPandas-apply-lambda-map</link>
            <guid>https://velog.io/@ddoy_eon/PythonPandas-apply-lambda-map</guid>
            <pubDate>Mon, 15 Aug 2022 05:28:03 GMT</pubDate>
            <description><![CDATA[<h3 id="apply-함수">apply 함수</h3>
<ul>
<li>구체적인 로직을 적용하고 싶을 경우</li>
<li>로직이 정의된 함수를 만들고, <code>apply()</code> 함수에 대입<pre><code>#def 함수 정의 코드임 
#replace_xero : file명
#x = input 들어오는 값들 
def replace_zero(x):
  if x ==0: #input인자가 0일 경우에
      x =165 #값이 0일 경우에 165로 대체하라 
  return x #아닐 경우에 다시 반환하라 </code></pre><pre><code>#apply에 (함수코드 파일명)을 입력해주면 함수가 적용됨
df[&#39;컬럼명&#39;]=df[&#39;컬럼명&#39;].apply(replace_zero)
df</code></pre><h3 id="lamda-함수">lamda 함수</h3>
</li>
<li><code>def</code>정의된 함수와 동일한 기능</li>
<li><strong>한줄로</strong> 작성가능 <code>def</code> <code>return</code> 작성하지 않아도 괜찮음</li>
<li>로직이 복잡하지 않을 경우에 사용</li>
<li>가독성이 좋고 간편함</li>
<li><code>lamda &#39;입력변수&#39;:&#39;리턴값&#39; &#39;조건문(옵션)&#39;</code></li>
</ul>
<pre><code>#적용하고 싶은 컬럼명 
#  x가 0일 경우에 x를 50으로 반환해라 
# x가 0일 아닌 경우라면 input값 그대로 반환해라 
df[&#39;컬럼명&#39;]=df[&#39;컬럼명&#39;].apply(lamda x:50 if x ==0 else x)</code></pre><pre><code>#집계된 컬럼 만들기 #파생 컬럼 생성 #dataframe 마지막 열에 생성됨 
df[&#39;컬럼명1&#39;+&#39;컬럼명2&#39;] = df.apply(lamda x: x[&#39;컬럼명1&#39;]+x[&#39;컬럼명2&#39;],axis=1)</code></pre><h3 id="map-함수">map 함수</h3>
<ul>
<li>데이터 값을 특정한 값으로 mapping하고 싶은 경우 사용</li>
<li>하나의 컬럼인, Series 형으로만 적용가능<ul>
<li><code>df[&#39;컬럼명&#39;].map(&#39;매핑정보&#39;)</code></li>
<li>key : value<pre><code>map_info = {&#39;M&#39; : &#39;남자&#39;,
       &#39;F&#39; : &#39;여자&#39;}
</code></pre></li>
</ul>
</li>
</ul>
<p>df[&#39;컬럼명&#39;] =df[&#39;컬럼명&#39;].map(map_info)
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python][Pandas] 결측값, 중복값 처리 [isnull(), notnull(), dropna(), fillna(), reset_index(), duplicated(), drop_duplicates()]]]></title>
            <link>https://velog.io/@ddoy_eon/PythonPandas-%EA%B2%B0%EC%B8%A1%EA%B0%92-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@ddoy_eon/PythonPandas-%EA%B2%B0%EC%B8%A1%EA%B0%92-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Mon, 15 Aug 2022 04:31:37 GMT</pubDate>
            <description><![CDATA[<h3 id="결측값-처리">결측값 처리</h3>
<ul>
<li>결측값 : 자료에 누락된 값</li>
<li>NaN, N/A, NULL, 0값 등 다양한 방식으로 존재 </li>
</ul>
<h4 id="replace바꾸고-싶은-값교체할-값">.replace(&#39;바꾸고 싶은 값&#39;,&#39;교체할 값&#39;)</h4>
<pre><code>#df에 존재하는 0값을  numpy에서 제공하는 결측값 NaN으로 교체 
 df = df.replace(0, np.NaN)</code></pre><h4 id="결측-데이터-확인-isnull--notnull">결측 데이터 확인 isnull() , notnull()</h4>
<pre><code>#결측값 = True로 존재함
df.isnull()

#isnull의 반대로 나타남 
#결측값 = False로 존재함
df.notnull()</code></pre><pre><code># 결측값 = True = 1
df.isnull().sum()</code></pre><h4 id="결측-데이터-제거dropna">결측 데이터 제거dropna()</h4>
<pre><code>#결측인 값 존재하면 존재하는 행 모두 삭제 
#결측값이 많은 경우 dropna사용을 자제함 =&gt; 다 사라지기 때문에 
df.dropna()</code></pre><pre><code>#subset=[&#39;컬럼명&#39;] 옵션 지정하면 해당 컬럼만 검사 
#옵션을 넣어줌 
#[컬럼] 결측값만 삭제하고 나머지는 결측값이 존재해도 삭제하지 않음
#[컬럼]이 존재하지 않을 때, 데이터 분석이 불가능 하다는 판단이 있는 경우 사용
#사용자 의사결정에 기반함
df.dropna(subset=[&#39;컬럼명&#39;])
df.dropna(subset=[&#39;컬럼명1&#39;,&#39;컬럼명2&#39;]</code></pre><h4 id="결측-데이터-치환fillna">결측 데이터 치환fillna()</h4>
<ul>
<li>fillna(&#39;결측값을 대체할 값&#39;)<pre><code>#해당하는 컬럼에 존재하는 결측값을 fillna를 통해서 값을 채워줌
df[&#39;컬럼&#39;]=df[&#39;컬럼&#39;].fillna(&#39;결측값을 대체할 값&#39;)</code></pre><h4 id="평균값으로-대체fillna평균값">평균값으로 대체fillna(&#39;평균값&#39;)</h4>
<pre><code>#결측값 대체할 컬럼의 평균을 먼저 구해줌 
#mean_column은 임의로 지정한 값임
#df[&#39;컬럼&#39;].mean() =&gt; 평균값임
mean_column = df[&#39;컬럼&#39;].mean()
df[&#39;컬럼&#39;]=df[&#39;컬럼&#39;].fillna(mean_column)</code></pre><h4 id="최빈값으로-대체fillna최빈값">최빈값으로 대체fillna(&#39;최빈값&#39;)</h4>
</li>
<li>value_counts() : 값을 세어주는 함수를 통해서 최빈값 알아냄<pre><code>#해당 컬럼에 존재하는 값 중에서 최빈값을 숫자로 나타내 줌
df[&#39;컬럼&#39;].value_counts()</code></pre><pre><code>#index형태로 바꿔줌
df[&#39;컬럼&#39;].value_counts().index
</code></pre></li>
</ul>
<p>#index에서 최빈값 추출 
#0번째가 맨 앞 = 최빈값
df[&#39;컬럼&#39;].value_counts().index[0]</p>
<pre><code></code></pre><p>df[&#39;컬럼&#39;] = df[&#39;컬럼&#39;].fillna(df[&#39;컬럼&#39;].value_counts.index[0])</p>
<pre><code>#### 인덱스 재정렬 reset_index()
* 결측치 처리 과정에서, 데이터 프레임의 인덱스가 바뀌는 현상 발생
* reset_index() 인덱스 정렬</code></pre><p>drop=True 옵션은 이전의 인덱스를 버린다는 의미
drop 안 하면 기존의 인덱스를 인식함
df = df.reset_index(drop=True)</p>
<pre><code>### 중복값 처리 </code></pre><p>#임의로 중복값 생성
#마지막 값을 똑같이 중복시킨다는 의미
df = df.append(df.iloc[-1]).reset_index(drop=True)</p>
<pre><code>#### 중복데이터 탐색 duplicated()</code></pre><p>#중복된 행 찾기
df[df.duplicated()]</p>
<pre><code></code></pre><p>#특정 열에서 중복 값 찾기 True False로 나타남 
df[&#39;컬럼&#39;].duplicated()</p>
<pre><code>#### 중복데이터 제거 drop_duplicates()</code></pre><p>#기본적으로 &#39;완벽히&#39; 중복된 행을 제거 
df.drop_duplicates()</p>
<pre><code></code></pre><p>#특정 열을 기준으로 제거 
#keep = &#39;first&#39;가 지정값
#[&#39;컬럼&#39;]을 기준으로 중복된 컬럼은 다 삭제 후, 맨 앞에 컬럼만 존재
df.drop_duplicates(subset=[&#39;컬럼&#39;])</p>
<p>#특정 열을 기준으로 제거하는 데 마지막 값을 남김
df.drop_duplicates(subset=[&#39;컬럼&#39;], keep=&#39;last&#39;)
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python][Pandas] [astype('')][pd.to_datetime['컬럼명']]]]></title>
            <link>https://velog.io/@ddoy_eon/PythonPandas-astypepd.todatetime%EC%BB%AC%EB%9F%BC%EB%AA%85</link>
            <guid>https://velog.io/@ddoy_eon/PythonPandas-astypepd.todatetime%EC%BB%AC%EB%9F%BC%EB%AA%85</guid>
            <pubDate>Mon, 15 Aug 2022 02:25:41 GMT</pubDate>
            <description><![CDATA[<h3 id="타입변환-astype-타입확인type">타입변환 .astype() 타입확인type()</h3>
<pre><code>#문자열로 변경
df[&#39;컬럼명&#39;] = df[&#39;컬럼명&#39;].astype(&#39;str&#39;)</code></pre><pre><code>#타입 확인하는 방법
# 추출하고자 하는 행[0]
type(df[&#39;컬럼명&#39;][0])</code></pre><h3 id="pdto_datetimedf컬럼명">pd.to_datetime(df[&#39;컬럼명&#39;])</h3>
<ul>
<li>datetim<ul>
<li>epandas에서 <strong>날짜와 시간 데이터를 처리</strong> 하기 위해 지원하는 자료형<ul>
<li>datetime 자료형 변환 : 연산가능  <pre><code>df[&#39;컬럼&#39;]=pd.to_datetime(df[&#39;컬럼&#39;])</code></pre></li>
</ul>
</li>
<li><em>Timestamp*</em> : 변환완료</li>
<li><em>.dt*</em> : 슬라이싱 준비<pre><code>#연도 추출
df[&#39;컬럼&#39;].dt.year
#월 추출
df[&#39;컬럼&#39;].dt.month
#일 추출
df[&#39;컬럼&#39;].dt.day
#요일 추출 (월요일: 0, 화요일: 1, 수요일: 2, 목요일: 3, 금요일: 4, 토요일: 5, 일요일: 6)
df[&#39;컬럼&#39;].dt.dayofweek</code></pre></li>
</ul>
</li>
</ul>
<h4 id="데이터-프레임에-추가하는-방법">데이터 프레임에 추가하는 방법</h4>
<pre><code>#컬럼명은 지정
#표 컬럼에 [&#39;Year_컬럼&#39;][&#39;Month_컬럼&#39;][&#39;Day_컬럼&#39;]새롭게 추가
df[&#39;Year_컬럼&#39;]=df[&#39;컬럼&#39;].dt.year
df[&#39;Month_컬럼&#39;]=df[&#39;컬럼&#39;].dt.month
df[&#39;Day_컬럼&#39;]=df[&#39;컬럼&#39;].dt.day</code></pre><h3 id="산술연산">산술연산</h3>
<h4 id="사칙연산">사칙연산</h4>
<ul>
<li>df[&#39;컬럼&#39;] + df[&#39;컬럼&#39;]</li>
<li>df[&#39;컬럼&#39;] - df[&#39;컬럼&#39;]</li>
<li>df[&#39;컬럼&#39;] * df[&#39;컬럼&#39;]</li>
<li>df[&#39;컬럼&#39;] / df[&#39;컬럼&#39;]</li>
<li>df[&#39;컬럼&#39;] +10  값 전체에다가 10
씩 더해주는 것임.<h4 id="datetime-연산">datetime 연산</h4>
</li>
<li>날짜/시가 연산 하기 위한 조건 : pd.Timedelta</li>
<li>pd.to_timedelta(df[&#39;컬럼명&#39;], unit=&#39;시간 간격 단위&#39;)</li>
<li>df[&#39;컬럼명&#39;] = pd.to_timedelta(df[&#39;컬럼명&#39;], unit=&#39;시간 간격 단위&#39;)<h4 id="통계-연산">통계 연산</h4>
</li>
<li>행 계산 (axis = 0), 열 계산 (axis = 1)<pre><code>#행 평균 #위에서 아래로
df.mean(axis=0)</code></pre><pre><code>#열 평균 #왼쪽에서 오른쪽으로
df.sum(axis=1)</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] [Pandas] 데이터 Slicing [loc, iloc사용, 인덱스 이름 변경.set_index(), isin()]]]></title>
            <link>https://velog.io/@ddoy_eon/Python-Pandas-%EB%8D%B0%EC%9D%B4%ED%84%B0-Slicing-loc-iloc%EC%82%AC%EC%9A%A9-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EC%9D%B4%EB%A6%84-%EB%B3%80%EA%B2%BD.setindex-isin</link>
            <guid>https://velog.io/@ddoy_eon/Python-Pandas-%EB%8D%B0%EC%9D%B4%ED%84%B0-Slicing-loc-iloc%EC%82%AC%EC%9A%A9-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EC%9D%B4%EB%A6%84-%EB%B3%80%EA%B2%BD.setindex-isin</guid>
            <pubDate>Mon, 15 Aug 2022 00:42:16 GMT</pubDate>
            <description><![CDATA[<h3 id="행row선택하기">행(row)선택하기</h3>
<ul>
<li>행 가져오기 (df[&#39;행 시작 인덱스&#39; : &#39;행 끝 인덱스&#39;])
행 가져오기는 연속적으로 데이터를 불러옴 <pre><code>#행 하나 가져오기 
df[0:1]
</code></pre></li>
</ul>
<p>#행 여러개 가져오기 
#index 0번, 1번 행을 가져옴
df[0:2]</p>
<p>#5 이상인 행 가져오기
df[5:]</p>
<pre><code>#### 특정열에서 값 가져오기 </code></pre><p>#특정 컬럼에서 0번재 값 가져오기 
df[&#39;컬럼명&#39;][0]</p>
<pre><code>### 열(column)선택하기 
* _**열은 &#39;컬럼명&#39;지정 행은&#39;index&#39;지정**_
* 열 하나 가져오기 (**df[&#39;컬럼명&#39;] or df.컬럼명**)
* 범위 설정 df[df.columns[시작인덱스 : 끝 인덱스]]</code></pre><p>#컬럼이 어떤 것들이 있는 지 확인
df.coulmns</p>
<pre><code></code></pre><h1 id="컬럼-여러-개-지정시-중복-사용학-ㅣ">컬럼 여러 개 지정시 []중복 사용학 ㅣ!!</h1>
<p>df[[&#39;컬럼명1&#39;,&#39;컬럼명2&#39;]]</p>
<pre><code>### loc, iloc
* df.loc[&#39;행&#39;:&#39;열&#39;]
* df.iloc[&#39;행&#39;:&#39;열&#39;]

### loc
* &#39;특정 레이블 label=(index로 이해하기)&#39;통해 접근
* **index 기준으로 찾는 것**을 loc로 이해하기 
* **location** 약어</code></pre><p>#0번째,3번째,5번째 행을 가져온다고 오해 말기 !!
#index에 0,3,5라고 적혀 있는 행을 가져오는 것임 
df.loc[[0,3,5]]</p>
<pre><code>#### 숫자 인덱스 형에서 문자열 인덱스로 변경하는 방법
### 인덱스 이름 변경.set_index()</code></pre><p>#새로운 파일이름 = #기존에 사용하고 있던 파일 복사
loc_df = df.copy()</p>
<pre><code>파일명.index = 파일명[&#39;컬럼명&#39;]
파일명.set_index(&#39;컬럼명&#39;) =&gt; 전체 index명 바뀜</code></pre><p><strong>loc_df.index = loc_df[&#39;변경하고자 하는 컬럼명&#39;]</strong>
<strong>loc_df.set_index(&#39;변경하고자 하는 컬럼 명&#39;)</strong></p>
<pre><code></code></pre><p>loc_df.loc[[&#39;index명1&#39;,&#39;index명2&#39;]]</p>
<pre><code>#### loc 조건문 사용(df.loc[&#39;조건문&#39;])</code></pre><p>#파일명.loc[파일명[&#39;컬럼명]==&#39;원하는 값&#39;
#&#39;컬럼&#39;에서 ~인 경우에만 가져온다.
#&#39;컬럼&#39;에서 ~이 아닌 경우에만 가져온다.
df.loc[df[&#39;컬럼명&#39;]==&#39;원하는 값&#39;]
df.loc[df[&#39;컬럼명&#39;]!=&#39;원하는 값&#39;</p>
<pre><code></code></pre><p>#컬럼이 5이상인 경우에만 가져옴
df.loc[df[&#39;컬럼&#39;]&gt;=5]</p>
<pre><code>#### loc 특정 열 조회</code></pre><p>#(행,열) 위치관계 잊지 않기 
#&#39;컬럼&#39;에 대한 것만 가져오기 
df.loc[:,[&#39;컬럼명&#39;]]</p>
<pre><code></code></pre><p>#중복 선택일 경우 [[]]
df.loc[:,[&#39;컬럼1&#39;,&#39;컬럼2&#39;]]</p>
<pre><code>#### loc 조건문 df.loc[:,&#39;조건문&#39;]</code></pre><p>#특정 열 가져오기 
#특정 열 제외하고 가져오기 
df.loc[:,df.columns == &#39;컬럼명&#39;]
df.loc[:,df.columns != &#39;컬럼명&#39;]</p>
<pre><code>#### loc 행, 열 조건</code></pre><p>#지정 컬럼에 속해 있는 열을 가져옴
df.loc[df[&#39;index&#39;]==&#39;특정 index&#39;,[&#39;컬럼&#39;]]
df.loc[df[&#39;index&#39;]==&#39;특정 index&#39;,df.columns == &#39;특정 컬럼&#39;]</p>
<pre><code>### iloc 
* integer location
#### iloc 특정 행 조회</code></pre><p>#0<strong>번째</strong> 가져옴
#지정해준 파일명.iloc[0]
iloc_df.iloc[0]
#<strong>0,1,3번째 가져옴</strong>
iloc_df.iloc[[0,1,3]]</p>
<pre><code></code></pre><p>#index이름이 필요 없음
#1번째부터 3번째까지 가져옴
iloc_df.iloc[1:3]</p>
<pre><code>#### 특정 열 조회</code></pre><p>#행은 다 가져오고, 컬럼 3번째에서 6번째까지 가져오기 
iloc_df.iloc[:,3:6]</p>
<pre><code>### [컬럼].isin(&#39;가져오고 싶은 값&#39;) 
* 내가 정한 list안에 있는 값들만 가져오고 싶을 때 사용</code></pre><p>#원하는 값을 지정해주기 
name = [&#39;리스트 지정&#39;] 
<strong>#컬럼 내에 지정된 리스트 값만 가져오기
#true와 false로 나타남</strong>
<strong>df[&#39;컬럼명&#39;].isin(name)</strong></p>
<pre><code></code></pre><h1 id="dataframe-형태로-나타남">dataframe 형태로 나타남</h1>
<p>df.loc[df[&#39;컬럼&#39;].isin(name)]</p>
<pre><code>### 행 row, 열 column 추가/삭제
* 행 추가 : df.append(dict 또는 Series/DataFrame)
*    ignore_index = True 반드시 추가 
* 열 추가 : df[&#39;추가할 열 이름&#39;]=&#39;추가할 열 정보(list 또는 Series)
* 행/열 삭제
*    행 삭제 : df.drop(index=[&#39;삭제하려는 행 인덱스&#39;])
*    열 삭제 : df.drop(columns=[&#39;삭제하려는 열 이름&#39;])

#### Series 이용하여 행 추가 </code></pre><p>type(df.iloc[1])</p>
<blockquote>
<blockquote>
<p>pandas.core.series.Series</p>
</blockquote>
</blockquote>
<pre><code></code></pre><p>#두번째 값을 뽑아서 추가 
df.append(df.iloc[1])
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] [pandas] Join, Merge, Contact : 데이터 합치기 ]]></title>
            <link>https://velog.io/@ddoy_eon/Python-pandas-Join-Merge-Contact-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%95%A9%EC%B9%98%EA%B8%B0</link>
            <guid>https://velog.io/@ddoy_eon/Python-pandas-Join-Merge-Contact-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%95%A9%EC%B9%98%EA%B8%B0</guid>
            <pubDate>Sun, 14 Aug 2022 17:41:50 GMT</pubDate>
            <description><![CDATA[<h3 id="join">Join</h3>
<blockquote>
<p><strong>join 4가지 방식</strong>
&#39;Inner Join&#39; : 교집합
&#39;Left Join&#39; : 왼쪽 전체
&#39;Right Join&#39; : 오른쪽 전체
&#39;Outer Join&#39; : 합집합</p>
</blockquote>
<pre><code>df.join(df1, on=&#39;키 인덱스&#39;, how=&#39;조인 방법&#39;, #추가사항 sort=&#39;정렬여부&#39;</code></pre><h3 id="set_index지정할-열">set_index(&#39;지정할 열&#39;)</h3>
<pre><code>df.set_index(&#39;columns 중에 하나 쓰기&#39;)</code></pre><h3 id="merge">merge</h3>
<blockquote>
<p>같은 컬럼만 있으면 사용 가능함.</p>
</blockquote>
<pre><code>pd.merge(df1, df2, on=&#39;컬럼&#39;, how=&#39;조인방법&#39;, sort=&#39;정렬&#39;)</code></pre><pre><code>#왼쪽df #오른쪽df1
pd.merge(df, df1, on=&#39;컬럼&#39;, how=&#39;left&#39;)
pd.merge(df, df1, on=&#39;컬럼&#39;, how=&#39;right&#39;)
pd.merge(df, df1, on=&#39;컬럼&#39;, how=&#39;inner&#39;)
pd.merge(df, df1, on=&#39;컬럼&#39;, how=&#39;outer&#39;)</code></pre><h3 id="concat">Concat</h3>
<blockquote>
<ul>
<li>_concat_은 행이나 열 방향으로 데이터 프레임 붙일 수 있음</li>
</ul>
</blockquote>
<ul>
<li>행 방향 :axis = 0 #위아래로 붙임</li>
<li>열 방향 :axis = 1 #왼쪽에서 오른쪽으로</li>
</ul>
<pre><code>pd.concat([df1, df2], axis=&#39;행 또는 열&#39;)</code></pre><pre><code>pd.concat([df1, df2], axis=&#39;행 또는 열&#39;, **join = &#39;inner&#39;**) #겹치는 값만 뽑을 것임.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] pivot table, groupby, get_group, agg 사용하기 ]]></title>
            <link>https://velog.io/@ddoy_eon/Python-pivot-table-groupby-getgroup-agg-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ddoy_eon/Python-pivot-table-groupby-getgroup-agg-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 14 Aug 2022 17:05:40 GMT</pubDate>
            <description><![CDATA[<h3 id="pivot_table-사용하기">pivot_table 사용하기</h3>
<ul>
<li><strong>pd.pivot_table(df, index=&#39;행 인덱스&#39;, columns = &#39;열 인덱스&#39; , values = &#39;조회하고 싶은 값&#39;, aggfunc=&#39;집계 방식&#39;)</strong></li>
</ul>
<p><em>aggfunc : &#39;mean&#39; &#39;sum&#39; &#39;count&#39;</em></p>
<h3 id="groupby-사용하기-그룹통계">groupby 사용하기 [그룹통계]</h3>
<pre><code>df.groupby(&#39;그룹&#39;).count()
df.groupby(&#39;그룹&#39;).mean()
df.groupby(&#39;그룹&#39;).var() #분산
df.groupby(&#39;그룹&#39;).std() #표준편차
df.groupby(&#39;그룹&#39;).min()
df.groupby(&#39;그룹&#39;).max()
df.groupby(&#39;그룹&#39;).sum()</code></pre><pre><code>df.groupby(&#39;그룹명&#39;)[&#39;추출하고자 하는 컬럼명&#39;]
**#그룹은 index로 위치**</code></pre><pre><code>#여러 개 그룹을 지정하고 싶다면 
#index가 늘어남
df.groupby([&#39;그룹명&#39;,&#39;그룹명2&#39;])</code></pre><h3 id="인덱스-분할-reset_index">인덱스 분할 reset_index()</h3>
<pre><code>df.groupby([&#39;그룹명&#39;,&#39;그룹명2&#39;]).reset_index() 
#두 개로 나뉘어있던 인덱스가 다시 &#39;컬럼&#39;으로 돌아감</code></pre><h3 id="get_group">get_group()</h3>
<pre><code>#DataFrame의 index가 나타남
df.groupby(&#39;그룹명&#39;).groups</code></pre><pre><code>df.groupby(&#39;그룹명&#39;).get_group(&#39;묶고자 하는 값&#39;)</code></pre><h3 id="agg">agg()</h3>
<pre><code>df.groupby(&#39;그룹명&#39;).agg({&#39;컬럼명1&#39;:&#39;sum&#39;,&#39;컬럼명2&#39;:&#39;mean&#39;})</code></pre><blockquote>
<p>index로 &#39;그룹명&#39; 생기고 컬럼1에 대한 합계, 컬럼2에 대한 평균으로 컬럼 생성됨</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>