반응형

Python 27

[DataAnalysis] PCA(Principal Component Analysis)

PCA(Principal Component Analysis) : 여러 차원들의 특징을 가장 잘 설명하는 차원을 이용해 차원을 축소 1. 데이터 표준화 및 원점 이동 1) 데이터 단위 통일(m, mm / g, kg) 2) 데이터를 표준화(중심=원점을 기준으로 함) 2. 주성분 찾기 1) 데이터의 중심(원점)을 지나고 모든 데이터들로부터 수직거리가 가장 가깝게 하는 선 2) 주성분이 2개라면 두 번째 주성분 선은 첫 번째 주성분 선에 수직, 모든 데이터들에서 선까지 수직거리가 가장 작은 선 2-1) 주성분 찾는 방법 : 데이터들의 분산이 최대가 되도록 하는 선(수직 거리 짧음) 2-2) 두 번째 주성분 선이 첫 번째 주성분 선에 수직인 이유 : 첫 번째 주성분과 비슷한 정보가 적음 3. 데이터 투영 1) 모..

Python/DataAnalysis 2024.02.07

[DataAnalysis] 차원축소

차원이란? : 변수의 개수 - 데이터의 차원이 높아지면 좀 더 많은 정보를 나타낼 수 있음 - but, 데이터의 차원이 너무 많아지면 분석의 정확도가 떨어지는 경우도 있음 차원축소 1. 차원 선택 : 전체 차원 중 의미 있다고 판단되는 것들만 선택해서 사용 : 변수들 간의 관계를 통해 덜 중요하거나 불필요한 변수를 찾아 데이터에서 빼는 작업 장점 - 사용하기 쉽고 빠르게 적용 가능, 쉽게 해석가능 단점 - 정보손실이 커짐 2. 차원 추출 : 데이터를 가장 잘 설명하는 차원을 새롭게 생성하여 차원을 줄이는 방법 → 여러 변수의 특징을 종합적으로 잘 나타내는 새로운 변수를 찾아내 변수를 통합 장점 - 필요한 정보를 최대한 보존하기 때문에, 상대적으로 더 나은 성능 단점 - 여러 변수의 특징을 대표하기 위해 ..

Python/DataAnalysis 2024.02.07

[DataAnalysis] GMM (Gaussian Mixture Model)

GMM (Gaussian Mixture Model) : 특정 데이터의 값이 어떤 분포에 포함될 확률이 더 큰지를 따져서 각 클러스터로 구분하는 게 GMM의 방법론 - 클러스터별로 중심(평균)을 표현하면서 분산의 구조도 함께 띄고 있는 데이터 세트에 효과적 데이터가 원형으로 흩어져 있으면 평균은 있지만 분산이 없는 데이터라고 할 수 있음 → k-means 데이터가 타원형으로 흩어져 있다면 중심(평균)과 분산의 값을 갖는 형태 → GMM 모델 특징 특정 분포에 할당된 데이터 수가 적으면 모수 추정이 잘 안됨 정규분포를 따르지 않는 데이터를 다룰 수 없음. from sklearn.mixture import GaussianMixture from sklearn.datasets import make_classifi..

Python/DataAnalysis 2024.02.04

[DataAnalysis] Kmeans 결과 해석

Kmeans 장점 - 변수들에 대한 배경지식, 역할, 영향도에 대해 모르더라도 데이터 사이의 거리만 구할 수 있다면 쉽게 사용 가능 - 알고리즘이 비교적 쉬운 수식으로 이루어졌기 때문에 이해와 해석이 용이합니다. Kmeans 단점 - 데이터의 영향력을 반영하지 못함. - 최적의 클러스터 개수인 k를 정하는 게 어렵다 - 이상치에 영향을 많이 받음 - 이상치가 포함된 데이터일 경우 클러스터의 중심(Centorid)을 업데이트하는 과정에서 Centroid의 위치가 크게 변동 - 클러스터가 원하지 않는 방식으로 묶일 수 있음 model = KMeans(n_clusters=5, random_state=123) model.fit(scaled_df) # 학습 모델 결과 추가 sales_df['label'] = mo..

Python/Pandas 2024.02.01

[DataAnalysis] Elbow Method

Elbow Method : 최적의 클러스터 갯수 찾는 방법 - 클러스터마다 속한 데이터와 Centroid 사이 거리의 합이 작아야 함. inertia : 각 클러스터에 속한 데이터들과 Centroid 사이의 거리를 제곱해서 전부 더한 값 Elbow Method 지점 찾기 import pandas as pd from sklearn.cluster import KMeans import seaborn as sns %matplotlib inline scaled_df = pd.read_csv('data/scaled_data.csv', index_col=[0]) inertias = [] for k in range(1, 16): model = KMeans(n_clusters=k, n_init=10, random_sta..

Python/Pandas 2024.02.01

[DataAnalysis] Clustering

import pandas as pd # 판다스 출력 결과를 소수점 둘째 자리 까지로 제한 pd.options.display.float_format = '{:,.2f}'.format sales_df = pd.read_csv('data/sales_data.csv', index_col=['customer_id']) sales_df import seaborn as sns sns.set(style="darkgrid", rc={'figure.figsize':(16,9)}) # 데이터 시각화 sns.scatterplot(x=sales_df['total_buy_cnt'], y=sales_df['total_price'], s=200) 이상점 제거 outlier_idx_cust_df = get_outlier_mask(sa..

Python/Pandas 2024.01.31

[Pandas] Data Merge

가격데이터, 수량데이터 가져오기 import pandas as pd %matplotlib inline price_df = pd.read_csv('./data/vegetable_price.csv') quantity_df = pd.read_csv('./data/vegetable_quantity.csv') price_df quantity_df Inner Join (Product 컬럼 기준으로 데이터 합치기) pd.merge(price_df, quantity_df, on='Product') - Product 컬럼에서 공통적으로 가지고 있는 값만 출력 Left Outer Join pd.merge(price_df, quantity_df, on='Product', how='left') - price_df 에 있는 c..

Python/Pandas 2024.01.22

[Pandas] groupby 카테고라이징

import pandas as pd df = pd.read_csv('data/occupations.csv') occ_groups = df.groupby('occupation') # type(age_groupsBy) mean_occ_groups = occ_groups.mean(numeric_only=True) mean_occ_groups.sort_values('age') 직업별 여성 비율 높은 순서 구하기 import pandas as pd df = pd.read_csv('data/occupations.csv') # 여기에 코드를 작성하세요 # df.head() occ_group = df.groupby('occupation') df_male = df.loc[df['gender']=='M'] male_gro..

Python/Pandas 2024.01.22

[Pandas] 문자열 필터링

데이터 컬럼 출력 df['Genre'].unique() 문자열 포함 데이터 출력 df[df['Genre'].str.contains('Blues')] 특정 문자열로 시작하는 데이터 출력 df[df['Genre'].str.startswith('Blues')] 새로운 열에 값 넣기 df['Contains Blue'] = df[df['Genre'].str.contains('Blues')] 문자열 쪼개기 address = df['소재도로명주소'].str.split(n=1, expand=True) df['관할구역'] = address[0] import pandas as pd df = pd.read_csv('data/museum_2.csv') phone_number = df['운영기관전화번호'].str.split(p..

Python/Pandas 2024.01.16
반응형