Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def show_statistic_graph(data):
- # data - содержит данные по типу список словарей
- [{'title': 'Чорноморець - Дніпро-1. Без права на осічку. Студія після матчу', 'publishedAt': '2021-07-31T18:58:34Z', 'viewCount': '27761', 'likeCount': '447', 'dislikeCount': '33', 'commentCount': '39', 'link': 'https://www.youtube.com/watch?v=I8iNsBi18xo'}, {'title': 'Чорноморець - Дніпро-1. Огляд матчу / Розгром з шедевром Адамюка', 'publishedAt': '2021-07-31T18:42:16Z', 'viewCount': '222399', 'likeCount': '2944', 'dislikeCount': '128', 'commentCount': '425', 'link': 'https://www.youtube.com/watch?v=kWPA-ESx-5g'}]
- # Это пример данных, количество словарей может достигать до несколько сотень если нужно могу прикрепить реальный список который передается в функцию
- plt.title("ТОП 10 відео по переглядам")
- plt.xlabel('Місце в ТОПі')
- plt.ylabel('Кількість переглядів')
- # Дальше я меняю в словарях значения типа str на int, чтобы позже их можно было легко отсортировать.
- # Если кратко, убираю '', Было: 'viewCount': '222399', станет: 'viewCount': 222399.
- for dic in data:
- dic['viewCount'] = int(dic['viewCount'])
- dic['likeCount'] = int(dic['likeCount'])
- dic['dislikeCount'] = int(dic['dislikeCount'])
- dic['commentCount'] = int(dic['commentCount'])
- # Здесь идёт сортировка словарей за соотвествующим ключем. В нашем случае "viewCount" - просмотры.
- def get_data(x):
- return x['viewCount']
- result = sorted(data, key=get_data, reverse=True)
- # здесь я делаю список значений котрые достаю из отсортированого списка словарей, ОСТАВЛЯЯ только ТОП 10 по просмотрам.
- # ось Y
- y_count = []
- for y in result[:10]:
- y_count.append(y['viewCount'])
- # Здесь вручную вписал значения для оси X
- labels_top = ['Top10', 'Top9', 'Top8', 'Top7', 'Top6', 'Top5', 'Top4', 'Top3', 'Top2', 'Top1']
- y_count.reverse()
- # Дальше часть вашего кода, ну и построения графика.
- import pandas as pd
- df = pd.DataFrame({'positions': labels_top, 'values': y_count})
- ax = df.plot.bar(x='positions', y='values', rot=30)
- plt.ticklabel_format(style='plain', axis='y'))
- for graph in range(len(result[:10])):
- plt.bar(labels_top.pop(), y_count.pop())
- plt.grid()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement