Post

Python 라이브러리로 데이터 분석

Python 라이브러리로 데이터 분석하기

Python 라이브러리로 데이터 분석하기 📊

📋 과제 목표

  1. Python의 데이터 분석 라이브러리 활용.
  2. 주어진 데이터 파일(.xlsx, .csv)을 불러오고 처리.
  3. 데이터 프레임 연산 및 통계 처리 연습.

⚙️ 과제 구성 및 주요 기능

데이터 파일

  • 관서별 5대범죄 발생 및 검거.xlsx: 주요 범죄 발생 및 검거 데이터를 포함.
  • pop_kor.csv: 인구 데이터를 포함.

주요 기능

  1. 데이터 파일 읽기:
    • 관서별 5대범죄 발생 및 검거.xlsxpop_kor.csv를 Pandas를 사용해 불러오기.
  2. 구 이름 매핑:
    • 경찰서 이름(관서명)을 서울시 구 이름(구별)로 매핑.
  3. DataFrame 병합 및 정리:
    • pivot_table로 구별 데이터를 집계.
    • 구 없음 행 삭제.
  4. 검거율 계산:
    • 강간, 강도, 살인, 절도, 폭력의 검거율을 계산하여 새로운 컬럼 추가.
  5. 컬럼 제거:
    • 필요 없는 컬럼 삭제 (del 사용).
  6. 컬럼 이름 변경:
    • rename으로 컬럼 이름을 직관적으로 수정.

💻 실행 예제

기본 데이터 출력

1
2
3
4
관서명   살인 발생   살인 검거   강도 발생   강도 검거   강간 발생   강간 검거   절도 발생   절도 검거   폭력 발생   폭력 검거
0   서울     10         10        20         19         30         28         40         35         50         48
1   부산     8          8         15         14         25         23         35         30         45         43
...

최종 데이터 출력 예시

1
2
3
4
강간  강도  살인  절도  폭력  강간검거율   강도검거율   살인검거율   절도검거율   폭력검거율   검거율
구별                                          
강남구 449 21  13  3850    4284    77.728285   85.714286   76.923077   42.857143   86.484594   66.519670
강동구 156 6   4   2366    2712    78.846154   100.000000  75.000000   33.347422   82.890855   60.469108
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 파이썬 라이브러리 중 pandas 사용 as로 별칭 붙여주기
import pandas as pd

# pandas 이용하여 파일 불러오기. 데이터 보기 편하게 head() 함수 이용
df1 = pd.read_csv('pop_kor.csv')
df2 = pd.read_excel('관서별 5대범죄 발생 및 검거.xlsx')

df1.head()
df2.head()

# 관서명을 구 이름으로 매핑하기 위해 매핑할 데이터 입력 후 map()사용하여 매핑. 결측지는 '구 없음'으로 표출
map_data = {
    '서대문서': '서대문구', '수서서': '강남구', '강서서': '강서구', '서초서': '서초구',
    '서부서': '은평구', '중부서': '중구', '종로서': '종로구', '남대문서': '중구',
    '혜화서': '종로구', '용산서': '용산구', '성북서': '성북구', '동대문서': '동대문구',
    '마포서': '마포구', '영등포서': '영등포구', '성동서': '성동구', '동작서': '동작구',
    '광진서': '광진구', '강북서': '강북구', '금천서': '금천구', '중랑서': '중랑구',
    '강남서': '강남구', '관악서': '관악구', '강동서': '강동구', '종암서': '성북구',
    '구로서': '구로구', '양천서': '양천구', '송파서': '송파구', '노원서': '노원구',
    '방배서': '서초구', '은평서': '은평구', '도봉서': '도봉구'
}

df2['구별'] = df2['관서명'].map(map_data).fillna('구 없음')

# index 사용하여 구별 데이터로 변경하고 같은 구인 경우 aggfunc='sum' 이용하여 더해주기
# 기존 데이터 '관서명'으로 인덱스 되어있던거 아니라서 필요없는 컬럼인 관서명은 drop()이용하여 열 삭제(axis=1)
# pivot = df2.drop(columns=['관서명']).pivot_table(index='구별', aggfunc='sum')
pivot = df2.drop('관서명', axis=1).pivot_table(index='구별', aggfunc='sum')
pivot

# drop() 이용 하여 '구 없음'에 해당하는 행 삭제하기
# 인덱스 삭제할 때, 삭제하려는 항목이 존재하지 않아도 오류를 발생시키지 않도록 errors='ignore' 사용하기
pivot = pivot.drop(index='구 없음', errors='ignore')

# 각 범죄 별로 검거율 계산하고, 각 검거율 데이터 컬럼 추가하기
# for문 사용해서 crime 변수에 공통 단어 넣어주기
for crime in ['강간', '강도', '살인', '절도', '폭력']:
    # f-string을 이용해 컬럼명 생성 
    # 각 범죄 유형에 대해 검거율(= 검거 건수 / 발생 건수 * 100)을 계산해서 컬럼 생성
    pivot[f'{crime}검거율'] = (pivot[f'{crime}(검거)'] / pivot[f'{crime}(발생)']) * 100

# 소계에 대한 검거율 컬럼 추가
pivot['검거율'] = (pivot['소계(검거)'] / pivot['소계(발생)']) * 100

# del pivot['강간(검거)'] : del의 경우 단일 열만 지정가능하여 필요없는 컬럼 drop() 이용해서 삭제
del_column = ['강간(검거)', '강도(검거)', '살인(검거)', '절도(검거)', '폭력(검거)', '소계(발생)', '소계(검거)']
# inplace=True 사용하여 원본 테이블에 적용
pivot.drop(del_column, axis=1, inplace=True)
# pivot.drop(columns=del_column, inplace=True)

# rename()이용해서 컬럼명 변경
rename_column = {
    '강간(발생)': '강간', '강도(발생)': '강도', '살인(발생)': '살인',
    '절도(발생)': '절도', '폭력(발생)': '폭력'
}
# pivot.rename(columns=rename_column, inplace=True)
pivot.rename(rename_column, axis=1, inplace=True)

# 인구 데이터 불러오고 출력하기 head()이용해서 위에서부터 5개까지만
# index_col='구별' 인덱스 셋팅해서 불러오기
pop_data = pd.read_csv('pop_kor.csv', index_col='구별')
pop_data.head()

# join() 사용해서 피벗 테이블과 merge
merge_table = pivot.join(pop_data, how='inner')

# 검거율 기준으로 오름차순 정렬하기
sort_table = merge_table.sort_values(by='검거율')
sort_table
This post is licensed under CC BY 4.0 by the author.