Графики двух линий, которые подсчитывают количество вхождений по году *Python* - PullRequest
1 голос
/ 08 мая 2020

Я новичок в python,

Я пытаюсь определить количество 2 c курсов, которые школьный округ предлагает по годам. Я сгруппировал свои данные по годам и изменил классы на 0 - для одного класса и 1 - для другого класса. В идеале мне нужно, чтобы по оси абсцисс был год, а по оси ординат - количество раз, когда 0/1 встречается в данном году.

1 Ответ

1 голос
/ 09 мая 2020

Используйте pandas .DataFrame.groupby

  • " ... изменил классы на 0 - для одного класса и 1 - для другого класса"не требуется
import pandas as pd
import random
import matplotlib.pyplot as plt
import seaborn as sns

# data
random.seed(365)
data = {'class': [random.choice(['A.P. Economics - Macro', 'A.P. Economics - Micro']) for _ in range(100)],
        'year': [random.choice([*range(2000, 2021)]) for _ in range(100)]}

# create dataframe
df = pd.DataFrame(data)

# groupby, count and transform back to dataframe
t = pd.DataFrame(df.groupby(['year', 'class'])['class'].count()).rename(columns={'class': 'count'}).reset_index(level=1)

                       class  count
year                               
2000  A.P. Economics - Macro      1
2000  A.P. Economics - Micro      1
2001  A.P. Economics - Macro      2
2001  A.P. Economics - Micro      2
2002  A.P. Economics - Macro      3
2002  A.P. Economics - Micro      1
2003  A.P. Economics - Macro      3
2003  A.P. Economics - Micro      3
2004  A.P. Economics - Macro      4
2005  A.P. Economics - Macro      2
2005  A.P. Economics - Micro      1
2006  A.P. Economics - Macro      4
2006  A.P. Economics - Micro      1
2007  A.P. Economics - Micro      3
2008  A.P. Economics - Macro      3
2008  A.P. Economics - Micro      3
2009  A.P. Economics - Macro      2
2009  A.P. Economics - Micro      7
2010  A.P. Economics - Macro      5
2010  A.P. Economics - Micro      2
2011  A.P. Economics - Macro      4
2011  A.P. Economics - Micro      3
2012  A.P. Economics - Macro      1
2012  A.P. Economics - Micro      6
2013  A.P. Economics - Macro      2
2013  A.P. Economics - Micro      3
2014  A.P. Economics - Macro      5
2014  A.P. Economics - Micro      3
2015  A.P. Economics - Macro      1
2015  A.P. Economics - Micro      2
2016  A.P. Economics - Macro      3
2016  A.P. Economics - Micro      4
2017  A.P. Economics - Macro      2
2017  A.P. Economics - Micro      1
2018  A.P. Economics - Macro      2
2018  A.P. Economics - Micro      2
2019  A.P. Economics - Micro      1
2020  A.P. Economics - Micro      2

Гистограмма с морскими породами

sns.barplot(x=t.index, y='count', data=t, hue='class')
plt.xticks(rotation=90)
plt.legend(loc='upper right')
plt.show()

enter image description here

Линейный график

  • Однако это не оптимальный способ представления этих данных.
    • Создается впечатление, что данные непрерывны, когда они скрыты.
    • Это беспорядочно
    • Это не ясно передает информацию, которая является количеством вхождений класса в данном году.
    • Год интерпретируется как целое число, а не как дата-время.
sns.lineplot(x=t.index, y='count', data=t, hue='class')
plt.xticks(rotation=90)
plt.legend(loc='upper right')
plt.show()
...