2022/2/10
import pandas as pd
ch = pd.read_csv(agefile_path, sep=',',encoding='cp949',thousands=",")
csv 파일을 읽어올 때 ,를 기준으로 나누고 encoding을 cp949로 적어주고 천에자리를 표시할 때마다 넣어주는,를 숫자를 볼 때 제외하고 보기위해 thousands="," 를 넣어줍니다.
j=list(ch.iloc[0,3:])
plt.plot(j)
ch라는 df를 index로 슬라이싱해주고 그 결과를 plt.plot을 이용하여 그래프를 그려줬습니다.
pop_df=ch
pop_df.columns = [pop_df.columns[0]]+[pop_df.columns[i][13:] for i in range(1, 104)]
pop_df.columns
컬럼이름 '2021년12월거주자_1세'에서 앞에 있는 '2021년12월거주자_'를 모두 제거하는 코드입니다. 맨 앞에 행정구역을 제외한 모든 컬럼에있는 문자열을 제거함으로서 보기편하게 만들어줬습니다.
##예외처리
dong=input("동이름: ")
try:
a=list(ch[ch['행정구역'].str.contains(dong)].iloc[0][3:])
plt.plot(a)
plt.xticks(np.arange(0,101,10))
plt.show()
except:
print("해당 동은 자료에 없습니다. 동이름을 정확히 입력하시오")
파이썬에서 예외처리는 try, except를 이용하여 할 수 있고 위 코드는 동이름을 입력받고 입력받은 동의 그래프를 그리는 코드입니다.
지하철에서 무임승차, 유임승차를 하는 사람들의 빈도수와 시간대별 승,하차를 정리한 csv파일을 분석해보았습니다.
원래에 1개의 조건만 만족하는 df에서 원하는 데이터를 뽑고싶을때 하나의 조건문을 만족하면 되는 구조였습니다. 하지만 이번에는 2개의 조건을 만족하는 index를 뽑고 그 행을 뽑아내야하는 문제인데 제가 이것을 처음 직면했을 때 and문을 사용하면 해결이 될줄알았는데 안됐었습니다. 그래서
다음으로 생각 할 수 있었던 것은
dt_gt = df[(df['유임승차']+df['무임승차']) >= 500000]
dt_gt[dt_gt['유임승차비율'] >= 0.94]
위와같은 방법으로 정제된 dt_gt를 만들어서 저장한 후에 이 데이터를 다시 정제하는 방법이였습니다.
위와같은 방법으로 실행을 하니까 위 조건에 맞는 데이터가 반환이되었습니다.
df=data
df['유임승차비율'] = df['유임승차'] / (df['무임승차']+df['유임승차'])
df['유임하차비율'] = df['유임하차'] / (df['무임하차']+df['유임하차'])
df['무임승차비율'] = df['무임승차'] / (df['무임승차']+df['유임승차'])
df['무임하차비율'] = df['무임하차'] / (df['무임하차']+df['유임하차'])
label = ['지하철역', '유임승차비율', '유임하차비율', '무임승차비율', '무임하차비율']
label1= ['유임승차비율', '유임하차비율', '무임승차비율', '무임하차비율']
station = input("분석할 역의 이름을 입력하시오")
st = df[df['지하철역']==station][label1]
train=list(st.max())
print(train)
plt.pie(train, labels = label1, autopct = '%.1f%%')
plt.title(f"유임하차 비율 최대: {station}")
plt.show()
유임승차의 비율을 pie그래프로 그리는 코드입니다. 새로운 df를 만들어주고 라벨을 만들어주어 쉽게 꺼내쓸 수 있도록 해주었고 분석하기를 원하는 역의 이름을 입력하면 그 역의 유임승하차비율, 무임승하치비율을 파이크래프로 볼 수 있게 해줍니다.
이번에는 위에와 비슷하게 2개의 조건을 받아서 데이터 정제를 하는데 사용자에게 정보를 입력받는 방식으로 구현을 해보았습니다.
a, b = input("호선명 역이름: ").split()
stt = df[ df["호선명"]==a ]
stt = stt[stt['지하철역']==b]
plt.plot(range(4,28) ,stt.T[ stt.columns.str.contains("승차") ],'m',label="승차")
plt.plot(range(4,28), stt.T[ stt.columns.str.contains("하차") ] ,'c',label="하차")
plt.title(f"{a}호선 {b}의 시간대별 승하차 인원")
plt.legend()
plt.show()
호선의 이름과 역의 이름을 받고 시간대별 승하차인원을 그래프로 그렸습니다. 여기에 예외처리까지 해주면 조금더 실용성 있는 분석코드가 될 수 있을 것이라고 생각합니다. 하지만 수업에서는 위와같이 표현하는 곳 까지만 했어서 벨로그에는 위와같이 남기겠습니다.
실제로 데이터분석을 하시는 분과의 화상통화에서 배운내용을 정리하여 보았습니다.
직장인들을 사람을 뽑을 때 자신의 실적을 높이기 위해서 채용을 한다고합니다. 그 과정에서 박사님께서는 데이콘, 케글 등의 수상실적, 깃허브, 자신이 잘 짰다고 생각하는 코드 등을 보시고 인턴으로 채용을 하신다고 하셨습니다. 그래서 저는 가능하면 데이콘이나 케글에서 수상을 하고 벨로그를 열심히 작성하는 것을 목표로 삼았습니다. 또 박사님께서는 데이터분석을 할 때는 통계와 분석에대한 지식도 중요하지만 도메인에 대한 지식이 가장 중요하다고 하셨습니다. 그래서 저는 관심있는 분야가 생기면 인터넷으로 서칭을 많이 한다던가 관련된 책을 읽는다던가 해보기로 마음먹었고 "데이터시각화 교과서", "데이터시각화 인지과학을 만나다"라는 책 두권을 데이터에 대해 더 깊게 알고싶다고 생각이 드는 순간 읽어보기로 마음먹었습니다. 또 박사님이 게슈탈드 법칙, 인지과학에 대해 알고있으면 분석을 하는데 도움이 된다고 하셔서 인터넷에서 찾아보았습니다.