Веб-скрейпінг як забава
Веб-скрейпінг - дивовижна штука. Можна збирати інформацію із відкритих джерел щодо чого завгодно. І улюблена моя ціль - веб-сайти, котрі містять однорідні дані із користувацькими оцінками. Наприклад, сайт з оцінками кінофільмів, або коміксів, або комп'ютерних ігор. В базі даних обов'язкові такі стовпчики: рейтинг, кількість голосів, ID на сайті-джерелі.
Власне, є у мене такі бази даних з комп'ютерними іграми (їх тут 6307), кінофільмами (їх 99998), телесеріалами (їх 43083 штуки), випусками коміксів (ще званих послідовним мистецтвом, 139848 штук). Все це у мене (крім коміксів) є з мітками за жанрами і тематиками. База даних із книжками поки в розробці, один всім відомий сайт піддаватись веб-скрейпінгу не хоче. Під катом трошки топів, а потім алгоритм обчислення.
Ви любите кіно? Я - помірно. Пошук кіно відповідно до власних смаків є неабиякою проблемою, особливо коли хочеться скуштувати класики, а не йти в кінотеатр на конвеєрні фільми.
І, для сміху, десять найгірших:
Десять найкращих коміксів:
Десять найгірших видань коміксів:
Власне, є у мене такі бази даних з комп'ютерними іграми (їх тут 6307), кінофільмами (їх 99998), телесеріалами (їх 43083 штуки), випусками коміксів (ще званих послідовним мистецтвом, 139848 штук). Все це у мене (крім коміксів) є з мітками за жанрами і тематиками. База даних із книжками поки в розробці, один всім відомий сайт піддаватись веб-скрейпінгу не хоче. Під катом трошки топів, а потім алгоритм обчислення.
Ви любите кіно? Я - помірно. Пошук кіно відповідно до власних смаків є неабиякою проблемою, особливо коли хочеться скуштувати класики, а не йти в кінотеатр на конвеєрні фільми.
Кіно
Розподіл за жанрами. Згори - суми ваг добрих фільмів, знизу - поганих. |
Суми ваг кінофільмів за роками. Бачимо занепади протягом 40-х (Друга світова війна), 60-х, вибухи протягом 70-х та 90-х. |
За версією мого алгоритму, десять найкращих фільмів всіх часів у порядку виходу:
- Хрещений батько (1972, кримінальна драма)
- Втеча з Шоушенку (1994, кримінальна драма)
- Кримінальне чтиво (1994, кримінальна драма)
- Форрест Гамп (1994, романтична драма)
- Бійцівський клуб (1999, драма)
- Матриця (1999, науково-фантастичний бойовик)
- Володар перснiв: Хранителi персня (2001, пригодницька казкова драма)
- Володар перснiв: Повернення короля (2003, пригодницька казкова драма)
- Темний лицар (2008, кримінальний трилер-бойовик)
- Початок (2010, містичний науково-фантастичний трилер-бойовик)
І, для сміху, десять найгірших:
- Бетмен і Робін (1997, казково-фантастичний бойовик)
- Поле бою - Земля (2000, пригодницький науково-фантастичний бойовик)
- Жінка-Кішка (2003, казковий кримінально-романтичний трилер)
- Дуже епічне кіно (2007, пригодницька комедія)
- Нереальний блокбастер (2008, комедія)
- Зустріч із спартанцями (2008, комедія)
- Сутінки (2008, казкова романтична драма)
- Сутiнки 2. Сага: Новий мiсяць (2009, пригодницька казкова романтична драма)
- Сутiнки. Сага: Затемнення (2010, пригодницька казкова романтична драма)
- П'ятдесят вiдтiнкiв сiрого (2015, романтична драма)
Комікси
Комікси за роками. Вибух лайна у 2012 році. |
Десять найкращих коміксів:
- Batman: The Killing Joke (1988) OGN SC (1988, "Бетмен: Вбивчий жарт" 1988 року у м'якій обкладинці)
- V for Vendetta (1988-1989) TPB (1990, "V означає вендетта" 1989-1990 років у м'якій обкладинці)
- Watchmen (1986-1987) TPB (1995, "Хранителі" 1986-1987 років у м'якій обкладинці)
- Kingdom Come (1996) TPB (1997, "Друге пришестя" 1996 року у м'якій обкладинці)
- The Walking Dead (2003-...) TPB vol. 01 (2004, "І мертві підуть" із 2003 року до сьогодні, перша збірка у м'якій обкладинці)
- Watchmen (1986-1987) Absolute Edition (2005, "Хранителі" 1986-1987 років, абсолютне видання)
- All Star Superman (2006-2008) #1 (2006, "Славетний Супермен" 2006-2008 років, випуск №1)
- All Star Superman (2006-2008) #6 (2007, "Славетний Супермен" 2006-2008 років, випуск №6)
- All Star Superman (2006) HC vol. 01 (2007, "Славетний Супермен" 2006-2008 років, перша збірка у твердій обкладинці)
- Batman and Robin (2009-2011) #1 (2009, "Бетмен та Робін" 2009-2011 років, випуск №1)
Десять найгірших видань коміксів:
- Teen Titans (2003-2011) #27 (2005, "Юні титани" 2003-2011 років, випуск №27)
- Teen Titans (2003-2011) #28 (2005, "Юні титани" 2003-2011 років, випуск №28)
- Civil War: The Return (2007) #1 (2007, "Громадянська війна: повернення" 2007 року, єдиний випуск)
- The Amazing Spider-Man (1963-2014) #544 (2007, "Дивовижний Людина-павук" 1963-2014 років, випуск №544)
- The Amazing Spider-Man (1963-2014) #544 (2007, "Дивовижний Людина-павук" 1963-2014 років, випуск №544 з обкладинкою від Дьюрдевича)
- The Sensational Spider-Man (2006-2007) #41 (2007, "Блискучий Людина-павук" 2006-2007 років, випуск №41)
- The Amazing Spider-Man (1963-2014) #545 (2008, "Дивовижний Людина-павук" 1963-2014 років, випуск №545)
- The Amazing Spider-Man (1963-2014) #545 (2008, "Дивовижний Людина-павук" 1963-2014 років, випуск №545 з обкладинкою від Дьюрдевича)
- The Amazing Spider-Man (1963-2014) #638 (2010, "Дивовижний Людина-павук" 1963-2014 років, випуск №638)
- Green Arrow (2011-...) #1 (2011, "Зелений стріла" з 2011 року дотепер, випуск №1)
Відеоігри
Комп'ютерні ігри за роками. Від 2009 року продукується все більше шлаку. |
Десять найращих комп'ютерних ігор:
- S.T.A.L.K.E.R.: Тінь Чорнобиля (2007, шутер від першої особи, пригоди, альтернативна історія, наукова фантастика, жахи)
- Grand Theft Auto IV (2008, шутер від третьої особи, пригоди, перегони, кримінал)
- Fallout 3 (2008, шутер від першої особи, пригоди, постапокаліпсис, наукова фантастика)
- S.T.A.L.K.E.R.: Поклик Прип'яті (2009, шутер від першої особи, альтернативна історія, наукова фантастика, жахи, армія)
- Dragon Age: Origins (2009, рольова гра, казкове середньовіччя)
- Mass Effect 2 (2010, шутер від третьої особи, рольова гра, пригоди, наукова фантастика)
- Dragon Age: Origins - Awakening (2010, рольова гра, комедія, казкове середньовіччя)
- The Elder Scrolls V: Skyrim (2011, слешер від першої особи, рольова гра, пригоди, казкове середньовіччя)
- Grand Theft Auto V (2013, шутер від третьої особи, пригоди, перегони, кримінал)
- The Witcher 3: Wild Hunt (2015, рольова гра, пригоди, казкове середньовіччя)
Десять найгірших комп'ютерних ігор:
- Call of Duty: Modern Warfare 3 (2011, шутер від першої особи, шпигунство, армія)
- Warface (2012, багатокористувацька, шутер від першої особи, наукова фантастика, армія)
- Need for Speed: Most Wanted (2012, перегони, кримінал)
- Aliens: Colonial Marines (2013, шутер від першої особи, наукова фантастика, жахи)
- World of Warplanes (2013, онлайн, симулятор, Друга світова війна)
- Call of Duty: Ghosts (2013, шутер від першої особи, армія)
- Rambo: The Video Game (2014, шутер від першої особи, шпигунство, армія)
- Sacred 3 (2014, рольова гра, пригоди, казкове середньовіччя)
- Call of Duty: Advanced Warfare (2014, шутер від першої особи, наукова фантастика, армія)
- Call of Duty: Black Ops 3 (2015, шутер від першої особи, наукова фантастика, армія)
Ранжування
Для ранжування якості творів використовую особливу формулу. Проста оцінка від 1 до 10 для цієї мети не підходить, тому що якщо якийсь чеський кінофільм на основі 500 голосів отримує середню оцінку 9,3, а голівудський визнаний шедевр на основі 500000 оцінок - 8,3, то чеська перлина буде в ранжуванні за "оцінкою" вище за популярні фільми, що не є природньо.- Перш за все, виконати нормалізацію "оцінки" - приведення до діапазону [0; 1]. Якщо оцінки в діапазоні від 1 до 10, то поділити кожну на 10. Це дає розуміння "оцінки" як частки задоволеності глядачів фільмом: 1,0 - повна задоволеність, 0,1 - прямуюча до нуля.
- Обчислити медіану всіх оцінок. SELECT AVG(`rating`) FROM (SELECT `rating` FROM `%tablename` ORDER BY `rating` LIMIT 2 - (SELECT COUNT() FROM `%tablename%`) % 2 OFFSET (SELECT (COUNT() - 1) / 2 FROM `%tablename%`)). Наприклад, медіана оцінок кінофільмів рівна 6,3.
- Відняти від кожної "оцінки" медіану оцінок. Таким чином оцінки, менші за медіанну оцінку, дадуть від'ємне значення.
- Помножити отриману в №3 різницю на кількість голосів користувачів. Таким чином, добрі твори, будучи широко відомими, отримують дуже високий результат, а погані твори, будучи широко відомими - жахливо низький (від'ємний).
Одним запитом пункти 1-4 мають наступний вигляд:
UPDATE `%tablename%` SET `weight` = `voters_num` * (`rating` - (SELECT AVG(`rating`) FROM (SELECT `rating` FROM `%tablename%` ORDER BY `rating` LIMIT 2 - (SELECT COUNT() FROM `%tablename%`) % 2 OFFSET (SELECT (COUNT() - 1) / 2 FROM `%tablename%`)))) / 10
Нема в улюбленому SQLite вбудованої функції для обчислення медіани, що поробиш :(
Коментарі
Дописати коментар