파이썬 70

백준 1181번[단어 정렬] 문제풀이

📌문제 설명 📌문제 접근 방식 1. 중복된 단어를 제거한다. 2. 글자 수로 정렬 후 알파벳 사전순으로 정렬한다. 📌몰랐던 점 sorting 기준을 lambda식으로 정의할 때 2가지 기준을 설정할 것 중복된 단어를 제거하는 건 set 자료구조를 사용해 간단히 해결할 수 있었다. 2단계에서 글자 수로 정렬하는 것도 문제없이 수행했으나 알파벳 사전순으로 정렬하는 과정에서 헷갈렸던 부분은 문자열 정렬을 어떻게 할 것인가였다. lambda 식을 이용해 정렬할 때 2개의 기준을 주고 싶었는데 문법이 기억나지 않았다. 그래서 직접 문자열 정렬을 하는 함수로 구현하다보니 시간이 오래걸렸다. sort함수의 key파라미터로 lambda 식을 넘겨줄 때 글자수와 문자열을 설정하면 간단한 문제였다. 📌소스코드 import..

알고리즘 2021.03.06

맥주 추천시스템 구현 - 2. 데이터 전처리

🍺리뷰 데이터 전처리 1. 여러 개의 파일 병합하기 우선 이전 포스팅에서 수집한 맥주별 csv 파일들을 하나로 합치겠습니다. import pandas as pd # 합친 데이터를 저장할 데이터프레임 data = pd.DataFrame(data=[], columns=['맥주정보', '검색이름', '맥주이름']) # 수집한 파일의 개수 files_cnt = 77 for i in range(files_cnt): # 해당 경로에서 beer_n_1.csv 형식의 파일들만 수집한 뒤 병합합니다. try : tmp = pd.read_csv(r'C:\Users\Ghyeon\beer_n_'+str(i)+'.csv', index_col=0) data = pd.concat([data,tmp]) # 오류 발생 시 넘어갑니다...

Pandas - 데이터프레임 생성/병합/추출하기

파이썬은 원래 데이터 분석에 특화된 언어가 아닙니다. R로 분석하던 것을 파이썬으로 하고 싶은 개발자들이 만든 도구가 Numpy와 Pandas입니다. 데이터분석을 위한 파이썬의 기본 자료구조 딕셔너리, 리스트만으로는 부족했기 때문에, Pandas에는 데이터프레임, 시리즈라는 자료구조가 추가되었습니다. 1. 데이터 프레임 생성 데이터 프레임을 만드는 방법은 여러 가지가 있습니다. 일반적으로 배열, 리스트, 딕셔너리로 만들 수 있습니다. 1.1. 배열로 생성하기 첫 번째는 배열(array)을 이용해서 만드는 방법입니다. 우선 배열 자료구조를 사용하기 위해 numpy를 불러오고, pandas도 import 합니다. import pandas as pd import numpy as np sample_array =..

NBA 농구 강팀이 연승하는 이유는?

🛒데이터 수집 및 전처리 데이터는 캐글에 있는 NBA Regular Season Data를 사용하였습니다. https://www.kaggle.com/michaelmcfarlane/20172018-nba-regular-season-game-data 사용할 라이브러리와 파일을 불러오겠습니다. import pandas as pd import numpy as np import plotly.express as px import plotly.graph_objects as go import matplotlib.pyplot as plt import seaborn as sns from sklearn.cluster import KMeans from sklearn.preprocessing import MinMaxScaler..

12월 서울시 코로나 확진자 및 사망자 수 시각화

1. 데이터 수집 캐글에 있는 국내 코로나 환자들에 대한 데이터를 분석해보도록 하겠습니다. www.kaggle.com/hongsean/covid19-in-korea-dataset?select=COVID_Korea_geo.csv 전체 데이터에서 필요한 것들만 뽑아내는 과정을 거친 뒤에 시각화를 진행하였습니다. COVID_Korea_geo.csv로부터 12월 서울에 대한 정보만 뽑아내 시각화할 것입니다. 우선 필요한 라이브러리인 pandas와 plotly를 가져오고 최대 행 출력 수도 변경했습니다. import pandas as pd import plotly.graph_objects as go pd.set_option('display.max_row', 100) COVID_Koread_geo.csv 파일을 불..

[퀵 정렬] Quick Sort - Python

퀵 정렬 Quick Sort 퀵 정렬 시간복잡도는 Worst 경우 O(n^2), Average : O(nlogn), Best - O(nlogn) pivot을 어떻게 설정하느냐에 따라 성능이 달라질 수 있음 값들이 이미 정렬되어 있는 경우 Worst Case : Random하게 섞어주는 방식 사용 가능 퀵정렬 과정 리스트 개수가 1개일 때 재귀 종료 0번째 값을 pivot으로 설정 pivot보다 작거나 큰 값을 low, high 리스트에 저장 저장한 low, high에 각각 재귀적으로 quick을 적용 최종 low, high, pivot을 병합 def quick(data): # 재귀 함수 종료 조건 if len(data) < 2: return data result = [] # pivot값 설정 pivot ..

알고리즘 2020.12.24

[병합 정렬] Merge Sort - Python

병합 정렬 Merge Sort Merge Sort 시간복잡도는 Worst - O(NlogN), Average - O(NlogN), Best - O(NlogN) Merge Sort의 경우 원래 리스트의 크기만큼의 추가공간이 필요하다. 입력 Data의 크기가 클 경우 Overhead가 증가할 수 있다. Divide & Conquer 단계를 수행하므로 시간 복잡도는 LogN이다. Merge Sort는 3단계로 구성된다. 각 리스트를 절반으로 나누는 Divide 단계 나눠진 리스트를 정렬하는 Conquer 단계 정렬된 리스트를 하나로 합치는 Combine 단계 def merge_sort(data): result = [] # 중간 index 구하기 mid = (len(data))//2 # 재귀 종료 조건 if l..

알고리즘 2020.12.24

[선택정렬, 삽입정렬] - Selection Sort, Insertion Sort (Python)

선택, 삽입 정렬 특정값 index를 찾는 알고리즘 find_index() : List 안에 있는 값을 찾아서 해당 위치를 반환해주는 함수 def find_index(list_, var): res_index = -1 for i in range(len(list_)): if list_[i] == var: res_index = i break return res_index data = [24, 10, 3, 8, 33, 27, 46] print(find_index(data, 8)) Selection Sort 시간복잡도는 Worst - O(N^2), Avgerage - O(N^2), Best - O(N^2) for문을 돌며 가장 작은 값을 찾아 0번째부터 바꿔나간다. for문을 2번 돌아야 한다. i==0부터 li..

알고리즘 2020.12.23

[재귀] Recursion - Python

재귀 사용하기 1. Factorial 구하기 - Factorial(5) = 1*2*3*4*5 - Factorial을 for문과 재귀로 구현 def factorial(n): res = 1 for i in range(1,n+1): res = res*i return res print(factorial(10)) # 재귀로 구현하기 def factorial(n): if n == 1: return 1 else: return n*factorial(n-1) print(factorial(3)) print(factorial(5)) print(factorial(10)) 2. 최대공약수 구하기 - 두 수 a,b 중 작은 것으로 나누어 떨어지면 그 수가 최대공약수 - 나누어 떨어지지 않으면 작은 수를 1씩 감소시킨 값으로 a,..

[파이썬 기초] - List, Set (Python)

파이썬 기초 자료구조와 알고리즘 1. 1부터 n까지의 연속한 숫자의 합을 구하는 알고리즘 방법 1. def sum_n(n): sum = 0 for i in range(1, n+1): sum = sum + i return sum print(sum_n(10)) 방법 2. def sum_n(n): return n*(n+1)/2 print(sum_n(10)) 2. 최대값 구하는 알고리즘 : List 자료구조 - len(a), append(x), insert(i,x), pop(i), clear(), x in a def find_max(list_): max = -2147000000 for data in list_: if max < data: max = data return max list_ = [10, 5, 8, ..