Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Moda Mediana
kafarek
post 17.04.2007, 13:47:34
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 19.03.2007
Skąd: Dąbrowa Górnicza, Kraków

Ostrzeżenie: (0%)
-----


Potrzebuje napisac dwa skrypty ktore beda liczyly mode (wyraz ktory najczesciej wystepuje) i mediane ( ten co jest w samym srodku) i nie wiem jak to napisac. Pomoże ktos?


--------------------
Mój blog: kafaro.pl
Go to the top of the page
+Quote Post
kriqs
post 17.04.2007, 14:10:22
Post #2





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 31.05.2006

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $tekst = file_get_contents( 'test.txt' );
  3.  
  4. $tekst = explode(' ', $tekst );
  5.  
  6. foreach( $tekst as $wyraz )
  7. {
  8. $wyraz = trim( $wyraz );
  9. if ( !isset( $w[$wyraz] ) )
  10. {
  11. $w[$wyraz] = 1;
  12. }
  13. else
  14. {
  15. $w[$wyraz]++;
  16. }
  17. }
  18.  
  19. echo '<pre>';
  20. var_dump( $w );
  21. ?>


prosze ale i tak znajac zycie zaraz wypadnie jakis masta i pokaze jak to zrobic krócej smile.gif

Ten post edytował strife 17.04.2007, 17:53:36


--------------------
Pozdrawiam
kriqs

mam nadzieje ze pomoglem :)
Go to the top of the page
+Quote Post
dr_bonzo
post 17.04.2007, 15:39:33
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Mediana: liczysz ilosc elementow w tablicy i bierzesz
*srodkowy elelment gdy ilosc jest nieparzyysta
* srednia z dwoch srodkowych, gdy ilosc jest parzysta

Moda:
http://pl.php.net/manual/en/function.array-count-values.php + MAX z tablicy


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
JaRoPHP
post 18.04.2007, 08:21:51
Post #4





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 17.04.2007, 14:39:33 ) *
Mediana: liczysz ilosc elementow w tablicy i bierzesz
*srodkowy elelment gdy ilosc jest nieparzyysta
* srednia z dwoch srodkowych, gdy ilosc jest parzysta

Niby wszystko ok, ale najważniejszą sprawą dotyczącą mediany, jest to, że jest to wartość środkowa w uporządkowanym zbiorze danych. Więc najpierw należałoby tablicę posortować.


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
kafarek
post 18.04.2007, 19:52:00
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 19.03.2007
Skąd: Dąbrowa Górnicza, Kraków

Ostrzeżenie: (0%)
-----


Dobrze ale jak pozniej wziac ten srodkowy wyraz z tej medianay ewentualnie srednia dwoch srodkowych?


--------------------
Mój blog: kafaro.pl
Go to the top of the page
+Quote Post
dr_bonzo
post 18.04.2007, 22:44:00
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
Niby wszystko ok, ale najważniejszą sprawą dotyczącą mediany, jest to, że jest to wartość środkowa w uporządkowanym zbiorze danych. Więc najpierw należałoby tablicę posortować.

No tak, o tym zapomnialem biggrin.gif


Cytat
Dobrze ale jak pozniej wziac ten srodkowy wyraz z tej medianay ewentualnie srednia dwoch srodkowych?

MAatkooo. Ustaw sobie 9 szklanek, podziel 9/2 zaokraglij w gore i otrzymasz N, i odlicz od lewej Nta szklanke i to bedzie srodkowa.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
pavlo24
post 16.05.2008, 21:57:39
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


Cytat(kriqs @ 17.04.2007, 15:10:22 ) *
  1. <?php
  2. $tekst = file_get_contents( 'test.txt' );
  3.  
  4. $tekst = explode(' ', $tekst );
  5.  
  6. foreach( $tekst as $wyraz )
  7. {
  8. $wyraz = trim( $wyraz );
  9. if ( !isset( $w[$wyraz] ) )
  10. {
  11. $w[$wyraz] = 1;
  12. }
  13. else
  14. {
  15. $w[$wyraz]++;
  16. }
  17. }
  18.  
  19. echo '';
  20. var_dump( $w );
  21. ?>


prosze ale i tak znajac zycie zaraz wypadnie jakis masta i pokaze jak to zrobic krócej smile.gif


------------------------------------------------------

A jak to przerobić, żeby liczyło medianę dla tabeli T w kolumnie X?
Chodzi mi o polecenie dla MySQL.
Go to the top of the page
+Quote Post
Drohan
post 16.01.2010, 00:24:04
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


Cytat(kriqs @ 17.04.2007, 14:10:22 ) *
  1. <?php
  2. $tekst = file_get_contents( 'test.txt' );
  3.  
  4. $tekst = explode(' ', $tekst );
  5.  
  6. foreach( $tekst as $wyraz )
  7. {
  8. $wyraz = trim( $wyraz );
  9. if ( !isset( $w[$wyraz] ) )
  10. {
  11. $w[$wyraz] = 1;
  12. }
  13. else
  14. {
  15. $w[$wyraz]++;
  16. }
  17. }
  18.  
  19. echo '<pre>';
  20. var_dump( $w );
  21. ?>


prosze ale i tak znajac zycie zaraz wypadnie jakis masta i pokaze jak to zrobic krócej smile.gif


wszystko ładnie ale u mnie na początku wyświetlania danych pojawia się:

array(1) {
["

DANE

"]=>
int(1)
}


jak usunąć te wszystkie znaczniki?

oraz 2 pytanie jak to przerobić, żeby liczyło medianę dla tabeli T w kolumnie X? z pliku xls?
Go to the top of the page
+Quote Post
thek
post 16.01.2010, 14:12:58
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




1. Znaki przestankowe zakłamują wyniki. Musisz je NA SAMYM POCZĄTKU usunąć z tekstu.
2. Konwertujesz tekst na tablicę.
3. Usuwasz duplikaty z tej tablicy.
4. Zliczasz w tekście pełnym wystąpienia tworząc tablicę, gdzie kluczem są wyrazy a wartością liczba wystąpień.
5. Sortujesz smile.gif
6. Zliczasz ilość elementów b sprawdzić medianę, element o najwyższej ilości to moda.

Funkcji sam sobie poszukaj smile.gif Algorytm masz.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
koderrr
post 16.01.2010, 17:27:26
Post #10





Grupa: Zarejestrowani
Postów: 255
Pomógł: 16
Dołączył: 4.07.2007

Ostrzeżenie: (0%)
-----


dlaczego mialby usuwac duplikaty ?
Go to the top of the page
+Quote Post
thek
post 16.01.2010, 18:45:16
Post #11





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Bo w ten sposób stworzy listę UNIKALNYCH słów w tekście całym. Najlepiej jeszcze wcześniej potraktować je funkcja konwerstującą wszystkie do lowercase by "jakoś" było uznane za to samo co "Jakoś".
A więc lecąc od początku. Przyjmując za $text całość tekstu:
1) preg_replace wszystkich znaków interpunkcyjnych na pusty w $text i dla pewności zamiana wszelkich wielokrotnych spacji na pojedynczą też wyrażeniem regularnym, a już dla kompletności trim i strtolower.
2) explode $text do tablicy $array_text po spacji
3) $unique jako wynik array_unique na $array_text
4) ten krok można rozwiązać na kilka sposobów bo algorytmów zliczania na tę chwile już kilka wymyśliłem, ale podam tu dwa
ver. 1) array_keys na "oczyszczonym" $text z punktu 1) używając każdego elementu z $unique a potem count() na owym wyniku i wpis do tablicy
ver. 2) posortowanie $array_text i tak posortowana zmienna już łatwo może posłużyć do liczenia. Jeden przebieg w pętli foreach z if dodającym 1 do aktualnego słowa lub zamieniającym na nowe z licznikiem równym 1
Tak czy inaczej ważne by tworzyć tablicę par "słowo" => ilość_wystąpień
5) Posortowanie tablicy według wartości.
6) Tego chyba nie muszę już tłumaczyć?

I niech mi ktoś jeszcze napisze, że tego nie rozumie bo chyba ugryzę biggrin.gif Nie można już prościej wytłumaczyć smile.gif
Do odczytu xls trzeba napisać albo własny parser albo szukać gotowców (http://sourceforge.net/projects/phpexcelreader/, http://www.tutorials.pl/2009/02/php-excel-...der-generator/). Więcej chyba już nie powinno Ci być potrzebne do napisania.

Ten post edytował thek 16.01.2010, 18:59:24


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Drohan
post 19.01.2010, 22:47:26
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


zmodyfikowałem ten kod na taki który mi bardziej odpowiada


  1. $plik = file_get_contents("tescik.xls");
  2. $plik = explode("\n",$plik);
  3. echo"<table border=\"0\"><tr><td><b>Imię</b></td>";
  4. for ($i=1;$i<18;$i++){
  5. echo"<td><b>Pytanie ".$i."</b></td>";
  6. }
  7. echo "</tr>";
  8.  
  9. for ($i=0;$i<=count($plik);$i++){
  10. $row=explode("\t",$plik[$i]);
  11. echo "<tr>";
  12. for ($j=0;$j<=count($row);$j++){
  13. echo "<td align=center>".$row[$j]."</td>";
  14. }
  15. echo "</tr>";
  16. }



wszystko sie ladnie w tabeli miesci ale nie wiem jak mam policzyc ta mediane nie mam zadnego pomyslu nierozumiem wogole kolego Twojego pkt 4

w w/w moim pliku zamieszczane sa odpowiedzi z formularza które sa przesyłane POST a zapisywanie odpowiedzi są jako o1, o2, o3 itd.. do o20i są one ładowane do pliku, który zostaje potem wyswietlony w w/w kodzie nastepnie musi być liczona median kolumnami i próbuję już chyba z 18 godzinę dziś ale mi nic kompletnie nie wychodzi
Go to the top of the page
+Quote Post
thek
post 19.01.2010, 23:25:27
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




No to pomyśl... Tak naprawdę Twoje wnętrze pliku to macierz jeśli dobrze zrozumiałem. Czyli masz postać

w1,1 w1,2 w1,3 w1,4
w2,1 w2,2 w2,3 w2,4
w3,1 w3,2 w3,3 w3,4

A więc co za problem przy liczeniu mediany dla kolumny zrobić sobie tablice kolumn?
k1 = array( w1,1 w2,1 w3,1 )
k2 = array( w1,2 w2,2 w3,2 )
i tak dalej...
To po prostu stworzenie $j tablic, które uzupełniasz o elementy z kolejnych $i wierszy. Potem tylko liczenie mediany i mody w tych tablicach.

Wytłumaczę Ci punkt 4 na podstawie 1 przykładu.
Bierzemy tablicę wyrazów z całego tekstu. Tu muszę się palnąć w dekiel, bo miałem napisać $array_text z punktu drugiego smile.gif Teraz dla każdego elementu w tablicy $unique sprawdzam ilość wystąpień konkretnego słowa w $array_text. Można to zrobić poprzez policzenie ilości kluczy o tej samej wartości co wiąże się z takim prostym manewrem jak count( array_keys( $array_text, $unique[$i] ) ). Teraz zapisujemy to jako parę
'słowo' => wystąpień
w tablicy wynikowej. To cała idea punktu 4)

Ten post edytował thek 19.01.2010, 23:42:33


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Drohan
post 22.01.2010, 22:18:10
Post #14





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


zrobilem cos takiego ale jakoś nie chce działać może mi ktoś pomóc sprawdzić ten kod?

  1. $plik=file_get_contents("baza.xls");
  2. $plik=explode("\n",$plik);
  3. for ($wiersz=1; $wiersz<=count($plik);$wiersz++){
  4. $row=explode("\t",$plik[$wiersz]);
  5. for ($kolumna=1;<=count($row);$kolumna++){
  6. ${odp.$kolumna}[substr($row[$kolumna],1,1)]++
  7. ${med_odp.$kolumna}[count(${med_odp.$kolumna})+1]=substr($row[$kolumna],1,1);
  8. }
  9. }
  10. for ($wiersz=1;$wiersz<18;$wiersz++){
  11. echo "Pytanie ".$wiersz;
  12. sort (${med_odp.$wiersz});
  13. if (count(${med_odp.$wiersz})%2==0){
  14. $med=${med_odp.$wiersz}[count(${med_odp.$wiersz})/2];
  15. }else{
  16. $med=${med_odp.$wiersz}[(count(${med_odp.$wiersz})+1)/2];
  17. }
  18. echo" Mediana: ".$med;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.07.2025 - 04:24