vp-webdev
7 лет назадОтрисовка графиков средствами python
Порой, необходимо поработать со статистикой и построить графики. На помощь прибегает Python с библиотекой matplotlib.
Рассмотрим как с ней работать на примере. Мне необходимо было получить данные по голам в разных чемпионатах, а точнее: в России, в Англии и в Испании. Для этого я воспользовался сайтом Чемпионат.com
В первую очередь я спарсил данные по забитым и пропущенным голам. И записал их в массив, а точнее в словари.
Рассматривать этот процесс в полной мере не будем, но код опишу:
//в этой функции мы получаем html.
def parsing(url):
r = requests.get(url)
return getDatas(r.text)
//в функцию передаём html код
def getDatas(html):
//создаём объект из html кода
soup = BeautifulSoup(html, 'lxml')
//ищем турнирную таблицу и строки с командами
table_teams = soup.find('table', class_='table').findAll('tr')
//получаем количество найденных строк
count_table = len(table_teams)
//укажем с какой строки будем вести поиск, в нашем случае со второй. Потому в первой строке нет нужных данных
i=1
//объявляем словарь
list = {}
//проходим полученные данные циклом
while i < count_table:
//ищем колонку в строке с нужными данными
spans = table_teams[i].find('td', class_='_big').string
//записываем в словарь
list.setdefault(i, spans)
i = i+1
print(list)
//Этот метод сработает при вызове из консоли
if __name__=='__main__':
//вызываем функцию и передаём в нее URL нужной страницы. parsing('https://www.championat.com/football/_russiapl/2200/table/all.html')
Подробнее о BeautifulSoup было в одной из прошлых статей.
Теперь будем строить диаграмму.
Для этого необходимо установить библиотеку
pip install matplotlib
или, если вы используете Python3
pip3 install matplotlib
import matplotlib.pyplot as plt
//создадим массив с полученными данными (номер команды, количество пропущенных мячей)
goal = [(15, 36), (19, 32), (9, 29), (10, 29), (12, 29), (18, 28), (16, 26), (8, 23), (11, 23), (13, 23), (17, 22), (20, 22), (5, 20), (7, 20), (14, 20), (3, 14), (4, 14), (6, 12), (1, 11), (2, 11)]
//объявляем массивы x и y. Это необходимо для указания данных по горизонтали и вертикали
x = []
y = []
//пройдём циклом. функция sorted поможет отсортировать массив по ключу.
for g in sorted(goal):
y.append(int(g[1]))
x.append(float(g[0]))
//создаём фигуру, точнее область, где будет диаграмма
fig = plt.figure()
//Добавляет объект для рисования графика, в аргументе укажем размер сетки, а нашем случае 1х1
ax1 = fig.add_subplot(111)
//создаем график, с данным, которые получили. 'c' означает цвет
ax1.plot(x, y, c='g')
//задаем настройки для х оси
ax1.set_xticks(x)
//указываем, что нам надо отобразить сетки по значениям осей
ax1.grid(True)
// сохраняем в фото
plt.savefig('p_english.png')
//выводим на экран что получилось
plt.show()
Что получилось:
Данный пост подготовлен автором @zheev
Фото взято с сайта izvestia.nikolaev.ua