Создание линии регрессии через полосу символов с использованием pandas или seaborn

Я новичок в Pandas и Seaborn и пытаюсь учиться. Я пытаюсь добавить линию тренда и гистограмму на один и тот же график. У меня есть некоторые данные, которые выглядят как

Year     Sample Size
 2000      500
 2001      3000
 2003      10000
 2004      20000
 2004      23000

Я новичок в пандах и морском рождении, и я пытаюсь провести линию через гистограмму, показывающую убывающую или возрастающую тенденцию, но изо всех сил пытаюсь сделать это на том же графике. До сих пор у меня есть барный участок. Ниже вы можете найти код.

sampleSizes['Sample Size'] -> — это столбец, который я рисую. Он имеет около 12 значений за 12 лет.

plt.figure()
ax = sampleSizes['Sample Size'].plot(kind='bar', title="Trend of Sample Sizes", figsize=(15, 10), legend=True, color = 'grey', fontsize=8)
plt.show()

Я изо всех сил пытаюсь добавить линию тренда к этому. Я был бы признателен, если бы кто-то мог указать мне в правильном направлении.

ОБНОВИТЬ

FinancialYear  Sample Size
   2001         2338
   2002         3171
   2003         2597
   2004         2740
   2005         3447
   2006         3098
   2007         2610
   2008         2819
   2009         2057
   2010         2174
   2011         2709

enter code here

person paddy    schedule 17.02.2018    source источник
comment
Является ли гистограмма подходящим типом представления для этого? Или линейный сюжет был бы более подходящим? Также есть seaborn.regplot, но похоже, что ваши данные вовсе не линейны.   -  person Arya McCarthy    schedule 17.02.2018
comment
@AryaMcCarthy да, я согласен, что линейный график был бы лучше, но я пытаюсь иметь гистограммы и линию, показывающую тенденцию данных на одном графике. Я надеюсь, что это дает понять, чего я пытаюсь достичь. Я немного отредактировал данные выше. Я просто случайно получил эти цифры. Цифры не обязательно отражают мои данные. Тем не менее, переменные   -  person paddy    schedule 17.02.2018


Ответы (1)


ОБНОВЛЕНИЕ2: используется обновленный набор данных

In [250]: lr = Ridge()

In [251]: lr.fit(df[['FinancialYear']], df['Sample Size'])
Out[251]:
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

In [252]: plt.bar(df['FinancialYear'], df['Sample Size'])
Out[252]: <Container object of 11 artists>

In [253]: plt.plot(df['FinancialYear'], lr.coef_*df['FinancialYear']+lr.intercept_, color='orange')
Out[253]: [<matplotlib.lines.Line2D at 0x171def60>]

Результат:

введите здесь описание изображения


ОБНОВЛЕНИЕ:

In [184]: from sklearn.linear_model import Ridge

In [185]: lr = Ridge()

In [186]: lr.fit(df[['Year']], df['Sample Size'])
Out[186]:
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

In [187]: plt.bar(df['Year'], df['Sample Size'])
Out[187]: <Container object of 5 artists>

In [188]: plt.plot(df['Year'], lr.coef_*df['Year']+lr.intercept_, color='orange')
Out[188]: [<matplotlib.lines.Line2D at 0x17062898>]

Результат:

введите здесь описание изображения


Попробуйте использовать для этого методы matplotlib:

plt.bar(df['Year'], df['Sample Size'])
plt.plot(df['Year'], df['Sample Size'], '-o', color='orange')

Результат:

введите здесь описание изображения

person MaxU    schedule 17.02.2018
comment
Я могу это сделать. Я пытаюсь сделать более плавную линию, похожую на линию регрессии, просто показывающую общую тенденцию. Как прямая восходящая линия (как в линейной регрессии) вместо соединения. - person paddy; 17.02.2018
comment
@paddy, пожалуйста, проверьте обновленный ответ - это то, что вы хотите? - person MaxU; 17.02.2018
comment
ОМГ ДА. Большое спасибо. Я так старался в течение последнего часа - person paddy; 17.02.2018
comment
@MaxU Это странно. Итак, ваш код работает, когда у меня есть все 12 значений. Когда я удаляю один из-за того, что он является выбросом, он, кажется, падает. Вы могли бы понять, почему это произошло? - person paddy; 17.02.2018
comment
@paddy, можете ли вы предоставить воспроизводимый набор данных? - person MaxU; 17.02.2018
comment
@MaxU Обновил мое описание. Когда я удаляю значение из 2000 года, он падает - person paddy; 17.02.2018
comment
@paddy, линейная функция плохо подходит для этих данных. Я бы подумал об использовании здесь более высокого полинома... - person MaxU; 17.02.2018
comment
@MaxU, так что ты здесь использовал? Кажется, вы вставили один и тот же код по ошибке - person paddy; 17.02.2018