Нормализация барплота и упорядочение групп (ось X) - PullRequest
0 голосов
/ 20 января 2019

Ниже приведено то, что мне нужно было сделать, чтобы перейти к той части, где я пытаюсь реализовать barplot.

.
import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas as pd 
import statsmodels.api as sm 
import numpy as np

da = pd.read_csv("nhanes_2015_2016.csv")

da["DMDMARTL"] = da.DMDMARTL.fillna("Missing")
da["DMDMARTLdescript"] = da.DMDMARTL.replace({1: "Married", 2: "Widowed", 3: "Divorced", 4: "Separated", 5: "Never married", 
                             6: "Living with partner",       77: "Refused", 99: "Don't know"})

da["RIAGENDRx"] = da.RIAGENDR.replace({1: "Male", 2: "Female"})

da["agegrp"] = pd.cut(da.RIDAGEYR, [10, 20, 30, 40, 50, 60, 70, 80])

Я собрал кусочки кода тут и там и пришел к тому, что у меня ниже.

y = "prop"
dx = da.loc[~da.RIAGENDRx.isin(["Male"]), :]
plt.figure(figsize=(12, 5))
prop_df = (dx["agegrp"]
       .groupby(dx["DMDMARTLdescript"])
       .value_counts(normalize=True)
       .rename(y)
       .reset_index())
sns.barplot(x="agegrp", y=y, hue="DMDMARTLdescript", data=prop_df)

Результат выполнения кода выше следующий:

image

У меня следующие проблемы с сюжетом, который он генерирует.

  1. Хотя я просил каждую возрастную группу нормализовать `(normalized = True), основываясь на изображении, довольно очевидно, что сумма столбцов в каждой возрастной группе превышает 1.

  2. Возрастные группы упорядочены вдоль оси x несколько произвольным образом. Я не уверен, как заказать их в числовом порядке.

(файл csv общедоступен здесь ссылка на github .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...