• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

시군구명으로 그린 그래프에서도 숫자를 표시하고 싶습니다.

20.09.04 21:06 작성 조회수 372

1

시군구명으로 그린 그래프에서도 숫자를 표시하고 싶습니다.

그래서 브랜드명으로 그려봤는데, 잘 되지 않네요.

# 시군구명으로 빈도수를 세고 브랜드명으로 색상을 다르게 표현하는 countplot 을 그립니다.
plt.figure(figsize=(15,4))

city_count = df_31["시군구명"].value_counts()
g = sns.countplot(data=df_31, x="시군구명", hue="브랜드명")

for i, val in enumerate(city_count.index):
  g.text(x=i, y=city_count[i], s = city_count[i])

답변 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()
Out[34]:
브랜드명 던킨도너츠 배스킨라빈스
시군구명
강남구 29 38
강동구 3 15
강북구 4 8
강서구 12 24
관악구 5 13
In [35]:
# 그래프에 숫자를 표시하기 위해서는 하나씩 출력을 해봅니다.
# 데이터프레임을 순회할 수있는 iterrows() 을 사용해 보겠습니다.
# 아래에 출력되는 숫자를 그래프에 표시할 예정입니다.
for i, val in table_city_brand.iterrows():
    dunkin = val["던킨도너츠"]
    baskin = val["배스킨라빈스"]
    print(dunkin, baskin)
29 38
3 15
4 8
12 24
5 13
9 24
4 17
1 8
14 28
1 12
7 11
6 12
7 18
5 22
14 39
2 11
6 23
8 22
6 18
5 16
10 19
9 28
6 9
14 14
4 15
In [36]:
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