Distribution de Poisson et tracé de distribution cumulative de Poisson via sqlite en Python et Java

Distribution de Poisson et tracé de distribution cumulative de Poisson via sqlite en Python et Java

Dernière fois Dessinez un graphique de la distribution de Poisson et de la distribution cumulative de Poisson en Python et Java, respectivement. J'ai tracé les données créées en Java avec Matplotlib, mais celle qui reliait les données avec CSV Je l'ai réécrit avec SQlite.

L'API Sqlite utilise la norme 3.6 pour Python et [celle-ci] pour Java (https://bitbucket.org/xerial/sqlite-jdbc).

Le code ci-dessous crée les tableaux Poisson et Poisson CDF dans math_data.db et insère la masse stochastique et cumulative pour chaque λ.

Code Java

poisson.java




    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        Calc c = new Calc();
        //Modification de la méthode pour stocker la valeur λ dans la liste
        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);

            //Créer une table
            statement.executeUpdate("DROP TABLE IF EXISTS Poisson");
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS Poisson( lam integer, count integer , p real )");
            //Entrez la valeur
            PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO Poisson values (?, ?, ?);");
//λ Probabilité qu'un événement survenant à une certaine période se produise i fois dans une certaine période 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 + "Enregistrez le lot.");
            connection.commit();


//Distribution cumulative
            statement.executeUpdate("DROP TABLE IF EXISTS PoissonCDF");
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS PoissonCDF( lam integer, count integer , p real )");
            //Entrez la valeur
            preparedStatement = connection.prepareStatement("INSERT INTO PoissonCDF values (?, ?, ?);");
            //λ Probabilité cumulative qu'un événement survenant au cours d'une certaine période se produise i fois ou moins au cours d'une certaine période p

            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();
                }

            }
//Écriture par lots
            System.out.println(preparedStatement.executeBatch().length + "Enregistrez le lot.");
            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);
    }

    //Densité de masse de probabilité qui ne se produit que k fois lorsque l'événement qui se produit dans une certaine période est un lam moyen
    double poisson(double lam, int k) {
        double total = 0;

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

        return total;
    }

    //Densité de masse de probabilité (y compris 0) qui se produit k fois ou moins lorsque l'événement qui se produit dans une certaine période est un lam moyen
    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;
    }
}
//Résultat d'exécution
//Enregistrez 52 lots.
//Enregistrez 52 lots.

L'exécution est terminée. Assurez-vous qu'il est correctement inséré.


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"));
            }

            /*
Résultat d'exécution

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

C'est fermement dedans. Ensuite, je veux le charger en Python et le tracer dans Matplotlib.

Code Python

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')

#liste
lam_db_list = np.array(c.fetchall())
#Puisque le nombre au début de la ligne est λ, je vais le résumer pour le moment et tracer pour chaque λ
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))

#Faites une liste pour chaque type de nombre λ au début de la ligne et tracez-en en fonction.
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

J'ai pu le tracer proprement. Vous pouvez également tracer diverses distributions de Poisson en modifiant le tableau λ passé du côté Java.

poisson_n_cdf.png

poisson_n_cdf.png

Des difficultés

J'ai créé la création de base de données en matrice inversée et essayé de calculer tous les tableaux en arrondissant à partir du premier numéro de ligne, mais le code est devenu compliqué. Afin de faciliter son utilisation par la suite, nous devons penser à la sortie au stade de la création de la base de données. Surtout si les données concernent un petit nombre de points immobiles, cela deviendra fou, donc je veux éviter d'avoir à jouer avec la structure trop tard.

Recommended Posts

Distribution de Poisson et tracé de distribution cumulative de Poisson via sqlite en Python et Java
Trouvons un graphique de la distribution de Poisson et de la distribution cumulative de Poisson en Python et Java, respectivement.
Tracer et comprendre la distribution normale multivariée en Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Chevauchement d'expressions régulières en Python et Java
Différences entre la syntaxe Python et Java
Sqlite en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Implémentation de List et Bool en Python et SQLite3 (note personnelle)
Comprenez attentivement la distribution exponentielle et dessinez en Python
Essayez de tracer des graphiques en bougies Bitcoin et des indicateurs techniques en Python
Écrire une distribution bêta en Python
J'ai comparé Java et Python!
Générer une distribution U en Python
J'ai essayé de programmer le test du chi carré en Python et Java.
Pile et file d'attente en Python
Supprimez les espaces de début et de fin en Python, JavaScript ou Java
Unittest et CI en Python
Tracer des informations géographiques en Python
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Comment afficher les octets de la même manière en Java et Python
Détectez et traitez les signaux en Java.
Différence entre java et python (mémo)
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre list () et [] en Python
Différence entre == et est en python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Implémentation de distribution normale mixte en python
Comment utiliser SQLite en Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Clé étrangère dans SQLite de Python [Note]
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Créer et lire des paquets de messages en Python
Lecture à partir de fichiers texte et SQLite avec Python (+ Pandas), R, Julia (+ DataFrames)
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Différence d'authenticité entre Python et JavaScript
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Différences entre Ruby et Python dans la portée
Modulation et démodulation AM avec Python Partie 2
différence entre les instructions (instructions) et les expressions (expressions) en Python
Valeurs authentiques et vecteurs propres: Algèbre linéaire en Python <7>
Rendement Python express en JavaScript ou Java
Graphique à lignes pliées et ligne d'échelle en python
Implémenter le filtre FIR en langage Python et C
Vérifier et recevoir le port série en Python (vérification du port)
Rechercher et lire des vidéos YouTube avec Python
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python