Au fait, je suis nouveau sur Python. J'ai entendu dire que Python avait une grammaire propre, des bibliothèques abondantes et qu'il était puissant, j'ai donc décidé de prendre un peu de temps pendant les vacances de fin d'année.
Si vous voulez étudier quoi que ce soit, vous devriez avoir un sujet / problème spécifique. J'ai donc décidé de me baser sur le contenu du livre de statistiques que j'ai commencé à lire récemment.
** Chapitre 1 La pratique des statistiques commence par un examen des bases ** 05 Pourquoi la valeur moyenne peut-elle saisir la vérité?
Dans ce chapitre, il y a quelques exemples d'utilisation de "pièces avec 2/3 de chance d'obtenir le dos et 1/3 de chance d'obtenir l'avant". J'ai donc décidé d'utiliser Python pour lancer des "pièces" plusieurs fois (bien que ce soit une simulation, bien sûr) et voir si le résultat est le même que celui de l'exemple. (Pour plus de détails, veuillez acheter un livre ou emprunter à la bibliothèque. C'est la partie de P59 à P64.)
La version de Python utilisée est la 2.7. Je l'ai mis comme on m'a dit lorsque j'ai reçu un séminaire Python cet été [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)) a été installé, donc je l'ai utilisé.
Tout d'abord, j'ai expérimenté Python avec un exemple de la probabilité de toutes les combinaisons lors du lancement d'une pièce deux fois.
Les combinaisons possibles sont: Dos / dos (avant 0) Arrière / avant (1 devant) Avant / arrière (1 avant) Table / table (2 tables)
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()
Tout d'abord, presque le même tableau que le graphique 1-17 à la page 59 s'affiche. 4 combinaisons et leurs probabilités. (Ce tableau utilise PrettyTable. Voir ci-dessous)
La raison pour laquelle il est difficile de combiner «table / table» est que vous utilisez des pièces qui ont 1/3 de chance d'apparaître en premier lieu.
Ensuite, un graphique à barres qui est presque le même que le graphique 1-18 à la p60 est affiché.
Il s'agit d'une collection de 4 modèles en 3 par "combien de tableaux apparaissent". Il existe deux modèles de "un devant", (avant / arrière) et (arrière / avant), ils sont donc combinés en un seul.
Importer dans l'environnement d'exécution tel que la fonction à utiliser. Une bibliothèque utile peut être trouvée dans Python Standard Library, mais il existe un grand nombre de La bibliothèque se trouve dans le référentiel appelé Python Package Index.
from random import randint
from decimal import Decimal
from prettytable import PrettyTable
import numpy as np
--Utilisez le randint du module random pour générer des nombres aléatoires. --Utilisez Decimal du module decimal pour ajuster le type float aux deux derniers chiffres. --Utilisez PrettyTable du module prettytable pour créer une table.
def tossBiasedCoin():
""" Returns 0 or 1 with 0 having 2/3 chance """
return randint(0,2) % 2
Il ne suffit pas d'en faire une fonction, mais comme une pratique de Définition de fonction, le recto et le verso de la pièce (1 ou 0) ) A été créé. Génère l'un de 0, 1 et 2 avec un nombre aléatoire, renvoie 0 si la valeur est paire et renvoie 1 dans le cas contraire. Puisque deux des trois valeurs sont paires, la probabilité est de 2/3.
Utilisez 2x2 sequence pour enregistrer la fréquence d'occurrence. Dans ce cas, il sera de type list.
# Make a 2x2 array
counts = [[0 for j in range(2)] for i in range(2)]
Initialisez chaque variable à 0. for statement est l'une des fonctions intégrées [range function](http: //docs.python) La boucle est exécutée sur la liste instantanée créée par (.jp / 2 / library / functions.html # range). Pour le rendre 2x2, créez une liste avec liste comme élément.
Je vais le lancer 500000 fois ici, mais je me demande si je n'ai pas à en lancer autant (rires)
# Toss a coin many times to get counts
sampleCount = 500000
for num in range(sampleCount):
first = tossBiasedCoin()
second = tossBiasedCoin()
counts[first][second] += 1
Le résultat est 0 ou 1, vous pouvez donc simplement l'utiliser comme index pour une structure 2x2. Augmentez de un le nombre de cellules indexées.
Au fait, il semble qu'il n'y ait pas d'opérateur ++ familier en langage C en Python. Cliquez ici pour une liste des opérateurs Python.
Divisez la fréquence par le nombre total de lancers pour obtenir le pourcentage.
# 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]))
Puisque nous visiterons chaque cellule de la structure 2x2, nous allons boucler en utilisant les deux index i et j et accéder à la valeur de n'importe quelle cellule sous la forme de [i] [j]
. Les valeurs sont remplacées sur place, mais les valeurs avant et après la conversion sont affichées pour le débogage.
Decimal.quantize Arrondissez la valeur aux deux derniers chiffres en passant «0.01» à la fonction.
Il y a trois barres dans le graphique à barres. 0 tables, 1 table et 2 tables.
# Make summaries of number of heads.
keys = np.arange(3)
values = [counts[0][0],
counts[0][1]+counts[1][0],
counts[1][1]]
Seule la fréquence d'une table est la même car peu importe si la table est la première ou la deuxième pièce.
Utilisez list.insert sur le côté gauche de la liste, qui est la première ligne, et utilisez "1st throw is back" et "1st throw is front". "Est ajouté.
# Add row descriptions
counts[0].insert(0, '1st tail')
counts[1].insert(0, '1st head')
Utilisez une fonction de bibliothèque tierce appelée 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
Utilisez une bibliothèque tierce, matplotlib. Ce matplotlib semble être suffisamment riche pour écrire un livre seul (voir Galerie) Écrivez Bar Graph avec pyplot dans 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()
Recommended Posts