전체 글

愚公🏃移山⛰️
Algorithm/자료구조

[배열] 파이썬 리스트(동적 배열)의 비밀

사실 우리는 이미 동적 배열을 사용하고 있었는데요. 파이썬 리스트가 바로 동적 배열입니다. C 배열을 이용해서 동적 배열을 구현한 거죠. int_list = [2, 3, 5, 7, 11] 이렇게 5개의 정수 값이 들어간 파이썬 리스트를 만들었습니다. 파이썬 리스트는 동적 배열이기 때문에, 내부적으로는 C 배열이 만들어진 거죠. int_list.append(13) 여기에 새로운 값을 추가할 수도 있습니다. 우리 입장에서는 내부적으로 얼마나 큰 배열이 있는지 몰라도, 값을 맘대로 추가할 수 있습니다. 동적 배열이기 때문에 상황에 맞게 배열 크기가 조절되고 있는 거죠. 자 그런데, 우리는 리스트를 사용할 때 현재 내부적으로 사용되고 있는 배열의 크기를 모릅니다. 아무리 저장한 데이터가 6개여도 내부적으로는 8..

Data Engineering/빅데이터를 지탱하는 기술

[빅데이터를 지탱하는 기술] Hadoop VS Spark

Hadoop과 Spark는 둘 다 빅데이터 처리를 위한 분산 처리 프레임워크이지만, 몇 가지 차이점이 있다. 처리 모델: Hadoop: Hadoop은 대표적으로 MapReduce 처리 모델을 사용. MapReduce는 데이터를 작은 블록으로 나누어 병렬 처리하고, Reduce 단계에서 결과를 모아서 처리하는 방식으로 동작 Spark: Spark는 MapReduce보다 훨씬 더 다양한 처리 모델을 제공한다. Spark는 Resilient Distributed Dataset (RDD)라는 데이터 구조를 활용하여 데이터를 빠르게 메모리에 저장하고 다양한 연산을 수행한다. 또한, Spark는 인메모리 처리를 지원하여 디스크 기반의 MapReduce보다 빠른 처리 속도를 제공한다. 성능: Hadoop: Hadoo..

Data Engineering/빅데이터를 지탱하는 기술

[빅데이터를 지탱하는 기술] Spark

Spark Spark는 대용량 데이터 처리를 위한 빅데이터 분산 처리 엔진으로서, 빠른 속도와 다양한 기능을 제공한다. 아파치 소프트웨어 재단에서 개발된 오픈소스 프로젝트로, Hadoop 기반의 MapReduce보다 높은 처리 속도와 유연성을 가지고 있다. 주요 특징 : 1. 인메모리 처리: Spark는 데이터를 디스크 대신 메모리에 저장하고 처리하기 때문에, 빅데이터 작업에 특히 빠른 속도를 제공한다. 따라서 반복적이거나 실시간 데이터 처리에 용이하다. 2. 다양한 작업 모델: Spark는 기본적으로 데이터 처리를 위한 배치 작업을 지원하지만, 스트리밍, 머신 러닝, 그래프 처리 등 다양한 작업 모델을 지원한다. 3. 간편한 프로그래밍 모델: Spark는 다양한 프로그래밍 언어 (Scala, Java,..

Data Engineering/빅데이터를 지탱하는 기술

[빅데이터를 지탱하는 기술] Hadoop

Hadoop은 대용량의 데이터를 처리하고 저장하기 위한 오픈소스 프레임워크. 아파치 소프트웨어 재단에서 개발되었으며, 분산 환경에서 데이터 처리를 가능하게 해주는 핵심 기술들로 구성 주요 구성 요소: 1. HDFS (Hadoop Distributed File System): Hadoop의 데이터 저장 시스템으로, 대용량의 데이터를 여러 머신에 분산하여 저장 파일을 작은 블록으로 분할하고, 각 블록을 여러 노드에 복제하여 데이터의 안정성과 가용성을 보장합니다. 높은 내고장성을 갖추고, 데이터의 스트리밍 액세스에 적합 2. MapReduce: Hadoop의 핵심 처리 모델로, 대규모 데이터 처리를 위해 개발된 프로그래밍 모델 Map 단계에서 데이터를 작은 조각으로 분할하여 병렬 처리하고, Reduce 단계에..

Data Analysis/Natural Language Processing(NLP)

네이버 자연어 키워드 분석

오늘은 네이버 웹문서 검색 api를 가져와, '인공지능'에 대한 웹검색 / 뉴스 / 블로그에대 분석해보고 시각화해보겠습니다.import os import sys import urllib.request import pandas as pd import json import re import urllib.request import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl plt.style.use('seaborn-white') client_id = '#########' # 개인 client id client_secret = '#########' # 개인 client secret query = urllib.parse.quote(i..

Algorithm/자료구조

[기본 자료 구조] 데이터의 주소

파이썬 id 함수 데이터가 저장되어 있는 주소를 알아내는 방법을 볼게요. id 함수를 이용하면 저장한 데이터의 메모리 주소를 정수로 표현한 값을 알아낼 수 있습니다. 여러 타입의 데이터를 저장하고 id 함수를 써서 메모리 주소를 출력시켜보겠습니다. # 여러 데이터를 저장한다 list1 = [1, 2] int1 = 0 float1 = 3.14 set1 = set() tuple1 = (2, 3) # 저장한 데이터의 메모리 저장 위치를 받아온다 print(id(list1)) print(id(int1)) print(id(float1)) print(id(set1)) print(id(tuple1)) 140237662138184 4450309504 140237661913472 140237664406888 140237..

Algorithm/코딩테스트 스터디

빠르게 산 오르기

빠르게산오르기.pydef select_stops(water_stops, capacity): # 여기에 코드를 작성하세요 answer = [] # 마지막으로 들른 약수터 위치 last_stop = 0 for i in range(len(water_stops)): # i 지점까지 갈 수 없으면, i - 1의 지점 약수터를 들른다. # (water_stops[i] - last_stop capacity: answer.append(water_stops[i - 1]) last_stop = water_stops[i - 1] # 마지막 약수터는 무조건 간다 answer.append(water_stops[-1]) return answer # 테스트 코드 list1 = [1, 4, 5, 7, 11, 12, 13, 16, 1..

Algorithm/코딩테스트 스터디

거듭 제곱 빠르게 계산하기

거듭제곱빠르게계산하기.py def power(x, y): # 여기에 코드를 작성하세요 # Base case if y == 0: return 1 # 계산을 한 번만 하기 위해 변수에 저장 subresult = power(x, y // 2) # Recursive Case # 문제를 문제 두 개로 나눠준다.(짝수인 경우, 홀수인 경우) # y가 무조건 한번은 홀수가 된다. if y % 2 == 0: return subresult * subresult else: return x * subresult * subresult # 테스트 코드 print(power(3, 5)) print(power(5, 6)) print(power(7, 9)) 해결과정 문제에서 소개된 반복문 솔루션을 그대로 재귀적으로 바꿔 보았지만, ..

Algorithm/코딩테스트 스터디

투자 귀재 규식이 I

def sublist_max(profits): # 여기에 코드를 작성하세요 sub_list = [] sum = 0 for i in range(len(profits)): sum = 0 for j in range(i+1): sum += profits[j] sub_list.append(sum) return max(sub_list) # 테스트 코드 print(sublist_max([4, 3, 8, -2, -5, -3, -5, -3])) print(sublist_max([2, 3, 1, -1, -2, 5, -1, -1])) print(sublist_max([7, -3, 14, -8, -5, 6, 8, -5, -4, 10, -1, 8]))해결과정 Brute Force알고리즘을 이용해 문제 해결 Brute Force..

Algorithm/알고리즘 패러다임

[Greedy Algorithm] 수강 신청

def course_selection(course_list): # 여기에 코드를 작성하세요 # 최종으로 수업을 담을 수 있는 리스트 생성 early_time = [] # 수업을 끝나는 순서대로 정렬 sorted_list = sorted(course_list, key=lambda x: x[1]) # lambda x: 뒤에 인덱스 0, 1 조정 # 가장 먼저 끝나는 수업은 무조건 듣는다 early_time.append(sorted_list[0]) # 이미 선택한 수업과 선택을 안한 수업 중 가장 빨리 끝나는 수업을 고른다. for i in sorted_list: # 마지막 수업이 끝나기 전에 새 수업이 시작하면 겹친다. if i[0] > early_time[-1][1]: early_time.append(i)..

달려라 국나뇽
swk99