쿼리에서 조건을 줘서 걸러내는 작업을 줄이고, 데이터를 가져오는 기준이 변경되면서

이전에 쿼리에서 하던 '데이터에서 중복을 제거하는 것'을 파이썬으로 처리하게 되었다. 

 

업무에서 시험하는 데이터가 많다 보니, 어떤 데이터가 중복되었는지 찾아내는 것 조차 어렵다. 

(작게는 5만건, 많게는 200만건.. )

한 번 시험할 때 확인해야 할 양이 많다. 

 

이유는 모르겠지만.. 중복 데이터가 4개 정도 더 발생되는게 문제였다. 

디버깅 하며 어디서 불필요한 데이터가 남아있는지 찾아냈다. 

 

쿼리가 해결해주지 못한 부분이 어디인지 찾아내는 과정이 답답했다. 왜냐하면 데이터가 많으니깐 시간이 오래걸렸기 때문이다. 

 

해결한 내용

 

데이터프레임 끼리 merge를 진행 한 후에, 중복을 제거하고 인덱스를 다시 붙였다. 

drop_duplicates 를 진행할 때, 어떤 칼럼(들)을 기준으로 중복을 제거할 지 설정했더니 중복제거가 원하는 대로 됬다!

참고한 포스팅  https://nittaku.tistory.com/124

 

데이터프레임을 추출, 병합, 조인한 후에 데이터프레임의 길이와 내용을 잘 확인하자는 교훈(?)을 얻었다. 

 

 

 

728x90

리스트 원소들의 길이를 전부 알고 싶을 때 

 

inpl = [[1, 2], [3, 4], [5]]

def solution(mylist):
    answer = list(map(len, mylist))
    return answer

print(solution(inpl))

실행 결과

 

Iterable의 모든 멤버의 type을 변환

def solution(mylist):
    mylist = list(map(int, mylist))
    return mylist


mylist = ['1', '100', '33']

print(solution(mylist))

실행 결과

['1', '100', '33'] -> [1, 100, 33]

문자 타입이 숫자 타입으로 변경되었다. 

 

 

 

sequence 멤버를 하나로 이어붙이기

ml = ['11', '22', '333']

def solution(mylist):
    answer = ''.join(mylist)
    return answer

print(solution(ml))

실행 결과

 

728x90

파이썬 행과 열 뒤집기 

 

mylist = [[1,2,3], [4,5,6], [7,8,9]]

# 0,0  1,0,  2,0
# 0,1  1,1,  2,1
lenl = len(mylist)

answer = list()
for col in range(len(mylist)):
    tlist = list()
    for ii in range(len(mylist[0])):
        tlist.append(mylist[ii][col])
    print(tlist)
    answer.append(tlist)

print(answer)

 

 

zip unpacking을 이용하면 코드 한줄로 리스트를 뒤집을 수 있습니다.

zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만듭니다.
튜플의 이터레이터를 돌려주는데, i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번째 요소를 포함합니다.

 

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))

 

실행 결과

 

728x90

간격을 지정하고 문자열을 정렬할 수 있다. 

 

s = 'cba'
n = 7

print(s.ljust(n))
print(s.center(n))
print(s.rjust(n))

 

 

모든 알파벳

숫자 0을 입력하면, 영문 소문자 알파벳 숫자 1을 입력하면, 영문 대문자 알파벳을 사전 순으로 출력

 

flag = 0
if flag == 0:
    s = s.lower()
else:
    s = s.upper()

ls = list(s)
ls = sorted(ls)
print(sorted(ls))

s = ''.join(ls)

print(s)

 

파이썬에서 모든 알파벳, 숫자들이 미리 정의되어 있다. 


알파벳 출력하기 

import string  

string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz 
string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ 
string.ascii_letters #대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 
string.digits # 숫자 0123456789

 

728x90

프로그래머스의 '파이썬을 파이썬답게' 강의를 듣고 TIL을 남긴다

 

숫자와 진법을 입력하여 10진법으로 바꿔서 출력하는 문제다. 

num, base = map(int, input().strip().split(' '))

num = list(str(num))

answer = 0
turn = 0

num_enu = enumerate(num)

for idx, nn in num_enu:
    answer = answer + pow(base, len(num) - int(idx) - 1) * int(nn)

print(answer)

 

파이썬의 int 함수가 진법 변환을 지원한다.

int(x, base=10)  --10진법으로 바꿔준다

 

num = '3212'
base = 5
answer = int(num, base)
print(answer)

위의 두개의 코드를 이어서 실행시킨 터미널 화면

728x90

파이썬으로 swap 하기 

 

a, b = b, a

간단하게 두 개의 값을 swap 할 수 있다. 

 

 

파이썬으로 몫과 나머지 구하기 

print( *divmod(a, b) )

 

 

728x90

Andrew Andrew Ng 교수의 머신러닝 정리를 요약했다. 

 

첫 번째 챕터 1.2 Linear Regression with One Variable 

 

http://soopsaram.com/ml/markdowns/1.2-linear-regression-with-one-variable.html

 

1.2 Linear regression with one variable.md · GitBook

이번장에서는 Linear regression 알고리즘에 대해 알아보고 Model에 대해서 그리고 지도학습의 전체 과정에 대해서 알아볼 것이다. Linear regression은 입력된 값을 기반으로 결과값을 예측하는 알고리즘이다. 이장에서는 집값을 예측하는데 Linear regression을 사용해볼 것이다. 그것을 위해서 cost function 과 gradient descent 라는 개념에대해서 살펴볼 것이다. 위와 같은 데이터가 있을때, 1250 사

soopsaram.com

 

수식과 그림은 따로 포스팅에 첨부하지 않았다. 

 



1.2.1 Model and Cost Function

Linear regression은 입력된 값을 기반으로 결과값을 예측하는 알고리즘이다.


1.2.2 Linear regression

Supervised learning == 지도학습. 


문제와 답이 한 쌍으로 되어 있다. 이를 Training set(data set) 이라고 한다.  data set이 x와 y로 구성된다.
m: 학습 데이터 개수
x: input, feature
y: output, target


1.2.3 Model Representation

Hypothesis Function(가설 함수) 개념
머신러닝의 최종 목적은 예측을 위해 이 가설함수를 생성하는 것이다. 
데이터를 통해 학습을 진행하는 것은 함수의 parameter를 학습하는 것과 같다.
trainig set데이터가 학습 알고리즘을 거치면 결과함수가 나오는데, 이를 h라고 표기한다. 

(Hypothesis Function이라 부른다)


1.2.4 Cost Function(비용 함수, 손실 함수 ) 


Cost Function은 Hypothesis Function의 정확도를 평가하기 위한 도구다. 
h함수가 함수의 파라미터를 어떻게 선택하는지에 영향을 미친다. 
함수의 파라미터를 적절하게 선택하여 만든 h함수의 결과값과, 실제 결과값 y가 얼마나 차이가 있는지 확인하는 것이 cost function이다. 
이 차이가 적을 수록 정확한 h(가설함수)를 찾은 것이다. 
이러한 가설함수는 오차함수의 제곱이라고도 풀린다. 
이 제곱함수는 회귀분석(regression)에서 가장 많이 사용된다. 
제곱을 하는 이유는 음소, 또는 미분을 해야하기 때문이다.
자세히 살펴보면 공식자체는 별게 없다. 
training set에서 각 (예측값i - 실제값i)을 제곱하고 합을구한뒤 전체 training set 갯수 m으로 나눠서 평균을 낸것일 뿐이다.
cost function이 작아질 수록, Hypothesis Function의 정확도는 향상된다.


1.2.5 Simplified Cost function of Linear Representation

세타0을 0으로 만든 단순화 버전 
단순화시킨 h그래프는 원점을 지난다. 
세타1이 1일때(기울기가 1)는 예측 모델의 예측값이 실제값과 동일해진다는 것을 설명한다. 
세타1 == 기울기.

 


1.2.6 cost function 

세타0과 세타1이 모두 존재하므로, cost function(손실함수)는 3차원 그래프가 나온다. 
이 부분은 이해하기 어려웠음.

 


1.2.7 Parameter Learning(Gradient Descent)


이번 장에서는 가장 적합한 hypothesis function의 공식을 구성하는 parameter(세타)들을 어떻게 추정하는지 알아본다. 
Gradient Descent 알고리즘이다. 

 


1.2.8 Gradient Descent 알고리즘 수학적 정의


목적: Minimize cost function
Gradient Descent알고리즘은 Cost function, J() 의 최소값을 찾기 위해 사용한다. (최소화 문제의 경우에 많이 사용하는 범용 알고리즘이다.)

어떤 값으로 세타0와 세타1을 초기화 한다. (보통 0)
손실 함수를 최소화 시키는 방향으로 세타0과 세타1을 변화시킨다. 
Linear regression에서는 손실함수 J의 최소점이 무조건 1개이다. 

훈련비율(==학습률, learning rate): 기본적으로 언덕을 내려갈 때 얼만큼 큰 걸음을 내 딛어야 하는지를 의미한다. 기울기 하강의 변화치를 큰폭으로 할지 작은폭으로 할지에 해당한다.


1.2.9 learning rate와 미분계수 


훈련비율이 매우 작다면, 매우 작은 스탭(폭)으로 gradient가 하강한다. 
그래서 많은 이동이 필요해서 하강 속도가 느려진다.
훈련비율이 매우 크면, 결국 수렴(converge)에서 멀어지게 된다. 

 


1.2.10 Gradient Descent for Linear Regression


경사하강법을 손실함수를 최소화 하는 수식에 대입하면 된다. 


 

728x90

+ Recent posts