2023. 6. 2. 09:14ㆍ카테고리 없음
기초도 잘 모르겠고... 해서 오늘은 한 번 샅샅이 파보자.
from glob import glob
file_names = glob("/content/drive/MyDrive/Colab Notebooks/인공지능 개발자 과정/탐색적데이터분석/따릉이데이터/*.csv")
file_names
glob은 파이썬 내장모듈이다. 파일 경로명을 사용해 마일 목록을 검색한다. 위의 코드는 from을 썼기 때문에 glob()을 바로 쓸 수 있고 쓰지 않는다면 glob.glob() 이렇게 할 것이다. 그렇게 해서 매개변수에 경로를 넣고 *.csv를 했기 때문에 해당 경로에 있는 csv로 저장된 확장자들을 모두 찾아서 file_names에 list로 넣을 것이다.
#비어있는 df 생성.
bike_df = pd.DataFrame()
#for문을 돌려 bike_df에 파일을 concat을 통해 저장.
for file_nm in file_names :
temp = pd.read_csv(file_nm, encoding='cp949')
bike_df = pd.concat([bike_df, temp], ignore_index=True)
print(file_nm, temp.shape[0])
그 다음 이것을 실행했다.
temp에 우선 pd.read_csv로 파일을 저장한다. 그 뒤 pd.concat([기존 데이터, 붙일데이터], ignore_index=True)를 한다. 여기서 ignore_index=True는 결합된 df의 인덱스가 연속적으로 생성되어 붙여진다.
bike_df.groupby(['대여시간','대여일자'])[['이용건수']].sum()
이거는 groupby이다. 대여시간을 먼저 groupby 하고 대여시간 별로 대여일자를 groupby한다. 그 뒤 이용건수를의 합을 더한 것을 df 형으로 보여준 것이다.
# groupby 후 인덱스 재정렬
bike_df2 = bike_df.groupby(['대여일자','대여시간'])[['이용건수']].sum()
bike_df2 = bike_df2.reset_index() # 인덱스 재정렬, 기존의 인덱스는 열로
bike_df2
여기서 reset_index()를 해줘야 표가 이쁘게 나온다. 그리고 이렇게 reset_index()를 써야 그룹화된 결과를 또 다른 df와 결합하거나 하는 다른 작업에 활용할 때 용이하다고 한다.
그다음 공휴일을 뽑아내서 0,1로 솎아내는 작업을 한다.
bike_df2['공휴일'] = 0 # 0 평일, 1 공휴일
bike_df2.loc[ bike_df2['요일(num)'].isin([5,6]), ['공휴일']] = 1
bike_df2.head()
그리고 merge
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)
예제코드이다. 첫번째, 두번째 인수에는 각각 데이터프레임이 들어가고 on='key'라는 것은 on='컬럼명' 이라는 뜻이다. 두 데이터 프레임 모두 key라는 것을 갖고 있으므로 key가 같은 것들끼리 묶어라. 라는 뜻이다. 기본으로 정해져있는 how= 라는 방식도 있는데 기본값은 inner이다.
다시 전처리한 bike_df2.head()와 weather_df()를 보자. bike_df2의 대여일자와 weather_df의 날짜가 형식이 같다. 또 바이크 프레임의 대여시간과 날씨 프레임의 시간의 형식이 같은 것을 볼 수 있다.
# pd.merge
#datatime형으로 변환
weather_df['날짜'] = pd.to_datetime(weather_df['날짜'])
bike_mg = pd.merge (bike_df2, weather_df, left_on=['대여일자','대여시간'], right_on=['날짜','시간'])
bike_mg.head()
이렇게 원하는 형식이 맞는 것들끼리 합쳐지는 것이 merge이다.
그뒤 중복값을 삭제해주는 drop을 쓴다.
bike_mg.drop(['대여일자','날짜','시간'], axis=1)
bike_mg.head()
그다음 시각화 작업.
# 기술통계
#.T는 전치. 행과 열을 바꾸는 연산이다.
desc_df=data.describe().T
describe()는 기술통계를 해준다. 그리고 T는 행과 열을 바꾸는 연산이다.
그리고 이렇게 lineplot으로 시각화를 할 수 있다. 이 코드를 보니까 너무 덥거나 특히 너무 추우면 자전거 타기 힘드니까 안타는 듯? 선선한 오뉴월과 날 좋은 9월이 피크인 것 같다.