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

+ Recent posts