| area_category | area_struct | area_map |
| category, struct 1, Apartment 2, Building 3, MyHome 4, BandalgomCoffee |
x,y,ConstructionSite 1,1,0 1,2,0 1,3,0 1,4,0 |
x,y,category,area 1,1,0,0 1,2,0,0 1,3,0,0 1,4,2,0 |
import pandas as pd # 데이터분석도구인 pandas를 pd로 임포트
def load_data(): #데이터를 로드하는 함수
##load csv
map_df = pd.read_csv('area_map.csv')
struct_df = pd.read_csv('area_struct.csv')
category_df = pd.read_csv('area_category.csv')
# struct 곰백 제거 ' struct'=>'struct'
category_df.columns = category_df.columns.str.strip()
return map_df, struct_df, category_df
def merge_data(map_df, struct_df, category_df): #데이터프레임들을 머지
## 병합 && 이름으로 변환
# 구조물 이름 병합 => struct_df 와 category_df를 category기준으로 교집합으로 머지
struct_df = struct_df.merge(category_df, on = 'category', how = 'inner')
del struct_df['category'] # category 열 제거, 필요 없으므로
# map과 병합 => 좌표기준으로, mpa_df와 struct_df 머지 left로 해야함.
# innter로 하면 construct가 아닌 구조물이 전부 없어짐
merged_df = map_df.merge(struct_df, on = ['x','y'], how = 'left')
# area 기준 sort
merged_df = merged_df.sort_values(by = 'area')
return merged_df
def filter_area_one(df):
## area 1만 필터링
return df[df['area'] == 1].copy()
def summarize_by_structure(df):
## (보너스) 구조물 통계 요약
print('\n[구조물 종류별 통계]')
print(df['struct'].value_counts())
def main():
map_df, struct_df, category_df = load_data() #데이터로드 함수는 3개의 데이터프레임을 리턴
pd.set_option('display.max_rows', None) # 모든 행 출력
pd.set_option('display.max_columns', None) # 모든 열 출력
# 출력 - 데이터프레임의 헤드만 전체를 원할 경우 head()를 떼면 됨
print(f'[area_map.csv]\n{map_df.head()}')
print(f'\n[area_struct.csv]\n{struct_df.head()}')
print(f'\n[area_category]\n{category_df.head()}')
# 병합
merged_df = merge_data(map_df, struct_df, category_df) # category기준으로 3개를 2병합 - area로 소트후 출력
area1_df = filter_area_one(merged_df) # area 1만 필터링
merged_df.to_csv('merged.csv', index = False) # 결과를 csv 파일로 출력
#print(f'\n[merge]\n{merged_df}')
#분석 => area별 반달곰커피 개수
all_areas = merged_df['area'].unique()
all_areas.sort()
# 공백 제거한 struct로 비교
coffee_counts = (
merged_df[merged_df['struct'].str.strip() == 'BandalgomCoffee']
.groupby('area')
.size()
.reindex(all_areas, fill_value = 0)
)
print('\n[area별 반달곰커피 개수]')
for area, count in coffee_counts.items():
print(f'area {area}: {count}개')
# area 1 데이터 저장
area1_df = area1_df.sort_values(by = ['x','y'])
area1_df = area1_df[~((area1_df['ConstructionSite'] == 0) & (area1_df['struct'].isna()))]
area1_df.to_csv('area1_filtered.csv', index = False)
# area 1 데이터 출력
print(f'\n[area 1 데이터]\n{area1_df}\n* 출력되지 않은 좌표에는 공사장도, 건물도 존재하지 않습니다.')
if __name__ == '__main__':
main()
파이썬 마스터하기 : Group By 함수
판다스(Pandas)에서 Group By는 데이터를 그룹화하고 그룹화된 데이터에 대한 연산을 수행하는데 매우 유용한 기능입니다. 이번 포스트에서는 Python에서 Group By의 개념과 활용 예제에 대해 다루어보
velog.io
'
'Codyssey > AI선발팀프로젝트' 카테고리의 다른 글
| caffee_map_dra 도식화 (1) | 2025.07.24 |
|---|---|
| caffee_map 통계 (0) | 2025.07.24 |
| A* 휴리스틱 알고리즘 + JPS (0) | 2025.07.24 |
| 최단거리 알고리즘 공부 다익스트라 A* (3) | 2025.07.23 |
| 최단거리 그리기 matlib (4) | 2025.07.22 |