WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Häufigkeiten von Einträgen in einer Matrix plotten

 

Olaf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2022, 10:32     Titel: Häufigkeiten von Einträgen in einer Matrix plotten
  Antworten mit Zitat      
Hallo zusammen

ich bin neu in MATLAB und möchte gerne Einträge in einer Matrix (2 Spalten) nach Häufigkeiten plotten. Kann mir jemand helfen?
Beispiel (CODE unten):

Matrix A:
Spalte 1: ID (von irgendwas)
Spalte 2: Datum wann die ID das gemacht hat

zuerst kann ich es sortieren und erhalte Matrix B

mein Ziel ist es eine Matrix C zu generieren:
Spalte 1: Anzahl Einträge (fortlaufende Zahl; - einfache Einträge, doppelte Einträge, dreifache Einträge,.....)

Spalte 2: Häufigkeit - einfache Einträge kommen x-mal vor; doppelte Einträge kommen y-mal vor,...)

Das kann ich dann mittels BarPlot anzeigen

Vielen Dank für jeden Tipp

Code:

function ABC
    A=[{'1'} {'10.01.2022'};{'1'} {'10.01.2022'};{'2'} {'10.01.2022'};{'1'} {'12.01.2022'};{'33'} {'10.01.2021'};{'1'} {'10.01.2022'}];
    B=sortrows(A,2);
    B=sortrows(B,1);
%... ????? wie komme ich jetzt zu Matrix C ????
    C=[1 3; 2 0; 3 1];
    bar(C(:,2));    
    ylabel('Häufigkeit');
    xlabel('Anzahl');
end
 



A =

6×2 cell array

{'1' } {'10.01.2022'}
{'1' } {'10.01.2022'}
{'2' } {'10.01.2022'}
{'1' } {'12.01.2022'}
{'33'} {'10.01.2021'}
{'1' } {'10.01.2022'}


B =

6×2 cell array

{'33'} {'10.01.2021'}
{'1' } {'10.01.2022'}
{'1' } {'10.01.2022'}
{'2' } {'10.01.2022'}
{'1' } {'10.01.2022'}
{'1' } {'12.01.2022'}


B =

6×2 cell array

{'1' } {'10.01.2022'}
{'1' } {'10.01.2022'}
{'1' } {'10.01.2022'}
{'1' } {'12.01.2022'}
{'2' } {'10.01.2022'}
{'33'} {'10.01.2021'}


C =

1 3
2 0
3 1


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2022, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe nicht recht, wie du auf C kommst. Müsste die zweite Spalte nicht [4;1;1] sein? Und sollte die erste Spalte nicht {'1';'2';'33'} sein?

Generell wäre meine Empfehlung, hier mit categoricals zu arbeiten, z.B.
Code:
events = categorical(A(:,1));
histogram(events)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Olaf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2022, 15:03     Titel:
  Antworten mit Zitat      
Vielen Dank für den Tipp,

C soll mein Ergebnisvektor sein. C(1,Smile entspricht die Häufigkeit wie oft ein Vorfall 1x vorkommt; C(2,Smile wie oft es doppelte Einträge gibt usw.

Ich habe auch selbst noch weiter probiert. So funktioniert es jetzt, aber ich bin sicher man kann das in MATLAB auch eleganter machen (ohne Schleifen etc.).

Code:

function ABC
    A=[{'1'} {'10.01.2022'};{'1'} {'10.01.2022'};{'2'} {'10.01.2022'};{'1'} {'12.01.2022'};{'33'} {'10.01.2021'};{'1'} {'10.01.2022'}];
    B=sortrows(A,2);
    B=sortrows(B,1);% B=[{'1' } {'10.01.2022'};{'1' } {'10.01.2022'};{'1' } {'10.01.2022'};{'1' } {'12.01.2022'};{'2' } {'10.01.2022'};{'33'} {'10.01.2021'}]
    BSize=size(B); %BSize = [6 2]
    C=ones(BSize(1),1); % Initialisierung mit Zahl 1
    for iSchleife = 2:BSize(1)
        if string(B(iSchleife,:)) == string(B(iSchleife-1,:))
            % wenn zwei gleiche Einträge übereinander sind, dann erhöhe die
            % Anzahl um 1. Gleiche ID am gleichen Tag haben dann die
            % Folge im Bsp A: C=[1 2 3 1 1 1]
            C(iSchleife) = C(iSchleife-1)+1;
        end
    end
    for iSchleife = 2:length(C)
        if C(iSchleife) > C(iSchleife-1)
            % nur die höchste Zahl einer Reihe bleibt erhalten ==> [0 0 3 1 1 1]
            C(iSchleife-1) = 0;
        end
    end
    C=C(C~=0); %lösche alle Nullen ==> [3 1 1 1]
    h = histogram(C);
    ylabel('Häufigkeit');
    xlabel('Anzahl');
end
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2022, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

bitte auf die Rückfragen eingehen, insbesondere:
Zitat:
Müsste die zweite Spalte nicht [4;1;1] sein?


Bitte auch auf Vorschläge eingehen. Wenn sie nicht das gewünschte liefern, dann bitte genau beschreiben inwiefern nicht.

Ich verstehe "wie oft ein Vorfall 1x vorkommt" nicht. Wenn ein Vorfall 1x vorkommt, dann kommt er 1x vor, fertig?!
Und ja, das kann man sicher eleganter machen.

Wenn du schon Häufigkeiten berechnet hast, würde ich bar statt histogram verwenden. histogram berechnet ja selbst die Häufigkeiten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.