공공데이터 같은 api를 통해 데이터를 가져온 후 csv 를 저장했을 때 한글이 깨지는 상황이 발생합니다. 이건 컴퓨터 환경에 따라 약간씩 달라질 수도 있어서 윈도우 기준으로 설명하겠습니다. 아마 다른데는 잘 될 거에요 ㅎㅎ 파이썬에서 csv를 저장하면 인코딩에 대한 얘기를 하지 않으면 기본적으로 utf-8로 인식하고 저장합니다. 즉, 디폴트 값이 utf-8입니다. 그런데 utf-8로 csv를 저장하면 한글이 깨지는 문제가 발생합니다. 왜냐하면 특히 공공데이터인 경우는 cp949나 euc-kr 방식으로 인코딩이 되어 있기 때문입니다. 그래서 공공데이터에서 csv를 받아와 파이썬으로 불러들이면 당연히 한글이 깨지게 됩니다. 이를 해결하기 위해서는 cp949나 euc-kr로 바꿔주어야 합니다. 거꾸로 파이썬..
파이썬에서 공공데이터나 외부에서 크롤링을 json 형태로 가져오게 되면 dict형식인데 string으로 가져올 때가 있습니다. string 자체로는 데이터 처리를 하기가 굉장히 난감합니다. 더군다나 dict형식으로 되어있어서 더더욱 어렵습니다. string을 완벽한 dict형식으로 바꾸어야 판다스에서 데이터 전처리를 할 수 있게 됩니다. 사실 json으로 바꾸는 거긴 합니다 json이라 하면 잘 모를수도 있으니깐 일단 dict형식이라고 하겠습니다 json 모듈을 이용해 dict으로 변환합니다. json 활용 dict_string = '{"a":"b","a2":"c"}' type(dict_string) to_json = json.loads(dict_string) type(to_json) 이런식으로 바꾸고 ..
heatmap 글을 쓰다보니 양이 많아 포스팅을 새로 합니다. 데이터는 heatmap 그리기 포스팅에서 했던 예제를 그대로 쓰겠습니다. import pandas as pd import matplotlib.pyplot as plt import numpy as np data = np.random.randn(10,10) columns = ['X' + str(x).zfill(1) for x in range(10)] df = pd.DataFrame(data,columns=columns) df.index = ['Y' + str(x).zfill(1) for x in range(10)] matplotlib에서 제공되는 컬러맵 matplotlib에는 다양한 색상군이 있는데 아래 링크에서 볼 수 있습니다. https://..
matplotlib를 이용한 heat map 그리는 방법입니다. 데이터는 임의로 10x10 행렬로 만들어서 데이터프레임으로 만들었습니다. import pandas as pd import matplotlib.pyplot as plt import numpy as np data = np.random.randn(10,10) columns = ['X' + str(x).zfill(1) for x in range(10)] df = pd.DataFrame(data,columns=columns) df.index = ['Y' + str(x).zfill(1) for x in range(10)] heatmap 그리기 maplotlib에서 heatmap 그리는 방법은 2가지가 있습니다. imshow와 pcolor를 이용한 방법..
pandas로만 box plot, area plot, scatter plot을 그려보겠습니다. 이전 포스팅에서는 막대그래프류인 bar,hist,density에 대해 그려보았었는데 이번 포스팅에서는 pandas로 그릴 수 있는 나머지 그래프에 대해 살펴보겠습니다. box plot box plot은 사분위범위를 기준으로 이상치가 어디에 있는지 한눈에 볼 수 있는 그래프입니다. import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,5)) df.boxplot(return_type='axes') 여러 컬럼이 있는 penguins이라는 데이터를 가져와 boxplot을 만들어보겠습니다. import seaborn as sns pengu..
matplotlib에서 특징이 있는 그래프를 그리곤 했었는데 pandas만으로도 여러가지 그래프를 그릴 수 있습니다. 이번 포스팅에서 다룰 그래프는 막대 그래프 종류만으로 구성해보았습니다. bar, histogram, density 세가지에 대해서 다루어 보겠습니다. bar plot 시리즈(Series) -0.5~0.5 사이의 랜덤한 숫자 10개를 bar plot으로 그려보겠습니다. plot 파라미터로 kind='bar' 를 입력합니다. np.random.seed(222) s = pd.Series(np.random.rand(10)-0.5) s.plot(kind='bar') 판다스에서 하는 것이기 때문에 시리즈나 데이터프레임만 가능합니다. numpy나 리스트는 matplotlib로 할 수 있습니다. 데이터..
판다스만으로 그래프를 그리는 방법입니다. 보통 matplotlib나 pylab을 import 해서 그래프를 그리곤 했는데 pandas만으로도 그릴 수 있습니다. 왠만한건 다 되는 것 같습니다. 기본 그래프 그리기 데이터가 시리즈나 데이터프레임 모양이면 plot() 메쏘드를 이용해 그래프를 생성할 수 있습니다. 시리즈(Series) np.random.seed(222) random_num = pd.Series(np.random.randn(1096),index=pd.date_range('2020-01-01','2022-12-31')) random_walk = random_num.cumsum() random_walk.plot() 데이터프레임(DataFrame) 위에 비슷하게 하되 컬럼을 하나 더 추가해 데이터프..
판다스에는 구간 나누는 기능이 있습니다. 그래서 카테고리를 만들 때 굉장히 편합니다. 물론 파이썬 자체에서도 가능하지만 제 생각에는 판다스로 하는게 편리하고 한눈에 볼 수 있어서 좋은 것 같습니다. 구간의 길이를 같게 할 것인지 구간안의 갯수를 같게 할 것인지 정하는 방법에 따라 구간을 나눌 수 있는데 판다스에서는 이 두개를 모두 할 수 있습니다. 구간 (-1,1) 사이의 숫자를 가지고 구간 나누기를 해보겠습니다. import pandas as pd import numpy as np np.random.seed(122) normal = np.random.normal(size=10000) normal 같은 길이로 구간 나누기(pd.cut) pd.cut을 이용하면 같은 길이로 구간을 나눌 수 있습니다. 값이 ..
apply를 이용하면 그룹화한 데이터프레임에 lambda함수를 쓸 수 있었습니다. 그런데 람다함수로 부등식을 적용하게 되면 bool값으로 처리가 될 것이지만 True,False를 알려고 전처리를 하진 않습니다. 실제로 True,False를 반영하여 값이 걸러져 나와주어야 합니다. 그룹화된 데이터프레임을 True, False로 분류하였는데 이를 반영하려면 어떻게 해야할까요? 바로 filter() 를 쓰면 됩니다. 데이터프레임의 group화를 한 상태에서 그룹화된 데이터프레임마다 True와 False로 구분할 수 있는데 이를 데이터프레임에 반영해줍니다. 'Learning Pandas'의 예제를 가져오겠습니다. import pandas as pd import numpy as np df = pd.DataFram..
데이터프레임의 apply로 람다함수를 적용할 수 있다는 것을 이전 포스팅에서 다루어보았는데 transform 메쏘드로 groupby 처리를 한 그룹화된 데이터프레임에 apply 처리를 하겠습니다. 그룹화되지 않은 데이터프레임에서는 apply를 적용을 했지만 그룹화된 데이터프레임에서는 apply와는 다른 것들을 할 수 있습니다. 즉, apply 대체로써 쓰는 것이 아니라 transform 만의 영역이 있습니다. 그 이유는 람다함수의 대상으로 쓰는 x의 단위로 볼 수 있는데 apply의 x는 행이나 열을 가르키고 transform에서의 x는 그룹화된 데이터프레임을 가르킵니다. 행이나 열에서 할 수 있는게 있고 데이터프레임을 대상으로 할 수 있는 게 다르기 때문에transform 만으로 할 수 있는 기능들을 ..
파이썬에서는 판다스로 주로 데이터 전처리를 합니다. 판다스에서 데이터 전처리의 중요한 요소인 재구조화(reshaping) 방법에는 pivot과 stack, unstack이 있고 melt라는 것도 있습니다. 앞선 포스팅에서 pivot,stack, unstack을 다뤘었고 이번 포스팅에서는 자주 쓰이는 재구조화 방법인 melt에 대해 알아보겠습니다. melt은 한번에 보기 편하게 특정 컬럼을 기준으로 특정 값을 정렬한다는 보면 됩니다. id에 해당하는 value_var를 선정해 variable 컬럼에 나열하여 value를 보여주는 형식입니다. 말로 설명하기가 참 어려운데 그림을 참고해주시기 바랍니다. Melt melt는 다음과 같은 파라미터를 가집니다. pd.melt(frame, id_vars=None, v..
정규표현식을 이용한 데이터프레임에서의 특수문자 제거하는 방법입니다. 데이터프레임에 있는 내용에 특수문자와 섞여서 코딩작업을 하기가 어려울 때가 있습니다. 이럴 때 특수문자만 제거를 한다면 작업을 하기 아주 편해질 것입니다. 하지만 특수문자 제거하는 메쏘드는 따로 없기에 정규표현식을 이용해 특수문자를 찾고 제거하는 방식으로 해야합니다. 다행히도 replace는 정규표현식을 인식할 수 있는 파라미터가 있어서 코딩은 그리 복잡하지는 않습니다. 특수문자 제거하기 먼저 아래와 같이 데이터프레임을 보면 특수문자가 있습니다. 데이터프레임은 유튜브 코딩을 쳐서 나오는 처음 페이지의 제목을 크롤링했습니다. df 데이터프레임에 정규표현식을 써야 하기 때문에 해당 항목을 문자열로 바꿔줘야 합니다. 그러기 위해서 데이터프레임..
pivot과 비슷하게 Series, DataFrame을 기준점에 맞게 변경하는 stack, unstack 함수 사용 방법입니다. 보통 한 묶음으로 stack, unstack을 쓰는데 그 이유는 stack은 컬럼을 인덱스로 가져오는 것이고 unstack은 인덱스를 컬럼으로 보내는 역할을 하기 때문입니다. stack,unstack이 pivot와 다른 점이 있다면 특정 순서가 있는 인덱스에 대해서도 쓸 수 있습니다. 설명이 약간 어려운데 예로 직접 하면서 stack,unstack 방법을 살펴보겠습니다. Stack stack은 컬럼을 인덱스로 보내는 역할을 하는데 stack의 뜻을 보면 쌓아올린 서류더미와 같은데 이 의미와 맞추어 보면 판다스 설계자는 인덱스 추가를 쌓아올린다라고 생각하는 것 같습니다. 판다스에..
리스트로 된 원소들을 모두 문자열로 바꾸는 방법입니다. for문으로 할 수도 있지만 파이썬에 내장되어있는 join 함수를 사용하면 좀 더 편리하게 리스트 원소를 하나의 문자열로 변환할 수 있습니다. 리스트 원소가 모두 문자열일 때 리스트 내용을 문자열로 변환하기 위해서는 작은 따옴표.join(변환할 리스트) 로 변환할 리스트를 join함수 안에 넣습니다. 리스트에 있는 걸 나열하는 방식이어서 그냥 하면 띄어쓰기가 안 되서 출력됩니다. example_list = ['john','cash','eric'] convert_string = ''.join(example_list) print(convert_string) 띄어쓰기를 하려면 작은 따옴표를 한칸 띄웁니다. example_list = ['john','cas..
파이썬에서 정규표현식을 썼는데 TypeError : expected string or bytes-like object 라는 오류가 뜨는 경우가 있습니다. 이 오류가 뜨는 이유는 정규표현식은 문자열에서만 가능하기 때문에 그렇습니다. 찾는 대상이 문자열이어야 하는데 그렇지 않다고 오류가 나오는 것입니다. 원인이 명확하니 해결방법도 간단합니다. 대상을 문자열로 바꿔주면 됩니다. 이메일을 찾는 정규표현식으로 예를 들겠습니다. 아래와 같이 코드에는 email 리스트가 안에 2개의 이메일이 있습니다. re_email 로 이메일을 찾는 정규표현식을 만들어 search를 실행하니 에러가 뜰겁니다. 왜냐하면 email은 문자열이 아니기 때문입니다. email = ['a','b','asdf@gmail.com','ewqr@..