Построение нескольких вспомогательных участков с помощью инструментов визуализации панд - PullRequest
0 голосов
/ 13 сентября 2018

Я использую набор данных обзора IGN из kaggle , и я пытаюсь получить частотный график для каждой платформы nintendo x день недели с указанной даты запуска, вот код

import pandas as pd
df = pd.read_csv("ign.csv")
datetime_df = pd.DataFrame({'year': df["release_year"],
                   'month': df["release_month"],
                   'day': df["release_day"]})
df["date"] = pd.to_datetime(datetime_df)

df["week_day"] = df["date"].apply(lambda x : x.weekday_name)

nintendo = ['Wii','Nintendo DS','Nintendo 3DS','Nintendo DS',
            'Game Boy', 'Game Boy Color','Nintendo 64DD','Game Boy Advance',
            'New Nintendo 3DS','GameCube','Nintendo DSi','Super NES']

base_nintendo = df[df["platform"].isin(nintendo)]

data = base_nintendo.groupby(["platform","week_day"]).size()

data =data.unstack().fillna(0).stack()

data

с выводом:

platform          week_day 
Game Boy          Friday         5.0
                  Monday         5.0
                  Saturday       0.0
                  Sunday         0.0
                  Thursday       0.0
                  Tuesday        4.0
                  Wednesday      8.0
Game Boy Advance  Friday       131.0
                  Monday       109.0
                  Saturday       0.0
                  Sunday         1.0
                  Thursday     153.0
                  Tuesday      123.0
                  Wednesday    106.0
Game Boy Color    Friday        89.0
                  Monday        43.0
                  Saturday       1.0
                  Sunday         1.0
                  Thursday      55.0
                  Tuesday       78.0
                  Wednesday     89.0
GameCube          Friday        99.0
                  Monday       100.0
                  Saturday       3.0
                  Sunday         0.0
                  Thursday      83.0
                  Tuesday      124.0
                  Wednesday    100.0

Я пытался сделать:

data.groupby("platform").plot("barh")

, но это дает мне только последнюю платформу (wii):

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Одним из решений будет использование seaborn и сюжет barh.

data = data.unstack().fillna(0).stack()
data = data.reset_index().rename(columns={0:'value'})

import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10,7))
sns.barplot(y='platform',x='value', hue='week_day', data=data, orient='h')
plt.show()
0 голосов
/ 13 сентября 2018

Обратите внимание, что над графиком вы получаете по одной строке для каждой из ваших групп, например Super NES ....? Это объект matplotlib.AxesSubplot для ваших других участков.

groupby.plot фактически возвращает объект matplotlib.AxesSubplot для каждой из ваших групп. С другой стороны, блокнот ipython показывает только ваш последний сюжет.

Решение таково: измените ваш data.groupby("platform").plot("barh") на my_axes = data.groupby("platform").plot("barh"), а затем работайте над ними один за другим, например

for ax in my_axes:
    ax.savefig(filename)

Альтернатива, вы можете сделать это:

gp = data.groupby("platform")
f, axes = plt.subplots(5, 5)  # or any other large enough subplot grid
for k, ax in zip(gp.groups, axes.ravel()):
    gp.get_group(k).plot('barh', ax=ax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...