Je veux pouvoir analyser des données avec Python (partie 1)

Je veux pouvoir analyser des données avec Python

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.

Matière

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.

Les statistiques sont l'étude la plus solide [Pratique] Réflexions et méthodes d'analyse des données-par Kei Nishiuchi

** 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.)

Version Python

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é.

Probabilité de lancer des pièces deux fois

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)

Code Python

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

Résultat d'exécution

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

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é.

image

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.

Contenu du code

Importer la bibliothèque

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.

Définition de fonction en Python

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.

Préparer 2x2 variables

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.

Jetez des pièces et enregistrez les résultats

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.

Convertir en pourcentage

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.

Préparer les données pour le graphique à barres

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.

Préparer les données pour le tableau

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

Faire une table

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

Créer un graphique à barres

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

(Partie 2)

Recommended Posts

Je veux pouvoir analyser des données avec Python (partie 3)
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux analyser les journaux avec Python
Je veux déboguer avec Python
Je veux pouvoir exécuter Python avec VS Code
Je veux jouer avec aws avec python
☆ M. Anzai… !! Je veux analyser les données …… Partie 1 Préparation des données ☆ Analysons les statistiques des joueurs NBA (résultats) avec Python. basketball
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
Je veux utiliser MATLAB feval avec python
Je veux frapper 100 sciences des données avec Colaboratory
Je veux faire un jeu avec Python
Je veux être OREMO avec setParam!
J'ai essayé d'obtenir des données CloudWatch avec Python
Je souhaite utiliser le répertoire temporaire avec Python2
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux écrire dans un fichier avec Python
Je veux gérer l'optimisation avec python et cplex
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Je veux AWS Lambda avec Python sur Mac!
Je veux faire fonctionner un ordinateur quantique avec Python
Je souhaite spécifier une autre version de Python avec pyvenv
J'ai essayé de créer diverses "données factices" avec Python faker
Je veux assister automatiquement à des cours en ligne avec Python + Selenium!
[Python] Je souhaite utiliser l'option -h avec argparse
Je veux faire ○○ avec les Pandas
J'en ai marre de Python, alors j'ai essayé d'analyser les données avec nehan (je veux aller vivre même avec Corona) -Partie 2)
J'en ai marre de Python, alors j'ai essayé d'analyser les données avec nehan (je veux aller vivre même avec Corona) -Partie 1)
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je veux connaître la météo avec LINE bot avec Heroku + Python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je veux sortir le début du mois prochain avec Python
Essayez d'analyser le mahjong familial en ligne à l'aide de Python (PARTIE 1: Prendre des données)
Je souhaite rechercher le texte intégral avec elasticsearch + python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je veux détecter des objets avec OpenCV
Traiter les données Pubmed .xml avec python [Partie 2]
Je veux gérer la rime part1
Je veux écrire un blog avec Jupyter Notebook
Je veux gérer la rime part3
Convertir des données Excel en JSON avec python
Je veux utiliser jar de python
Je voulais résoudre ABC160 avec Python
Je veux créer un environnement Python
Je veux installer Python avec PythonAnywhere
Convertissez des données FX 1 minute en données 5 minutes avec Python
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Je voulais résoudre ABC172 avec Python
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux le faire avec Python lambda Django, mais je vais m'arrêter