작성
·
453
1
시군구명으로 그린 그래프에서도 숫자를 표시하고 싶습니다.
그래서 브랜드명으로 그려봤는데, 잘 되지 않네요.
답변 1
0
안녕하세요.
질문 주신내용은 value_counts로는 값을 구할 수가 없습니다.
다음의 방법으로 해결해 보실 수 있습니다.
아래 코드를 실습코드에 추가해 두었으니 다음링크에서 코드를 직접 보실 수 있습니다. https://bit.ly/open-data-03-franchise-output
# 위 그래프에도 숫자를 표시하고 싶다면 그룹화된 연산이 필요합니다.
# value_counts는 Series에만 사용이 가능하기 때문에 groupby 나 pivot_table로 구해볼 수 있습니다.
table_city_brand = df_31.pivot_table(index="시군구명", columns="브랜드명", values="상호명", aggfunc="count")
table_city_brand.head()
# 그래프에 숫자를 표시하기 위해서는 하나씩 출력을 해봅니다.
# 데이터프레임을 순회할 수있는 iterrows() 을 사용해 보겠습니다.
# 아래에 출력되는 숫자를 그래프에 표시할 예정입니다.
for i, val in table_city_brand.iterrows():
dunkin = val["던킨도너츠"]
baskin = val["배스킨라빈스"]
print(dunkin, baskin)
plt.figure(figsize=(15, 4))
# 위에서 만든 피봇테이블과 "시군구명"의 순서과 같게 표시되게 하기 위해 order 값을 지정합니다.
g = sns.countplot(data=df_31, x="시군구명", hue="브랜드명", order=table_city_brand.index)
# 여기에서 i 값은 시군구명이라 숫자로 표현해줄 필요가 있습니다.
# 그래서 순서대로 0번부터 찍어줄 수 있도록 index_no 를 만들어 주고 for문을 순회할 때마다 하나씩 증가시킵니다.
index_no = 0
for i, val in table_city_brand.iterrows():
dunkin = val["던킨도너츠"]
baskin = val["배스킨라빈스"]
g.text(x=index_no, y=dunkin, s=dunkin)
g.text(x=index_no, y=baskin, s=baskin)
index_no = index_no + 1