기초 프로젝트 과정에서 새삼 알게된 것들
Folium
Folium은 파이썬에서 지리 데이터를 시각화하기 위한 라이브러리입니다. 이 라이브러리는 Leaflet.js를 기반으로 하며, 사용자가 지도를 쉽게 생성하고, 다양한 레이어와 마커를 추가할 수 있도록 도와줍니다. Folium은 특히 지리적 데이터를 시각화하거나 웹 기반의 지도 애플리케이션을 만들 때 유용합니다.
주요 기능
- 지도 생성: Folium을 사용하면 다양한 유형의 지도를 쉽게 생성할 수 있습니다. 기본적으로 OpenStreetMap을 사용하지만, 다른 타일 서버를 지정할 수도 있습니다.
- 마커 추가: 지도에 특정 위치를 표시하기 위해 마커를 추가할 수 있습니다. 마커에는 팝업을 추가하여 추가 정보를 제공할 수 있습니다.
- 다양한 레이어: 여러 종류의 레이어를 추가하여 데이터 시각화를 풍부하게 만들 수 있습니다. 예를 들어, Choropleth(지역별 색상 맵) 레이어를 추가하여 특정 데이터를 시각화할 수 있습니다.
- 상호작용: Folium은 사용자가 지도를 클릭하거나 확대/축소할 수 있는 상호작용 기능을 제공합니다.
- HTML 파일로 저장: Folium으로 생성한 지도를 HTML 파일로 저장하여 웹에서 쉽게 공유할 수 있습니다.
설치 방법
Folium은 pip를 사용하여 쉽게 설치할 수 있습니다:
pip install folium
기본 사용 예제
아래는 Folium을 사용하여 기본 지도를 생성하는 예제입니다.
import folium
# 기본 지도 생성 (위도, 경도 지정)
m = folium.Map(location=[37.5665, 126.978], zoom_start=12) # 서울 중심
# 마커 추가
folium.Marker(
location=[37.5665, 126.978],
popup='서울',
icon=folium.Icon(color='blue')
).add_to(m)
# HTML 파일로 저장
m.save('map.html')
# 지도 출력 (Jupyter Notebook에서)
m
이 코드를 실행하면 서울을 중심으로 한 기본 지도가 생성되고, 마커가 추가된 지도는 map.html 파일로 저장됩니다.
Jupyter Notebook 환경에서는 마지막 줄의 m을 통해 지도를 직접 확인할 수도 있습니다.
Folium은 데이터 분석 및 시각화 작업에 매우 유용하며, 지리적 정보를 효과적으로 표현하는 데 강력한 도구입니다.
Pandas)행, 열 크기를 확인하기
Pandas에서 .shape 속성은 DataFrame이나 Series의 크기를 확인하는 데 사용됩니다.
이 속성은 데이터의 행(row)과 열(column)의 개수를 튜플 형식으로 반환합니다.
사용법
- DataFrame의 경우: .shape 속성을 사용하면 (행의 수, 열의 수)를 반환합니다.
- Series의 경우: .shape는 (데이터의 수,) 형태로 반환됩니다.
예제
아래는 Pandas DataFrame의 .shape 속성을 사용하는 간단한 예제입니다.
import pandas as pd
# 예시 데이터 생성
data = {
'이름': ['홍길동', '이몽룡', '성춘향'],
'나이': [25, 30, 22],
'도시': ['서울', '부산', '대구']
}
# DataFrame 생성
df = pd.DataFrame(data)
# DataFrame의 행, 열 크기 확인
print(df.shape)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다:
(3, 3)
이 결과는 DataFrame이 3개의 행과 3개의 열을 가지고 있음을 나타냅니다.
요약
- .shape: DataFrame의 행과 열의 개수를 확인하는 속성.
- 결과: (행의 수, 열의 수) 형식으로 반환됨.
- 유용성: 데이터의 크기를 빠르게 파악할 수 있어 데이터 분석 및 전처리 과정에서 유용합니다.
이와 같이 .shape 속성을 이용하면 데이터의 구조를 쉽게 이해하고, 후속 작업을 계획하는 데 도움이 됩니다.
Matplotlib에서 한글 글꼴 적용하기(주피터 노트북, Jupyter Notebook 환경)
그래프 등 시각화를 할 때, 한글 글꼴을 적용하기 위해서는
import matplotlib.font_manager as fm
font_list = fm.findSystemFonts(fontpaths = None, fontext = 'ttf')
font_list[:]
위의 코드를 실행을 시키면 저장되어 있는 폰트 목록이 영어 이름으로 쭉 나옵니다.
출력된 폰트 이름 목록에서 쓰고싶은 폰트를 골라서 복사해둡니다.
저는 'HangeulNuri'가 눈에 띄어 그걸로 복사해뒀습니다.
plt.rc('font', family='fontname')
복사해둔 폰트 이름을 family='fontname'에서 빨간 부분에 대체합니다.
저의 경우는
plt.rc('font', family='HangeulNuri')
이렇게 됩니다.
그럼 시각화 시에
짠
Payment_type 안에 무슨 값들이 있는지 알아보고 그 값에 해당하는 개수 count 하기
import pandas as pd
# 예시 데이터 생성
data = {
'payment_type': ['카드', '바우쳐', '현금', '볼레토', '카드', '바우쳐', '현금', '카드'],
'amount': [10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000]
}
df = pd.DataFrame(data)
# 고유한 객체와 그 수 카운트
payment_counts = df['payment_type'].value_counts()
# 고유한 객체의 수
num_unique_objects = payment_counts.shape[0]
# 결과 출력
print("고유한 객체의 수:", num_unique_objects)
print("각 객체의 수:")
print(payment_counts)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
고유한 객체의 수: 4
각 객체의 수:
카드 3
바우쳐 2
현금 2
볼레토 1
Name: payment_type, dtype: int64
각기 다른 데이터셋 merge하기
olist_order_payments_dataset 과 olist_orders_dataset 이라는 csv 파일이 order_id로 같은 열을 공유하고 있는 상황에서 pandas 라이브러리를 사용하여 두 데이터프레임을 읽고, 주문 ID를 기준으로 교집합을 찾아 새로운 데이터프레임을 생성합니다.
전체 코드 예시
import pandas as pd
# CSV 파일 읽기
payments_df = pd.read_csv('olist_order_payments_dataset.csv')
orders_df = pd.read_csv('olist_orders_dataset.csv')
# 두 데이터프레임의 교집합을 주문 ID를 기준으로 찾기
merged_df = pd.merge(payments_df, orders_df, on='order_id', how='inner')
# 결과 출력
print("교집합 데이터프레임:")
print(merged_df)
# 교집합 데이터프레임을 CSV로 저장 (선택 사항)
merged_df.to_csv('merged_orders_payments.csv', index=False)
코드 설명
- CSV 파일 읽기: pd.read_csv()를 사용하여 두 개의 CSV 파일을 각각 DataFrame으로 읽어옵니다.
- 교집합 찾기: pd.merge() 함수를 사용하여 두 DataFrame을 order_id 열을 기준으로 내부 조인(inner join)합니다. 이 과정에서 교집합을 찾습니다.
- 결과 출력: 교집합 결과를 출력합니다.
- CSV로 저장 (선택 사항): 생성된 교집합 DataFrame을 새로운 CSV 파일로 저장할 수 있습니다.
이 코드를 사용하여 olist_order_payments_dataset.csv와 olist_orders_dataset.csv의 교집합 데이터를 쉽게 정리할 수 있습니다. 파일 경로는 실제 파일의 위치에 맞게 수정해야 합니다.