AI/실습

117. [Python] [Pandas] 프로그래밍 실습 : 대중교통

천재단미 2025. 1. 24. 13:14
728x90
반응형

반응형

 

 

 

 

  TIP💡주피터 노트북 한글타이핑 

# 한글 찍기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

%matplotlib inline

import platform

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
    path = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system... sorry~~~~')

df = pd.read_csv('../data/subwayfee.csv' , encoding = 'cp949')
df

 

 

문제 1.  최대 구하기 

유임승차, 유임하차, 무임승차, 무임하차 4가지 별로, 각각 가장 많은 역을 찾아보세요.

 

 

풀이  1. 

df['유임승차'].max()
# 3153418
df.loc[df['유임승차'] == df['유임승차'].max()]

df['유임하차'].max()
# 3210437
df.loc[df['유임하차'] == df['유임하차'].max()]

df['무임승차'].max()
# 387062
df.loc[df['무임승차'] == df['무임승차'].max()]

df['무임하차'].max()
# 400607
df.loc[df['무임하차'] == df['무임하차'].max()]

 

 

출력

:  강남역, 종로3가 등 특정 역이 최대값을 기록.

 

 

 


 
 
 

 

문제 2.  무임승차 대비 유임승차 비율

무임승차 대비 유임승차 비율이 가장 높은 역은 어디입니까?
 

 

 

풀이 2.  

# 유임승차/ 무인승차 

df_2 = df.loc[df['무임승차'] != 0, ]
df_2['유임승차 비율'] = df_2['유임승차'] / df_2['무임승차']
df = df.drop('유임/무임 비율', axis=1)
df_2['유임승차 비율'].max()
# 27.5 

df_2.loc[df_2['유임승차 비율'] == df_2['유임승차 비율'].max(), ]

df_2.loc[df_2['역ID'] ==321,  ]

 

 

코드분석

  • inf = df['유무임승차 비율'].max() : 결과값이  inf가 나오는 이유는 무임승차 값이 0인 경우
  • 나눗셈이 불가능하여 무한대(inf)로 처리되기 때문입니다.
  • df_2 = df.loc[df['무임승차'] != 0, ]  :  0을 제거 하고 진행 

 

출력

 
 
 
 
 


 
 


 

문제 3. 유임승차 비율 가장 높은 역(조건)

전체승차인원(유임+무임)이 만명이상인 역 중, 유임승차 비율이 가장 높은 역은 어디입니까?
 

 

풀이  3. 

df['승차합계'] = df['유임승차'] +df['무임승차']
df_3 = df.loc[df['승차합계'] >= 10000, ]
df_3['유임승차 비율'] = df_3['유임승차']/df_3['무임승차']
df_3['유임승차 비율'].max()
df_3.sort_values(by='유임승차 비율', ascending=True)

 

 

코드분석

 

  • df['승차합계'] >= 10000 :  10000당 승차 합계 
  • sort_values (by = '유임승차 비율', ascending = True) :
  • sort_values(ascending=True) 오름차순  / sort_values(ascending=False 내림차순 )

 

 

출력

: df_3.sort_values(by='유임승차 비율', ascending=True)

 

 

 

 

 


 

 

 

 

문제 4. 파이차트생성 (4가지)

모든 역의 유임승차, 유임하차, 무임 승차, 무임하차, 총 4개를, 파이차트로 나타내세요.

 

 

풀이  4. 

data = df.loc[ 0 , '유임승차': '무임하차' ] 

data

 

 

출력

유임승차    1516452
유임하차    1400464
무임승차     221180
무임하차     211764
Name: 0, dtype: object

df['지하철역'][0]

plt.pie(data, labels = data.index, wedgeprops = {'width':0.7} , startangle = 90)
plt.title(df['지하철역'][0])
plt.show()

 

df.shape

# (598, 9)

 

598개의 파이차트를 생성합니다. 

 

for index in range( 597+1 ):
    data = df.loc [ index , '유무승차' : '무임하차']
    
for index in range( 597+1 ):
	data = df.loc [ index , '유무승차' : '무임하차']
plt.pie(data, labels = data.index, wedgeprops = {'width':0.7} , startangle = 90)
plt.title(df['지하철역'][0])
plt.show()

 

 

 

 

 

 

728x90
반응형
home top bottom
}