Poisson-Verteilung und kumulative Poisson-Verteilung über SQLite in Python und Java

Poisson-Verteilung und kumulative Poisson-Verteilung über SQLite in Python und Java

Letztes Mal Zeichnen Sie ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java. Ich habe die in Java mit Matplotlib erstellten Daten geplottet, aber die, die die Daten mit CSV überbrückten Ich habe es mit SQlite umgeschrieben.

Die Sqlite-API verwendet den 3.6-Standard für Python und [diesen] für Java (https://bitbucket.org/xerial/sqlite-jdbc).

Der folgende Code erstellt die Tabellen Poisson und Poisson CDF in math_data.db und füllt die stochastische Masse und die kumulative Menge für jedes λ.

Java-Code

poisson.java




    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        Calc c = new Calc();
        //Die Methode zum Speichern des λ-Werts in der Liste wurde geändert
        int[] lamList = {1, 4, 8, 10};
        try {
            double p = 0;
            Class.forName("org.sqlite.JDBC");
            connection = DriverManager.getConnection("jdbc:sqlite:math_data.db");
            statement = connection.createStatement();
            connection.setAutoCommit(false);

            //Tabelle erstellen
            statement.executeUpdate("DROP TABLE IF EXISTS Poisson");
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS Poisson( lam integer, count integer , p real )");
            //Geben Sie den Wert ein
            PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO Poisson values (?, ?, ?);");
//λ Wahrscheinlichkeit, dass ein Ereignis, das in einem bestimmten Zeitraum auftritt, i-mal in einem bestimmten Zeitraum auftritt p

            for (int i = 0; i < lamList.length; i++) {

                for (int j = 0; j <= 12; j++) {
                    p = c.poisson(lamList[i], j);

                    preparedStatement.setInt(1, lamList[i]);
                    preparedStatement.setInt(2, j);
                    preparedStatement.setDouble(3, p);
                    preparedStatement.addBatch();
                }

            }
            System.out.println(preparedStatement.executeBatch().length + "Registrieren Sie die Charge.");
            connection.commit();


//Kumulative Verteilung
            statement.executeUpdate("DROP TABLE IF EXISTS PoissonCDF");
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS PoissonCDF( lam integer, count integer , p real )");
            //Geben Sie den Wert ein
            preparedStatement = connection.prepareStatement("INSERT INTO PoissonCDF values (?, ?, ?);");
            //λ Kumulative Wahrscheinlichkeit, dass ein Ereignis, das in einem bestimmten Zeitraum auftritt, innerhalb eines bestimmten Zeitraums p i-mal oder weniger auftritt

            for (int i = 0; i < lamList.length; i++) {
                double pTotal = 0;
                for (int j = 0; j <= 12; j++) {
                    p = c.poisson(lamList[i], j);
                    pTotal += p;
                    preparedStatement.setInt(1, lamList[i]);
                    preparedStatement.setInt(2, j);
                    preparedStatement.setDouble(3, pTotal);
                    preparedStatement.addBatch();
                }

            }
//Batch schreiben
            System.out.println(preparedStatement.executeBatch().length + "Registrieren Sie die Charge.");
            connection.commit();


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}


class Calc {

    int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n * factorial(n - 1);
    }

    //Wahrscheinlichkeitsmassendichte, die nur k-mal auftritt, wenn das Ereignis, das in einem bestimmten Zeitraum auftritt, durchschnittlich lam ist
    double poisson(double lam, int k) {
        double total = 0;

        total = Math.pow(lam, k) * Math.pow(Math.E, -lam) / factorial(k);

        return total;
    }

    //Wahrscheinlichkeitsmassendichte (einschließlich 0), die k-mal oder weniger auftritt, wenn das Ereignis, das in einem bestimmten Zeitraum auftritt, durchschnittlich lam ist
    double poisson_cdf(double lam, int k) {
        double p = 0;
        double total = 0;
        for (int i = 0; i <= k; i++) {
            p = poisson(lam, i);
            total += p;
        }
        return total;
    }
}
//Ausführungsergebnis
//Registrieren Sie 52 Chargen.
//Registrieren Sie 52 Chargen.

Die Ausführung ist abgeschlossen. Stellen Sie sicher, dass es richtig ist.


ResultSet resultSet;
            resultSet = statement.executeQuery("select * from Poisson");
            while (resultSet.next()) {
                System.out.print(resultSet.getString("lam"));
                System.out.print(",");
                System.out.print(resultSet.getString("count"));
                System.out.print(",");
                System.out.println(resultSet.getString("p"));
            }
            resultSet = statement.executeQuery("select * from PoissonCDF");
            while (resultSet.next()) {
                System.out.print(resultSet.getString("lam"));
                System.out.print(",");
                System.out.print(resultSet.getString("count"));
                System.out.print(",");
                System.out.println(resultSet.getString("p"));
            }

            /*
Ausführungsergebnis

            1,0,0.367879441171442
            1,1,0.367879441171442
            1,2,0.183939720585721
            1,3,0.0613132401952404
            1,4,0.0153283100488101
             */

Es ist fest darin. Als nächstes möchte ich es in Python laden und in Matplotlib zeichnen.

Python-Code

plotting.py


import sqlite3
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

sns.set(style="darkgrid")

conn = sqlite3.connect("math_data.db")
c = conn.cursor()
c.execute('SELECT * FROM Poisson')

#Aufführen
lam_db_list = np.array(c.fetchall())
#Da der numerische Wert am Zeilenanfang λ ist, werde ich ihn vorerst zusammenfassen und für jedes λ grafisch darstellen
lam_db_f = sorted(list(set(map(lambda x: x[0], lam_db_list))))

fig, axe = plt.subplots(1, 2, constrained_layout=True, figsize=(12, 5))

#Erstellen Sie am Anfang der Linie eine Liste für jeden Typ von λ-Zahlen und zeichnen Sie darauf basierend.
for i in range(len(lam_db_f)):
    y_axis = []
    for j in lam_db_list:
        if j[0:1] == lam_db_f[i]:
            y_axis.append(j[2:])

    y_axis = np.array(y_axis).reshape(-1)
    x_axis = range(len(y_axis))
    axe[0].plot(x_axis, y_axis, marker='o', label='$\lambda=%.2f$' % lam_db_f[i])

c.execute('SELECT * FROM PoissonCDF')
lam_db_list = np.array(c.fetchall())
lam_db_f = sorted(list(set(map(lambda x: x[0], lam_db_list))))

for i in range(len(lam_db_f)):
    y_axis = [j[2:] for j in lam_db_list if j[0:1] == lam_db_f[i]]
    y_axis = np.array(y_axis).reshape(-1)
    x_axis = range(len(y_axis))
    axe[1].plot(x_axis, y_axis, marker='o', label='$\lambda=%.2f$' % lam_db_f[i])

conn.close()
axe[0].set_xlabel('k')
axe[0].set_ylabel('probability')
axe[0].set_title('Poisson')
axe[0].legend()
axe[0].grid(True)
axe[0].set_xticks(range(len(x_axis)))
axe[1].set_xlabel('k')
axe[1].set_ylabel('probability')
axe[1].set_title('PoissonCDF')
axe[1].legend()
axe[1].grid(True)
axe[1].set_xticks(range(len(x_axis)))

plt.savefig("poisson_n_cdf.png ")
plt.show()

Figure_1.png

Ich konnte es ordentlich zeichnen. Sie können auch verschiedene Poisson-Verteilungen zeichnen, indem Sie das auf der Java-Seite übergebene λ-Array ändern.

poisson_n_cdf.png

poisson_n_cdf.png

Schwierigkeiten

Ich habe die DB-Erstellung in umgekehrter Matrix erstellt und versucht, alle Arrays durch Runden aus der ersten Zeilennummer zu berechnen, aber der Code wurde kompliziert. Um die spätere Verwendung zu vereinfachen, müssen wir bei der Erstellung der Datenbank über die Ausgabe nachdenken. Besonders wenn sich die Daten mit einer kleinen Anzahl von unbeweglichen Punkten befassen, werden sie verrückt, deshalb möchte ich vermeiden, dass ich später zu viel mit der Struktur spielen muss.

Recommended Posts

Poisson-Verteilung und kumulative Poisson-Verteilung über SQLite in Python und Java
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Überlappende reguläre Ausdrücke in Python und Java
Unterschiede zwischen Python- und Java-Syntax
SQLite in Python
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
Implementierte List und Bool in Python und SQLite3 (persönliche Notiz)
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Versuchen Sie, Bitcoin-Kerzendiagramme und technische Indikatoren in Python zu zeichnen
Schreiben Sie die Beta-Distribution in Python
Ich habe Java und Python verglichen!
Generieren Sie eine U-Verteilung in Python
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Stapel und Warteschlange in Python
Entfernen Sie führende und nachfolgende Leerzeichen in Python, JavaScript oder Java
Unittest und CI in Python
Zeichnen Sie geografische Informationen in Python
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Signale in Java erkennen und verarbeiten.
Unterschied zwischen Java und Python (Memo)
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Implementierung einer gemischten Normalverteilung in Python
Verwendung von SQLite in Python
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Fremdschlüssel in SQLite von Python [Hinweis]
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Erstellen und lesen Sie Messagepacks in Python
Lesen aus Textdateien und SQLite mit Python (+ Pandas), R, Julia (+ DataFrames)
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Unterschied in der Authentizität zwischen Python und JavaScript
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Unterschiede zwischen Ruby und Python im Umfang
AM-Modulation und Demodulation mit Python Part 2
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Express Python-Ertrag in JavaScript oder Java
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Implementieren Sie den FIR-Filter in Python und C.
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Suchen und spielen Sie YouTube-Videos mit Python
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python