no image
[파이썬] 이상값 처리
데이터 분석하거나 시각화 하다보면 이상적인 범위를 벗어나 데이터 분포에 영향을 미치는 데이터들이 존재하는데 이를 이상값이라고 한다. 국민 소득을 예로 들어 설명을 하면, A그룹의 연간 소득 분포가 [5천만, 6천만, 4,800만, 6,200만, 7천만, 15억8천만, 39만]이 있다고 하면 이 그룹의 연간 평균소득은 2억6,719만원이다. 이런 수치는 이 그룹의 연간소득을 적절히 설명하지못한다. 이 때 일반적인 분포에서 벗어난 데이터인 15억8천만, 39만원이 이상값이라고 할 수 있다. # 이상값 유형 이상값은 앞에 설명한 것 처럼 수치가 너무 크거나 작아 분포에 영향을 끼치는 것 외에도 다른 유형들이 있다. 구분 설명 점 이상값 일반적인 데이터들과 값의 차이가 큰 데이터 상황적 이상값 상황에 따라서 정..
2022.07.06
no image
[파이썬] 범주형 데이터의 실수화 (labeling, one-hot encoding)
데이터의 시각화 관점에서 보았을 때, 데이터는 크게 수치형 데이터와 범주형 데이터로 구분할 수 있다. 범주형 변수란? 어떤 범주에 속하는 순위가 없는 데이터들을 의미한다. '성별'의 경우 '남', '여'로 구분된 범주형 변수이고, '직업'의 경우 '회사원', '자영업자', '프리랜서', '학생' 등으로 구분되는 범주형 변수이다. 인간이 이해하기에 보다 직관적이고 인간을 대상으로 한 자료 수집의 큰 부분을 담당하고 있다. 하지만 컴퓨터가 이해하기에는 어려우며, 연속형 변수와 함께 사용하거나 실수화 하지않으면 시각화 하기 어렵다는 단점이 존재한다. 범주형 데이터의 실수화 위와 같은 이유로 범주형 데이터를 실수화하는 경우가 종종 있다. 이번 실습에서는 Labeling과 One-Hot Encoding, 이 두 ..
2022.07.06
no image
[정보처리기사] 2022 정보처리기사 합격 후기 (비전공자, 복수전공자)
도시공학과 3년, 빅데이터연계전공 1년 반의 과정을 거치고 4학년이 되어 공대의 주요 자격증 중 하나인 기사 자격증의 선택에 기로에 놓였었다. 도시계획기사인가, 정보처리기사(또는 빅데이터분석기사)인가를 두고 내가 더 관심이 있고 재미있어하는 쪽인 정보처리기사를 따기로 마음을 먹었다. 1차 필기 시험은 학기가 시작한 직후인 3월 5일이었다. 2월 28일에 토익 시험이 있었기에 시기적으로 조금 겹쳤었다. 그렇기에 시험을 잘봐야겠다는 생각보다는 시험의 합격점수를 맞추자라는 생각으로 준비하여 과정은 비실비실하지만 합격이라는 좋은 결과를 가져왔다. 독학에 사용한 책은 시나공에서 만든 정보처리기사 기본서였는데, 여기서 제공하는 홈페이지에서 관련 자료들과 기출문제를 가지고 추가적인 공부를 할 수 있어서 아주 좋았다...
2022.07.04
no image
[파이썬] 워드 클라우드
사람들이 시각적 자극에 민감한 만큼 시각화는 중요한 작업 중 하나이다. 이번에는 시각화 방법 중 하나인 워드 클라우드 (Word Cloud)에 대해서 공부해보고자 한다. 워드 클라우드란? 워드 클라우드는 문자로 이루어진 데이터 속에서 형태소 분석을 통해 구분된 단어들의 출현 빈도에 따라서 크기가 다르게 나타나는 시각화 도구 중 하나이다. 예를 들어 뉴스 기사 제목만 모아둔 파일이 있다고 했을 때, 가장 많이 나타나는 단어들을 표현하는 방법을 두 가지로 비교해보자. 1. 빈도수 나타내기 수치를 나타내기 때문에 가장 직관적인 방법이기도 하고, 많이 사용되는 방법이기도 하다. 예를 들어서 '국가'라는 단어가 870번 등장하고, '정책'이 863번, '토지'가 770번 등장한다고 하면 국가 870 정책 863 ..
2022.06.29
no image
MySQL 기초문법
SQL이란 DBMS(DataBase Management System)에 접근하기 위한 구조화된 질의어, 프로그래밍 언어이다. 데이터베이스에서 자료를 좀 더 쉽게 검색하고, 편집하기 위해 고안되었고 백엔드 및 데이터를 다루는 분야에서 가장 기초가 되는 언어로 자리잡았다. MySQL 기초문법 SQL은 정의,조작,제어,질의 등으로 구분된 영역이 존재한다. # 접근언어 접속 명령어 : mysql -u root -p Enter password:******** use 데이터베이스명 : 해당 데이터베이스을 사용하도록 명령한다.show (databases, tables) : 데이터베이스 목록 혹은 테이블 목록을 나타낸다. desc( = describe, explain) 테이블명 : 해당 테이블의 구조를 나타낸다. # ..
2022.01.07
파이썬 클래스
파이썬에도 여타 언어들 처럼 class를 만들어 객체를 생성하는 기능을 포함하고 있다. 현실세계에서 어떠한 객체는 하나의 정보로만 구성되는 경우는 매우 드물다. 예를 들어 자동차라는 하나의 객체 안에는 자동차의 모델명, 제작사, 타입 등의 여러가지 정보로 구성되기 때문에, primitive 타입의 자료형으로는 표현하는데 한계가 존재한다. 따라서 class의 기능을 이용해 자동차 같은 객체를 설명하고, 그런 변수를 생성하고 처리할 수 있도록 한다. 특히 파이썬과 JAVA는 같은 OOPL(Object-Oriented-Programming Language)로 객체를 우선시 하는 이러한 언어들에서 Class의 개념은 몹시 중요하다. 예시로 2개의 operator에 대해 사칙연산만 수행하는 계산기를 class형식..
2021.11.14
no image
데이터 시각화 그래프
데이터를 분석하는데 사용되는 기법은 목적에 따라 다양하게 분류된다. 그 중 현재 내가 사용하고 있는 EDA(Exploratory Data Analysis) : 탐색적 데이터 분석 기법에서는 시각화를 매우 중요한 부분으로 여기고 있다. 데이터를 시각화 할 때 seaborn, matplot과 같은 라이브러리의 도움을 받으면 훨씬 간단하게 표현할 수 있다. 우선은 간단한 몇가지 그래프만 살펴보고자 한다. 선 그래프 파이그래프 막대그래프 히스토그램 박스플롯 위 순서대로 살펴볼 것이다. 1. 선 그래프 선 그래프는 우리가 가장 흔하게 알고있는 꺾은 선 그래프를 말하는 것이 맞다. 선 그래프의 장점은 시간에 따른 변화나, 지속적인 변화가 있을 때 그것을 나타내기 용이하다. 예를 들면 각 지자체별 매해 예산의 변화를..
2021.06.29
no image
numpy 라이브러리
원래 파이썬은 데이터 분석에 유용한 언어가 아니었다. 과거에는 통계를 위한 언어인 R언어가 파이썬보다 기반이 더 좋았고, 현재도 통계적 분야에는 R언어가 조금 더 유용하다고 한다. 파이썬이 데이터분석 툴로 활약하게 된건 앞서 설명한 pandas와 지금부터 알아볼 numpy(numerical python) 라이브러리가 나오고 나서 부터라고 해도 과언이 아니다. 파이썬은 해당 라이브러리들로 인해 통계적 분석 뿐 아니라 범용적으로 사용이 가능해지면서 더욱 인기가 높아졌다. numpy는 무엇일까? 기존 파이썬 언어로 계산하기 복잡한 수치들을 계산하기 쉽도록 도와주는 라이브러리이다. 뿐만 아니라 list와 유사한 기능을 하는 numpy array를 사용하여 table을 다루는 것을 더 용이하게 해준다. numpy..
2021.03.23

데이터 분석하거나 시각화 하다보면 이상적인 범위를 벗어나 데이터 분포에 영향을 미치는 데이터들이 존재하는데 이를 이상값이라고 한다.

 

국민 소득을 예로 들어 설명을 하면,

 A그룹의 연간 소득 분포가 [5천만, 6천만, 4,800만, 6,200만, 7천만, 15억8천만, 39만]이 있다고 하면 이 그룹의 연간 평균소득은 2억6,719만원이다. 이런 수치는 이 그룹의 연간소득을 적절히 설명하지못한다.

이 때 일반적인 분포에서 벗어난 데이터인 15억8천만, 39만원이 이상값이라고 할 수 있다.

 

 

# 이상값 유형

이상값은 앞에 설명한 것 처럼 수치가 너무 크거나 작아 분포에 영향을 끼치는 것 외에도 다른 유형들이 있다.

구분 설명
점 이상값 일반적인 데이터들과 값의 차이가 큰 데이터
상황적 이상값 상황에 따라서 정상일수도, 비정상일수도 있는 데이터
집단적 이상값 개별 데이터일 때는 이상이 없지만, 이러한 데이터들의 집단에서는 비정상적인 패턴을이 보이는 데이터들의 집합

이러한 이상값들은 단위의 정규화가 되지 않았거나, 고의적으로 이상값을 삽입한 경우, 측정/실험 오류, 자연 변형 등에 의해 발생한다.

 

 

# 이상 데이터 탐색

직관적으로 보이는 값들은 이상값으로 처리할 수 있지만, 데이터 수가 많거나 일반적인 그래프로 발견할 수 없는 데이터들은 통계적인 기법을 이용해서 이상값을 탐색해낸다.

 

  • Z-검정 : 정규분포의 Z-score를 이용해서 표준정규분포를 벗어나는 유의수준의 값들을 이상값으로 검출하는 방법
  • 카이스퀘어 검정 : 자유도가 1인 카이스퀘어 분포를 따르는 통계량의 임계치보다 큰 경우 하나 이상의 이상값이 존재한다고 판단한다. 데이터가 정규분포를 만족시하거나, 데이터의 수가 적을 때 이용한다
  • 사분위수 범위 : 전체 데이터 분포를 25%, 50%, 75%, 100%로 구분한 사분위 범위에서 제3분위수(75%)에서 제1분위수(25%)의 값을 뺀 IQR의 MAX와 MIN 값의 밖에 있는 값들을 이상값으로 판단
  • 회귀 진단 : 해당 데이터 집단에 회귀 모델을 적용했을 때 예상 값의 범위 밖에 있는 데이터들을 이상값으로 판단
  • 거리 탐색 기법: 관측치 사이의 거리를 이용해서 평균적인 데이터 간의 거리보다 벗어난 데이터를 이상값으로 판단, 대표적으로 k-NN 알고리즘을 들 수 있다
  • 밀도 기반 탐색 기법: 상대적인 밀도를 고려하여 이상값을 탐지, LOF, DBSCAN, k-Means 알고리즘등이 있다

 

#데이터 이상값 처리

이상값은 분석의 대상이 되지 않는 경우가 많아 삭제하는 방법을 자주 사용한다.

삭제 이외에는 극단치의 기준을 적용하여 조정하거나 삭제하는 방법 또는 다른 값으로 대치하는 방법을 사용하기도 한다.

(극단치 기준 : 평균&표준편차, 사분위수 극단값 등)

 

 

#실습

 

  • Z-검정을 이용한 이상값 탐색 및 처리
import random
data = list(np.random.randint(1, 100, size=3000))

[1~100]의 범위를 값으로 가지는 3000개 데이터를 생성하고, 이를 정규화해서 살펴보고 다시 이상값을 추가한 후 확인해볼 것이다.

생성한 실제 데이터의 분포 히스토그램

구분 raw 데이터 값의 분포 이상값 추가 데이터 분포
정규분포
scipy를 이용해 정규분포 확인
표준정규분포
    <이상값 추가 코드>
ol_data = data.copy()
ol_no = 10

for i in range(ol_no):
  rand_no = random.randint(0, len(data))
  ol_data.insert(rand_no, ol_data[rand_no]*2)

<정규분포 출력 코드>

# raw 데이터 정규분포
pdf = stats.norm.pdf(np.sort(data), data_mean, data_std)
plt.figure()
plt.plot(np.sort(data), pdf)

# 이상값 추가 데이터는 데이터 추가 이후 같은 방법으로 시행

<표준정규분포 출력 코드>

# 데이터 별로 z-score을 환산한 후 적용
std_list = []

for i in data:
  z = (i - data_mean) / data_std
  std_list.append(z)

ol_data_mean = np.mean(std_list)
ol_data_std = np.std(std_list)

ol_pdf = stats.norm.pdf(np.sort(std_list), ol_data_mean, ol_data_std)

plt.figure()
plt.plot(np.sort(std_list), ol_pdf)

# 이상값 추가 이후 동일

<이상값 제거>

# |z-score|이 2가 넘는 것들을 삭제, z-score > 2의 유의수준 : 98%
for i in ol_std_list:
  if i > 2:
    ol_std_list.remove(i)
  if i < -2:
    ol_std_list.remove(i)

이상값 처리 결과

 

  • 사분위값 검정(Box plot)
data2 = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C'])
data2.head()

±3 이내의 값을 100개씩 가지는 3개의 column을 가진 dataframe을 가지고 boxplot을 그려 이상값의 존재를 파악하려한다.

 

<사분위>

 

<Box plot>

sns.boxplot(data2)

boxplot을 확인해보니 B에서 IQR의 MIN 보다 작은 이상값들이 존재함을 확인할 수 있다.

 

 

<이상값 탐색>

def get_ol(df, col, weight=1.5):
  Q_25 = np.percentile(df[col].values, 25)
  Q_75 = np.percentile(df[col].values, 75)

  IQR = Q_75 - Q_25
  IQR_weight  = IQR*weight

  low = Q_25 - IQR_weight
  high = Q_75 + IQR_weight

  ol_idx = df[col][(df[col] < low) | (df[col] > high)].index
  return ol_idx

이상값들이 어떤게 있는지 위 함수를 사용해 도출한 결과,

[19, 91, 99]번째 index의 값이 이상값임을 알 수 있음.

(random을 통해서 산출한 데이터이므로 시행마다 결과가 다를 수 있음)

 

<이상값 drop>

data2.drop(ol_idx, axis=0, inplace=True)

sns.boxplot(data=data2)

 

이상값이 사라진 boxplot

 

이렇게 이상값을 제거할 수 있다.

 

 

 

 

 

 

※위 과정은 행정안전부, 한국지능정보사회진흥원, CSLEE 컨소시엄, KPC에서 진행하는 데이터 분석 청년인재 양성 전문과정에서 제공하는 교재의 일부분을 활용해 작성했음을 밝힙니다.

데이터의 시각화 관점에서 보았을 때, 데이터는 크게 수치형 데이터와 범주형 데이터로 구분할 수 있다. 

 

범주형 변수란?

어떤 범주에 속하는 순위가 없는 데이터들을 의미한다. '성별'의 경우 '남', '여'로 구분된 범주형 변수이고, '직업'의 경우 '회사원', '자영업자', '프리랜서', '학생' 등으로 구분되는 범주형 변수이다. 

인간이 이해하기에 보다 직관적이고 인간을 대상으로 한 자료 수집의 큰 부분을 담당하고 있다.

 

하지만 컴퓨터가 이해하기에는 어려우며, 연속형 변수와 함께 사용하거나 실수화 하지않으면 시각화 하기 어렵다는 단점이 존재한다.

 

범주형 데이터의 실수화

위와 같은 이유로 범주형 데이터를 실수화하는 경우가 종종 있다.

이번 실습에서는 Labeling과 One-Hot Encoding, 이 두 가지 방법으로 진행해볼 것이다.

 

#Labeling

라벨링은 리커트(Likert)척도처럼 항목별로 정수를 부여하는 것이다.

['거주지'] 항목이 있을 때 value로 ['서울', '부산', '대구', '대전', '울산']이 있다면 이것을 [0, 1, 2, 3, 4]로 바꿔 label을 부여해주는 것을 Labeling이라고 한다.

 

아주 감사하게도 싸이킷런에서는 labeling 모듈을 제공해준다. 이를 이용해서 타이타닉 데이터의 범주형 데이터를 변환해보는 실습을 진행해볼 것이다.

 

우선 데이터를 불러와서 확인해보면..

class, deck 등이 category변수이고 sex, embarked, who, embark_town, alive 등이 object변수로 범주형 변수의 후보가 된다.

그중에 embark_town 컬럼을 가지고 Labeling을 진행해볼 것이다.

 

from sklearn.preprocessing import LabelEncoder
  • 우선 Labeling에 필요한 모듈을 import해주고, embark_town이 어떻게 생겼는지 확인해보면

값으로 [Southampton, Cherbourg, Queenstown]을 가지고 있다는 것을 알 수 있다.

encoding = LabelEncoder()
encoding.fit(df['embark_town'])
  • 그 다음 LabelEncoder 객체를 생성해주고, embark_town을 fit하게되면, 값에 따라 label이 부여된다.

확인해보니 {'Southampton' : 2, 'Cherbourg' : 0, 'Queenstown' : 1}로 labeling이 진행된 것을 확인할 수 있다.

 

 

 

#One-Hot Encoding

One-Hot Encoding(원핫 인코딩)은 범주형 데이터에 대해 이진분류하는 방법이다. 해당 값에 해당하는지에 대한 정보를 0, 1로 나타낸다.

이번에는 타이타닉 데이터의 class 컬럼을 가지고 실습을 진행해볼 것이다.

one_encoding = OneHotEncoder(sparse=False)
one_encoding.fit(df[['class']])

위와 마찬가지로 OneHotEncoder 객체를 생성해준 후 class 컬럼을 fit시킨다. 

sparse 옵션은 True(default)로 할 경우 결과를 2차원 좌표값으로 반환해주고, False로 하게되면 2차원 numpy array로 반환한다. 우리는 DataFrame으로 처리할 것이기 때문에 numpy array형식으로 반환해주기로 했다.

 

결과를 확인해보면..

array 형식으로 잘 반환된 것을 볼 수 있다.

 

One-Hot encoding의 결과값은 2차원 형식이므로 labeling과 달리 array를 dataframe으로 변환해준 다음 concat하는 과정을 거쳐 원본데이터와 결합시킬 수 있다.

df_class = pd.DataFrame(one_encoding.transform(df[['class']]), columns = one_encoding.get_feature_names())
df_class.head()

 

위와 같이 dataframe을 생성한 후 원본 데이터와 concat메소드를 이용해 합병해주면 분석에 이용할 수 있는 결과 데이터가 나오게 된다.

df_con = pd.concat([df,df_class], axis=1)
df_con

 

 

해당 코드의 일부는 행정안전부, NIA, CSLEE, kpc에서 주관하는 공공 데이터 분석 청년 인재 양성 사업의 교재를 참고하였음을 밝힙니다.

'데이터 분석 > 파이썬' 카테고리의 다른 글

[파이썬] 이상값 처리  (0) 2022.07.06
[파이썬] 워드 클라우드  (0) 2022.06.29
파이썬 클래스  (0) 2021.11.14
데이터 시각화 그래프  (0) 2021.06.29
numpy 라이브러리  (0) 2021.03.23

도시공학과 3년, 빅데이터연계전공 1년 반의 과정을 거치고 4학년이 되어 공대의 주요 자격증 중 하나인 기사 자격증의 선택에 기로에 놓였었다.

 

도시계획기사인가, 정보처리기사(또는 빅데이터분석기사)인가를 두고 내가 더 관심이 있고 재미있어하는 쪽인 정보처리기사를 따기로 마음을 먹었다.

 

1차 필기 시험은 학기가 시작한 직후인 3월 5일이었다. 2월 28일에 토익 시험이 있었기에 시기적으로 조금 겹쳤었다.

 

그렇기에 시험을 잘봐야겠다는 생각보다는 시험의 합격점수를 맞추자라는 생각으로 준비하여 과정은 비실비실하지만 합격이라는 좋은 결과를 가져왔다.

필기, 실기 모두 합격!

 

독학에 사용한 책은

시나공 정보처리기사 교재, 홈페이지를 같이 운영해서 좋았다.

시나공에서 만든 정보처리기사 기본서였는데, 여기서 제공하는 홈페이지에서 관련 자료들과 기출문제를 가지고 추가적인 공부를 할 수 있어서 아주 좋았다.

 

정말 솔직하게 후기를 작성하자면, 그렇게 열심히 공부하진 않았던 것 같다. 필자 기준에서는 객관식으로 나오는 문제가 합격 커트라인이 60점인 것은 후하다고 생각해서 더 집중이 안됐던 것 같다.

 

초반에는 학교 시험 준비하듯 내용을 하나하나 돌려보고 유튜브나 책에서 제공되는 QR을 찍어서 볼 수 있는 짧은 영상들을 봐가면서 모든 과목을 공부하려하고 했고 실제로 그렇게 일주일 정도 공부를 했다.

 

이러다가는 시간 내에 다 못맞출 것 같다는 생각이 들어서 우선 기출문제를 먼저 풀어보기로 했다.

실제로 연계전공을 수강하면서 배운 내용들도 많이 도움이 되었고, ADsP 시험칠 때 나왔던 내용들도 다수 포함되어있어서 해볼만 하다고 생각했던 것 같다.

 

처음 기출문제를 풀었을 때는 40-50점 정도가 나왔던 것 같다. 이정도면 내용을 더 공부하지않고 기출문제만 준비해도 될 것 같다는 생각하에 하루만에 기출문제 3개정도를 풀어봤다. (시험시간은 2시간 반이지만 실제로 문제 푸는 시간은 한시간이 채 안됐다.)

 

이렇게 얼렁뚱땅 2주정도 준비한 후 시험장에 입장했을 때, 역시 기출에서 많이 나오는구나 하는 생각이 들었다. 

시험장에서는 문제를 다 풀어도 응시시간의 절반이 지나간 시점에서만 퇴장이 가능했기 때문에 다 푼 후 충분히 검토하고도 15분 정도 얌전히 대기하다가 기분 좋게 퇴장하였다.

 

지금은 시험결과 확인 기간이 지나서 과목별로 몇개를 맞췄는지 정확히 기억은 나지 않지만, 총점 70점으로 꽤 널널하게 합격하였다.

 

실기 시험은 조금 더 힘들었다.

힘들었던 이유가 어려워서라기 보다는 대학교 중간고사 시험기간과 겹쳤기 때문이었다.

 

게다가 실기시험은 코딩이 아니라, 필기시험에 배웠던 내용 +@로 해서 수기로 작성하는 서술(약술)형 시험이었기 때문에 암기로 승부해야하는 타입이었다.

 

사용했던 교재는

마찬가지로 시나공 실기 기본서를 사용하였고, 이번에는 1과목의 2챕터에 들어가기도 전에 바로 모의고사를 쳐보았다.

 

첫 모의고사 결과 58점인게 기억이 나는데, 합격에 꽤 가까웠던 점수였기 때문에 기억에 남았던 것 같다.

 

실기 같은 경우에는 필기와 다르게 실제 코딩 영역에 해당하는 C, C++, JAVA, SQL등의 문제가 꽤 많이 나오기 때문에 이 영역에 해당하는 코드 해독능력이나, 작성능력이 뛰어나신 분들은 기출이나 모의고사를 위주로 학습하시는게 효율적이라고 생각합니다.

 

필자는 그렇게 자신있진 않았지만, 최근 학기에 배웠던 내용들이 많이 담겨있고 응용이 아닌 기초문법이었기 때문에 해당 영역에 해당하는 과목들은 기출과 모의고사로만 진행하였다.

 

중간고사와 겹치면서 힘겹게 준비하였지만, 적어도 코딩영역과 필기영역 중에 겹치는 내용들은 자신이 있었기에 포기하지 않고 시험장에 입장할 수 있었다.

 

실기도 마찬가지로 2시간 반 시험에, 절반의 시간이 지나가야 퇴장할 수 있었기에 실제 시험은 50분-1시간 가량 풀고 검토하는 시간을 갖고 시험자분들 대부분이 퇴실가능 시간대에 퇴실하셨던 것 같다.

 

결과는 66점으로 생각했던 것 보다는 2-3점 정도 높았지만, 통과에 간당간당한 점수로 합격했다.

 

(실기 문제는 부분점수가 있습니다.) 

 

 


마치며..

 

정보처리기사 시험에 대해서 위에 작성한 바로는 (의도치 않게) 편향적으로 공부하여 운이 좋게 시험에 합격할 수 있었던 것 처럼 되어있지만, 사실은 대학과정에서 배운 이론적인 부분들을 얼마나 성실히 하였는가를 평가하는 듯한 문제들이었다.

 

실제로 정보처리기사 시험만을 준비한 시간은 각각 2주도 안되는 짧은 시간이었지만, 그 배경에는 중간-기말고사 기간에 하루에 8~10시간씩 꾸준히 공부하였던 기반이 있었기 때문에 가능했던 것 같다.

 

혹시나 이 포스팅을 접하게 되시는 여러 수험자 분들께서 공부를 해야하는 방향에 대해 고민을 하고 계신다면, 본인이 해당 과목에 대한 현재 지식 수준이 어느정도 되는지 파악하신 후 접근하시는게 좋을 것 같습니다.

 

이론에 대해 어느정도 배운 기억이 있고, 현업에서 사용해보신 이론이나 기술들이 있으시다면 모의고사, 기출문제 등 실전을 위주로 압축해서 공부하시는 것을 추천드리고, 해당 과목을 접한지 오래되지 않은 비전공자분들이나 초심자분들께는 어떻게든 이론을 한번정도는 공부하실 시간을 갖는 것을 추천드립니다.

 

저 같은 경우에는 정보처리기사를 치기 전에 학과 공부 및 ADsP(데이터분석준전문가) 자격증을 작년 9월에 취득하며 그 과정에서 공부를 반복적이고 꾸준하게 진행한 것이 도움이 되어 합격할 수 있었던 것 같습니다.

 

모든 수험자 분들의 합격을 기원합니다!

사람들이 시각적 자극에 민감한 만큼 시각화는 중요한 작업 중 하나이다.

 

이번에는 시각화 방법 중 하나인 워드 클라우드 (Word Cloud)에 대해서 공부해보고자 한다.

 

워드 클라우드란?

워드 클라우드는 문자로 이루어진 데이터 속에서 형태소 분석을 통해 구분된 단어들의 출현 빈도에 따라서 크기가 다르게 나타나는 시각화 도구 중 하나이다.

 

예를 들어 뉴스 기사 제목만 모아둔 파일이 있다고 했을 때, 가장 많이 나타나는 단어들을 표현하는 방법을 두 가지로 비교해보자.

 

1. 빈도수 나타내기

수치를 나타내기 때문에 가장 직관적인 방법이기도 하고, 많이 사용되는 방법이기도 하다.

예를 들어서 '국가'라는 단어가 870번 등장하고, '정책'이 863번, '토지'가 770번 등장한다고 하면

국가 870
정책 863
토지 770

이렇게 나타낼 수 있다. 

 

이런 방법은 순서대로 정렬이 되어있으면 순서대로 읽으면 순위를 알 수 있지만, 한 눈에 확 들어오지는 않는다.

 

2. 워드클라우드

워드클라우드는 데이터 전처리 과정에서 빈도수를 분석하여 시각적인 자극을 강화한 방법으로 다음과 같이 나타난다.

'포함이' 라는 단어보다 '겨우'나 '새로운'이 더 눈에 잘 들어오고, '녀석이나겠다면'이라는 문장(?)보다는 '것이다'가 더 잘 보인다. 빈도수에 기반해서 크기가 자동적으로 조정되어 나타난 것이다. 

 

빈도수에 대한 정확한 수치가 필요하진 않을 때, 조금 더 시각적인 자극이 필요할 때 이런 방법을 자주 사용하고, 데이터에 대한 정확한 통찰보다 개략적인 정보만 필요할 때 자주 사용한다. 

 

특히 웹에서 시각적 효과가 중요해진 요즘엔 웹에 등장시켜 시선을 끌기도 한다.

 

 

워드클라우드 만들기

1. 준비물

 워드클라우드를 만들기 위해서는 다음과 같은 준비물이 필요하다.

  • wordcloud 패키지: 말 그대로 wordcloud 제작을 지원하는 다양한 모듈이 담겨있는 패키지
  • KoNLpy 패키지 : 영어로만 워드클라우드를 만들 때는 꼭 필요하진 않지만, 한국어 처리를 위해서는 필요한 패키지이다. 주요 기능은 형태소 분석으로 [명사, 동사, 형용사] 등을 구분해주는 패키지이다.

 

2. 코딩

 

#필요 패키지
from wordcloud import WordCloud
from collections import Counter
from konlpy.tag import Okt

필요한 패키지들은 위와 같다. 

워드클라우드 객체 생성을 위한 wordcloud 패키지와, 단어수를 count해주는 collections 모듈의 Counter 클래스, 형태소 분석을 담당하는 KoNLpy를 import해준다.

 

with open('./output_3.csv', 'r', encoding='UTF-8') as f:
    text = f.read()

그 다음은 워드클라우드화할 문장들이 포함되어 있는 파일을 읽어온다.

나는 과거에 대학교 커뮤니티의 게시글 제목들을 크롤링한 데이터를 사용하기로 했다.

 

 

okt = Okt()
nouns = okt.nouns(text)
data = [i for i in nouns if len(i) > 1]
c = Counter(data)

이후 형태소 분석 객체를 생성하고 (Okt, Open Korean Text : 트위터에서 개발한 오픈소스 한글 처리기) 형태소 중에서 명사만 꺼낸다.

 

명사를 꺼낼 때 '야'와 같은 한글자 명사는 제외하고 하기로 하고, 빈도수를 count해준다.

 

import matplotlib.font_manager as fm

sys_font=fm.findSystemFonts()
print(f"sys_font number: {len(sys_font)}")
print(sys_font)

 

그 다음 중요한 작업 중 하나가, 한글로 작성된 텍스트를 워드클라우드 시킬 때는 폰트를 따로 적용시켜주어야 하는데 작업중인 파일과 폰트의 위치를 일치시키거나 정확한 폰트 파일의 위치를 적용시켜줘야하므로 위 과정을 통해 한글을 지원하는 폰트가 있는지 파악해야한다.

 

wc = WordCloud(font_path = 'Fonts\\NanumBarunGothicLight.ttf', 
               background_color = 'white',
               prefer_horizontal = 1,
               width = 1000, 
               height= 600, 
               max_words=100)
gen = wc.generate_from_frequencies(c)
wc.to_image()

마지막으로 워드클라우드 객체를 생성하고 옵션을 지정해준 다음에, 빈도수를 기반으로 generate해준 후, to_image()해주면..

 

 

이렇게 워드 클라우드가 나타난다. 

역시 대학교 커뮤니티답게 '교수', '시험'이 보이기도 하고 의외로 '생각'이나 '정도' 같은 단어들도 많이 보이는 것 같다.

 

워드클라우드 mask 씌우기

패키지에 의해 생성되는 기본 모양은 위와 같이 사각형의 틀 속에 글자가 배치되는 것이다.

option의 파라미터 값을 조정하면 글자의 배치나 배경 색상, 최대 폰트 크기, 최대 단어 수 등을 조정할 수 있고 frame의 모양도 설정할 수 있다.

 

네모 반듯한 것도 이쁘지만 워드클라우드를 게시하는 페이지의 특성에 따라서 다른 모양을 취해주는 것이 시각적인 효과를 더 이끌어 낼 수 있다.

 

from PIL import Image
import numpy as np

이미지를 masking 하려면 이미지 데이터를 array로 변환시키는 작업이 필요한데, 이 작업을 해주는 두 라이브러리를 호출한다.

 

이번 실습에서는 강아지 이모티콘 사진을 마스킹해서 모양을 취해보도록 하였다.

 

background = Image.open('그림1.jpg')
back_array = np.array(background)

pillow를 통해서 이미지를 픽셀화한 후, numpy를 가지고 array화 하였다.

위 과정을 거치면, 강아지 모양 사진이 RGB 색상표를 기준으로 0~255사이 범위를 가진 float타입 숫자의 array로 바뀐다.

 

wc = WordCloud(font_path = 'Fonts\\NanumBarunGothicLight.ttf', 
               background_color = 'white',
               prefer_horizontal = 1,
               width = 1000, 
               height= 600, 
               mask = back_array)

gen = wc.generate_from_frequencies(c)

wc.to_image()

처리된 이미지 파일을 워드클라우드 option의 파라미터로 주면..

 

이렇게 귀여운 강아지 모양의 워드클라우드를 볼 수 있다.

 

SQL이란 DBMS(DataBase Management System)에 접근하기 위한 구조화된 질의어, 프로그래밍 언어이다.

데이터베이스에서 자료를 좀 더 쉽게 검색하고, 편집하기 위해 고안되었고 백엔드 및 데이터를 다루는 분야에서 가장 기초가 되는 언어로 자리잡았다.

 

MySQL 기초문법

SQL은 정의,조작,제어,질의 등으로 구분된 영역이 존재한다.

 

# 접근언어

  • 접속 명령어 :
    mysql -u root -p
    	Enter password:********
  • use 데이터베이스명 : 해당 데이터베이스을 사용하도록 명령한다.show (databases, tables) : 데이터베이스 목록 혹은 테이블 목록을 나타낸다.
  • desc( = describe, explain) 테이블명 : 해당 테이블의 구조를 나타낸다.

 

# DDL(데이터 정의어)

  • create (database) A : A이름을 가진 데이터베이스를 생성한다.
  • create A (필드,자료형..) : 매개변수로 주어진 구조들을 가진 테이블(이름 A)을 신규로 생성한다.
  • drop (database, table) A : A이름을 가진 데이터베이스 혹은 테이블을 삭제한다. 정보, 데이터를 포함한 모든 자료가 소거되므로 주의해서 사용할 것.

 

#DML(데이터 조작어)

  • insert into A(필드명1, 필드명2, 필드명3,...) values (필드1값, 필드2값, 필드3값, ...): 해당 테이블에 지정된 값의 데이터를 삽입한다. NOT NULL 속성의 필드는 반드시 입력해주어야 한다. 
  • update A set 필드1 = 새로운 필드1값 : A테이블의 필드1의 값을 새로운 값으로 업데이트한다.
  • delete from A : A테이블에 포함된 모든 데이터를 삭제한다. (모든 데이터를 지우고싶지 않으면, where절을 사용해 지정해주어야 한다.)

#DQL(데이터 질의어)

  • select A from B : B 테이블의 A구조의 데이터를 나타낸다. (A = *이면 테이블에 속한 모든 데이터를 나타낸다.)

 

예제

앞서 설명한 명령어들을 통해서 간단한 수준의 예제를 구현해볼 것이다.

 

  1. mysql에 접근한 후 존재하는 데이터베이스 목록을 모두 나타내라.
  2. 새로운 데이터베이스를 생성해라. (이름은 test)
  3. test에 user table을 생성해라. ( user : id, password, name, addr, phone을 가짐. id~name = not null)
  4. user table에 데이터("gildong", "1234", "홍길동", "서울", "010-0000-0000")을 삽입하라.
  5. select를 이용해 user table의 데이터 목록을 나타낸 후, u_name = "홍길동" 을 우선 삭제 후, user tale을 삭제하라.

파이썬에도 여타 언어들 처럼 class를 만들어 객체를 생성하는 기능을 포함하고 있다.

 

현실세계에서 어떠한 객체는 하나의 정보로만 구성되는 경우는 매우 드물다. 예를 들어 자동차라는 하나의 객체 안에는 자동차의 모델명, 제작사, 타입 등의 여러가지 정보로 구성되기 때문에, primitive 타입의 자료형으로는 표현하는데 한계가 존재한다.

 

따라서 class의 기능을 이용해 자동차 같은 객체를 설명하고, 그런 변수를 생성하고 처리할 수 있도록 한다.

 

특히 파이썬과 JAVA는 같은 OOPL(Object-Oriented-Programming Language)로 객체를 우선시 하는 이러한 언어들에서 Class의 개념은 몹시 중요하다.

 

예시로 2개의 operator에 대해 사칙연산만 수행하는 계산기를 class형식으로 만들어 보았다.

class Calculator:
#constructor
    def __init__(self,operator1, operator2):
        self.operator1 = operator1
        self.operator2 = operator2
#method
    def add(self):
        return self.operator1+self.operator2
    def multiple(self):
        return self.operator1*self.operator2
    def subtraction(self):
        return self.operator1-self.operator2
    def division(self):
        return self.operator1/self.operator2

class 안에서 함수와 같은 기능을 수행하는 것들을 method라고 부른다. 

 

Calculator class안에는 사칙연산을 계산하는 4개의 method가 존재한다.

 

method는 다음과 같이 작동한다

c1 = Calculator(4,2)
print(c1.add())
print(c1.multiple())
print(c1.subtraction())
print(c1.division())
6
8
2
2.0

여기서 다른 언어들과 차이를 보이는게 몇가지 있는데, 첫번째로 constructor이다.

 

다른 언어에서 constructor는 보통 class 명으로 선언되는데 파이썬에서는 __init__이라는 이름을 사용해서 선언된다. 

파이썬에서는 언더스코어(__)이 포함된 method는 파이썬 내부에 저장된 특별한 함수나 변수명을 나타내거나, 예약어로 지정돼 함수명으로 사용할 수 없을 때 사용한다.

(대표적으로 __init__, __add__, __sub__, __str__ 등이 있다)

 

또 다른 것으로는 파이썬은 인터프리터형 언어로, 자료형이 동적으로 할당된다는 것이다. 

 

위의 각 method 실행 결과 중, division만 소숫점형태로 나타난 것을 확인할 수 있는데, C나 JAVA와 같은 언어에서 이와 같이 출력하기 위해서는 return 타입을 미리 지정해줘야하고 method 인자 또한 타입을 지정해줘야 가능하다.

 

또, 다른 언어에서는 class가 가지는 특징을 변수로 나타내는데 (C : 멤버변수, JAVA: 필드), 파이썬에서는 그런 것을 선언해주지 않아도 method 내부에서

self.변수명 = initiating

와 같이 초기화 할 수 있다.

이는 constructor가 아닌 다른 method 내부에서도 초기화가 가능하다.

 

self는 다른 언어의 this와 유사한 기능을 수행한다. 객체 스스로를 호출하는 기능을 수행하는데 객체에 대한 연산을 수행할 때는 인자로 self를 거의 항상 가진다.

(객체의 속성을 연산하는 것이 아닌 아예 다른 수행을 하는 경우 self를 사용하지 않는 경우도 있다.)

 

상속

상속은 똑같다.

오버라이딩하거나 상속받은 함수를 그대로 사용할 수 있다.

class ExtandCalcualtor(Calculator):
    def __init__(self,operator1,operator2):
        Calculator.__init__(self,operator1,operator2)
    def power(self):
        result = 1
        for i in range(self.operator2):
            result *= self.operator1
        return result
    def division(self):
        result = [0, 0]
        result[0] = int(self.operator1/self.operator2)
        result[1] = int(self.operator1%self.operator2)
        return result

이는 확장된 계산기 class로 n제곱승과 나눗셈의 몫과 나머지를 출력하도록 method를 정의해줬다.

c2 = ExtandCalcualtor(4,2)
print(c2.power())
print(c2.division())
print(c2.add())
16
[2, 0]
6

조금 다른 기능으로는 파이썬은 다중 상속을 지원하고(JAVA는 미지원), mro라는 method를 지원하는데, 이는 해당 class가 어떤 상속관계에 놓여져있는지 나타낸다.

ExtandCalcualtor.mro()

#결과
[<class '__main__.ExtandCalcualtor'>, <class '__main__.Calculator'>, <class 'object'>]

 

데이터를 분석하는데 사용되는 기법은 목적에 따라 다양하게 분류된다.

 

그 중 현재 내가 사용하고 있는 EDA(Exploratory Data Analysis) : 탐색적 데이터 분석 기법에서는 시각화를 매우 중요한 부분으로 여기고 있다.

 

데이터를 시각화 할 때 seaborn, matplot과 같은 라이브러리의 도움을 받으면 훨씬 간단하게 표현할 수 있다.

 

우선은 간단한 몇가지 그래프만 살펴보고자 한다.

 

  1. 선 그래프
  2. 파이그래프
  3. 막대그래프
  4. 히스토그램
  5. 박스플롯

위 순서대로 살펴볼 것이다.

 

1. 선 그래프

선 그래프는 우리가 가장 흔하게 알고있는 꺾은 선 그래프를 말하는 것이 맞다. 

선 그래프의 장점은 시간에 따른 변화나, 지속적인 변화가 있을 때 그것을 나타내기 용이하다.

예를 들면 각 지자체별 매해 예산의 변화를 나타낼 때 선 그래프를 통해 나타내면 지자체 별 변화를 파악하기에도 용이하고 선들의 비교를 통해서 지자체간의 차이도 파악할 수 있다.

 

df = df.read_csv('broadcast.csv', index_col=0)
df.plot(kind='line')

plot이라는 매서드를 통해서 그래프를 그렸다. plot 매서드의 파라미터로는 다양한 값이 들어갈 수 있는데, 그 값들은 kind의 영향을 받는다.

 

우선 선 그래프의 경우 plot kind의 default 값이므로, kind='line' 구문을 지우고 실행하여도 위와 같은 결과를 얻을 수 있다.

 

좀 더 구체적인 인사이트를 얻기 위해서 슬라이싱을 활용하여 데이터를 나타낼 수도 있다.

df[['KBS', 'JTBC']].plot()

이와 같이 슬라이싱을 활용하여 그래프를 나타내면, 

위와 같은 모양의 그래프를 얻을 수 있다. 

물론 이전의 그래프 또한 자료가 얼마 없었기 때문에 큰 차이가 없어보이지만, 가령 방송국이 1000개가 있었다라고 가정한다면 필요없는 자료들을 제외하고 위와 같이 나타내면 훨씬 더 직관적인 시각을 가져다준다.

 

이런 식으로 데이터 분석할 때 사용했던 여러 기법들을 통해서도 시각화에 도움을 줄 수 있다.

 

2. 파이 그래프

파이 그래프는 말 그대로 파이처럼 생긴 그래프이다. 파이 그래프는 단독 데이터의 비율을 나타낼 때 강점을 보인다.

예를 들어 A회사의 직원의 구성을 알고싶다 할 때 파이그래프를 통해서 표현하면 인사이트를 높게 가져다준다.

df.loc[2016].plot(kind='pie')

파이 그래프의 경우 단일 대상에 대해서만 데이터를 표현할 수 있기 때문에, 미리 슬라이싱을 하여 데이터를 출력하였다.

2016년에 각 방송사의 시청비율을 나타내고 있는데 이는 각 구성별 차이를 파악하는데 선 그래프 보다 더 좋은 인사이트를 제공하고 있다.

 

3. 막대 그래프

막대 그래프는 선 그래프와 마찬가지로 일상에서도 많이 사용되는 그래프이다.

막대 그래프는 한 대상 내의 여러 분류 끼리의 비교가 필요할 때 주로 사용되는데, 분류 수가 적을 때 더 좋은 인사이트를 줄 수 있다. 단순 수량을 비교할 때 장점을 가진다고 할 수 있다.

 

df.plot(kind='bar')
df.plot(kind='barh')

막대 그래프는 위와 같이 세로, 가로 그래프를 제공할 수 있다.

 

그래프를 살펴보았을 때 연도별로 다양한 방송사가 있는데, 가장 큰 값과 가장 작은 값이 한 눈에 들어오고 있으나, 어떤 그래프가 무엇을 나타내고 있는지 바로바로 비교하기가 힘들다.

 

새로운 데이터를 불러와서 다시 한 번 살펴보면,

새로 제시된 그래프가 이전 그래프 보다 무엇을 비교하고자 하는지, 차이가 얼마정도 나는지 직관적으로 파악할 수 있다.

 

4. 히스토그램

히스토그램은 도수 분포표를 그래프로 나타낸 것인데, 데이터의 분포에 따라 때때로 정규분포의 그래프와 유사한 형태로 나타난다.

 

df.plot(kind='hist', y='Height', bins=15)

위 그래프는 남자 청소년들의 키 분포를 히스토그램으로 나타낸 것이다. 

원래 데이터프레임 속에는 weight, height 등의 다양한 변수가 존재하지만, 히스토그램으로 나타내기 위해서는 y축이 무엇을 의미하는지 지정해줘야한다.

또, bins는 구간을 나눈 횟수로 적절히 조절해야 좋은 인사이트를 가져다 준다.

위 사진은 bins를 각각 100 과 10 (bins의 default는 10이다)으로 해서 나타낸 것인데, 10보다는 15로 한것이 조금 더 명확해 보이고, 100으로 한 것은 조금 더 상세하게 알아볼 수 있게 해준다.

 

5. 박스플롯

박스플롯은 보통 통계나 수학에서 사용하는 그래프와는 조금 다른 형태를 가진다.

통계정보를 시각적으로 나타내는 박스플롯은 백분율을 사용해서 분포를 나타내는데, 이를 해석하기 위해서는 사분위수의 개념이 필요하다.

 

필요한 데이터를 불러와서 describe매서드를 사용하면, 위와 같은 통계 요약을 얻을 수 있는데 index에서 25% 50% 75% 를 볼 수 있다.

이는 각각 하위 25%, 50%, 75%를 나타내는 것인데 이렇게 사분할 한 것이 사분위수라고 하며,  25%이하를 Q1(제1사분위수), 25~50%를 중앙값(제2사분위수; Q2), 50~75%를 Q3(제3사분위수), 그 이상을 Q4(제4사분위수)라고 한다.

 

해당 자료를 박스플롯으로 나타내면,

df.plot(kind='box', y='math score')

이와 같이 출력된다. 히스토그램과 마찬가지로 y축을 지정해주어야한다.

 

박스(네모)로 구분된 부분은 25% < x < 75% 사이의 값의 분포를 나타내는 부분이며 여기에 많은 양의 데이터가 분포하고 있다.

 

위 아래로 이어진 선 끝에 가로 선으로 표시된 부분은 maximum과 minimum으로 whisker라고 불리기도 한다. 데이터 별로 위 아래로 이은 선의 길이가 다를 수 있는데, 이는 값으 분포 차이 때문에 발생하는 것이다.

 

데이터는 불확실성을 가지기 때문에 범주에 속하는 maximum과 minimum보다 크거나 작은 값도 데이터 상에 존재할 가능성이 있다. 그러한 점들을 outliers라고 부르며, 특잇값 또는 극단값 이라고도 한다.

 


데이터셋 출처 : 코드잇(codeit) https://www.codeit.kr/

'데이터 분석 > 파이썬' 카테고리의 다른 글

[파이썬] 워드 클라우드  (0) 2022.06.29
파이썬 클래스  (0) 2021.11.14
numpy 라이브러리  (0) 2021.03.23
pandas 데이터 정제 (2)  (0) 2020.06.27
판다스를 이용한 데이터 정제  (0) 2020.06.17

원래 파이썬은 데이터 분석에 유용한 언어가 아니었다. 과거에는 통계를 위한 언어인 R언어가 파이썬보다 기반이 더 좋았고, 현재도 통계적 분야에는 R언어가 조금 더 유용하다고 한다.

 

파이썬이 데이터분석 툴로 활약하게 된건 앞서 설명한 pandas와 지금부터 알아볼 numpy(numerical python) 라이브러리가 나오고 나서 부터라고 해도 과언이 아니다. 파이썬은 해당 라이브러리들로 인해 통계적 분석 뿐 아니라 범용적으로 사용이 가능해지면서 더욱 인기가 높아졌다.

 

numpy는 무엇일까?

 

기존 파이썬 언어로 계산하기 복잡한 수치들을 계산하기 쉽도록 도와주는 라이브러리이다. 

뿐만 아니라 list와 유사한 기능을 하는 numpy array를 사용하여 table을 다루는 것을 더 용이하게 해준다.

 

numpy array

 

파이썬의 기본 자료형인 list와 다르게 numpy array는 사칙연산을 할 수 있도록 구성되었다.

또한 indexing과 slicing을 사용할 수 있어 데이터를 다루는데 매우 적합하다.

 

기본적인 형태는 list와 유사한 형태로 작성할 수 있다.

numpy array

 

또 full, arange, random 등의 메서드를 활용해서 좀 더 쉽게 array를 구성할 수 있다.

array 구성의 다양한 메서드

 

계속해서 언급했던 사칙연산은 어떻게 적용되고 있는지 한번 알아보도록 하자.

 

우선 list에 곱연산을 적용해서 list 원소 값이 변화하는지 살펴보면,

list 연산

우리가 기대했던 것과는 다르게 출력이 된다. 그럼 numpy array에는 어떻게 출력이 될까?

 

array 연산
array끼리 연산 또한 가능하다

우리가 기대했던 원소 값의 변화가 발생하였다. 

 

이러한 것들은 단순히 편하다는 것을 넘어서서 코드를 완성한 후 직관성을 올려주고 코딩을 잘 하지못하는 사람들에게도 이해하기 쉽도록 도와주는 역할을 한다.

 

또 편리한 기능으로 indexing과 slicing을 넘어 filtering도 가능하게 해주는데, 이는 where함수를 사용해서 구현할 수 있다.

array filtering

where함수 안에 조건문을 넣어 boolean값을 받은 후 indexing을 통해 filtering을 한 것으로 filtering 된 값을 출력하는 것 이외에도 원하는 값만 변경해주는 필터링하는 등 다양하게 활용할 수 있다.

 

 

numpy는 list에 비해 연산속도가 빠르고, 같은 자료형만 한 배열 안에 담아 side-effect를 방지할 수 있으며, 문법적으로도 직관성이 뛰어나 사랑받고 있다.

pandas 역시 numpy를 바탕으로 해서 만들어져, numpy가 중요한 내용을 담고 있음을 알 수 있다.

'데이터 분석 > 파이썬' 카테고리의 다른 글

파이썬 클래스  (0) 2021.11.14
데이터 시각화 그래프  (0) 2021.06.29
pandas 데이터 정제 (2)  (0) 2020.06.27
판다스를 이용한 데이터 정제  (0) 2020.06.17
셀레니움을 이용한 웹크롤링(Web crawling)  (0) 2020.06.03