728x90
반응형
SMALL

파이썬에서 지도 데이터를 시각화하고 싶다면, Folium이라는 라이브러리를 사용하면 쉽고 빠르게 지도 위에 데이터를 표현할 수 있습니다. 이 포스트에서는 이러한 멋진 라이브러리에 대해 소개하고, 기본적인 사용법인을 알아봅니다.

  1. Folium 이란?

Folium은 Leaflet.js 기반의 파이썬 라이브러리로, 동적 지도 시각화를 지원합니다. 지도 위에 데이터를 표시하고, 마커, 원, 선, 등 다양한 형태로 데이터를 나타낼 수 있습니다. 또한, 지도의 스타일을 쉽게 변경할 수 있고, GeoJSON과 TopoJSON 같은 공간 데이터 포맷을 지원합니다.

   2. 설치 및 사용 방법

Folium 설치는 간단하게 다음과 같이 패키지 관리자를 이용하여 설치할 수 있습니다.

 
pip install folium

Folium을 사용하여 지도를 생성하고, 마커를 추가하는 기본적인 예제입니다.

python
import folium

# 지도 생성(center는 중심 좌표, zoom_start는 초기 확대 비율)
map = folium.Map(location=[37.565711, 126.978090], zoom_start=12)

# 마커 생성 (위도, 경도를 입력하고, popup에 표시될 설명을 추가)
marker = folium.Marker([37.565711, 126.978090], popup='덕수궁')

# 마커를 지도에 추가
marker.add_to(map)

# 지도를 HTML 파일로 저장
map.save('example_map.html')

위 예제에서는 덕수궁을 지도 중앙에 위치시키고, 마커를 생성한 뒤, 이를 지도에 추가하고 있습니다. 지도를 원하는 HTML 파일로 저장하면 완료입니다!

   3. Folium 문서 및 참고 자료

Folium이 처음이라면, 공식 문서를 참조하여 다양한 기능과 사용법을 확인할 수 있습니다. 공식 문서에는 예제들과 함께 사용법이 자세하게 설명되어 있어, 초보자도 쉽게 이해할 수 있습니다.

지도 데이터를 다루는 일이 있으면 꼭 사용해보시길 추천드립니다.

728x90
반응형
LIST
728x90
반응형
SMALL

워드클라우드는 텍스트 데이터에서 단어의 빈도수를 시각화하는 독특한 방법입니다. 이번 포스트에서는 파이썬 워드클라우드 라이브러리를 사용하여 워드클라우드를 생성하는 방법에 대해 살펴봅니다.

  1. 워드클라우드 라이브러리 설치

파이썬에서 워드클라우드를 생성하려면 아래 명령을 사용하여 필요한 패키지를 설치해야 합니다.

 
pip install wordcloud
  1. 필요한 라이브러리 불러오기

아래 코드는 워드클라우드 생성에 필요한 라이브러리들을 불러옵니다.

python
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
  1. 텍스트 데이터 처리하기

데이터 준비가 끝났다면 워드클라우드를 생성하기 전에 텍스트 데이터를 처리해야 합니다. 예를 들면, 텍스트에서 특수문자를 제거하거나 불용어를 삭제하는 등의 작업을 수행할 수 있습니다.

python
text = """예제 텍스트 데이터"""
stopwords = set(STOPWORDS)
processed_text = ' '.join([word for word in text.split() if word.lower() not in stopwords])
  1. 워드클라우드 설정 및 생성

아래 코드에서는 워드클라우드의 옵션을 설정하고 생성할 예정입니다. 여기에서는 빈도수, 색상, 크기, 위치 등을 지정할 수 있습니다.

python
wordcloud = WordCloud(
    background_color='white', max_words=100, width=800, height=800
).generate(processed_text)
  1. 워드클라우드 시각화하기

마지막으로 matplotlib를 사용하여 워드클라우드를 시각화합니다.

python
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.savefig('wordcloud.png')
plt.show()

이렇게 간단한 코드 몇 줄만으로 파이썬의 워드클라우드 라이브러리를 사용해 워드클라우드를 만들고 시각화할 수 있습니다. 이를 통해 텍스트 데이터의 패턴을 직관적으로 파악할 수 있으며 다양한 형태의 데이터를 분석하는 데 도움이 됩니다.

728x90
반응형
LIST
728x90
반응형
SMALL

자연어 처리의 기본 개념과 Python을 이용한 한국어 텍스트 분석 라이브러리인 'KoNLPy'를 사용한 예제들을 소개합니다.

  1. 자연어 처리(Natural Language Processing) 자연어 처리(NLP)란 일상에서 사용하는 자연 언어에 대한 컴퓨터의 이해와 처리를 목표로 하는 과학입니다. 컴퓨터는 자연어를 직접 이해할 수 없기 때문에 NLP에서는 자연어의 의미 분석해 컴퓨터가 처리할 수 있도록 변환합니다.
  2. 토크나이징(Tokenizing) 토크나이징은 문장을 의미 있는 가장 작은 단위인 토큰으로 나누는 과정입니다. 토크나이징의 성능은 어떻게 토크나이징을 수행하는지에 따라 차이가 날 수 있습니다.
  3. 형태소 분석(Morphological Analysis형태소 분석은 자연어 문장을 형태소라는 최소 의미 단위로 분할하고 각 형태소의 품사를 판별 과정입니다. 한국어 형태소 분석 라이브러리로는 'KoNLPy'가 있습니다.
  4. KoNLPy 활용 KoNLPy는 기본적인 한국어 자연어 처리를 위한 파이썬 라이브러리로, 다양한 형태소 분석기를 제공합니다 (Hannanum, Kkma, Komoran, OKT 등). 아래 예제는 KoNLPy를 사용한 텍스트 분석을 보여줍니다.
python
from konlpy.tag import Okt
okt = Okt()
text = '아버지가 방에 들어가신다okt.pos(text)

위 코드는 아버지가 방에 들어가신다 라는 문장의 형태소를 분석하고 출력하는 예제입니다. 결과는 아래와 같습니다.

[('아버지', 'Noun'), ('가', 'Josa'), ('방', 'Noun'), ('에', 'Josa'), ('들어가신다', 'Verb')]

728x90
반응형
LIST
728x90
반응형
SMALL

Matplotlib은 Matlab과 비슷한 명령어 스타일로 동작하는 함수의 모음으로 파이썬 기반 시각화 라이브러리입니다. pandas와 호환성이 높아 연동이 용이하지만, 한글 지원이 완벽하지 않다는 단점이 있습니다.

Matplotlib로 간단한 그래프 그리기

python
import matplotlib.pyplot as plt

plt.plot([1,2,3,4])
plt.show()

python
plt.plot([1,2,3,4], [1,4,10,15])
plt.show()

python
import numpy as np

data = np.arange(1, 100)
plt.plot(data)
plt.show()

다수 그래프 그리기

python
data1 = np.arange(1, 50)
plt.subplot(2, 1, 1)
plt.plot(data1)

data2 = np.arange(50, 100)
plt.subplot(2, 1, 2)
plt.plot(data2)

plt.show()
python
data1 = np.arange(0, 100)
plt.subplot(131)
plt.plot(data1)

data2 = np.arange(0, 100)
plt.subplot(132)
plt.plot(data2)

data3 = np.arange(0, 100)
plt.subplot(133)
plt.plot(data3)

plt.show()

Matplotlib 스타일 옵션

Matplotlib를 사용한 시각화를 더욱 예쁘고 효과적으로 꾸미기 위해서는 스타일 옵션을 사용할 수 있습니다. 이를 위해서는 먼저 Colab에 나눔체를 설치한 후 아래 코드를 실행해야 합니다.

python
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
python
import matplotlib.pyplot as plt

plt.rc('font', family = 'NanumBarunGothic') # 나눔바른고딕 폰트 사용
plt.figure(figsize=(6, 8)) # 그래프 크기 지정
plt.plot([1,2,3], [1,2,3])
plt.plot([1,2,3], [2,4,6])

plt.title('타이틀', fontsize=30)
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

.show()
python
plt.figure(figsize=(15, 10))


plt.title('마커설정', fontsize=30)
plt.plot(np.arange(10), np.arange(10), color='b', marker='o', linestyle='')
plt.plot(np.arange(10), np.arange(10)*2, color='r', marker='v', linestyle='--')
plt.plot(np.arange(10), np.arange(10)*3, color='y', marker='*', linestyle='-.')


plt.legend(['10', '10*2', '10*3'], fontsize=15, loc='lower right', ncol=3) #
plt.xlim(0, 12)
plt.ylim(0, 30)


plt.xticks(rotation=30)
plt.yticks(rotation=50)
plt.show()

Matplotlib을 이용한 바 차트 그리기

Matplotlib를 이용하여 바 차트를 그는 방법은 다음과 같습니다.

python
x = ['파이썬', '데이터분석', '머신러닝', '딥러닝', '컴퓨터비전', '자연어처리']
y = [ 95, 80, 65, 30, , 10]

plt.figure(figsize=(8, 5))
plt.bar(x, y, align='center',alpha=0.7, color='#e35f62')
plt.title('AI 성적표', fontsize=25)

plt.ylabel('점수')
plt.show()
 
728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요. 이번 포스팅에서는 데이터프레임에서 등수 매기기와 날짜 타입 다루기, apply와 map 메소드에 대해서 다루고, 마지막으로 One Hot Encoding 방법을 알아보겠습니다.

데이터프레임에서 등수 매기기

  • pandas.rank(): 데이터 프레임에서 등수를 매기는 함수입니다. ascending 옵션을 이용해서 오름차순이나 내림차순으로 등수를 매길 수 있습니다. 순위를 매긴 뒤, astype() 메소드를 이용해서 int 형으로 변경해주어야 합니다.
python
# 브랜드평판지수를 기준으로 등수 매기기
df1['브랜드순위'] = df1['브랜드평판지수'].rank(ascending=False)
df1['브랜드순위'] = df1['브랜드순위'].astype('int')

날짜 타입 다루기

  • pandas.to_datetime(): 데이터 프레임에서 날짜를 처리하기 위한 함수입니다. 기존의 object 타입에서 datetime 타입으로 변환합니다. 이후, dt 속성을 이용하여 각 날짜 변수를 사용할 수 있습니다.
python
# 생년월일을 datetime 타입으로 변환
df['생년월일'] = pd.to_datetime(df['생년월일'])

# dt 속성을 이용해 생년월일의 년, 월, 일, 요일, 해당 연도의 몇번째 주인지 등을 알아볼 수 있습니다.
df['생년월일'].dt.year
df['생년월일'].dt.month
df['생년월일'].dt.day
df['생년월일'].dt.dayofweek
df['생년월일'].dt.isocalendar().week

apply 메소드

  • apply() 메소드는 특정 함수를 실행시켜 결과를 반환하는 함수입니다. DataFrame 혹은 Series에서 apply() 메소드를 호출하면, 첫 번째 인수로 전달된 함수를 시리즈의 각 요소에 적용하여 반환합니다. 이 때 input으로는 람다 함수 혹은 일반 함수가 들어갈 수 있습니다.
python
# 성별을 1, 0으로 변환하는 일반 함수
def male_or_female(x):
    if x =='남자':
        return 1
    elif x == '여자':
        return 0

# apply를 이용해 성별 데이터 변환하기
df['new성별'] = df['성별'].apply(male_or_female)

# apply와 람다 함수를 이용한 코드 (한 줄로 작성 가능)
df['new성별'] = df['성별'].apply(lambda x: 1 if x == '남자' else 0)

map 메소드

  • map() 메소드 역시 apply와 비슷한 함수입니다. 입력값이 Series일 때, 해당 Series안의 요소들을 인자로 전달하는 함수를 적용하여 결과를 출력합니다. map()은 딕셔너리 형태로 각 범주에 대한 처리 방법을 입력할 수 있기 때문에 매우 간편합니다.
python
# 딕셔너리를 활용한 map() 예시
blood_map = { "A": 0, 'B': 1, 'AB':2, "O": 3}
df['혈액형_code'] = df['혈액형'].map(blood_map)

One Hot Encoding

  • One Hot Encoding(원 핫 인코딩)은 데이터프레임의 카테고리 변수를 더미 변수(Dummy Variable)로 변환하는 방법입니다. 이 방법은 머신닝 알고리즘에서 범주형 변수를 처리하기 위해 사용됩니다.
python
# pd.get_dummies()를 이용한 one hot encoding 기능
# 분류해야 할 범위를 선택하고 해당 범위를 인자로 전달하면 원하는 더미 인코딩 값을 생성해줍니다.
.get_dummies(df['혈액형_code'])

# columns 인자를 이용해서 새 칼럼 이름을 지정하여 더미 인코딩 값을 가져올 수 있습니다.
df_one_hot = pd.get_dummies(df, columns=['혈액형_code'])

이번 포스팅에서는 데이터프레임에서수 매기기, 날짜 타입 다루기, apply와 map 메소드, 그리고 One Hot Encoding 방법에 대해서 다뤄봤습니다.

728x90
반응형
LIST
728x90
반응형
SMALL
  • pandas.concat(): concat()은 데이터를 합치는데 사용됩니다. axis=0은 위 아래로(세로로), axis=1은 왼쪽 오른쪽으로(가로로) 합치는 방법을 의미합니다.
python
# DataFrame 불러오기
df1 = pd.read_csv('http://bit.ly/ds-korean-idol')
df2 = pd.read_csv('https://bit.ly/ds-korean-idol-2')

# 두 데이터 프레임을 합치기
pd.concat([df1, df2], axis=0)

# 합친 데이터프레임의 index를 새로 설정
df_concat = pd.concat([df1, df2], sort=False)
df_concat.reset_index(drop=True)

# 두 개의 데이터프레임을 가로 방향으로 합치기
pd.concat([df1, df2], axis=1)

# 한 쪽 데이터프레임에서 일부 데이터 삭제 후, 다른 데이터 프레임과 결합하기
df3 = df2.drop([3, 5])
pd.concat([df1, df3], axis=1)

# 특정 값을 기준으로 데이터프레임 병합하기
merged_df = pd.merge(df1, df3, on='이름', how='left')
  • pandas.merge(): merge()는 특정 키(값이 서로 유일한 id)값을 기준으로 데이터를 합치는 메소드입니다. how 옵션을 이용해서 병합 기준을 정할 수 있습니다.
python
# 이름으로 기존 데이터프레임과 새 데이터 프레임을 병합하는 예시
df_right = df2.drop([1,3,5,7,9], axis=0)
df_right.reset_index(drop=True)
pd.merge(df1, df_right, on='이름', how='left')

# 새로운 데이터프레임 정보 추가 후, 병합하기
df_right = df_right.append({'이름': '김사과', '연봉': 5000, '가족수': 5}, ignore_index=True)
pd.merge(df1, df_right, on='이름', how='right')

# 두개 데이터프레임에서 컬럼명이 다를 경우, 오른쪽 데이터프레임 컬럼명 변경하며 병합하기
df_right.columns = ['성함', '연봉', '가족수']
pd.merge(df1, df_right, left_on='이름', right_on='성함', how='right')

이번 포스팅에서는 pandas를 이용하여 데이터프레임을 결합하는 방법에 대해서 알아보았습니다.

728x90
반응형
LIST

+ Recent posts