Ich möchte Daten mit Python analysieren können (Teil 1)

Ich möchte Daten mit Python analysieren können

Ich bin übrigens neu in Python. Ich habe gehört, dass Python eine saubere Grammatik hat, reichlich Bibliotheken hat und mächtig ist, deshalb habe ich beschlossen, in den Ferien zum Jahresende ein bisschen zu beißen.

Gegenstand

Wenn Sie etwas studieren möchten, sollten Sie ein bestimmtes Fach / Problem haben. Deshalb habe ich mich entschlossen, es auf den Inhalt des Statistikbuchs zu stützen, das ich kürzlich gelesen habe.

Statistik ist die stärkste Studie [Praxis] Gedanken und Methoden zur Datenanalyse - von Kei Nishiuchi

** Kapitel 1 Die Praxis der Statistik beginnt mit einer Überprüfung der Grundlagen ** 05 Warum kann der Durchschnittswert die Wahrheit erfassen?

In diesem Kapitel gibt es einige Beispiele für die Verwendung von "Münzen mit einer 2/3 Chance auf die Rückseite und einer 1/3 Chance auf die Vorderseite". Also habe ich mich entschieden, Python zu verwenden, um tatsächlich viele Male "Münzen" zu werfen (obwohl es natürlich eine Simulation ist) und zu sehen, ob das Ergebnis mit dem Beispiel übereinstimmt. (Für Details kaufen Sie bitte ein Buch oder leihen Sie es aus der Bibliothek aus. Es ist der Teil von P59 bis P64.)

Python-Version

Die verwendete Version von Python ist 2.7. Ich habe es so eingegeben, wie mir gesagt wurde, als ich im Sommer ein Python-Seminar erhielt [Spyder](https://ja.wikipedia.org/wiki/Spyder_(%E3%82%BD%E3%83%95%). E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2)) wurde installiert, also habe ich es verwendet.

Wahrscheinlichkeit, zweimal Münzen zu werfen

Zuerst habe ich mit Python experimentiert und ein Beispiel für die Wahrscheinlichkeit aller Kombinationen beim zweimaligen Werfen einer Münze gegeben.

Mögliche Kombinationen sind: Rücken / Rücken (vorne 0) Rückseite / Vorderseite (1 Vorderseite) Vorder- / Rückseite (1 Vorderseite) Tabelle / Tabelle (2 Tabellen)

Python-Code

from random import randint
from decimal import Decimal
from prettytable import PrettyTable
import numpy as np

def tossBiasedCoin():
    """ Returns 0 or 1 with 0 having 2/3 chance """
    return randint(0,2) % 2

# Make a 2x2 array
counts = [[0 for j in range(2)] for i in range(2)]

# Toss a coin many times to get counts
sampleCount = 500000
for num in range(sampleCount):
    first = tossBiasedCoin()
    second = tossBiasedCoin()
    counts[first][second] += 1

# Conert all counts to perentage
TWOPLACES = Decimal(10) ** -2 
for i in range(2):
    for j in range(2):
        value = counts[i][j]        
        counts[i][j] = (100 * Decimal(counts[i][j])/Decimal(sampleCount)).quantize(TWOPLACES)
        print("Converted the value {} to percentage {}".format(value, counts[i][j]))

# Make summaries of number of heads.
keys = np.arange(3)
values = [counts[0][0], 
          counts[0][1]+counts[1][0],
          counts[1][1]]

# Add row descriptions
counts[0].insert(0, '1st tail')
counts[1].insert(0, '1st head')

# Create table with column descriptions, add rows, then show it.
table = PrettyTable(["", "2nd tail", "2nd head"])
table.padding_width = 1
table.add_row(counts[0])
table.add_row(counts[1])
print table

# Draw a bar chart
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
rects = plt.bar(keys,
                 values, 
                 0.5,
                 alpha=0.4,
                 align="center", 
                 color='b')

plt.xlabel('Number of heads')
plt.ylabel('Probability (%)')
plt.title('Probabilities heads with a biased coin')
plt.xticks(keys, np.arange(3))

plt.tight_layout()
plt.show()

Ausführungsergebnis

Zunächst wird fast dieselbe Tabelle wie in Tabelle 1-17 auf Seite 59 angezeigt. 4 Kombinationen und ihre Wahrscheinlichkeiten. (Diese Tabelle verwendet PrettyTable. Siehe unten) image

Der Grund, warum es schwierig ist, "Tisch / Tisch" zu kombinieren, ist, dass Sie Münzen verwenden, die eine Chance von 1/3 haben, überhaupt zu erscheinen.

Als Nächstes wird ein Balkendiagramm angezeigt, das fast dem Diagramm 1-18 auf Seite 60 entspricht.

image

Dies ist eine Sammlung von 4 Mustern in 3 nach "wie viele Tabellen erscheinen". Es gibt zwei Muster von "einer Vorderseite" (vorne / hinten) und (hinten / vorne), sodass sie zu einem kombiniert werden.

Code-Inhalt

Bibliothek importieren

Importieren in die Ausführungsumgebung, z. B. die zu verwendende Funktion. Eine nützliche Bibliothek finden Sie in Python Standard Library, aber es gibt eine große Anzahl von Drittanbietern Die Bibliothek befindet sich im Repository mit dem Namen Python Package Index.

from random import randint
from decimal import Decimal
from prettytable import PrettyTable
import numpy as np

--Verwenden Sie den Randint des Moduls random, um Zufallszahlen zu generieren.

Funktionsdefinition in Python

def tossBiasedCoin():
    """ Returns 0 or 1 with 0 having 2/3 chance """
    return randint(0,2) % 2

Es reicht nicht aus, es zu einer Funktion zu machen, sondern als Übung von Funktionsdefinition die Vorder- und Rückseite der Münze (1 oder 0) ) Wurde erstellt. Erzeugt eine von 0, 1 und 2 mit einer Zufallszahl, gibt 0 zurück, wenn der Wert gerade ist, und gibt ansonsten 1 zurück. Da zwei der drei Werte gerade sind, beträgt die Wahrscheinlichkeit 2/3.

Bereiten Sie 2x2 Variablen vor

Verwenden Sie 2x2 Sequenz, um die Häufigkeit des Auftretens aufzuzeichnen. In diesem Fall ist es vom Typ Liste.

# Make a 2x2 array
counts = [[0 for j in range(2)] for i in range(2)]

Initialisieren Sie jede Variable auf 0. für Anweisung ist eine der integrierten Funktionen [Bereichsfunktion](http: //docs.python) Die Schleife wird in der von (.jp / 2 / library / functions.html # range) erstellten Sofortliste ausgeführt. Um es 2x2 zu machen, erstellen Sie eine Liste mit Liste als Element.

Werfen Sie Münzen und zeichnen Sie die Ergebnisse auf

Ich werde es 500.000 Mal hier werfen, aber ich frage mich, ob ich nicht so viel werfen muss (lacht)

# Toss a coin many times to get counts
sampleCount = 500000
for num in range(sampleCount):
    first = tossBiasedCoin()
    second = tossBiasedCoin()
    counts[first][second] += 1

Das Ergebnis ist 0 oder 1, Sie können es also einfach als Index für eine 2x2-Struktur verwenden. Erhöhen Sie die Anzahl der indizierten Zellen um eins.

Übrigens scheint es in Python keinen ++ - Operator zu geben, der mit der C-Sprache vertraut ist. Klicken Sie hier, um eine Liste der Python-Operatoren anzuzeigen.

In Prozent umrechnen

Teilen Sie die Häufigkeit durch die Gesamtzahl der Würfe, um den Prozentsatz zu erhalten.

# Convert all counts to perentage
TWOPLACES = Decimal(10) ** -2
for i in range(2):
    for j in range(2):
        value = counts[i][j]
        counts[i][j] = (100 * Decimal(counts[i][j])/Decimal(sampleCount)).quantize(TWOPLACES)
        print("Converted the value {} to percentage {}".format(value, counts[i][j]))

Da wir jede Zelle der 2x2-Struktur besuchen, werden wir eine Schleife mit den beiden Indizes i und j durchführen und auf den Wert einer beliebigen Zelle in Form von "[i] [j]" zugreifen. Die Werte werden direkt ersetzt, aber die Werte vor und nach der Konvertierung werden zum Debuggen angezeigt.

Decimal.quantize Runden Sie den Wert auf die letzten beiden Ziffern, indem Sie der Funktion "0.01" übergeben.

Bereiten Sie Daten für das Balkendiagramm vor

Das Balkendiagramm enthält drei Balken. 0 Tabellen, 1 Tabelle und 2 Tabellen.

# Make summaries of number of heads.
keys = np.arange(3)
values = [counts[0][0],
          counts[0][1]+counts[1][0],
          counts[1][1]]

Nur die Häufigkeit eines Tisches ist gleich, da es keine Rolle spielt, ob der Tisch die erste oder die zweite Münze ist.

Bereiten Sie Daten für die Tabelle vor

Verwenden Sie list.insert auf der linken Seite der Liste, der ersten Reihe, und verwenden Sie "1. Wurf ist zurück" und "1. Wurf ist vorne". "Hinzugefügt.

# Add row descriptions
counts[0].insert(0, '1st tail')
counts[1].insert(0, '1st head')

Mach einen Tisch

Verwenden Sie eine Bibliotheksfunktion eines Drittanbieters namens PrettyTable.

# Create table with column descriptions, add rows, then show it.
table = PrettyTable(["", "2nd tail", "2nd head"])
table.padding_width = 1
table.add_row(counts[0])
table.add_row(counts[1])
print table

Erstellen Sie ein Balkendiagramm

Verwenden Sie eine Bibliothek eines Drittanbieters, matplotlib. Diese Matplotlib scheint reich genug zu sein, um selbst ein Buch zu schreiben (siehe Galerie). Schreiben Sie Balkendiagramm mit pyplot in matplotlib.

# Draw a bar chart
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
rects = plt.bar(keys,
                 values,
                 0.5,
                 alpha=0.4,
                 align="center",
                 color='b')

plt.xlabel('Number of heads')
plt.ylabel('Probability (%)')
plt.title('Probabilities heads with a biased coin')
plt.xticks(keys, np.arange(3))

plt.tight_layout()
plt.show()

(Teil 2)

Recommended Posts

Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte Protokolle mit Python analysieren
Ich möchte mit Python debuggen
Ich möchte Python mit VS-Code ausführen können
Ich möchte mit aws mit Python spielen
☆ Mr. Anzai… !! Ich möchte die Daten analysieren …… Teil 1 Datenvorbereitung ☆ Analysieren wir die NBA-Spielerstatistiken (Ergebnisse) mit Python. Basketball
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich möchte MATLAB feval mit Python verwenden
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich möchte OREMO mit setParam sein!
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte mit Python in eine Datei schreiben
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte Lambda mit Python auf Mac AWS!
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte ○○ mit Pandas machen
Ich habe Python satt, also habe ich versucht, die Daten mit nehan zu analysieren (ich möchte sogar mit Corona live gehen) - Teil 2)
Ich habe Python satt, also habe ich versucht, die Daten mit nehan zu analysieren (ich möchte sogar mit Corona live gehen) - Teil 1)
Ich kenne? Datenanalyse mit Python oder Dingen, die Sie mit numpy verwenden möchten, wenn Sie möchten
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Versuchen Sie, Online-Familien-Mahjong mit Python zu analysieren (TEIL 1: Daten aufnehmen)
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte Objekte mit OpenCV erkennen
Verarbeiten Sie Pubmed .xml-Daten mit Python [Teil 2]
Ich möchte mit dem Reim Teil1 umgehen
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte mit dem Reim part3 umgehen
Konvertieren Sie Excel-Daten mit Python in JSON
Ich möchte ein Glas aus Python verwenden
Ich wollte ABC160 mit Python lösen
Ich möchte eine Python-Umgebung erstellen
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Ich wollte ABC172 mit Python lösen
Ich möchte mit dem Reim part2 umgehen
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
Ich möchte es mit Python Lambda Django machen, aber ich werde aufhören