1. 어떤것들을 공부했는지

이번주는 AI모델활용, 머신러닝, Python, LLM&RAG 강의를 듣고 GITHUB를 활용한 포트폴리오 작성 및 복습하는 시간이였습니다.

원래의 목표로는 머신러닝 결과를 해석을 가장 중요시했지만 중간에 LLM&RAG 강의를 새롭게 듣게 되어 강의 완강을 최우선 목표로 목표를 수정하게 되었습니다.

LLM&RAG 강의를 완강 하였고

머신러닝의 PCA, k-means-clustering, DBSCAN, 계층적 군집화에 대한 복습을 마무리했습니다.

LDA, t-SEN의 결과해석은 아직 마무리 하지 못했지만 틈이 나는대로 진행할 예정입니다.

포트폴리오 또한 새로운 강의 수강 및 머신러닝 복습, 트러블 이슈 등으로 많이 진행하지 못한 상황으로 빠르게 정리하고 싶습니다.

2. 학습하며 가진 생각들

1) 머신러닝

  • 결과에 대한 해석을 위해선 수학개념을 이해하는게 중요해 보임
  • 왜 사용하는지? 어떻게 결과를 해석하는지 찾고 학습하는 과정이 매우 어려움
  • 코드의 파라미터 등의 기능은 어느정도 숙지했다고 생각함

2) 파이썬

  • 수준별 학습 반에서 진행하는 강의 및 과제로 학습 중
  • 과제를 혼자 풀어보고 다른 해석 및 튜터님의 풀이 방법 등을 보며 공부
  • 다양한 방법이 존재하는 것이 신기하고 실제 현장에서 주로 쓰는 방법이나 그라운드 룰 등에 대한 이야기가 신기했음
  • 많은 질문이 생각나지만 혼자 학습해보고 해결이 안되는 부분을 질문해서 학습 시간이 더 오래걸리나 싶은 생각이 들지만 이게 가장 좋은 학습 방법 같음

3) AI모델활용

  • 아직 API키 활용을 제대로 못하겟음
  • 항상 만나지만 아직 해결 못한 환경변수 설정 튜터님에게 질문해야할 것으로 보임
  • 신기하고 재미있어 보이지만 코드를 다 공부하기에 학습시간이 오래걸릴 것 같음

4) LLM&RAG

  • 1~4주차 강의는 쉽고 반복되는 내용으로 빠르게 이해가 가능했음
  • 5주차 강의 또한 반복되는 내용에 조금씩 내용이 깊어지고있다 생각함
  • 5주차 마지막 강의는 여러번 재수강이 필요해 보임
  • 내가 할 수 있을까? 라는 생각이 들기 시작함

5) 포트폴리오

  • GITHUB의 웹싸이트 만들기 까지 했지만 꾸미는 방법은 진행하지 못한 상태
  • 언젠간 해야지하면서 다른 학습에 시간을 다 사용해버려 진행이 너무 느림

3. 다음 주 목표

  • 머신러닝 t-SEN, LDA 결과 완벽히 해석
  • 환경변수 설정에 대한 내용 질문 및 찾아보기
  • LLM&RAG 필기한 내용을 주로 복습하고 개인과제가 나오면 집중 복습
  • 파이썬 강의에서 나오는 내용은 꾸준히 복습하고 다음주 주말에 문제 한번씩 다시 풀어볼 것

'WIL' 카테고리의 다른 글

내일배운캠프 WIL + 머신러닝  (0) 2024.10.27
내일배움캠프 2주차 WIL + 파이썬 데이터 정복  (4) 2024.10.13

이번주에는 머신러닝 학습 방법과 전처리, 데이터 구별 방법에 대하여 주로 학습을 하였습니다.

 

전처리를 진행하는 방법에 대해 익숙해졌고

 

아직 머신러닝 코드들에 대하여 여러번 학습했지만 아직 미숙하다.

 

학습한 내용의 소개 순서는

 

1. 데이터 구분 방법

 

2. 전처리 방법

 

3. 머신러닝 import코드 와 각 학습방법들의 특징

 

4. 회고

 

순서로 진행하겟습니다.

 


☑️ 데이터 구분 방법

1. 데이터 종류

1) 질적, 양적 데이터

질적 데이터

-명목척도: 순서나 크기의 개념없이 단순한 구분(혈액형, 학생번호, 전화번호 등)

 

-서열척도: 순서나 대소 관계가 의미있지만, 비례관계를 나타내지 않음(만족도 평가, 성적 등급 순위 등)

 

양적 데이터

-구간척도: 대소 관계와 함께 값들간의 타이에 의미가 있는 데이터, 0의 기준이 절대적이지 않고 임의로 정한 기준(온도, IQ 시간 등)

 

-비율척도: 절대적 0을 포함하고 비율비교가 가능한 데이터(키, 몸무게, 시험점수, 거리, 절대온도 등)

 

2) 데이터의 연속성

이산형 데이터

-뎐속적인 값이 아닌 정해진 범위 내의 특정 값으로만 표현

-값이 하나하나 개별적으로 구분되는 변수로 주로 정수값을 가지며 불연속적

-주사위눈, 시험점수, 학생 수 등

 

연속형 데이터

-연속적인 값을 가지며, 범위 내에서 무한히 많은 값으로 표현

-값이 연속적이며, 값 사이에 무한히 많은 세부적인 값이 존재

-키, 온도, 시간 등

 

2. 데이터 별 전처리 방법

-원핫인코딩(질적데이터 / 명목척도)

-라벨 인코딩(질적 데이터 / 서열척도)

-정규화MINMAXScaler: 스케일이 다른 피처 존재, 거리기반 알고리즘(k-nn, SVM), 경사하강법 사용하는 경우

-표준화Standard Scaler: 데이터의 분포가 정규분포일 때 많이 사용하며, 수치형 데이터에만 사용 가능

-피처 엔지니어링

-범주화


☑️ 전처리 방법

1. 탐지

-결측치  print(df.isna().sum())

 

-이상치 탐지

print(df['나이'].describe())

평균(mean)과 표준편차(std)가 큰 차이를 보이는 경우, 또는 최대값(max)이 비정상적으로 높은 경우

 

import matplotlib.pyplot as plt

시각화를 사용한 탐지

 

IQR(Interquartile Range)

 

-중복값 확인

df = df.duplicates().sum()

 

2. 제거, 대체

-결측치 제거

df_dropped_rows = df.dropna()

df_dropped_columns = df.dropna(axis=1)

 

-결측치 대체

df_filled = df.fillna('없음')

df['나이'] = df['나이'].fillna(df['나이'].mean())

df2['온도'] = df2['온도'].interpolate() (선형보간법)

 

-이상치 제거

df_without_outliers = df[(df['나이'] >= lower_bound) & (df['나이'] <= upper_bound)]

IQR방법의 lower_bound, upper_bound 사용

 

median_age = df['나이'].median() df['나이'] = df['나이'].apply(lambda x: median_age if x > upper_bound or x < lower_bound else x)

IQR방법의 lower_bound, upper_bound 사용

 

df = df[df['PurchaseAmount'] >= 0]
 음수 값 제거


df = df[df['PurchaseAmount'] < 1000000]

 비정상적인 큰 값 제거

 

-중간값 제거

df = df.drop_duplicates(subset='TransactionID')

 

3. 인코딩

맵핑을 활용한 인코딩

mpa(lambda(x: 0 if x == "" else 1)

 

4. 정규화, 표준화

# MinMaxScaler

scaler = MinMaxScaler()

df['PurchaseAmount'] = scaler.fit_transform(df[['PurchaseAmount']])

 

# StandardScaler

from sklearn.preprocessing import StandardScaler

numeric_cols = ['TransactionID', 'CustomerID', 'PurchaseAmount', 'CustomerAge', 'ReviewScore', 'CustomerGender', 'ProductCategory']


scaler = StandardScaler()
standard_data = scaler.fit_transform(df_numeric)
print(pd.DataFrame(standard_data, columns=numeric_cols))

 

5. 타입 변환

astype(str)

astype(int) 등

 

6 샘플링

# 데이터셋에서 50% 샘플 추출

df_sampled = df.sample(frac=0.5)

# 데이터셋에서 100개의 샘플 추출

df_sampled_n = df.sample(n=100)

 


☑️머신러닝 import 코드 및 학습모델 특징

지도학습

 

분류모델 - 로지스틱 회귀

- 변수가 이진형일 때 사용

- 확율 예측

from sklearn.linear_model import LogisticRegression

 

분류모델 - SVM

- 분류와 회귀 분석에 사용

- 마진을 최대화하면서 결정 초평면을 찾아 데이터 포인트를 정확하게 분류

from sklearn.svm import SVC

 

분류모델 - KNN

분류와 회귀 분석

학습 데이터를 기반으로 새로운 데이터 포인트의 클래스를 예측

from sklearn.neighbors import KNeighborsClassifier

 

분류모델 - 나이브베이즈

- 통계적 분류 기법

- 주로 텍스트 분류 문제에 사용

- 목표는 주어진 데이터 포인트가 특정 클래스에 속할 확률을 계산하여 분류

 

- 가우시안: 특징들이 연속적이고 정규 분포를 따른다.

from sklearn.naive_bayes import GaussianNB

 

- 베르누이: 특징들이 이진수(0 또는 1)로 표현되는 경우 사용

from sklearn.naive_bayes import BernoulliNB

 

- 티노미얼 : 특징들이 다항 분포를 따르는 경우

from sklearn.naive_bayes import MultinomialNB

 

분류모델 - 의사결정나무

- 의사결정 규칙을 만들고 이를 바탕으로 데이터를 분류나 회귀

from sklearn.tree import DecisionTreeClassifier

 

비지도 학습

군집화 모델

k-means clustering

from sklearn.cluster import KMeans

  1. 초기화: k개의 군집 중심을 랜덤하게 설정합니다.
  2. 할당 단계: 각 데이터 포인트를 가장 가까운 군집 중심에 할당합니다.
  3. 업데이트 단계: 각 군집의 중심을 해당 군집에 속한 데이터 포인트들의 평균으로 업데이트합니다.
  4. 반복: 할당 단계와 업데이트 단계를 군집 중심이 더 이상 변화하지 않을 때까지 반복합니다

계층적 군집화

- 데이터포인트를 계층 구조로 그룹화하는 방법

 

DBSCAN

- 밀도 기반 군집화 알고리즘

- 데이터 밀도가 높은 영역을 군집으로 간주하고, 밀도가 낮은 영역은 노이즈로 처리

from sklearn.cluster import DBSCAN

 

차원축소

PCA

- 고차원 데이터를 저차원으로 변환하는 차원 축소 기법

- 데이터의 분산을 최대한 보존하면서, 데이터의 주요 특징을 추출해 저차원 공간으로 변환

- 데이터의 시각화, 노이즈 제거, 계산 효율성 향상

from sklearn.decomposition import PCA 

 

t_SNE

- 고차원 데이터를 저차원으로 변환하여 시각화하는 차원 축소 기법

- 포인트 간의 유사성을 보존하면서, 고차원 데이터를 2차원 또는 3차원 공간으로 변환

- 데이터의 구조와 패턴을 시각적으로 이해

from sklearn.manifold import TSNE

 

LDA

- 차원 축소와 분류를 동시에 수행

- 데이터의 클래스 간 분산을 최대화하고, 클래스 내 분산을 최소화하는 방향으로 데이터를 변환

- 분류 성능을 향상시키고, 저차원 공간에서 데이터의 구조를 시각화

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

 

앙상블학습

배깅과 부스팅

- 여러 개의 학습 모델을 결합하여 하나의 강력한 모델을 만드는 기법

- 학습의 주요 기법으로는 배깅(Bagging)과 부스팅(Boosting)

- 배깅이란? 여러 개의 학습 모델을 병렬로 학습, 원본 데이터셋에서 중복을 허용한 무작위 샘플을 생성, 모델 간의 상관성을 줄이고 예측 성능을 향상

from sklearn.ensemble import BaggingRegressor

- 부스팅이란? 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시키고, 그 예측 결과를 결합, 이전 모델이 잘못 예측한 데이터 포인트에 가중치를 부여하여, 다음 모델이 이를 더 잘 학습

from sklearn.ensemble import GradientBoostingRegressor

 

랜덤 포레스트

- 여러 개의 결정 트리(Decision Tree)를 학습시키고, 그 예측 결과를 결합하여 최종 예측

- 과적합을 방지하고 예측 성능을 향상

- 데이터의 무작위 샘플을 사용하여 학습되며, 트리의 예측 결과를 평균 또는 다수결로 결합하여 최종 예측을 수행

from sklearn.ensemble import RandomForestRegressor

 

그래디언트 부스팅 머신(GBM)

- 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시키고, 그 예측 결과를 결합하여 강한 학습기(strong learner)를 만드는 기법

- 잘못 예측한 데이터 포인트에 가중치를 부여하여, 다음 모델이 이를 더 잘 학습하도록한다.

- 과적합을 방지하고 예측 성능을 향상

from sklearn.ensemble import GradientBoostingRegressor

 

XGBoost

- 병렬 처리, 조기 종료, 정규화 등의 기능을 통해 성능을 극대화

- 이전 트리의 예측 오류를 보완하는 방식으로 학습됩

- 트리의 예측 결과를 가중합하여 최종 예측을 수행

import xgboost as xgb


☑️ 회고

이번주에는 조별과제를 진행하면서 머신러닝에 대해서 학습을 진행하였고

 

조별과제로는 발표와 자료 준비를 맡았다.

 

발표를 준비하기에 과제의 내용을 적절히 파악해야한다는 생각으로 

 

스스로 과제 내용을 전체적으로 진행해보았고

 

데이터 파악, 전처리, 머신러닝 모델 학습 구조에 대해 자세히 파악하는 시간이였다.

 

다음 주는 과제 완성도를 높이는 회의를 진행하면서 데이터 파악 연습, 딥러닝 모델 연습을 주로 할거다.

 

조과제는 팀장으로서 생각하고 행동해야하겟지만 팀장을 처음 해보는지라 어떻게 사람들을 이끌어야하는지 모르겟다.

 

그래서 주로 과제를 어떻게 진행할지 다 같이 고민하는 시간을 가지기 위한 생각을 많이했다.

 

'WIL' 카테고리의 다른 글

내일배움캠프 WIL 24.11.10  (1) 2024.11.10
내일배움캠프 2주차 WIL + 파이썬 데이터 정복  (4) 2024.10.13
  1. Pandas 
  2. Numpy
  3. 데이터 전처리
  4. 개인과제
  5. 총평

 

판다스란?

 📚 판다스(Pandas)는 Python에서 데이터를 쉽게 다룰 수 있게 해주는 데이터 분석 라이브러리예요! 데이터를 표(테이블) 형식으로 다루기 쉽게 만들어주고, 다양한 데이터 조작 기능을 제공해요. 데이터를 정리하고 분석하는 데 아주 강력한 도구랍니다. 

 

구성요소

  • 데이터프레임(DataFrame)

판다스의 핵심 자료 구조로, 엑셀의 스프레드시트처럼 행(row)과 열(column)로 구성된 2차원 데이터 구조예요.

  • 시리즈(Series)

단일 열을 나타내는 1차원 데이터 구조로, 데이터프레임의 구성 요소 중 하나예요. 판다스를 이용하면 데이터의 필터링, 정렬, 집계 등 다양한 작업을 간단한 코드로 수행할 수 있어요.

 

 

활용

  • 데이터 분석

판다스는 방대한 양의 데이터를 효율적으로 처리하고 분석하는 데 매우 유용해요. 통계 분석, 트렌드 파악, 데이터 시각화 등 다양한 작업에 사용돼요.

  • 데이터 전처리

머신러닝 모델을 만들기 전에, 데이터를 정리하고 변환하는 과정에서 판다스는 없어서는 안 될 도구예요. 결측값 처리, 이상치 제거, 데이터 변환 등 다양한 작업을 지원해요.

  • 비즈니스 인텔리전스(BI)

기업에서 중요한 의사결정을 내리기 위해 데이터에서 인사이트를 도출하는 과정에서도 판다스가 널리 쓰여요. 고객 데이터 분석, 판매 데이터 추적 등 다양한 분석 작업에 활용돼요.

  • 금융 데이터 분석

금융 시장 데이터를 분석하고, 투자 전략을 수립하는 데도 판다스가 많이 사용돼요. 주식 가격 데이터, 경제 지표 등을 분석하는 데 강력한 도구예요.

  • 연구 및 학술 분석

연구 데이터의 수집, 정리, 분석에 판다스가 필수적이에요. 특히 사회과학, 생명과학 등 다양한 분야에서 데이터를 다루는 연구에 활용돼요.

 


 

NumPy란?

 📚 NumPyNumerical Python의 줄임말로, 과학 계산에 강력한 성능을 제공하는 파이썬 라이브러리입니다.

 

🔎 NumPy?

  • 다차원 배열 객체인 ndarray와 배열을 효율적으로 처리할 수 있는 다양한 함수들을 제공합니다.
  • 데이터 분석, 머신러닝, 딥러닝에서 기초가 되는 라이브러리로, 판다스와 함께 자주 사용됩니다.

🔎 NumPy의 주요 특징

  • 고속 배열 연산: C언어로 작성되어 있어 파이썬 기본 리스트보다 훨씬 빠른 연산 가능.
  • 다양한 수학 함수: 배열 간의 덧셈, 뺄셈, 곱셈 등의 연산을 효율적으로 수행.
  • 선형대수, 통계 함수: 복잡한 수학 계산도 간단히 처리 가능. 

활용

 

브로드캐스팅(Broadcasting)

  • 작은 배열이 큰 배열의 형태에 맞게 자동으로 확장되어 연산이 이루어지는 것을 의미해요. 이 기능 덕분에 코드를 더 간결하게 작성할 수 있습니다. 

 기본적인 수학 함수와 통계 함수

  •  NumPy는 배열을 다룰 때 자주 사용하는 다양한 수학 함수와 통계 함수를 제공합니다.

 


 

 

데이터 전처리란?

 📚  데이터 분석, 머신러닝, 또는 딥러닝 모델의 성능을 극대화하고, 정확하고 신뢰할 수 있는 결과를 얻기 위함입니다.

 📚 데이터는 대부분 그 자체로 불완전하거나, 노이즈가 많거나, 잘못된 형식으로 존재하기 때문에 필수적인 과정입니다.

 

활용

 

1. 결측값 처리 (Missing Values)

  • 이유: 대부분의 데이터셋은 완전하지 않아서 값이 누락된 경우가 많습니다. 결측값을 무시하거나 적절히 대체하지 않으면 모델의 성능이 저하됩니다.
  • 처리 방법: 결측값을 제거하거나 평균, 중앙값, 최빈값으로 대체하는 등의 방법을 사용합니다.

2. 이상치 제거 (Outlier Removal)

  • 이유: 이상치는 데이터에 큰 영향을 미쳐 통계적 분석이나 머신러닝 모델의 성능을 왜곡할 수 있습니다.
  • 처리 방법: 이상치 탐지 후, 이상값을 제거하거나 적절히 수정합니다.

3. 데이터 스케일링 (Data Scaling) 

  • 이유: 데이터의 값이 서로 다른 스케일을 가질 때, 특히 거리 기반 알고리즘(예: K-최근접 이웃, SVM, 신경망)에서 모델이 제대로 작동하지 않을 수 있습니다.
  • 처리 방법: Min-Max Scaling, Standardization 등을 통해 값을 동일한 범위로 변환합니다.

4. 정규화 (Normalization)

  • 이유: 데이터를 정규화하면 다양한 피처 간의 차이를 줄여, 학습 알고리즘이 더 효율적으로 학습할 수 있게 합니다.
  • 처리 방법: 피처 값을 특정 범위(예: 0~1)로 변환합니다.

 5. 범주형 데이터 인코딩 (Categoical Encoding)

  • 이유: 머신러닝 알고리즘은 숫자 데이터를 처리하는 것이 일반적이기 때문에, 범주형 데이터를 수치형 데이터로 변환할 필요가 있습니다.
  • 처리 방법: One-Hot Encoding, Label Encoding 등을 사용합니다.

6. 데이터 정제 (Data Cleaning)

  • 이유: 중복된 데이터, 불필요한 공백 또는 불완전한 데이터는 분석 결과에 부정적인 영향을 미칠 수 있습니다.
  • 처리 방법: 중복 데이터 제거, 공백 제거, 불필요한 특성(feature) 제거 등으로 데이터를 정리합니다.

7. 데이터 변환 (Data Transformation)

  • 이유: 특정한 분석 또는 모델링 요구에 맞게 데이터를 변환할 필요가 있습니다. 비선형 관계를 선형으로 만들거나, 로그 변환을 통해 데이터를 안정화할 수 있습니다.
  • 처리 방법: 로그 변환, 제곱근 변환, 다항식 변환 등을 사용하여 데이터의 분포를 조정합니다.

8. 특성 선택 및 추출 (Feature Selection & Extraction)

  • 이유: 모든 피처가 분석이나 모델 성능에 기여하지 않으며, 불필요한 피처가 모델의 복잡성을 증가시킬 수 있습니다.
  • 처리 방법: 유용한 피처만 선택하거나 주성분 분석(PCA) 등 기법으로 중요한 피처를 추출합니다.

9. 데이터 균형화 (Data Balancing)

  • 이유: 분류 문제에서 특정 클래스가 다른 클래스에 비해 많이 나타나면, 학습이 편향될 수 있습니다.
  • 처리 방법: 오버샘플링, 언더샘플링 또는 SMOTE 같은 기법으로 데이터의 불균형을 해결합니다.

 

개인과제

1. 숫자 맞추기 게임

while True: #전체 반복 조건문 시작
    computer_num = random.randint(1,10) #1에서10사이의 숫자를 랜덤으로 가져오게 지정
    print('''1과 10 사이의 숫자를 하나 정했습니다.
이 숫자는 무엇일까요?''')  #위 메서드가 작용 했을 때 출력 되는 문장 작성



    while True:#조건이 참일 때까지 반복 설정
        user_num = int(input('숫자를 입력하세요.'))
        #사용자가 직접 숫자를 입력하고 정수로 바꿔주게 설정
    
        if user_num > 10: #입력 값이 10보다 클 때 작동
            print(f'숫자가 너무 큽니다. 10 이하의 숫자만 입력해주세요.') #위 조건이 충족 되었을 때 출력 되는 메세지 작성
    
        elif computer_num == user_num: #랜덤 숫자와 사용자 숫자가 동일할 때 작동 설정
            print(f'정답입니다.') #동일 시 출력 되는 메시지 설정       
            break  #위 조건이 작동 시 반복을 멈추게 설정
    

        elif user_num < computer_num: #사용자 입력 숫자가 컴퓨터 보다 적을때 작동 설정
            print("너무 작습니다. 다시입력하세요.")#위 조건이 작동 시 출력 되는 메시지 작성

        else:#위 조건이 거짓일 때 작동 설정
            print("너무 큽니다. 다시입력하세요.") #else 조건이 작동 시 출력 되는 메시지 작성 
    

    
    restart = input('다시 시작하겟습니까? (y/n)') #다시 시작여부 입력 받는 restart 생성

    if restart != 'y': #y가 아닐 때 작동
        print('게임이 끝났습니다.')  #위 조건에 맞으면 출력 되는 메세지       
 
    
        break #조건 충족 시 멈춤

 

 

 

2. 클래스 함수 사용

class Person:  # 클래스 이름은 관례상 첫 글자를 대문자로 시작합니다.
    def __init__(self, name, gender, age):  # 초기화 메서드
        self.name = name  # 속성 정의
        self.gender = gender
        self.age = age
        
    def display(self):  # 정보 출력 함수
        print(f"""이름: {self.name}, 성별: {self.gender}, 
나이: {self.age}""")   
        
    def greet(self): #조건식에 따라 성인 미성년자를 구분해서 인사하는 함수 추가
        if age >= 20:
            print("안녕하세요!name님 성인이군요!!")
        else:
            print("안녕하세요!name님 미성년자군요!!")
    
# 사용자 입력
name = input('이름을 입력해주세요: ')
while True:
    gender = input('성별을 입력해주세요 (male OR female): ').strip().lower()  # 소문자로 변환하여 비교를 용이하게 함
    if gender == 'male' or gender == 'female':  # gender 조건
        break
    else:
        print('male과 female 중 하나만 입력해주세요.')

while True:
    try:
        age = int(input('나이를 숫자로 입력해주세요: '))  # 나이 입력을 숫자로 받음
        if age > 0:  # age 조건
            break
        
        else:
            print('0보다 큰 숫자만 입력해 주세요.')
    except ValueError:
        print('유효한 숫자를 입력해주세요.')  # 숫자가 아닌 값을 입력했을 때 예외 처리
        
 


person1 = Person(name, gender, age)

 

person1.display()
person1.greet()

 

 

 

3. Python 라이브러리로 데이터 분석하기

import pandas as pd #pandas 가져오기

 

data_df = pd.read_excel("관서별 5대범죄 발생 및 검거.xlsx") #엑셀파일 가져오기

 

df = pd.DataFrame(data_df) #df라는 데이터 프레임 생성

 

map_df = {'서대문서': '서대문구', '수서서': '강남구', '강서서': '강서구', '서초서': '서초구',
'서부서': '은평구', '중부서': '중구', '종로서': '종로구', '남대문서': '중구',
'혜화서': '종로구', '용산서': '용산구', '성북서': '성북구', '동대문서': '동대문구',
'마포서': '마포구', '영등포서': '영등포구', '성동서': '성동구', '동작서': '동작구',
'광진서': '광진구', '강북서': '강북구', '금천서': '금천구', '중랑서': '중랑구',
'강남서': '강남구', '관악서': '관악구', '강동서': '강동구', '종암서': '성북구', 
'구로서': '구로구', '양천서': '양천구', '송파서': '송파구', '노원서': '노원구', 
'방배서': '서초구', '은평서': '은평구', '도봉서': '도봉구'}

 #맵핑(비교)을 하기 위한 mpa_df 생성


df['구별'] = df['관서명'].map(map_df).fillna('구 없음')
#'구별' 이라는 새로운 열 생성 하며 관서명 열에 .map() 함수를 적용시켜 맵핑 진행
# fillna함수로 결측치에 '구 없음'값 지정

pivot = pd.pivot_table(df, index = '구별', aggfunc = 'sum')
#결과 값에 관서명 열이 사라지지 않음 (colums과 valuse를 지정하지 않고 시도)

 

pivot_dropped = pivot.drop(columns=['관서명'])
#drop함수를 사용해서 관서명 열 삭제


pivot_dropped.drop(['구 없음'])

 

df = pivot_dropped
#이름이 길어져서 간단하게 바꿈

 

df['강간검거율'] = df['강간(검거)'] / df['강간(발생)'] * 100
df['강도검거율'] = df['강도(검거)'] / df['강도(발생)'] * 100
df['살인검거율'] = df['살인(검거)'] / df['살인(발생)'] * 100
df['절도검거율'] = df['절도(검거)'] / df['절도(발생)'] * 100
df['폭력검거율'] = df['폭력(검거)'] / df['폭력(발생)'] * 100
#범죄별 검거율 열 생성


df['강간검거율'] = df['강간검거율'].astype(int)
df['강도검거율'] = df['강도검거율'].astype(int)
df['살인검거율'] = df['살인검거율'].astype(int)
df['절도검거율'] = df['절도검거율'].astype(int)
df['폭력검거율'] = df['폭력검거율'].astype(int)
# float이라 값이 너무 커서 안되나 싶어서 정수 변환시킴 


df['검거율'] = df[['강간검거율', '강도검거율', '살인검거율', '절도검거율', '폭력검거율']].mean(axis=1)
#검거율 열을 생성하며 df안의 특정 열들을 리스트형식으로 가온다 표시하고 mean(axis=1)으로 평균값을 계산하며 행을 기준으로 계산 지정

 

del df['소계(발생)']
# 정상 작동 하는 것을 확인

 

del df['소계(검거)'], df['살인(검거)'], df['강도(검거)'], df['강간(검거)'], df['절도(검거)'], df['폭력(검거)']
# 정상작동

 

df = df.rename(columns = { '강간(발생)' : '강간', '강도(발생)' :'강도', '살인(발생)':'살인', '절도(발생)':'절도', '폭력(발생)':'폭력' })
#검색을 통해 rename 작성법을 보고 적었다.

pop_kor_df = pd.read_csv("pop_kor.csv", index_col='구별', encoding='utf-8') 
#csv파일 가져오기, '구별' 열을 인덱스 지정, 한글파일 읽어오기


df_csv = pd.DataFrame(pop_kor_df)

#df_csv라는 데이터 프레임 생성


df_csv2 = df_csv.dropna() #결측치 존재하는 행 제거

 

df2 = df.dropna() 

 

df3 = df2.join(df_csv2) #df2와 df_csv2를 join해서 df3 생성 

 

df3 = df3.dropna() #df3에서 결측치가 존재해 sort가 진행 되지않아 제거

 

sort_df = df3.sort_values(by = '검거율',ascending=True)  #검거율을 기준으로 오름차순 정렬

 


초보자를 위한 파인썬 300제

https://wikidocs.net/7014)

 

001 ~ 010

.answer {margin-top: 10px;margin-bottom: 50px;padding-top: 10px;border-top: 3px solid LightGray;bo…

wikidocs.net

 

100번 까지 풀었습니다.

 

 

개인과제를 끝내고 실습이 가장 중요해 보여 

 

팀원분들이 공유해준 

 

초보자를 위한 파이썬 300제를 진행했습니다.

 

아주 간단한 파이썬 함수, 문자열 등 많은 문제를 보았습니다.

 

강의에서 들었지만 시간이 지나 기억나지 않던 문제들이 많았습니다.

 

이후

 

300제까지 풀어보며 TIL에 까먹은 것과 새로 배운 내용을 꼼꼼히 정리할 것으로 복습에 도움이 될 것 같습니다.

 


총평

  • 강의를 처음 들었을 때는 Pandas나 Numpy 등 사용하는 이유를 잘 모르겟어서 이해가 가지 않았습니다.

 

  • 개인과제로 이해도가 높아진 것 같습니다!.

 

  • 코딩을 배우며 처음으로 해보는 실습과제 였습니다.

 

  • 처음 문제를 보았을 때 반복문? 조건문? 어떤걸 어떻게 써야하는지 감이 안왔습니다.

 

  • 인터넷 검색으로 하나하나 해결했습니다.

 

  • 대부분 검색으로 진행했지만 어떻게 적용하는지 어떻게 적용 되는지 자세하게 알게되는 과정이였습니다.

 

  • 계속 다른 실습문제들을 다뤄보며 익숙해지고 다양한 경험을 하는것이 중요해보입니다.

 

'WIL' 카테고리의 다른 글

내일배움캠프 WIL 24.11.10  (1) 2024.11.10
내일배운캠프 WIL + 머신러닝  (0) 2024.10.27

+ Recent posts