Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ulubione / popularne artykuły - Favorite Post Calculator
Forum PHP.pl > Forum > PHP
Malinaa
Mamy artykuły (np. 100 rekordów) w bazie danych, pola typu liczba odsłon (views) i data publikacji (date) i inne.
Jak obliczyć, które artykuły są najbardziej popularne / ulubione posty czytelników?

Przydałby się funkcja obliczająca jakiś wskaźnik popularności (sprawdzająca popularność)
i aby można była w pętli foreach generującej tablice danych najnowszych artykułów
"zaznaczyć" te, które mają parametry odpowiadające ulubionym / popularnym postom.

Jak określić popularność postu? Parametry: liczba odsłon, czas... Macie pomysł jak to zrobić?
LowiczakPL
Jak dla mnie popularność posta można określić na podstawie:

sprawdzam ile dni temu był opublikowany post, jak często jest czytany w jakimś zakresie czasu
1. do tygodnia to propagacja tematu więc strzałów musi być coraz więcej = popularny
2. powyżej tygodnia do miesiąca znaczy temat się rozszedł i jest popularny = popularny

tendencja malejąca odsłon znaczy temat wygasa

pojedyncze strzały w dłuższych odstępach to jednostki zainteresowane tematem albo o nim dopiero usłyszały
Malinaa
Też tak to sobie wyobrażam, czyli wiemy o co chodzi smile.gif

Tylko nie chce mi się tego pisać, więc może pójdźmy na łatwiznę.
Czy są jakieś przykłady, najlepiej gotowce, gdzie do funkcji podstawię tylko czas, odsłony i problem z głowy.
Nic bardziej złożonego (dodatkowe pola w bazie danych itp.) nie są tu potrzebne, prosty skrypcik popularności.
dublinka
Cytat(Malinaa @ 2.03.2021, 19:13:41 ) *
Jak określić popularność postu? Parametry: liczba odsłon, czas... Macie pomysł jak to zrobić?


Liczba odslon zapisywana gdzies w tabeli
LowiczakPL
Powinieneś dysponować logami (im więcej różnych danych tym lepiej) dla posta wtedy istnieje jakaś podstawa aby napisać algorytm popularności, coś jak sztuczna inteligencja, to może być np filltr Bayeasa, który będzie się uczył aż przyniesie wymierne efekty.


Licznik odsłon mówi o odsłonach nie o popularności posta
Malinaa
Odsłony i czas pisałem już, że są w bazie.
Napisałem też, że chcę uniknąć dodatkowych pól tabeli, czy też tabel z logami, bo zdaję sobie sprawę, że przydałyby się dla algorytmu sztucznej inteligencji, czy też innego.

Interesuje mnie proste, najprostsze rozwiązanie (im mniej danych tym lepiej) jednak nie może to być zwykły licznik - nie o to pytam,
a nieco bardziej inteligentne rozwiązanie, bo popularność to bardziej złożony proces.
dublinka
Cytat(Malinaa @ 3.03.2021, 16:25:35 ) *
Odsłony i czas pisałem już, że są w bazie.
Napisałem też, że chcę uniknąć dodatkowych pól tabeli, czy też tabel z logami, bo zdaję sobie sprawę, że przydałyby się dla algorytmu sztucznej inteligencji, czy też innego.

Interesuje mnie proste, najprostsze rozwiązanie (im mniej danych tym lepiej) jednak nie może to być zwykły licznik - nie o to pytam,
a nieco bardziej inteligentne rozwiązanie, bo popularność to bardziej złożony proces.

Nie jestes w stanie wejsc do glowy ludzi i zapisac czy to im sie podobslo czy nie. Czy jest cos popularne przedklada sie np. iloscia spdzedanego materialu (gazety, ksiazki, gry itp) a w tym przypadku wyswietlenie arta. Nigdy do konca nie bedziesz pewien czy kliknieto przez przypadek czy nie ale liczenie odslon i posortowanie jest raczej jedynym wyjsciem bo technologia na takie zmyslowe inteligentne podejscie nie pozwala na tenczas.
Malinaa
Cytat(dublinka @ 3.03.2021, 19:03:53 ) *
Nie jestes w stanie wejsc do glowy ludzi i zapisac czy to im sie podobslo czy nie. Czy jest cos popularne przedklada sie np. iloscia spdzedanego materialu (gazety, ksiazki, gry itp) a w tym przypadku wyswietlenie arta. Nigdy do konca nie bedziesz pewien czy kliknieto przez przypadek czy nie ale liczenie odslon i posortowanie jest raczej jedynym wyjsciem bo technologia na takie zmyslowe inteligentne podejscie nie pozwala na tenczas.


Uspokój się, please z tą zmysłową inteligencją smile.gif
Mam na myśli matematyczne obliczenie odsłon do czasu i np. określenie wskaźnika popularności (minimum w procentach) dla 100 artów.
Wówczas w można by sprawdzić, czy dany art jest > wskaźnika i jeśli tak to = favorite posts calculator smile.gif
gino
Fiuuu aż tak poczytne masz te arty? Matematyka i statystyka to poniekąd moja dziedzina, pytanie czy na pewno jest Ci to potrzebne? Można określić prostą funkcją popularności w czasie danego artu. Nawet nie za bardzo wiesz co byś chciał. Dokladne trendy dane jstrony? Po co? Napisz w giełdzie ofert bo gotowca na pewno nikt oprócz Ciebie nie napisze. Poza tym jest trochę wtyczek do Google analystic, gotowe funcje do tego narzędzia na githubie. Tam będziesz miał całą statystykę każdej strony.
LowiczakPL
Malina tego algorytmu nie napisze się w kilka godzin, to kilka tygodni jak nie miesięcy, chodzi o nauczenie sztucznej inteligencji jak rozpoznawać popularny post.

Dane testowe do uczenia AI są dostępne w sieci ale nie z każdej dziedziny, gdyż każdy przypadek jest inny.

Najpierw musisz zbudować dane testowe następnie karmić nimi algorytmy,

wyłuskiwać poprawne dane,

znowu karmić algorytmy i tak w nieskończoność aż po okresie testów osiągniesz zadowalający efekt.

Co oczywiście nie znaczy że to koniec.

Czyli nauka algorytmu trwa cały czas,ktoś musi non stop analizować efekty czy są w miarę zadowalające ...
Malinaa
Cytat(gino @ 3.03.2021, 20:22:21 ) *
Fiuuu aż tak poczytne masz te arty? Matematyka i statystyka to poniekąd moja dziedzina, pytanie czy na pewno jest Ci to potrzebne? Można określić prostą funkcją popularności w czasie danego artu. Nawet nie za bardzo wiesz co byś chciał. Dokladne trendy dane jstrony? Po co? Napisz w giełdzie ofert bo gotowca na pewno nikt oprócz Ciebie nie napisze. Poza tym jest trochę wtyczek do Google analystic, gotowe funcje do tego narzędzia na githubie. Tam będziesz miał całą statystykę każdej strony.


Już pisałem, że chciałbym najprostsze rozwiązanie, prostą funkcję sprawdzającą popularność artów,
a mydlisz Pan oczy ludziom statystykami.
Statystyka jak matematyka nie kłamie.


Cytat(LowiczakPL @ 3.03.2021, 23:13:27 ) *
Malina tego algorytmu nie napisze się w kilka godzin, to kilka tygodni jak nie miesięcy, chodzi o nauczenie sztucznej inteligencji jak rozpoznawać popularny post.

Dane testowe do uczenia AI są dostępne w sieci ale nie z każdej dziedziny, gdyż każdy przypadek jest inny.

Najpierw musisz zbudować dane testowe następnie karmić nimi algorytmy,

wyłuskiwać poprawne dane,

znowu karmić algorytmy i tak w nieskończoność aż po okresie testów osiągniesz zadowalający efekt.

Co oczywiście nie znaczy że to koniec.

Czyli nauka algorytmu trwa cały czas,ktoś musi non stop analizować efekty czy są w miarę zadowalające ...


LowiczakPL Ja to rozumiem, dlatego wspomniałem, że nie chce mi się tego pisać.
Byłem jednak ciekaw, czy jest proste rozwiązanie problemu (funkcja).
Jak widać nie ma takiego, jak to już dublinka napisał licznik odwiedzin...
i satysfakcja gwarantowana.
gino
Raz piszesz że to nie ma być proty licznik tylko matematyczne większe obliczenia, teraz że to ma być prosty i zwykły licznik wystarczy, jak pisałem sam nie wiesz czego chcesz.Nie wypowiadaj się z tematów które mało ogarniasz. Mógłbym Ci wyłożyć statystykę i analizowanie danych, teorię zbiorów, badanie zmienności ciągów w czasie na poziomie akademickim, tylko po co? Pisanie takiej funkcji musi mieć swoje uzasadnienie merytoryczne. Jakbyś miał od 3 milionów odsłon takich artykułów w górę miesięcznie to można się bawić. Nawet google dałby Ci więcej api do rozszerzonych statystyk.Wszystko musi mieć swoje uzasadnienie. Chcesz taką funkcję - bo Ci się nie che pisać to inny dział jak pisałem.
LowiczakPL
to moja propozycja jest taka, stosowałem takie wzory w grach, to dla Twojego artykułu proponuję

ocena = unikalneWyświetlenia / (godziny od wydania * 8)

albo coś w tym stylu

view_count = ( 10 * log10( view_count ) ) ^ 2

To oczywiście dla popularnych artykułów bo wspominasz również o ulubionych a to co innego niż popularny.

Ulubiony artykuł ma licznik, ktoś klika że go lubi, wtedy możesz powyższe algorytmy wzbogacić o polubienia.

ocena = unikalneWyświetlenia / (godziny od wydania * 8) + pow(1.2, polubienia);
Malinaa
Cytat
Pisanie takiej funkcji musi mieć swoje uzasadnienie merytoryczne. Jakbyś miał od 3 milionów odsłon takich artykułów w górę miesięcznie to można...


Mydlenie oczu... Jeśli o mnie chodzi można przy 50 tys. mc. I nie uzasadnione jest podejście to tematu na zasadzie licznika odsłon.
Wczoraj mydlisz oczy o statystykach, dzisiaj chcesz udzielać na ten temat wykładów?

gino Ufam, że chcesz dobrze, więc zapytam: Właściwie o co Tobie chodzi?

Cytat
ocena = unikalneWyświetlenia / (godziny od wydania * 8)

Jest konkret o to chodziło.

Będzie dobrze i musi wystarczyć.
Dziękuje za dodatkowe info. Możliwe, że sprawdzę co daje jaki wynik.
Chociaż wczoraj już napisałem taką funkcję na zapytaniu.

  1. // Polarity conditions
  2. $timestamp = time() - ($time * 30 * 24 * 60 * 60); // time in months ago
  3. $conditions_for_date = date('Y-m-d H:i:s', $timestamp);
  4.  
  5. $queryBuilder = $em->createQueryBuilder();
  6.  
  7. $queryBuilder ->select()
  8. ->from('Articles', 'a')
  9. ->where()
  10. ->andWhere('a.uploaded_at > :date')
  11. ->setParameter('null', '')
  12. ->setParameter('date', $conditions_for_date)
  13. ->setMaxResults($limit)
  14. ->orderBy('a.views', 'DESC')
  15. ->addOrderBy('a.uploaded_at', 'DESC');


Samo order views to żaden rating, dodałem więc parę porównań i warunek $conditions_for_date.

Podaje $time, a $views oraz $uploaded_at mam, więc = Yes Git smile.gif
nospor
Z ciekawosci:
->setParameter('null', '')
co to robi?
LowiczakPL
jeśli szukasz wyników z ostatniego miesiąca to może tak

  1. ->andWhere('a.uploaded_at >= (NOW() - INTERVAL 1 MONTH)')


  1. SELECT * FROM table_name WHERE updated_at > (NOW() - INTERVAL 1 MONTH)
Malinaa
Cytat(LowiczakPL @ 4.03.2021, 18:34:39 ) *
jeśli szukasz wyników z ostatniego miesiąca to może tak


Dla sprostowania: "Chociaż wczoraj już napisałem taką funkcję na zapytaniu." ... funkcję tę napisałem dla wyświetlenia 5 popularnych artów,
pozostaje jeszcze napisać funkcję dla sprawdzenia czy art mieści się w ocenie popularności, jeśli tak wyświetl etykietę "Popularny" i tutaj przydadzą się podane "wzory".

Wolałem zamiast ->andWhere('a.uploaded_at >= (NOW() - INTERVAL 1 MONTH)') dać $conditions_for_date
mając na względzie funkcję = ocena (wskaźnik popularności), ale dzięki.


Cytat(nospor @ 4.03.2021, 16:55:03 ) *
Z ciekawosci:
->setParameter('null', '')
co to robi?


To będzie nasz Secret secret secret:
->where('a.thumbnail != :null')

smile.gif


Funkcja napisana i będzie pomocna.

  1. // [ocena = unikalne wyswietlenia / (godziny od publikacji * 8)] [wskaznik = default 8 hours]
  2.  
  3. public function favoriteCalculator($uniqueViews, $dateArticle, $hoursIndicator = 8) {
  4.  
  5. $hours_from_publication = round((time() - $dateArticle) / (60 * 60));
  6.  
  7. $rating = ($uniqueViews / ($hours_from_publication * $hoursIndicator));
  8.  
  9. return $rating;
  10. }


// Popular post (function)
$indicator = 0.95;

foreach () {
...
$rating = $this->favoriteCalculator($views_article, $date_article);
if (($rating > $indicator)) $status = 'popular';
}

Można by jeszcze zapytać o drobiazgi:
1. $hoursIndicator - dlaczego 8h, czy tak będzie optymalnie, w jakich warunkach?
2. $indicator - jaką wartość przyjąć za optymalną dla sprawdzenia $rating, przyjąłem 0.95?
LowiczakPL
Tu już zaczyna się analiza algorytmów i dobranie odpowiedniego współczynnika, gdyż każdy przypadek jest inny.

Stosując podobne algorytmy w grach, wcześniej robię testy algorytmów dla prawdziwych danych.

Musisz mieć dane wejściowe nakarmić nimi te algorytmy i przeanalizować wyniki, na podstawie analizy dobrać wpółczynniki dla Ciebie satysfakcjonujące, tak ja robię.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.