Pour ceux qui veulent analyser des données en utilisant Python ... ou qui ont décidé d'utiliser Python pour des séminaires et des recherches mais qui n'ont jamais fait de programmation. ** Si vous savez cela, les bases sont correctes ** (peut-être). Je pense que cela peut être utilisé comme un examen des connaissances. Tout d'abord, il couvre au minimum les bases de la grammaire Python à usage général, puis décrit les outils et techniques de base utilisés pour l'analyse des données. Si vous connaissez la grammaire de base de Python, vous pouvez passer à [2. Bases de Python pour l'analyse des données](# 2-bases de python pour l'analyse des données).
Cet article a été révisé et ajouté en fonction du matériel utilisé pour enseigner Python aux membres du séminaire universitaire de l'année dernière. (Il a également été adopté pour une conférence dans une autre université privée !!)
C'est juste la base de Python pour l'analyse des données, donc je ne parle pas beaucoup de l'analyse des données elle-même. Pour ceux qui veulent en savoir plus, je présenterai [Livres recommandés](# 3-Pour ceux qui veulent en savoir plus) à la fin.
Lors de la programmation pour la première fois, il est facile de trébucher lors de la création d'un environnement de programmation, mais en utilisant Google Colaboratory, vous pouvez utiliser Python dans le désordre. Ouvrez Google Drive et installez Colaboratory.
Ci-dessous, on suppose qu'il sera exécuté dans Google Colaboratory, mais si vous avez un environnement d'exécution, vous pouvez bien sûr utiliser le jupyter d'Anaconda.
Commençons par les bases de Python.
Utilisez la fonction d'impression.
print("Hello World!")
production
Hello World!
3 + 4 #une addition
#production: 7
8 - 3 #soustraction
#production: 5
9 * 3 #multiplication
#production: 27
9 / 3 #division
#production: 3.0
5 // 2 #Quotient divisant
#production: 2
5 % 2 #Résidu de division
#production: 1
5 ** 2 #Puissance
#production: 25
Découvrez les types de données Python. Un type de données est littéralement un type de données. Cependant, il se peut qu'il ne s'agisse pas d'une épingle. Jetons un coup d'œil à certains types de données couramment utilisés en nous y habituant plutôt qu'en les apprenant.
a = 4
a
#production: 4
Au fait, si vous souhaitez afficher un en tant que caractère
print('a')
#Sortie: a
b = 1.2
b #production:1.2
a + b
#a est un "type entier", b est un "type virgule flottante"
#production:5.2
"=" Signifie une affectation, pas une équivalence.
a = a + 1
a #production:5
c = 2
c += 1 #Opérateur binaire c= c +Identique à 1
c #Sortie: 3
d = 6
d -= 1 #Opérateur binaire c= c -Identique à 1
d
e = 100*5
e #Sortie: 500
f = 4
f == 4 #Sortie: vrai
#「==Est un opérateur de comparaison. Vrai car il est correct que f vaut 4 par substitution
f == 5 #Sortie: Faux
En Python, l'indentation a une signification en tant que programme. Une erreur se produit lorsque les caractères sont abaissés sans signification.
x = 1
x = x + 1
x
production
File "<ipython-input-92-80d18cdaadaa>", line 2
x = x + 1
^
IndentationError: unexpected indent
Les données de type chaîne de caractères sont créées en entourant une chaîne de caractères entre guillemets simples ou doubles.
a = "L'analyse des données"
b = 'Python'
a,b
production
('L'analyse des données', 'Python')
Connectons les chaînes. Utilisez +.
a = "Pour l'analyse des données"
b = 'Les bases de Python'
a + b
'Principes de base de Python pour l'analyse des données'
Une erreur se produira dans les cas suivants.
c = "4" #Type de chaîne
d = 3 #Type entier
c + d #Erreur car le type de variable est différent
production
TypeError Traceback (most recent call last)
<ipython-input-98-237326ccb44f> in <module>()
1 c = "4" #Type de chaîne
2 d = 3 #Type entier
----> 3 c + d #Erreur car le type de variable est différent
TypeError: must be str, not int
Utilisez la fonction len () pour obtenir la longueur (nombre de caractères) de la chaîne de caractères
a = "DataAnalytics"
len(a) #Sortie: 13
Considérez-le comme une fonction qui peut être utilisée pour chaque type de données. Contrairement aux fonctions ordinaires qui peuvent être utilisées seules, les méthodes sont appelées avec des variables et des valeurs. Utilisons quelques méthodes qui peuvent être utilisées avec le type chaîne.
name = 'Donald Trump'
#Méthode supérieure pour rendre tous les alphabets supérieurs
print(name.upper())
#Méthode inférieure qui réduit tous les alphabets
print(name.lower())
production
DONALD TRUMP
donald trump
Un type de données qui peut stocker des nombres et des chaînes de caractères côte à côte. Organisez les caractères et les chaînes de caractères séparés par des virgules. Pratique lors de la gestion de blocs de données ensemble.
L = [1,2,3,4]
L
production
[1, 2, 3, 4]
Les données avec le premier ordre sont "0e".
L[1] #Obtenez le deuxième élément
#Sortie: 2
L[:] #Obtenez tous les éléments
#production:[1, 2, 3, 4]
Le contenu est modifié par substitution.
L[2]=999 #Changer le troisième élément
L #production:[1, 2, 999, 4]
Utilisez la méthode append pour ajouter des données.
L.append(30) #Ajouter 30 à la fin de la liste
L #production:[1, 2, 999, 4, 30]
Il est facile de comprendre si vous pensez qu'il existe une "partition" entre les données et que vous spécifiez le numéro de la partition.
arashi = ["Sakurai Sho","Jun Matsumoto","Satoshi Ohno","Aiba Masaki","Ninomiya Kazunari"]
print(arashi[0:1])
print(arashi[1:4])
print(arashi[2:2])
production
['Sakurai Sho']
['Jun Matsumoto', 'Satoshi Ohno', 'Aiba Masaki']
[]
Dans la liste des arashi, sortons uniquement Aiba et Nino de la liste et affichons-les.
print(arashi[3:5])
#production:['Aiba Masaki', 'Ninomiya Kazunari']
Dans le dictionnaire, la correspondance est gérée en associant le mot-clé (clé) à la valeur d'élément correspondante (valeur).
arashi = {'Sakurai Sho':'38','Jun Matsumoto':'36','Satoshi Ohno':'39'}
print(arashi)
production
{'Sakurai Sho': '38', 'Jun Matsumoto': '36', 'Satoshi Ohno': '39'}
En spécifiant une clé, la valeur associée à cette clé est acquise.
arashi["Satoshi Ohno"] #Référence par clé
#production:'39'
a = (1,2,3,4)
a #production:(1,2,3,4)
print(a[0]) #Sortie: 1
La différence avec le type de liste est qu'il est immuable (non modifiable). Pratique pour gérer les données qui poseraient problème si elles étaient modifiées.
a[1]=10
#Erreur car elle ne peut pas être modifiée
production
TypeError Traceback (most recent call last)
<ipython-input-130-5434a1e381e3> in <module>()
----> 1 a[1]=10
2 #Erreur car elle ne peut pas être modifiée
TypeError: 'str' object does not support item assignment
Spécifiez l'opération en fonction des conditions. Dans ce qui suit, si la variable est 20 ou plus (age> = 20 est True), "20 ans ou plus" est renvoyé, sinon (else) "underage" est renvoyé. Après les deux points, utilisez la touche Tab du clavier pour ajouter un retrait.
age = 20
if age >= 20:
print('J'ai plus de 20 ans')
else:
print('Tu es mineur')
#Sortie: plus de 20 ans
age = 20
if age >= 20:
print('J'ai plus de 20 ans') #Erreur car il n'y a pas de retrait
else:
print('Tu es mineur')
production
File "<ipython-input-154-b2f09d489829>", line 4
print('J'ai plus de 20 ans')
^
IndentationError: expected an indented block
Exécute un traitement itératif. Ajoutez également un retrait après les deux points.
for i in range(5): #Répétez 5 fois à partir de 0
print(i)
#production
0
1
2
3
4
Créez votre propre fonction. Déclarez la définition avec def et définissez le nom de la fonction (f () dans ce cas) et la variable. Programmez le comportement de la fonction sous les deux points.
def f(x,y):
return x**2 + y**2 #Renvoie la valeur de retour (le résultat du calcul est passé)
print(f(10,20)) #10 au carré + 20 au carré
#production:500
'Fizz' pour les multiples de 3, 'Buzz' pour les multiples de 5, 'FizzBuzz' pour les multiples communs de 3 et 5, Créons un programme qui affiche le nombre tel qu'il est avec d'autres nombres. Utilisez elif pour ajouter une condition.
for i in range(1,31):
if i%3 == 0 and i%5==0:
print('FizzBuzz')
elif i%3 == 0:
print('Fizz')
elif i%5 == 0:
print('Buzz')
else:
print(i)
production
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
Si vous mettez un nombre dans l'argument, créons une fonction qui affiche le nombre selon la règle FizzBuzz ci-dessus. Aussi, vérifions réellement l'affichage avec cette fonction.
def FizzBuzz(i):
if i%3 == 0 and i%5 == 0:
print('FizzBuzz')
elif i%3 == 0:
print('Fizz')
elif i%5 == 0:
print('Buzz')
else:
print(i)
FizzBuzz(100)
#Sortie: Buzz
FizzBuzz(105)
#Sortie: FizzBuzz
Python a un mécanisme appelé ** module ** qui organise des fonctions comme des fonctions et peut être chargé et utilisé en cas de besoin. Les fonctions utilisées jusqu'à présent sont des fonctions intégrées en Python qui peuvent être utilisées à tout moment, et elles sont appelées ** fonctions intégrées **. Vous pouvez trouver la liste sur http://docs.python.jp/3/library/functions.html.
D'autre part, ceux utilisés à des fins limitées peuvent être utilisés en les chargeant à partir du module. Python est livré avec beaucoup de ces modules utiles, mais la collection de modules livrés avec Python s'appelle la ** bibliothèque standard **. À propos, Anaconda est livré avec des bibliothèques utiles en plus de la bibliothèque standard.
import math #Charger le module mathématique (importer)
math.cos(0) #Sortie: 1.0
** Nom du module. Nom de la fonction ** Connectez le nom du module et le nom de la fonction avec.
import numpy as np #Importez le module NumPy avec le nom np
#Rapport circonférentiel π
np.pi #Sortie: 3.141592653589793
#cos(180°)
math.cos(np.pi) #production:-1.0
Numpy: calcul numérique, calcul matriciel Pandas: manipulation de données, arithmétique Matplotlib: dessin graphique Il existe diverses autres bibliothèques, mais cette fois je vais expliquer ces trois.
Numpy est une bibliothèque de calculs numériques. Calculons la matrice.
import numpy as np #Importez le module NumPy et'np'Utilisé comme
arr1 = np.array([1,4,3]) #Créer une matrice 1x3
arr1
production
array([1, 4, 3])
arr1[2] #Obtenir l'élément
#Sortie: 3
#Matrice 2x3
arr2 = np.array([[1,2,3],[4,5,6]])
production
array([[1, 2, 3],
[4, 5, 6]])
arr2[1,1] #Obtenir l'élément
#Sortie: 5
arr2.shape
#production:(2, 3)
arr1 + arr2 #Ajout de matrice
#production:
array([[2, 6, 6],
[5, 9, 9]])
Calculons le produit des matrices avec la fonction dot ()
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.dot(a,b)
#production
array([[19, 22],
[43, 50]])
Si vous le pouvez, faites un calcul manuel et voyez si les résultats du produit matriciel correspondent. À propos, le produit de la procession précédente (arr1, arr2) est,
np.dot(arr1,arr2)
production
ValueError Traceback (most recent call last)
<ipython-input-62-e5b6075b8937> in <module>()
----> 1 np.dot(arr1,arr2)
<__array_function__ internals> in dot(*args, **kwargs)
ValueError: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)
Il s'agit d'une erreur car le nombre de colonnes dans arr1 et le nombre de lignes dans arr2 ne correspondent pas et le produit des colonnes ne peut pas être défini.
Matplotlib, une bibliothèque de visualisation de données, est utilisé pour le dessin. Cette fois, importez le module pyplot de la bibliothèque Matplotlib et utilisez la fonction plot dans le module pyplot. Tout d'abord, dessinons une ligne droite. C'est une image de la préparation de plusieurs points qui divisent la plage déterminée et les relient avec une ligne.
import matplotlib.pyplot as plt
#Importez le module pyplot depuis le package Matplotlib
import numpy as np
x = np.linspace(0,10,100) #Remplacez le nombre de 0 à 10 divisé par 100 en utilisant la fonction NumPy linspace pour la variable x
y = x
plt.plot(x,y) #Tracer x et y
plt.show() #Afficher le graphique
Ensuite, dessinons une courbe quadratique. Aussi, installez une bibliothèque (japanize-matplotlib) pour utiliser les polices japonaises avec matplotlib afin qu'elle puisse être appelée par import.
!pip install japanize-matplotlib
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
x = np.linspace(-5,5,300) #Utilisez la fonction NumPy linspace pour la variable x-Remplacez le nombre de 5 à 5 divisé en 300
y = x**2
plt.plot(x,y,color = "r") #Spécifiez la couleur comme rouge
plt.xlabel('y=x^Graphique de 2') #Définir l'étiquette de l'axe x
plt.show()
Comme je l'ai écrit en dessinant la première ligne droite, cette ligne parabolique, qui ressemble à une courbe lisse, est en fait un ensemble de lignes droites. Rugueuse la division.
x = np.linspace(-5,5,10) #Essayez de vous diviser en 10
y = x**2
plt.plot(x,y,color = "r")
plt.xlabel('y=x^Graphique de 2')
plt.show()
C'est un peu plus fou qu'avant. Pratiquons un peu plus le graphique. Ensuite, dessinez un graphique de la fonction triangulaire à l'aide de la fonction Numpy.
import math
x = np.linspace(-np.pi, np.pi) #-De π à π
plt.plot(x, np.cos(x), color='r', ls='-', label='cos') #Spécifiez le type de ligne, la couleur et l'étiquette
plt.plot(x, np.sin(x), color='b', ls='-', label='sin')
plt.plot(x, np.tan(x), color='c', marker='s', ls='None', label='tan')
#Spécifiez la plage de coordonnées à afficher
plt.xlim(-np.pi, np.pi)
plt.ylim(-1.5, 1.5)
#x=0 et y=Tracez une ligne auxiliaire à 0
plt.axhline(0, ls='-', c='b', lw=0.5) #horizontal(Horizontal)Alors hline
plt.axvline(0, ls='-', c='b', lw=0.5) #vertical(verticale)Alors vline
plt.legend()
plt.xlabel('axe x')
plt.ylabel('axe y')
plt.title('Graphique de fonction triangulaire')
plt.show()
Ce Pandas est principalement utilisé pour le prétraitement des données. Enregistrez les données à analyser dans un DataFrame (comme un coffre-fort de données) et traitez-les si nécessaire.
Les données qui peuvent être utilisées pour l'analyse ne sont pas toujours propres.
La plupart du temps consacré à l'analyse des données et à l'apprentissage automatique est ce pré-traitement. Ce qui contrôle le prétraitement contrôle l'analyse des données. Tout d'abord, créons deux DataFrames simples.
import pandas as pd
df1 = pd.DataFrame({
'Nom':['sato','ito','kato','endo','naito'],
'numéro d'étudiant':[1,2,3,4,5],
'poids':[92,43,58,62,54],
'la taille':[178,172,155,174,168]
})
df1
Nom | numéro d'étudiant | poids | la taille | |
---|---|---|---|---|
0 | sato | 1 | 92 | 178 |
1 | ito | 2 | 43 | 172 |
2 | kato | 3 | 58 | 155 |
3 | endo | 4 | 62 | 174 |
4 | naito | 5 | 54 | 168 |
DataFrame est indexé (numéro le plus à gauche à partir de 0)
df2 = pd.DataFrame({
'numéro d'étudiant':[1,2,3,5,6,9],
'Math':[50,60,70,80,90,100],
'Anglais':[95,85,80,75,70,65],
'Science':[40,55,60,65,50,75],
'classe':['groupe A','Groupe B','groupe A','Groupe C','Groupe B','Groupe C']
})
df2
numéro d'étudiant | Math | Anglais | Science | classe | |
---|---|---|---|---|---|
0 | 1 | 50 | 95 | 40 | groupe A |
1 | 2 | 60 | 85 | 55 | Groupe B |
2 | 3 | 70 | 80 | 60 | groupe A |
3 | 5 | 80 | 75 | 65 | Groupe C |
4 | 6 | 90 | 70 | 50 | Groupe B |
5 | 9 | 100 | 65 | 75 | Groupe C |
J'ai créé deux cadres de données. Les informations telles que le nom et le poids sont stockées dans df1, et les informations telles que les notes sont stockées dans df2. Supposons également que les deux bases de données soient liées par un numéro d'étudiant unique.
Lors de l'appel d'une colonne spécifique, spécifiez le nom de la colonne avec [].
df2['Math']
production
0 50
1 60
2 70
3 80
4 90
5 100
Name:Math, dtype: int64
Lors de l'extraction de plusieurs colonnes, doublez [] et appelez.
df2[['Anglais','classe']]
Anglais | classe | |
---|---|---|
0 | 95 | groupe A |
1 | 85 | Groupe B |
2 | 80 | groupe A |
3 | 75 | Groupe C |
4 | 70 | Groupe B |
5 | 65 | Groupe C |
Tout d'abord, triez (triez) uniquement des colonnes spécifiques. Utilisez la fonction sort_values (). La valeur par défaut est l'ordre croissant.
df1['la taille'].sort_values()
#production:
2 155
4 168
1 172
3 174
0 178
Name:la taille, dtype: int64
Pour trier par poids et afficher tout le df1, définissez l'argument by de la fonction sort_values ().
df1.sort_values(by=["poids"], ascending=False) #ascending=Si vrai, ordre croissant
Nom | numéro d'étudiant | poids | la taille | |
---|---|---|---|---|
0 | sato | 1 | 92 | 178 |
3 | endo | 4 | 62 | 174 |
2 | kato | 3 | 58 | 155 |
4 | naito | 5 | 54 | 168 |
1 | ito | 2 | 43 | 172 |
Ils sont classés par ordre décroissant de poids.
Vous pouvez utiliser la fonction de fusion pour combiner toutes sortes de données. Combinons df1 et df2 avec le numéro d'étudiant comme clé.
data_inner = pd.merge(df1,df2, on='numéro d'étudiant', how='inner')
data_inner
Nom | numéro d'étudiant | poids | la taille | Math | Anglais | Science | classe | |
---|---|---|---|---|---|---|---|---|
0 | sato | 1 | 92 | 178 | 50 | 95 | 40 | groupe A |
1 | ito | 2 | 43 | 172 | 60 | 85 | 55 | Groupe B |
2 | kato | 3 | 58 | 155 | 70 | 80 | 60 | groupe A |
3 | naito | 5 | 54 | 168 | 80 | 75 | 65 | Groupe C |
Seules les données communes aux deux trames de données ont été combinées. Au fait, df1 et df2 n'ont en commun que le numéro d'étudiant, donc le numéro d'étudiant est la clé par défaut même si vous ne vous souciez pas de le spécifier.
data_outer = pd.merge(df1, df2, how = 'outer')
data_outer
Nom | numéro d'étudiant | poids | la taille | Math | Anglais | Science | classe | |
---|---|---|---|---|---|---|---|---|
0 | sato | 1 | 92 | 178 | 50 | 95 | 40 | groupe A |
1 | ito | 2 | 43 | 172 | 60 | 85 | 55 | Groupe B |
2 | kato | 3 | 58 | 155 | 70 | 80 | 60 | groupe A |
3 | endo | 4 | 62 | 174 | nan | nan | nan | nan |
4 | naito | 5 | 54 | 168 | 80 | 75 | 65 | Groupe C |
5 | nan | 6 | nan | nan | 90 | 70 | 50 | Groupe B |
6 | nan | 9 | nan | nan | 100 | 65 | 75 | Groupe C |
Dans le cas d'une jointure externe, celle qui n'existe que dans l'une ou l'autre trame de données est également acquise.
data_left = pd.merge(df1,df2,how = 'left')
data_left
Nom | numéro d'étudiant | poids | la taille | Math | Anglais | Science | classe | |
---|---|---|---|---|---|---|---|---|
0 | sato | 1 | 92 | 178 | 50 | 95 | 40 | groupe A |
1 | ito | 2 | 43 | 172 | 60 | 85 | 55 | Groupe B |
2 | kato | 3 | 58 | 155 | 70 | 80 | 60 | groupe A |
3 | endo | 4 | 62 | 174 | nan | nan | nan | nan |
4 | naito | 5 | 54 | 168 | 80 | 75 | 65 | Groupe C |
Avec la jointure gauche, ce qui existe à la destination de la jointure (df1) reste. Contrairement à l'heure de la jointure interne, les données d'endo, y compris les valeurs manquantes, sont affichées.
data_right = pd.merge(df1,df2,how = 'right')
data_right
Nom | numéro d'étudiant | poids | la taille | Math | Anglais | Science | classe | |
---|---|---|---|---|---|---|---|---|
0 | sato | 1 | 92 | 178 | 50 | 95 | 40 | groupe A |
1 | ito | 2 | 43 | 172 | 60 | 85 | 55 | Groupe B |
2 | kato | 3 | 58 | 155 | 70 | 80 | 60 | groupe A |
3 | naito | 5 | 54 | 168 | 80 | 75 | 65 | Groupe C |
4 | nan | 6 | nan | nan | 90 | 70 | 50 | Groupe B |
5 | nan | 9 | nan | nan | 100 | 65 | 75 | Groupe C |
Similaire à la jointure gauche, les données de la destination de jointure (cette fois df2) sont laissées. Contrairement à l'heure de la jointure externe, les données d'endo ne sont pas affichées. Avez-vous bien compris les différences entre chaque lien?
Dans df2, ajoutons une colonne indiquant le score total des matières scientifiques. C'est OK si vous spécifiez un nouveau nom de colonne et remplacez comme indiqué ci-dessous.
df2['Sujets scientifiques'] = df2['Math'] + df2['Science']
df2
numéro d'étudiant | Math | Anglais | Science | classe | Sujets scientifiques | |
---|---|---|---|---|---|---|
0 | 1 | 50 | 95 | 40 | groupe A | 90 |
1 | 2 | 60 | 85 | 55 | Groupe B | 115 |
2 | 3 | 70 | 80 | 60 | groupe A | 130 |
3 | 5 | 80 | 75 | 65 | Groupe C | 145 |
4 | 6 | 90 | 70 | 50 | Groupe B | 140 |
5 | 9 | 100 | 65 | 75 | Groupe C | 175 |
Supposons que vous souhaitiez connaître le score moyen d'un test pour chaque classe. Utilisez la fonction groupby. Dans ce qui suit, après avoir totalisé pour chaque classe, la fonction moyenne est utilisée pour la moyenne.
df2[['Math','Anglais','Science','classe']].groupby(['classe']).mean().reset_index()
#Réinitialiser l'index (pas de décalage de table)
classe | Math | Anglais | Science |
---|---|---|---|
groupe A | 60 | 87.5 | 50 |
Groupe B | 75 | 77.5 | 52.5 |
Groupe C | 90 | 70 | 70 |
Agréger avec groupby et calculer pour chaque groupe avec la fonction après cela. En plus de la fonction moyenne, vous pouvez également utiliser la fonction max, la fonction médiane, la fonction min, etc.
#Extraire le score le plus bas pour chaque matière dans chaque classe
df2[['Math','Anglais','Science','classe']].groupby(['classe']).min().reset_index()
classe | Math | Anglais | Science |
---|---|---|---|
groupe A | 50 | 80 | 40 |
Groupe B | 60 | 70 | 50 |
Groupe C | 80 | 65 | 65 |
Pour sortir la trame de données créée au format csv, utilisez la fonction to_csv.
data_right.to_csv('sample.csv')
Cette fois, j'ai créé un DataFrame à partir de zéro, mais il existe de nombreuses situations dans lesquelles les données sont lues à l'origine au format csv. Utilisez la fonction read_csv () pour lire des fichiers au format CSV avec des pandas. Cependant, ceci est utilisé pour les fichiers CSV séparés par des virgules. Pour les délimiteurs de tabulation, utilisez la fonction read_table (). Lisons la sortie sample.csv plus tôt et affichons-la à nouveau en tant que DataFrame.
sample = pd.read_csv('sample.csv', index_col=0) #ignorer l'index
sample
Nom | numéro d'étudiant | poids | la taille | Math | Anglais | Science | classe | |
---|---|---|---|---|---|---|---|---|
0 | sato | 1 | 92 | 178 | 50 | 95 | 40 | groupe A |
1 | ito | 2 | 43 | 172 | 60 | 85 | 55 | Groupe B |
2 | kato | 3 | 58 | 155 | 70 | 80 | 60 | groupe A |
3 | naito | 5 | 54 | 168 | 80 | 75 | 65 | Groupe C |
4 | nan | 6 | nan | nan | 90 | 70 | 50 | Groupe B |
5 | nan | 9 | nan | nan | 100 | 65 | 75 | Groupe C |
Jusqu'à présent, vous avez appris toutes les opérations de base lors de l'analyse de données avec Python. Enfin, résolvons les exercices.
Utilisez les données de df2 pour trouver la moyenne des points totaux des sujets pour chaque classe et tracez-la dans un graphique à barres.
import matplotlib.pyplot as plt
import japanize_matplotlib
df2['Points totaux'] = df2['Math'] + df2['Anglais'] +df2['Science']
sum_score = df2[['classe','Points totaux']].groupby(['classe']).mean().reset_index()
x = sum_score['classe']
y = sum_score['Points totaux']
plt.bar(x,y)
plt.xlabel('classe')
plt.ylabel('Score total moyen')
plt.title('Score total moyen par classe')
plt.show()
Le groupe C a le score total moyen le plus élevé de l'examen.
Cela fait longtemps jusqu'à présent. Merci à tous ceux qui y ont travaillé. Les livres suivants sont recommandés pour ceux qui veulent approfondir.
[Minna no Python 4e édition] (https://www.amazon.co.jp/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AEPython-%E7%AC%AC4%E7%89%88-%E6%9F%B4%E7%94%B0-%E6%B7%B3/dp/479738946X/) Vous devriez le lire après avoir maîtrisé les bases. C'est aussi ○ à utiliser comme dictionnaire.
[Introduction à l'analyse des données avec Python 2e édition - Traitement des données à l'aide de NumPy et pandas](https://www.amazon.co.jp/Python%E3%81%AB%E3%82%88%E3%82% 8B% E3% 83% 87% E3% 83% BC% E3% 82% BF% E5% 88% 86% E6% 9E% 90% E5% 85% A5% E9% 96% 80-% E7% AC% AC2 % E7% 89% 88-% E2% 80% 95NumPy% E3% 80% 81pandas% E3% 82% 92% E4% BD% BF% E3% 81% A3% E3% 81% 9F% E3% 83% 87% E3% 83% BC% E3% 82% BF% E5% 87% A6% E7% 90% 86-Wes-McKinney / dp / 487311845X /)
[Terminer le prétraitement [Techniques pratiques SQL / R / Python pour l'analyse des données]](https://www.amazon.co.jp/%E5%89%8D%E5%87%A6%E7%90%86] % E5% A4% A7% E5% 85% A8% EF% BC% BB% E3% 83% 87% E3% 83% BC% E3% 82% BF% E5% 88% 86% E6% 9E% 90% E3 % 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AESQL-R-Python% E5% AE% 9F% E8% B7% B5% E3% 83% 86% E3% 82% AF % E3% 83% 8B% E3% 83% 83% E3% 82% AF% EF% BC% BD-% E6% 9C% AC% E6% A9% 8B-% E6% 99% BA% E5% 85% 89 - / dp / B07C3JFK3V /) J'y fais souvent référence dans la pratique. En plus de Python, vous pouvez également en apprendre davantage sur R dplyr et le prétraitement SQL.
[Python Practical Data Analysis 100 Knock](https://www.amazon.co.jp/Python%E5%AE%9F%E8%B7%B5%E3%83%87%E3%83%BC%E3% 82% BF% E5% 88% 86% E6% 9E% 90100% E6% 9C% AC% E3% 83% 8E% E3% 83% 83% E3% 82% AF-% E4% B8% 8B% E5% B1 % B1-% E8% BC% 9D% E6% 98% 8C / dp / 4798058750 / r8674263 & s = livres & sr = 1-1) Bien que le nom indique «analyse des données», de nombreuses pages sont consacrées au prétraitement des données par les pandas. ** L'analyse des données est un livre conforme au fait que le prétraitement est à 80% ** (?). Cela suffit pour maîtriser les opérations de base des pandas.
Présentation de deux livres d'apprentissage automatique O'Reilly.
[Apprentissage automatique à partir des fonctionnalités Python apprises avec scikit-learn Bases de l'ingénierie et de l'apprentissage automatique](https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81] % 98% E3% 82% 81% E3% 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E2% 80% 95scikit-learn% E3% 81% A7% E5% AD% A6% E3% 81% B6% E7% 89% B9% E5% BE% B4% E9% 87% 8F% E3% 82% A8% E3% 83% B3% E3% 82% B8% E3% 83% 8B% E3% 82% A2% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E5% 9F% BA% E7% A4% 8E-Andreas-C-Muller / dp / 4873117984 /)
[Livre de recettes d'apprentissage automatique Python](https://www.amazon.co.jp/Python%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82% AF% E3% 83% 83% E3% 82% AF% E3% 83% 96% E3% 83% 83% E3% 82% AF-Chris-Albon / dp / 4873118670 /)
[Essence of Machine Learning-Python, Mathematics, Algorithms Learned while Implementation](https://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%] BF% 92% E3% 81% AE% E3% 82% A8% E3% 83% 83% E3% 82% BB% E3% 83% B3% E3% 82% B9-% E5% AE% 9F% E8% A3 % 85% E3% 81% 97% E3% 81% AA% E3% 81% 8C% E3% 82% 89% E5% AD% A6% E3% 81% B6Python-% E3% 82% A2% E3% 83% AB% E3% 82% B4% E3% 83% AA% E3% 82% BA% E3% 83% A0-Apprentissage automatique / dp / 4779393963 / Implémentez un algorithme d'apprentissage automatique typique à partir de zéro en Python. Vous pouvez également en apprendre davantage sur les mathématiques utilisées pour l'apprentissage automatique.
Recommended Posts