목록Coding/Machine Learning & Python (21)
호기심 많은 분석가

목차Python에서 구글 스프레드시트 연동하기구글 스프레드시트를 활용해 데이터 관리를 하거나 대시보드를 운영하는 경우 DB의 데이터를 python으로 전처리한 뒤 자동으로 업데이트하는 등 업무를 하다 보면 Python에서 구글 스프레드시트 연동해야 하는 니즈가 존재합니다. 이번 포스팅에서는 어떻게 Python에서 구글 스프레드시트를 연동하는지 예시를 통해 알아보고자 합니다.필요 라이브러리 불러오기 및 설치# !pip install pydata_google_auth# !pip install gspread# !pip install gspread_dataframeimport pydata_google_authimport gspreadfrom gspread_dataframe import set_with_dataf..

구내식당 식수 인원 예측 AI 경진대회 - DACON [배경] 지금까지는 단순한 시계열 추세와 담당자의 직관적 경험에 의존하여한국토지주택공사 구내식당 식수 인원을 예측하였으나, 빅데이터 분석으로 얻어지는 보다 정확도 높은 예측을 통해 dacon.io 🎁 개요 [2021.06.03 ~ 2021.07.23] 신용도 예측 대회가 끝나고 다음 대회를 물색하던 중 굉장히 흥미로운 대회가 개최되었습니다. 한국토지주택공사, 즉 LH의 구내식당 식수 인원을 예측하는 대회였습니다. 과거 기숙사에 살 때 식수 인원이 제대로 예측되지 않아서 식사의 질도 떨어지고, 어떤 날은 늦게 가면 밥이 없기도 했던 기억이 있습니다. 이러한 불편함을 해소하는 알고리즘이라니, 굉장히 매력적이었고 도메인이 사람의 심리이니만큼 자신도 있어 참..

우리는 보통 DataFrame을 merge할 때 pandas의 merge를 쓰곤한다. 하지만 Series에는 merge가 적용되지 않는 다! 그래서 pd.concat을 이용하곤 하는데, Series의 내장 함수인 combine을 사용해보자. 위와 같은 10-16시까지의 값들만 존재하는 Series가 있다. 이 데이터를 24시간으로 시각화 시키기 위해 나머지 HOUR에는 0을 넣으려고 한다. 이때 어떻게 해줄 수 있을까? 우선 0-24시까지 0뿐인 Series를 생성해준다. zero_series = pd.Series(index=range(24), data=[0]*24) zero_series 이제 우리는 두 Series를 combine을 통해 합쳐줄 거다. Series1.combine(Series2, max..

오늘은 친구의 흥미로운 질문을 다뤄보고자 한다. 이 친구의 사고 방식은 참 배울 점이 많은데, DataFrame을 groupby 시켰을 때는 list의 형태인지, index의 type은 무엇인지, 작업하면서 한번도 의문을 가져본 적 없는 것들을 물어봐서 허를 찔린다. 나도 이런 의문을 항상 품으면서 살아야할텐데, 오늘은 그 중 새로 알게 된 사실에 대해 이야기 해보고자 한다. Intersection 바로 intersection인데, 해석하면 교집합으로 두 그룹 사이에 동시에 존재하는 원소들을 의미한다. Python에서 이 친구를 사용하기 위해서는 유의해야할 점이 한 가지 존재하는데, list형태에서는 작동하지 않아 반드시 set의 형태로 변환해줘야한다는 점이다. 아래와 같이 실행되는 것을 확인할 수 있다..

목차 우리는 머신러닝 기법을 사용할 때 회귀 관련 모델을 사용하긴 한다. 가장 기본적인 선형 회귀(Linear Regression) 모델을 많이 사용할 텐데, 데이터의 분포가 직선이 아니라 곡선 형태를 띠고 있을 경우 오차가 크게 나타날 수 있다. 그럴 때 사용할 수 있는 다항 회귀를 헷갈릴 수 있는 다중 회귀와 비교하며 알아보자. 회귀 분석 (Regression Analysis) 그게 앞서 회귀 분석부터 알아보자 정의 회귀 분석이란, 관찰된 연속형 변수들에 대해 두 변수 사이의 모형을 구한 뒤 적합도를 측정해내는 분석 방법 회귀 분석은 시간에 따라 변화하는 데이터나, 어떤 영향, 가설적 실험, 인과 관계의 모델링등의 통계적 예측에 사용 회귀 분석은 하나의 종속변수와 하나의 독립변수 사이의 관계를 분석하..

나는 Pandas에서 기존의 열에 조건을 주어 새로운 열을 생성할 때 apply 함수를 주로 쓰곤 했다. 속도도 빠르고 코드도 짧기에, 근데 map과 applymap 함수도 있다고 들었는데 과연 이 친구들은 어디에 사용을 할까? map함수 map함수는 간단하다. DataFrame이 아닌 Series 타입에만 사용을 한다. 아래와 같은 방식으로 사용할 수 있다. 하지만 Series에 대해서는 map만 가능한가? apply도 같은 방식으로 사용이 가능하다. 그래서 apply를 선호. df['new_col'] = df['col'].map(lambda x : x+1) apply함수 대망의 apply함수다. DataFrame에서 여러 개의 컬럼을 사용하고 싶을 때는 apply함수를 사용해준다 df['new_col..

리스트 안의 리스트 중 unique 한 것만 남겨두기 위해서 set을 적용해 주었더니 아래와 같은 Error가 발생하였다. 무엇이 문제일까? TypeError: unhashable type: 'list' 리스트 안의 str 같은 원소들의 경우 별문제가 없다. 그렇다면 list가 unhashable 하다는 것이 무슨 의미인가? unhashable type: list hashable hashable이라는 것은 어떤 데이터를 hash 함수를 이용해서 hash값으로 변환할 수 있다는 것을 의미 hash는 어떤 특정 데이터에 대해서, 매우 유니크한 하나의 값을 가지게 된다. 그런데 원래 데이터가 변한다면, 이 데이터가 변함에 따라서 해당 hash 값도 변하게 될 것 따라서 hashable 하기 위해서는 immut..

되게 긴 for문을 실행시켜둘 경우 대체 이게 얼마나 진행된 건가... 언제 끝나나.. 하고 기다리곤 했다. 진행 상태를 보여주면서 이 궁금증을 해소시켜줄 tqdm이라는 라이브러리를 만나보도록 하자. 설치 어렵지 않다. 아래 구문을 통해 설치 가능 pip install tqdm 사용방법 tqdm을 import 한 뒤 for문의 range 앞에 붙여주면 간단하게 사용할 수 있다. +참고. print() 구문에서 end에 \r를 사용해주면 다음 출력 줄이 현재 줄에서 실행되는 것으로, 값이 덮어써진다. 이제까지 이 좋은 것을 몰라서 start_time과 end_time 비교해가면서, i 출력하곤 했지... 이 글을 본 여러분은 그 헛된 시간을 아낄 수 있을 겁니다. 화이팅해요! :)

로그는 수학함수의 일종으로, 어떤 수를 나타내기 위해 고정된 밑을 몇 번 곱하여야 하는지 나타내는 함수이다. 지수 함수의 역연산(Inverse operation)이다. 데이터 전처리 과정에서 너무 큰 수를 작게 처리해주고자 로그 함수를 사용하곤 하는데, 밑이 자연로그e 혹은 10, 또는 2 이냐에 따라 np.log(x), np.log10(x), np.log2(x)를 구분해서 사용합니다. 그렇다면 이번 포스팅의 핵심, np.log1p(x)는 도대체 무엇일까요? 로그함수의 경우 x=0을 넣어주면 y는 −∞의 값을 가집니다. 이럴 때 사용하는 방법이 x+1을 해줘서 0을 1로 바꿔주는 것입니다. np.log1p() 함수가 바로 그 역할을 해줍니다. 그렇게 되면 y 값이 −∞에서 0을 바뀌게 됩니다. np.lo..

for문과 while문의 차이가 뭘까? for문과 while문 모두 반복문으로 쓰이지만 조금의 차이점은 존재한다. for문 사용 for문의 경우 주로 반복 횟수가 정해진 경우 배열과 함께 사용한다. sum = 0 for i in range(10) : sum += i print(sum) while문 사용 while문은 무한루프나 특정 조건에 만족할 때까지 반복해서 사용한다. sum = 0 while True : sum += 1 if sum==10 : break for문과 while문은 서로를 표현할 수 있다고 한다. 그렇다면 왜 2개로 나누어져 있을까? 바로 코드의 효율성때문이다. 위의 두 경우 서로 표현하려고 하면 코드가 길어지기 때문에 간결히 표현할 수 있도록 나누어 사용하자. for문 무한루프 이 포..