-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
시군구명으로 그린 그래프에서도 숫자를 표시하고 싶습니다.
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])
답변을 작성해보세요.
0
박조은
지식공유자2020.09.04
안녕하세요.
질문 주신내용은 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]:
In [35]:
# 그래프에 숫자를 표시하기 위해서는 하나씩 출력을 해봅니다.
# 데이터프레임을 순회할 수있는 iterrows() 을 사용해 보겠습니다.
# 아래에 출력되는 숫자를 그래프에 표시할 예정입니다.
for i, val in table_city_brand.iterrows():
dunkin = val["던킨도너츠"]
baskin = val["배스킨라빈스"]
print(dunkin, baskin)
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
답변 1