파이썬 79

Python 자료구조&알고리즘 - 동적 계획법, 백준 11726번

1. 동적 계획법(Dynamic Programming) 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분의 값을 활용해서 보다 큰 크기의 부분 문제를 해결함 상향식 접근법(최하위 해답을 구한 후 해당 결과를 이용해서 상위 문제를 풀어가는 방식) 프로그램 실행 시 이전의 계산한 값을 저장하여 다시 계산하지 않도록 전체 실행 속도를 빠르게 하는 기술(메모이제이션 : Memoization)을 사용 문제를 잘게 쪼갤 때, 부분 문제는 중복되기 때문에 재활용 2. 동적 계획법 알고리즘 피보나치 수열 n을 입력받아서 아래와 같이 계산 피보나치 수열 함수흫 '피보나치' fibonacci(0) : 0 fibonacci(1) : 1 fibonacci(2) : 1 fibonacci(3) : 2 fibonacci(4)..

Python 자료구조 & 알고리즘 - 재귀호출

1. 재귀호출(recusive call) 함수 안에서 동일한 함수를 호출하는 형태 여러 알고리즘, 고급 정렬 알고히즘 작성시 자주 사용됨 1-1. 재귀 호출 분석 2! = 1 * 2 3! = 1 * 2 * 3 4! = 1 * 2 * 3 * 4 = 3! * 4 1-2. 규칙 n! = n * (n-1)! 함수로 만들어 보자 함수(n)은 n=1 함수(n)은 n>1 이면 return n*함수(n-1) 1-3. 검증 2! 함수(2)이면 2>1 이므로 2 * 함수(1) 함수(1)은 1이므로 return 2 * 1, 답은 2 3! 함수(3)이면 3>1 이므로 3 * 함수(2) 함수(2)는 위 계산에 의해 2! 이므로 return 2*1 = 2 3 * 함수(2) = 3 * 2 = 3 * 2 * 1, 답은 6 4! 함수..

Python 자료구조 & 알고리즘 - 정렬(버블, 삽입, 선택)

1. 정렬 어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 것 프로그램 개발 시 빈번하게 정렬을 필요로 함 다양한 알고리즘이 고안되었으며 알고리즘 학습의 필수사항 2. 버블 정렬(bubble sort) 두 인접한 데이터를 비교해서 앞에있는 데이터가 뒤에 있는 데이터보다 크면 (작으면) 자리를 바꾸는 정렬 알고리즘 3. 삽입 정렬(insertion sort) 인덱스(key)앞에 있는 데이터(A)부터 비교해서 key가 더 작으면(크면) 데이터(A)값을 뒤 인덱스로 복사 key가 더 큰 데이터를 만날 때까지 반복 큰 데이터를 만난 위치 바로 뒤에 key를 이동 4. 선택 정렬(selection sort) 주어진 데이터 중, 최소값을 찾음 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함 맨 앞의 위..

Python 자료구조 & 알고리즘 - 복잡도

1. 알고리즘 복잡도 표현방법 1-1. 알고리즘 복잡도 계산이 필요한 이유 하나의 문제를 푸는 알고리즘은 다양함 * 정수의 절대값을 구하는 방법 * 방법1 : 값이 음수인지 확인해서 0보다 작은 음수일 때 -1을 곱하기 * 방법2 : 정수값을 재곱한 값에 루트를 씌우기 디양한 알고리즘 중 어떤 알고리즘이 더 좋은지 분석하기 위해 복잡도를 정의하고 계산함 1-2. 알고리즘 복잡도 계산 항목 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈 시간 복잡도 : 알고리즘 실행 속도 1-3. 알고리즘 성능 표기법 오메가 표기법 알고리즘 최상의 실행 시간을 표기 세타 표기법 알고리즘 평균 실행시간을 표기 빅오 표기법 최악의 실행 시간을 표기 아무리 최악의 상황이라도 이 정도의 성능은 보장함을 의미 가장 많이 사용 1..

Python 데이터분석 - 형태소분석

1. 형태소 분석 자연 언어의 문장을 형태소라는 최소 단위로 분할하고 품사를 판별하는 작업 영어 형태소 분석은 형태소마다 띄어쓰기를 해서 문장을 구성하는 것이 기본임(분석이 쉬운편) 아시아 계열 언어분석은 많은 노력이 필요 한국어 형태소 분석 라이브러리: KoNLpy 2. KoNLPy에 다양한 형태소 분석 라이브러리 Hannanum: 한나눔. KAIST Semantic Web Research Center 개발 KKma: 꼬꼬마. 서울대학교 IDS(Intelligent Data Systems) 연구실 개발 Komoran: 코모란. Shineware에서 개발 Mecab: 메카브. 일본어용 형태소 분석기를 한국어로 사용할 수 있도록 수정 개발 OKT(Open Korean Text): 오픈소스 한국어 분석기. ..

Python 데이터분석 -쇼핑몰 고객주문 데이터 프로젝트

1. 고객 주문 데이터 파악하기 1-1. 데이터 셋 가상 온라인 리테일 사이트의 2010/12 ~ 2011/12까지의 주문 기록 데이터 약 500,000건의 데이터 ✔ import, 드라이브 연결 1-2. 컬럼 살펴보기 InvoiceNo: 주문번호 StockCode: 아이템 아이디 Description: 상품 설명 Quantity: 주문 수량 InvoiceDate: 주문 시간 UnitPrice: 상품 가격 CustomerID: 고객 아이디 Country: 고객 거주 지역(국가) 1-3. 날짜 타입 데이터 변환 문자열로 데이터를 로딩하는 것보다 datetime 타입으로 로딩하는 것이 날짜 분석 및 계산에 용이 1-4. 매출 구하기 2. 매출 데이터로부터 Insight 전체 매출의 약 82%가 UK에서 발생..

Python 데이터분석 matplotlib

1. matplotlib 파이썬 기반 시각화 라이브러리 파이썬 표준 시각화 도구라고 불릴만큼 다양한 기능을 제공 한글에 대한 지원이 완벽하지 않음 세부기능이 많아 사용성이 복잡함 pandas와 연동이 용이함 matplotlib 공식 홈페이지 https://matplotlib.org Matplotlib — Visualization with Python seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical dat..

백준 Python 1302번 (베스트셀러)

문제 - 1302 김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다. 오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오. song = int(input('오늘 책이 얼마나 팔렸나요?')) books = {} # books를 딕셔너리형 {}으로 초기화 for _ in range(song): book = input('어떤 책이 팔렸나요?') if book not in books: books[book] = 1 # book이 기존 딕셔너리 books에 없다면 빈도를 1 else: books[boo..

백준 - Python 1543번 문제 (문서 검색)

문제 - 1543 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다. 세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오 hun = input('입력 값1') # 입력 값1 seop = input('입력 값2') # 입력 값2 cnt = 0 song = 0 while song

Python 데이터 분석 Data Preprecessing

1. 데이터 전처리(Data Preprecessing) 특정 분석에 적합하게 데이터를 가공하는 작업 업무에서 사용하는 데이터는 분석, 머신러닝(딥러닝)에 적합하지 않은 경우가 많기 때문에 이를 방지하기 위한 작업을 함 2. 공공데이터 * [공공데이터](https://bit.ly/ds-house-price) * [민간 아파튼 가격동향](https://bit.ly/ds-house-price) ✔ strip() : 공백이 있는 데이터의 해당 앞뒤 공백을 삭제하는 기능을 가지고 있다.

Python 백준 - 1966번 문제 - 큐

문제 -1 966 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, ..

머신러닝 - 사이킷런

1. Scikit-learn 모듈 대표적인 파이썬 머신러닝 모듈 다양한 머신러닝 알고히즘을 제공 다양한 샘플 데이터를 제공 머신러닝 결과를 검증하는 기능을 제공 BSD 라이선스이기 때문에 무료로 사용 및 배포가 가능 사이킷런 공식홈페이지 https://scikit-learn.org 2. LinearSVC 클래스를 구분으로 하는 분류문제에서 각 클래스를 잘 구분하는 선을 그려주는 방식을 사용하는 알고리즘 지도학습 알고리즘을 사용하는 학습 전용 데이터와 결과 전용 데이터를 함께 가지고 있어야 사용이 가능

백준 - Python - 11650문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. -11650 song = int(input()) hun = [] for i in range(song): # 반복을 돌리며 입력받은 [a, b] = map(int, input().split()) hun.append([a, b]) # hun 리스트 안에 a, b좌표를 저장 hun = sorted(hun) # 정장된 값을 정렬 for i in range(song): print(hun[i][0], hun[i][1]) # 위에 있는 출력식으로 출력

Python Pandas 2

2. 데이터 기본 정보 알아보기 df = pd.read_csv('http://bit.ly/ds-korean-idol') df type(df) pandas.core.frame.DataFrame 2-1. column(열) df.columns Index(['이름', '그룹', '소속사', '성별', '생년월일', '키', '혈액형', '브랜드평판지수'], dtype='object') new_column = ['name','group','company','gender','birthday','height','blood','brand'] df.columns = new_column df.columns Index(['name', 'group', 'company', 'gender', 'birthday', 'height'..

Pythone Pandas(판다스) 기본

1. Pandas 데이터 작업을 쉽고 직관적으로 할 수 있도록 설계된 빠르고 유연한 데이터 구조를 제공하는 모듈개요[편집] 팬더스 (pandas)는 파이썬의 데이터 분석 라이브러리이다. 팬더스는 수치형 테이블과 시계열 데이터를 조작하고 운영하기 위한 데이터를 제공하는데, 3조항 BSD 라이선스 조건 하에서 무료로 사용 가능하다 1-1. Series와 DataFrame 1차원, 1개의 column은 Series라고 부름 데이터프레임: 가로축, 세로축이 있는 2차원의 다양한 데이터를 저장하는 자료구조

Python 백준 스택수열

문제 1. 스택수열 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력 첫 줄에 n (1 ≤ n ≤ 100,..

Python 데이터 분석 Numpy

1. Numpy 수학, 과학 계산용 페키지 성능 : ndarray가 파이썬의 list보다 빠름 메모리 사이즈 : ndarray가 파이썬의 list보다 적은 메모리를 사 1-1. array(배열) 여러값들의 그룹 1-2. array의 data타입 ndarray는 list와 다르게 단일 데이터 타입만 허용 1-3. 인덱싱과 슬라이싱 배열의 부분 선택 1-4. Fancy 인덱싱 범위가 아닌 특정 index의 집합의 값을 선택하여 추출하고 싶을 때 활용 1-5. Boolean 인덱싱 조건 필터링을 동하여 Boolean 값을 이용한 색

Python 크롤링(서점)

# 셀레니움 : 웹 브라우저를 이용하여 웹 사이트에서 자동적으로 제어할 수 있음 # 뷰티풀 숩 이란 HTML과 XML 문서들의 구문을 분석하기 위한 파이썬 패키지이다. # HTML로부터 데이터를 추출하기 위해 사용할 수 있는 파싱된 페이지의 파스 트리를 만드는데, # 이는 웹 스크래핑에 유용하다. ✔ 메인 페이지 -> 파이썬 (검색) -> 어디서 찾을지(HTML) ✔ yes24에서 내용 긁어오기 ✔ 엑셀로 저장 ✔ 결과

Python 자료구조&알고리즘 - 힙(Heap)

1. 힙(Heap) 1-1. 힙 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 1-2. 힙을 사용하는 이유 배열에 데이터를 넣고 최대값, 최소값을 찾으려면 시간이 많이 걸릴 수 있음 힙에 데이터를 넣고 최대값, 최소값을 찾으면 시간이 적게 소모됨 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현등에 활용됨 2. 힙(Heap) 구조 힙은 최대값을 구하기 위한 구조(최대힙, Max Heap)와 최소값을 구하기 위한 구조(최소 힙, Min Heap)로 분류할 수 있음 힙은 아래와 같이 두가지 조건을 가지고 있는 자료구조 각 노드의..

Python 자료구조&알고리즘 - 트리(Tree), 이진 탐색

1. 트리(Tree) Node와 Branch를 이용해서 사이클을 이루지 않도록 구성한 데이터 구조 트리중 이진 트리(Binary Tree)형태의 구조로 탐색(검색)알고리즘을 구현을 위해 많이 사용됨 2. 알아둘 용어 Node: 트리에서 데이터를 저장하는 기본 요소(데이터와 다른 연결된 노드에 대한 Branch 정보를 포함) Root Node: 트리 맨 위에 있는 노드 Level: 최상위 노드를 Level 0으로 했을 때 하위 Branch로 연결된 노드의 깊이를 나타냄 Parent Node: 어떤 노드의 상위 레벨에 연결된 노드 Child Node: 어떤 노드의 하위 레벨에 연결된 노드 Leaf Node: Child Node가 하나도 없는 노드 Sibling Node: 동일한 Parent Node를 가진 ..

Python 자료구조&알고리즘 - 해쉬 테이블(Hash Table)

1. 해쉬 테이블(Hash Table) 키(key)에 데이터(value)를 저장하는 데이터 구조 파이썬에서는 딕셔너리(dick)타입이 해쉬 테이블의 예 key를 통해 데이터를 바로 찾을 수 있으므로 검색 속도가 빠름 보통 배열로 미리 Hash Table 사이즈 만큼 생성 후에 사용 2. 알아둘 용어 해쉬(Hash) : 임의의 값을 고정 길이로 변환하는 것 해쉬 테이블(Hash Table): 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해쉬 함수(Hashing Function) : key에 대해 산술 연산을 이용해 데이터 위치를 찾을 수 있는 함수 해쉬 값(Hash Values) 또는 해쉬 주소(Hash Address) : key를 해싱 하무로 연산해서 해쉬 값을 알아내고 이를 기반으로 해쉬 테이..

Python 알고리즘&자료구조 더블 링크드 리스트(Doubly Linked List)

1. 더블 링크드 리스트(Doubly Linked List) 양뱡향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능 class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self,data): self.head = Node(data) self.tail = self.head def insert(self,data): if self.head == None: self.head = Node(data) self.tail = self.head else: node = self.head while node.next: node..

Python 자료구조&알고리즘 - 링크드리스트(Linked List)

1. 링크드리스트(Linked List) 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 구조 데이터의 삽입과 삭제가 매우 빠름 C언어에서는 중요한 자료구조지만, 파이썬에서는 리스트 타입이 링크드 리스트 역할도 모구 지원 1-1. 링크드 리스트의 용어 노드(node) : 데이터 저장 단위(데이터, 포인터)로 구성 포인터(pointer) : 각 노드 안에서 다음이나 이전의 노드와의 연결정보를 가지고 있는 공간 1-2. 링크드 리스트로 데이터 추가하기 1-3. 링크드 리스트 데이터 출력하기 문제 데이터 30과 40 사이에 35를 삽입하는 코드를 작성해보자 2. 객체지향 프로그래밍으로 링크드 리스트를 구현 추가 삭제

Python 자료구조&알고리즘 - 스택(stack)

1. 스택(stack) 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 구조 LIFO(Last Input First Out) 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 1-1. 스택의 구조 스택은 LIFO 또는 FILO 데이터 관리 방식 스택의 활용 : 컴퓨터 내부의 프로세스 구조의 함수 동작 방식 기능 push() : 데이터를 스택에 쌓기 pop() : 데이터를 스택에서 꺼내기 1-2. 스택의 장점 구조가 단순해서 이해와 구조가 쉬움 데이터 저장/읽기 속도가 빠름 데이터 최대 개수를 미리 정해야 함(파이썬의 쟝우 재귀함수는 1000번까지만 호출이 가능) 저장 공간의 낭비가 발생할 수 있음(미리 최대 개수만큼 저장공간을 미리 확보하기 때문) 스택은 단순하고 빠른 성능을 위해 사용하므로 보통 배열 ..

Python 알고리즘&자료구조 - 큐(Queue)

1. 큐(Queue) 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 FIFO(First-In, First-out) 줄을 서는 행위와 유사 1-1. 큐의 사용 멀티테스킹을 위한 프로세스 스케쥴링 방식을 구현(운영체제) 푸시메세지 1-2. 큐의 용어 Enqueue : 큐에 데이터를 넣는 기능 Dequeue : 큐에 데이터를 꺼내는 기능 비쥬얼고 [https://visualgo.net/en/list?slide=1] 1-3. queue 라이브러리 활용 Queue(): 가장 일반적인 큐 자료구조를 생성 LifeQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조(스택) PriorityQueue() : 데이터마다 우선순위를 넣어서 우선순위가 높은 순으로 데이터를 출력 ✔ 일반적인 Queue ✔ Pr..

Python 자료구조&알고리즘 (배열) - 배열에서 전체 이름안에 'M'이 몇번 나왔는지 빈도수

1. 배열 데이터를 나열하고 각 데이터를 인덱스에 대응하도록 구성한 자료구조 파이썬 리스트 타입은 배열 기능을 제공 1-1. 배열이 필요한 이유 같은 종류의 데이터를 효율적으로 관리하기 위해 사용 같은 종류의 데이터를 순차적으로 저장 빠른 접근이 가능(인덱스 번호로 접근시) 1-2. 배열의 단점 데이터의 추가/삭제가 어렵다 미리 최대 길이를 설정해야 함 문제 dataset 배열에서 전체 이름안에 'M'이 몇번 나왔는지 빈도수를 출력해보자 dataset = ['Braund, Mr. Owen Harris', 'Cumings, Mrs. John Bradley (Florence Briggs Thayer)', 'Heikkinen, Miss. Laina', 'Futrelle, Mrs. Jacques Heath (L..

Python 자료구조, 알고리즘 들어가며(기초)

파이썬으로 자료구조와 알고리즘을 공부하기로 하였다. 1. 자료구조(data structure) 코드상에서 효율적으로 데이터를 처리하기 위해 데이터의 특징에 따라 체계적으로 구조화하여 저장 대표적인 자료구조는 배열, 스택, 링크드리스트, 해쉬테이블, 힙 등.... 2. 알고리즘(algorithm) 어떤 문제를 풀기 위한 절차 및 방법 입력을 넣으면 원하는 출력을 얻을 수 있도록 만든 프로그램 3. 자료구조와 알고리즘을 배우는 이유 어떤 자료구조와 알고리즘을 사용하느냐에 따라 프로그램의 성능 차이가 큼 4. 파이썬을 활용한 자료구조와 알고리즘 어떤 언어로든 자료구조와 알고리즘은 공부할 수 있음 예전에는 C언어 또는 C++로 작성하는 경우가 많았음 최근에는 언어로 인한 제약/평가는 없어짐 가장 쉽고 빠르게 자..