코딩헤딩

[데이터 분석] 교통데이터 전처리 / 시각화 (막대그래프, Histplot) 본문

데이터

[데이터 분석] 교통데이터 전처리 / 시각화 (막대그래프, Histplot)

멈머이 2023. 12. 3. 21:42
728x90

https://coding-heading.tistory.com/66

 

[데이터 분석] 교통데이터 수집/가공

* 데이터 출처 - URL : 국가교통 데이터 오픈마켓 1. 데이터 수집 import pandas as pd 파이썬에서 데이터를 다룰 때는 항상 pandas 라이브러리를 정의해 준다. 데이터가 폴더만 80개가 있다. 하지만 폴더

coding-heading.tistory.com

 

### 시각화 라이브러리
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns

 

저번 글에서 만든 데이터 프레임을 불러오겠다.

 -  데이터 프레임 변수명 : df_bus_card_tot

df_bus_card_tot =pd.read_csv("./01_data/all/df_bus_card_tot.csv")

print("갯수 : ", len(df_bus_card_tot))
df_bus_card_tot.head(1)

개수 : 842608

 

 - 시간대 및 승객연령별 버스 내 체류시간(분) 시각화 (막대그래프)

   1. 필요한 데이터 : 기준시간, 승객연련, 버스내체휴시간(분)

df_temp = pd.DataFrame()
df_temp["기준시간"] = df_bus_card_tot["기준시간"]
df_temp["승객구분"] = df_bus_card_tot["승객연령"]
df_temp["버스내체류시간"] = df_bus_card_tot["버스내채류시간(분)"]
df_temp

 

 

우선 시각화하는데 필요한 데이터만 가져왔다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 그룹화하기

df_temp["승객구분"].value_counts()

 

 

 

 

 

df_temp2 = df_temp.groupby(["기준시간","승객구분"], as_index=False).sum()
df_temp2 = df_temp2.sort_values(by=["버스내체류시간"], ascending=False)
df_temp2

 

* groupby() 이후의 head()의 역할
 - 그룹단위로 조화됨
 - head(1) : 각 그룹의 첫 번째 값을 조회시킴

   group by가 적용되면 head(0)은 없다 각 그룹에 첫 번째만 뽑아온다.

 

3. 그래프 시각화 하기

fig = plt.figure(figsize=(25,10))
plt.title("시간 및 승객구분별 버스내 채류시간(분단위) 분석")
sns.barplot(x="기준시간", y="버스내체류시간", hue="승객구분", data=df_temp2)
plt.show()

* hue : x축 및 y축을 기준으로 비교할 대상 컬럼 지정(범주형 데이터를 보통 사용)

 

 

- 시간 및 승객구분별 버스 내 채류시간(분단위) 분석 (histplot 시각화)

    - 밀도 그래프라고도 함.

plt.figure(figsize=(12,4))
plt.title("시간 및 승객구분별 버스내 채류시간(분단위) 분석")
sns.histplot(data = df_temp2,
             x = "기준시간",
             ### 사용할 막대의 최대 갯수
             bins = 30,
             ### 막대그래프에밀도 선그리기
             kde = True,
             ### 범주 데이터
             hue = "승객구분",
             ### 여러 범주를 하나의 막대에 표현하기
             multiple = "stack",
             ### 비율로 표시
             stat = "density",
             ### 막대 너비 : 0.6은 원본 100% 사이즈에서 60%축소한 너비사이즈
             shrink=0.6)

plt.show()

 

 

 - 승하차정류장별 버스내 체류시간(분) 상위 30건 시각화 분석

1. 구간(승차정류장~하차정류장) 별 버스 내 체류시간(분) sum() (그룹화) 하기

     - 내림차순 정렬
     - 상위 30개 추출

df_temp3 = pd.DataFrame()
df_temp3["승하차정류장"] = df_bus_card_tot["승차정류장"] + "==>" + \
                            df_bus_card_tot["하차정류장"]
df_temp3["버스내체류시간"] = df_bus_card_tot["버스내채류시간(분)"]
df_temp3

 

2. 승하차정류장별 체류시간 그룹화하기

df_temp_gp = df_temp3.groupby(["승하차정류장"], as_index=False).sum() 
df_temp_gp = df_temp_gp.sort_values(by=["버스내체류시간"], ascending=False)

 

3. 상위 30건 추출하기

df_temp_30 = df_temp_gp.head(30)
df_temp_30

 - 구간별 채류시간이 가장 긴 상위 30개가 나온다.

 

4. 시각화하기

plt.figure(figsize=(12,4))
plt.title("승하차정류장별 버스내 체류시간 분석")

### 선그래프
plt.plot(df_temp_30["승하차정류장"], df_temp_30["버스내체류시간"])

# - x축 y축 제목넣기
plt.xlabel("승하차정류장")
plt.ylabel("버스내체류시간(분)")

### x축의 값의 기울기를 이용하여 조정하기
# - xticks() : x축을 컨트롤 하는 함수
plt.xticks(rotation=90)

### 격자 표시하기
plt.grid(True)

plt.show()

728x90