web-dev-qa-db-fra.com

Pandas scatter_matrix - Variables catégoriques de tracé

Je regarde le célèbre jeu de données Titanic du concours Kaggle trouvé ici: http://www.kaggle.com/c/titanic-gettingStarted/data

J'ai chargé et traité les données en utilisant:

# import required libraries
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# load the data from the file
df = pd.read_csv('./data/train.csv')

# import the scatter_matrix functionality
from pandas.tools.plotting import scatter_matrix

# define colors list, to be used to plot survived either red (=0) or green (=1)
colors=['red','green']

# make a scatter plot
scatter_matrix(df,figsize=[20,20],marker='x',c=df.Survived.apply(lambda x:colors[x]))

df.info()

scatter_matrix from matplotlib

Comment puis-je ajouter les colonnes catégoriques comme Sex and Embarked à l'intrigue?

7
Geoffrey Stoel

Vous devez transformer les variables catégoriques en nombres pour les tracer.

Exemple (en supposant que la colonne 'Sexe' contient les données de genre, avec 'M' pour les hommes et 'F' pour les femmes)

df['Sex_int'] = np.nan
df.loc[df['Sex'] == 'M', 'Sex_int'] = 0
df.loc[df['Sex'] == 'F', 'Sex_int'] = 1

Désormais, toutes les femmes sont représentées par 0 et les hommes par 1. Les sexes inconnus (s’il en existe) seront ignorés.

Le reste de votre code devrait traiter correctement le cadre de données mis à jour.

7
knightofni

après avoir googlé et rappelé quelque chose comme la fonction .map (), je l'ai corrigée de la manière suivante:

colors=['red','green'] # color codes for survived : 0=red or 1=green

# create mapping Series for gender so it can be plotted
gender = Series([0,1],index=['male','female'])    
df['gender']=df.Sex.map(gender)

# create mapping Series for Embarked so it can be plotted
embarked = Series([0,1,2,3],index=df.Embarked.unique())
df['embarked']=df.Embarked.map(embarked)

# add survived also back to the df
df['survived']=target

maintenant je peux le représenter à nouveau ... et supprimer les colonnes ajoutées par la suite.

merci à tous d'avoir répondu .....

2
Geoffrey Stoel