#pandas #matplotlib #seaborn
#pandas #matplotlib #seaborn
Вопрос:
Следующий код в графическом виде на данный момент выглядит действительно беспорядочно. Причина в том, что у меня слишком много значений для ‘fare’. ‘Тариф’ варьируется от [0-500] с большинством значений в пределах первых 100.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
titanic = sns.load_dataset("titanic")
y =titanic.groupby([titanic.fare//1,'sex']).survived.mean().reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x='fare', y= 'survived', col = 'sex', kind ='bar' ,data= y,
size=4, aspect =2.5 , palette="muted")
g.despine(left=True)
g.set_ylabels("Survival Probability")
g.set_xlabels('Fare')
plt.show()
Я хотел бы попробовать разделить «стоимость» графиков на подмножества, но хотел бы видеть все графики одновременно на одном экране. Мне было интересно, возможно ли это без необходимости прибегать к groupby.
Мне придется поиграть со значениями ‘fare’, чтобы увидеть, что я хотел бы, чтобы каждый график представлял, но для примера давайте разбить график на эти значения ‘fare’.
[0-18]
[18-35]
[35-70]
[70-300]
[300-500]
Таким образом, всего будет 10 графиков на одной странице из-за сопоставления с противоположным полом.
Возможно ли это с помощью Seaborn? Нужно ли мне много настраивать с помощью matplotlib? Спасибо.
Комментарии:
1. Используйте
pd.cut
для определения категориальных ячеек тарифов и используйте их в качестве одной из переменных фасетирования в factorplot.2. Спасибо, я сейчас играю с этим.
Ответ №1:
На самом деле я написал небольшое сообщение в блоге об этом некоторое время назад. Если вы строите гистограммы, вы можете использовать by
ключевое слово:
import matplotlib.pyplot as plt
import seaborn.apionly as sns
sns.set() #rescue matplotlib's styles from the early '90s
data = sns.load_dataset('titanic')
data.hist(by='class', column = 'fare')
plt.show()
В противном случае, если вы просто строите подсчеты значений, вам придется свернуть свою собственную сетку:
def categorical_hist(self,column,by,layout=None,legend=None,**params):
from math import sqrt, ceil
if layout==None:
s = ceil(sqrt(self[column].unique().size))
layout = (s,s)
return self.groupby(by)[column]
.value_counts()
.sort_index()
.unstack()
.plot.bar(subplots=True,layout=layout,legend=None,**params)
categorical_hist(data, by='class', column='embark_town')
Редактировать Если вам нужен коэффициент выживаемости по диапазону тарифов, вы могли бы сделать что-то вроде этого
data.groupby(pd.cut(data.fare,10)).apply(lambda x.survived.sum(): x./len(x))
Комментарии:
1. Спасибо. Но как бы я получил «живучесть» с левой стороны (ось y)? Есть ли способ управлять отметками по оси x, чтобы я мог вводить числа, на которые я хочу разделить график? Кстати, хороший блог. Я узнал о «unstack» =)
2. @moundra гистограмму, которой вы можете управлять осью x с помощью
bins
, смотрите в моей правке для определения выживаемости по диапазону тарифов3. Кстати, как вы разместили изображение своего графика здесь? Обязательно ли было сначала сохранять изображение, а затем загружать на сайт и использовать эту ссылку?
4. @moundra На самом деле вы можете использовать copy paste, когда находитесь в диалоговом окне «загрузить изображение»
5. Спасибо. Я не знал, что это так просто.