파이썬 행과 열 뒤집기 

 

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

Elastic Search 에서 document를 대량으로 insert 하는 방법

 

 

from elasticsearch import Elasticsearch
from elasticsearch import helpers

#  ES 연결 
es = Elasticsearch([{'host': '192.168.xx.xxx', 'port': 9905}])

docs = [[123, 'aa', 'bb', 'cc'],
        [456, 'AA', 'BB', 'CC']]

for cnt in range(2):
    docs.append({
        '_index': 'id_and_values_index',
        '_type': '_doc',
        '_source': {
            'm_val': docs[cnt][0],
            'time': docs[cnt][1],
            'up_time': docs[cnt][2],
            'm_id': docs[cnt][3],
        }
    })

helpers.bulk(es, docs)
728x90

데이터프레임 data_f 을 다뤄본다 

 

import pandas as pd

data_f = pd.DataFrame()
data_f.columns = ['aa', 'bb', 'cc']

컬럼은 나중에 지정해도 된다 

Dataframe이 아니라, DataFrame 인 것을 유의 


행 단위로 순회  (for 문 안에서)

 

iloc[]으로 접근한다 

for ii in range(total_df_len):
	data_f.iloc[ii]
    

하나의 row가 'pandas.core.series.Series' 타입으로 리턴된다 

 

 

row 중에서도 특정 칼럼만 지정하여 순회 

for ii in range(total_df_len):
	data_f.iloc[ii]['m_id']
    

하나의 row가 'numpy.ndarray' 타입으로 리턴된다. 

 

 


 

열을 선택 

 

loc으로 접근 

행 인덱스 번호 와 열의 이름 간에 콤마를 이용하여 구분하는 것이 특이점

for ii in range(total_df_len):
    print(data_f.loc[ii, 'time'])
    

 

반복문을 순회하지 않고, 한번에 'time' 칼럼의 전체데이터를 가져오려면 : 를 이용한다 

print(data_f.loc[:, 'time'])

 

728x90

+ Recent posts