데이터 프레임에 포함된 이진 데이터의 빈도를 Python을 사용하여 하나의 막대 그래프로 표시

데이터 내용을 확인할 때,
2치 데이터 등이 얼마나 포함되는지를 하나의 막대 그래프로 표현하고 싶을 때가 있을 것입니다.

찾는 방법이 좋지 않았는지,
하나의 막대 그래프로 나타내는 간결한 방법이 나오지 않았으므로 출력도 포함하여 기재합니다.

이번에는 2치 데이터뿐만 아니라 6치 데이터도 포함한 막대 그래프를 작성하고 있습니다.

환경



Google Colab을 사용했습니다.
사용한 라이브러리 버전은 다음과 같습니다.


도서관
버전


파이썬
3.6.9

pandas
1.1.4

seaborn
0.11.0

matplotlib
3.2.2


라이브러리 가져오기



위의 모듈을 사용할 때 가져올 수 있습니다.
%matplotlib inline
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

데이터 세트 가져오기



이번에는 seaborn에 포함 된 학습 데이터 세트 tips를 사용합니다.
이 데이터 세트에는
저녁 식사와 점심 식사의 총 지불액, 포함 된 칩의 금액, 지불 한 사람의 성별 등이 포함됩니다.
# データフレームのインポート
tips = sns.load_dataset('tips')

# 先頭5行を確認
display(tips.head())



total_bill

sex
스모커
day
시간
크기


0
16.99
1.01
여성
아니

Dinner
2

1
10.34
1.66
Male
아니

Dinner
3

2
21.01
3.50
Male
아니

Dinner
3

3
23.68
3.31
Male
아니

Dinner
2

4
24.59
3.61
여성
아니

Dinner
4


위와 같은 출력이 있으면 가져 오기가 성공합니다.

데이터 처리



다음 네 개의 열을 사용하여 막대 그래프를 만듭니다.
그래프를 만들 때 정성적 값을 정량적 값으로 변환해야 합니다.


열 이름
개요
정책


sex
성별 (Male/Female)
Male -> 0, Female -> 1

스모커
흡연 (No/Yes)
No -> 0, Yes -> 1

시간
식사 시간 (Lunch/Dinner)
Lunch -> 0, Dinner -> 1

크기
인원수 (1 ~ 6)
그대로 이용


이것을 실현하는 방법에는 여러 가지가 있다고 생각합니다.
다음과 같이 실시했습니다.
# sexを定量化 (Male1 -> 0, Female -> 1)
tips.sex = tips.sex.replace("Male", 0).replace("Female", 1)

# smokerを定量化 (No -> 0, Yes -> 1)
tips.smoker = tips.smoker.replace("No", 0).replace("Yes", 1)

# timeを定量化 (Lunch -> 0, Dinner -> 1)
tips.time = tips.time.replace("Lunch", 0).replace("Dinner", 1)

# 先頭5行を確認
display(tips.head())



total_bill

sex
스모커
day
시간
크기


0
16.99
1.01
1
0

1
2

1
10.34
1.66
0
0

1
3

2
21.01
3.50
0
0

1
3

3
23.68
3.31
0
0

1
2

4
24.59
3.61
1
0

1
4


따라서 0과 1로 대체되었음을 확인할 수 있습니다.

빈도 그래프



그런데, 본제가 됩니다.
막대 그래프에 포함할 열 이름을 목록 형식으로 label에 정의합니다.
그런 다음 각 열에 대해 고유한 값과 해당 개수를 가져옵니다.
이대로는 index가 컬럼명, 컬럼명이 값의 상태이므로 교환을 실행하고 있습니다.
# 棒グラフに収めるラベル一覧の定義
label = ["sex", "smoker", "time", "size"]

# 各ラベルに対してユニークな値の取得
tips_ = [tips[l].value_counts() for l in label]

# データフレームに変換してindexとカラムを入れ替え
tips_ = pd.DataFrame(tips_).transpose()

# グラフの表示
tips_.plot.bar()
plt.grid()
plt.title("Frequency of values in each label")
plt.ylabel("counts")
plt.xlabel("value")
plt.show()



이렇게 요청하고 싶은 그래프를 만들 수있었습니다.

요약



value_counts를 사용하여 새 데이터 프레임을 만들고 빈도 막대 그래프를 출력했습니다.

참고로 한 것


  • BioTech 랩 노트: 학습용 데이터 세트 – seaborn[Python]
  • note.nkmk.me : pandas의 plot 메소드로 그래프를 작성하여 데이터를 시각화
  • 좋은 웹페이지 즐겨찾기