📑
빅데이터
: 다음의 세 가지 특성을 띠어야 함.
1. 규모 - 굉장히 방대한 양의 유의미한 데이터.
2. 속도 - 데이터의 생성 및 처리 속도가 매우 빠름.
3. 다양성 - 데이터의 종류뿐만 아니라 형식이 다양.
데이터의 종류
- 정형 데이터: 정량적이고 수치로 확인할 수 있거나 구조를 가지고 있는 데이터. 예) 시간, 시계열 데이터, 금융 데이터, ID/PW, 온도, 카드번호 등.
- 비정형 데이터: 수치적으로 확인할 수 없거나 구조를 띠지 않는 데이터. 예) 그림, 소리, 영상 등.
- 반정형 데이터: 정형데이터와 비정형 데이터의 성격을 둘 다 가지는 데이터. 예) DICOM 파일, JSON, XML, 스마트폰에서 위치 값을 함께 저장하는 사진 등.
데이터 전처리
: 데이터를 AI에게 학습시키기 전이나 분석하기 전에 적합한 형태로 가공하는 작업. 데이터를 이용한 결과물에 대한 품질을 향상하기 위해 반드시 필요.
데이터 수집 계획
- 빅데이터를 구성하기 위해 명확한 수집 계획이 필요.
데이터 식별 및 선택 → 데이터 수집/저장 방법 결정 → 데이터 수집 데이터 저장 → 데이터 정제 → 데이터 구조화 → 데이터 전처리 → 빅데이터 구성
빅데이터 기본 개념
• 빅데이터를 활용하기 위한 기술 및 도구
데이터 저장: Hadoop, HDFS, Amazon S3
데이터 처리: Apache Spark, Apache Flink, Apache Storm
데이터 분석: R, Python(pandas, NumPy, SciPy), SAS, SPSS
데이터 시각화: Tableau, Power BI, D3.js
데이터베이스: NoSQL 데이터베이스(MongoDB, Cassandra, HBase), NewSQL 데이터베이스(Google Spanner, CockroachDB)
*파이썬으로 데이터 처리, 분석, 시각화까지도 가능함.
• 메타데이터
다른 정보에 대한 정보를 의미. 보통 어떤 정보의 근원에 대한 정보를 담고 있음.
• 회귀 분석: 두 개 이상의 변수 간의 관계를 분석하는 방법.
- 단순 회귀 분석: 하나의 독립 변수와 하나의 종속 변수 간의 관계 분석
- 다중 회귀 분석: 두 개 이상의 독립 변수와 하나의 종속 변수 간의 관계를 분석
- 다항 회귀 분석: 독립 변수와 종속 변수 간의 비선형 관계를 분석
- 로지스틱 회귀 분석
: 수학을 사용하여 두 데이터 요인 간의 관계를 찾는 데이터 분석 기법. 다른 요인을 기반으로 이러한 요인 중 하나의 값을 예측. 종속 변수가 이진형(두 가지 범주) 일 때 사용. 로지스틱 회귀 모델에는 메모리 및 처리 성능과 같은 계산 용량이 덜 필요하기 때문에 대량의 데이터를 고속으로 처리할 수 있음. 또한 다른 ML 기법보다 수학적으로 덜 복잡하며 데이터를 전처리하는 데에도 사용할 수 있음. 다른 데이터 분석 기법을 사용할 때보다, 개발자에게 내부 소프트웨어 프로세스에 대한 더 높은 가시성이 제공되며, 계산이 덜 복잡하기 때문에 문제 해결 및 오류 수정도 더 쉬움. 로지스틱 회귀를 사용하여 구축된 ML 모델은 조직이 비즈니스 데이터에서 유용한 인사이트를 얻는 데 도움이 됨. 이러한 인사이트를 예측 분석에 사용하여 운영 비용을 절감하고 효율성을 높이며 더 빠르게 규모를 조정할 수 있음.
로지스틱 회귀 분석은 수학에서 로지스틱 함수 또는 로짓 함수를 x와 y 사이의 방정식으로 사용하는 통계 모델. 로짓 함수는 y를 x의 sigmoid 함수로 mapping함.
• 군집 분석
데이터를 유사한 특성을 가진 군집으로 나누기 위한 분석 방법.
• IoT(Internet of Things, 사물인터넷)
인터넷을 통해 다양한 물리적 장치들이 서로 연결되어 데이터를 주고받으며 상호작용하는 시스템.
• 로드밸런싱: 부하가 집중되는 것을 방지하기 위해 여러 서버에 네트워크 트래픽을 분산시키는 기술.
• 데이터 레이크: 원시 데이터를 그대로 저장하는 시스템(hadoop같은 것들).
• 데이터 거버넌스: 데이터의 신뢰성, 사용성, 보안성을 보장하기 위해 관리하는 모든 작업.
• 데이터 웨어하우스: 대량의 데이터를 통합, 저장하여 분석하는 시스템.
AI (인공지능)
• Deep Learning
: 인공지능을 학습시키거나 문제를 해결하기 위한 핵심 사고방식(알고리즘)
- Neuron(뉴런): 신경망의 기본 단위로 입력을 받아 가중치를 적용하고 활성화 함수를 통해 출력을 생성
- Layer(층): 뉴런들이 모여있는 층으로 보통 입력층, 은닉층, 출력층으로 구성.
- Weight(가중치): 뉴런에서 다음 뉴런으로 넘길 때 중요도를 적용하기 위한 매개변수.
- Model(모델): 보통 인공지능 분야에서의 모델은 어떤 AI나 신경망 등 대상체를 의미.
- ANN(Artificail Neural Network): 인공신경망. 여러 뉴런으로 이루어진 인공 신경망.
- DNN(Deep Neural Network): 심층신경망. 기존의 ANN의 단점을 해결하기 위해 은닉층을 통해(은닉층을 더 많이!) 더 깊은 신경망 구조를 갖는 신경망.
- CNN(Convolution Neural Network): 합성곱신경망. 특징을 추출하고 패턴을 파악하는 데 우수한 신경망.
- RNN(Recurrent Neural Network): 순회신경망. 시간적인 특성을 함께 학습하고 적용하기 위한 신경망.
- 다층 퍼셉트론: Multilayer Perceptron, MLP. 층이 여러 개인 신경망
- 역전파 알고리즘: Backpropagation. 신경망의 가중치를 업데이트하여 오차를 최소화하는 방법
- 생성적 적대 신경망: Generative Adversarial Networks, GAN. 새로운 데이터를 생성하기 위한 신경망.
• Machine learning
: 기계학습. 딥러닝으로 기계가 스스로 반복하여 학습하는 것.
- 지도학습: 입력 데이터와 정답을 함께 주고 학습시킴. (이미지 분류, 스팸 이메일 탐지, 주식 가격 예측, 코인 가격 예측 등)
- 비지도학습: 입력 데이터만 주어지고 정답이 없는 상태에서 데이터의 패턴이나 구조를 찾는 방식.(구매 패턴에 따른 고객 세분화, 이상 탐지, 차원 축소 등)
- 강화학습: 시행착오를 통해 보상을 최대화하기 위해 학습하는 방식. (게임 AI, 로봇제어, 자율 주행 차량 등)
- 반지도학습: 일부 데이터에 대해 분류와 정답이 존재. 나머지 일부는 없는 상태로 학습. (데이터 라벨링 등)
• AI
: Artificial Intelligence. 딥러닝 알고리즘을 통해 머신러닝이란 프로그램을 의미.
- 약인공지능 (Narrow AI or Weak AI): 특정 직업이나 문제를 해결하는 데 특화된 AI
- 강인공지능 (General AI or Strong AI, AGI): 인간과 유사한 수준의 지능을 가지고 다양한 작업을 수행할 수 있는 인공지능 모델.
- 초인공지능 (Suprerintelligent AI): 인간의 지능을 초월하는 AI. 아직은 이론적인 단계.
- 대형 언어 모델 (Large Language Model, LLM): 많은 양의 텍스트 데이터를 학습하여 언어 이해와 생성 능력을 갖춘 인공지능 모델. (ChatGPT, BERT, T5, LLaMA 등)
ML을 위한 파이썬 라이브러리
- NumPy : 고성능 수치 계산을 위한 라이브러리. 대규모 다차원 배열과 행렬 연산에 최적화되어 있음. 데이터 과학과 머신러닝에서 데이터를 효율적으로 처리하기 위한 기본적인 도구.
- Pandas : 데이터 분석과 조작을 위한 라이브러리. CSV, 엑셀 파일 등 다양한 형태의 데이터를 쉽게 처리할 수 있게 해 줌. 데이터 전처리와 탐색적 데이터 분석(EDA)에 매우 유용. ( 데이터 전처리와 간단한 머신러닝 모델을 구축하는 등.. )
- Scikit-learn : 머신러닝 알고리즘을 구현한 라이브러리. 분류, 회귀, 클러스터링 등 다양한 머신러닝 작업을 지원. 사용하기 쉬운 API와 광범위한 문서로 많은 개발자와 연구자에게 선호됨. ( 데이터 전처리와 간단한 머신러닝 모델을 구축하는 등.. )
- TensorFlow / PyTorch : 딥러닝 프로젝트를 위한 라이브러리. 복잡한 신경망 모델을 구축하고 학습시키는 데 사용. 강력한 기능과 유연성을 제공. ( 복잡한 딥러닝 모델을 개발하는 경우 )
- Matplotlib / Seaborn : 시각화 라이브러리. 데이터 분석 결과를 시각적으로 표현하는 데 도움을 줌.
ALGORITHM CODE KATA
Ⅰ. 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요. (school.programmers.co.kr)
< 제한사항 >
- 5 ≤ players의 길이 ≤ 50,000
- players[i]는 i번째 선수의 이름을 의미합니다.
- players의 원소들은 알파벳 소문자로만 이루어져 있습니다.
- players에는 중복된 값이 들어가 있지 않습니다.
- 3 ≤ players[i]의 길이 ≤ 10
- 2 ≤ callings의 길이 ≤ 1,000,000
- callings는 players의 원소들로만 이루어져 있습니다.
- 경주 진행중 1등인 선수의 이름은 불리지 않습니다.
def solution(players, callings):
# players 배열 -> 딕셔너리.
player_dict = {player: idx for idx, player in enumerate(players)}
for i in callings:
# 추월한 선수의 현재 인덱스.
idx = player_dict[i]
# 바로 앞 순위의 선수와 키 값 변경.
players[idx], players[idx - 1] = players[idx - 1], players[idx]
# 딕셔너리의 인덱스 업데이트.
player_dict[players[idx]] = idx
player_dict[players[idx - 1]] = idx - 1
return players
리스트를 이용하는 경우 시간초과 발생 ↴
def solution(players, callings):
for i in callings:
a = players.index(i)
players[a], players[a-1] = players[a-1], players[a]
return players