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_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개의 파이 차트를 한번에 다 만들 수 있다.
댓글