Dans cet article, j'essaierai de dessiner différents graphiques en utilisant la bibliothèque de création de graphes Python Altair. Altair se caractérise par la saisie de données avec le DataFrame de Pandas.
Dans cet article, nous avons utilisé la Base de données des passagers du Titanic publiée sur Kaggle. Le format des données est le suivant.
train.csv
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
La manière de lire les données est indiquée ci-dessous. Référence
Peut être installé avec pip.
Terminal
pip install altair
Altair est la bibliothèque la plus appropriée pour créer des diagrammes de dispersion. Même les données numériques sont traitées comme données de catégorie en ajoutant ``: O ''.
altair_demo.py
import os
import altair as alt
import pandas as pd
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
scatter_plot = alt.Chart(df).mark_circle().encode(
x=alt.X('Age'),
y=alt.Y('Fare'),
column=alt.Column('Survived:O'),
color=alt.Color('Sex', sort=['male', 'female']),
tooltip=['Age', 'Fare', 'Name'],
size=alt.Size('Pclass:O')
).properties(
width=600,
height=500
).interactive()
scatter_plot.show()
Si vous souhaitez dessiner une ligne, vous pouvez la connecter en créant les coordonnées du point de départ et du point final dans DataFrame. La section et la pente de la régression linéaire peuvent être trouvées dans sckit-learn.
altair_demo.py
import os
import altair as alt
import pandas as pd
from sklearn.linear_model import LinearRegression
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
#Supprimer la ligne contenant la valeur manquante
linear_df = df.dropna(subset=['Age', 'Fare'], how='any', axis=0)
#Créer un modèle de régression linéaire
linear = LinearRegression(
).fit(linear_df['Age'].values.reshape(-1,1), linear_df['Fare'].values.reshape(-1,1))
#Déterminer les paramètres
a = linear.coef_[0]
b = linear.intercept_
#Déterminer le seuil
x_min = df['Age'].min()
x_max = df['Age'].max()
#Créer un bloc de données
linear_points = pd.DataFrame({
'Age': [x_min, x_max],
'Fare': [a*x_min+b, a*x_max+b],
}).astype(float)
linear_line = alt.Chart(linear_points).mark_line(color='steelblue').encode(
x=alt.X('Age'),
y=alt.Y('Fare')
).properties(
width=500,
height=500
).interactive()
linear_line.show()
Il est également possible de l'afficher en haut de la carte de dispersion.
altair_demo.py
import os
import altair as alt
import pandas as pd
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
scatter_plot = alt.Chart(df).mark_circle(size=50).encode(
x=alt.X('Age'),
y=alt.Y('Fare'),
).properties(
width=500,
height=500
).interactive()
linear_line =Identique à ci-dessus (omis)
(scatter_plot + linear_line).show()
altair_demo.py
import os
import altair as alt
import pandas as pd
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
boxplot = alt.Chart(df.dropna(subset=['Embarked'], how='any', axis=0)).mark_boxplot().encode(
x=alt.X('Survived:O'),
y=alt.Y('Fare'),
column=alt.Column('Embarked', sort=['S','Q','C']),
color=alt.Color('Sex', sort=['male', 'female'])
).properties(
width=600,
height=500
).interactive()
boxplot.show()
En définissant l'axe Y sur `` count () '', il compte les éléments. Vous pouvez définir bin avec «alt.X ()».
altair_demo.py
import os
import altair as alt
import pandas as pd
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
histgram = alt.Chart(df).mark_bar().encode(
x=alt.X("Age", bin=alt.Bin(step=10,extent=[0,90])),
y=alt.Y('count()'),
column=alt.Column('Survived:O'),
color=alt.Color('Sex', sort=['male', 'female']),
opacity=alt.Opacity('Sex', sort=['male', 'female'])
).properties(
width=600,
height=500
).interactive()
histgram.show()
Vous pouvez enregistrer la figure créée au format html en installant le package suivant.
Terminal
pip install altair_saver
Ajoutez `` .interactive () '' pour que le graphique se déplace librement. Cette propriété est conservée dans le html enregistré.
altair_demo.py
import os
import altair as alt
import pandas as pd
cwd = os.getcwd()
path = ['train.csv']
file = os.path.join(cwd, *path)
df = pd.read_table(file, sep=',', index_col=0 ,header=0)
boxplot = alt.Chart(df.dropna(subset=['Embarked'], how='any', axis=0)).mark_boxplot().encode(
x=alt.X('Survived:O'),
y=alt.Y('Fare')).interactive()
boxplot.save(fp=boxplot.html)
Si vous souhaitez enregistrer dans un format autre que .html
, vous pouvez vous référer à ici.
En combinant avec Streamlit, diverses applications d'analyse de données peuvent être créées.
Recommended Posts