본문 바로가기
  • 콩's 코딩노트
Python/Python 예제

예제1 - 대중교통 데이터 억세스 / 가공 / 시각화

by Cong_S 2022. 5. 3.
df.loc[df['유임하차'] == df['유임하차'].max(),]​
df.loc[df['유임승차'] == df['유임승차'].max(),]​
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

%matplotlib inline

시작하기 전 사용할 라이브러리 먼저 import 해준다.

 

다음과 같은 csv 파일을 불러왔다.

 

 

각각 컬럼의 max 값을 찾는 문제이다.

각 컬럼을 억세스하고 .max 함수를 붙여주면 될 것 같다.

df.loc[df['유임승차'] == df['유임승차'].max(),]
df.loc[df['유임하차'] == df['유임하차'].max(),]
df.loc[df['무임승차'] == df['무임승차'].max(),]
df.loc[df['무임하차'] == df['무임하차'].max(),]

다음과 같은 데이터가 나온다. 

최댓값이 나온 상태에서 df 의 밸류값이  최댓값이 맞는지에 대해

True값이 나온 행을 loc 함수로 불러왔다.

 


유임승차 값을 무임승차의 값으로 나누자.

나눈 값을 '비율' 이라는 컬럼에 저장한 후 

컬럼'비율' 에서 max 값을 찾으면 될 것 같다.

df['비율'] = df['유임승차']/df['무임승차']

이렇게 되었을 때 문제가 발생했는데

위 이미지를 보면 무임승차의 비율이 0이라서

몇몇 데이터들은 비율의 값이 inf (무한대) 를 찍는 것을 볼 수 있다. 

 

그러므로 우리는 무임승차의 값이 0인 것을 제외하고 다시 연산을 해야한다.

df_notzero = df.loc[df['무임승차']!=0,]

 위 처럼 무임승차 컬럼에서 0을 제외한 데이터들을 df_notzero 라는 변수에 저장하고

df_notzero.loc[df_notzero['비율'] == df_notzero['비율'].max(),]

최댓값을 다시 비교하여 최댓값이 있는 행을 가져오면 된다.

무임승차 대비 유임승차 비율이 가장 높은 역

 

 


위의 문제에 밸류값끼리 연산이 더해진 문제이다.

원래 df

 

df_01 = df.loc[df['유임승차']+ df['무임승차'] >= 10000,]

전체 승차인원이 1만명 이상인 비교문을 먼저 작성해서 변수를 할당해주고 

df_02 = df_01['유임승차']/(df_01['유임승차']+ df_01['무임승차'])

나중에 loc함수를 통해 가져올 max 값을 가져오기 위해 미리 유임승차의 비율을 계산해놓고 변수를 할당해준다.

df_02.max()
df_01.loc[df_01['유임승차']/(df_01['유임승차']+ df_01['무임승차'])==df_02.max(),]

그리고 마지막에 하나의 식을 정리를 해준다.

 


for i in range(df.shape[0]) :

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

    plt.pie(data, autopct = '%.1f' ,labels = data.index)

    plt.title(df['지하철역'][i])

    plt.show()

range 함수로 데이터 프레임의 행의 수만큼 반복 실행하도록 만들어 두고

data 변수에 x 값에 i(행) , y 값에 유임승차부터 무임하차 열까지 슬라이싱한다.

 

그 상태로 pie 함수로 파이차트를 만들어

598개의 파이 차트를 한번에 다 만들 수 있다.

댓글