Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Moda Mediana
kafarek
post
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?
Go to the top of the page
+Quote Post
kriqs
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował strife 17.04.2007, 17:53:36
Go to the top of the page
+Quote Post
dr_bonzo
post
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
Go to the top of the page
+Quote Post
JaRoPHP
post
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ć.
Go to the top of the page
+Quote Post
kafarek
post
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?
Go to the top of the page
+Quote Post
dr_bonzo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
pavlo24
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/smile.gif)
6. Zliczasz ilość elementów b sprawdzić medianę, element o najwyższej ilości to moda.

Funkcji sam sobie poszukaj (IMG:style_emoticons/default/smile.gif) Algorytm masz.
Go to the top of the page
+Quote Post
koderrr
post
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
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ę (IMG:style_emoticons/default/biggrin.gif) Nie można już prościej wytłumaczyć (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Drohan
post
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
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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Drohan
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 16:06