1
votes

Comment visualiser le nombre d'enregistrements par rapport à d'autres colonnes dans les pandas

Je travaille sur l'ensemble de données sur les accidents de la route comme suit

df = pd.DataFrame(data={'accident_id': ['A1', 'A2', 'A3', 'A4','A5', 'A6'],
                        'accident_county': ['abc', 'xyz', 'abc', 'abc', 'xyz', 'lmn'],
                        'population': [100000, 6000, 100000, 100000, 6000, 9000],
                        'income':  [11200, 78000, 11200, 11200, 78000, 28000]})


accident_id        accident_county    population    income
   A1                 abc               100000       11200
   A2                 xyz               6000         78000
   A3                 abc               100000       11200
   A4                 abc               100000       11200
   A5                 xyz               6000         78000
   A6                 lmn               9000         28000

Je souhaite tracer un graphique afin de pouvoir analyser le nombre d'accidents survenus dans un comté particulier et quelle était la population et les revenus de ce comté, en essayant de trouver s'il existe une corrélation avec le nombre de personnes et le revenu.

Le nombre d'accidents peut être trouvé par le nombre d'enregistrements, mais je ne sais pas comment trouver le nombre pour un comté et comparez-le à la population et aux revenus de ce comté.


3 commentaires

Pouvez-vous nous montrer ce que vous avez essayé jusqu'à présent? Veuillez consulter Comment demander et Comment créer un exemple minimal et reproductible


Avez-vous essayé d'utiliser .groupby ?


Si vous avez la date de l'accident, additionnez le nombre d'accidents dans une année, la population moyenne et le revenu dans une année également, puis triez les données chronologiques résultantes par colonne de population ou de revenu dans l'ordre croissant et tracez le graphique XY de cette relation. Vous pouvez avoir besoin d'une moyenne de deuxième ordre du nombre d'accidents s'il y a des doublons avec le même montant de population / revenu, ce qui entraîne un nombre d'accidents différent.


3 Réponses :


0
votes

Je comprends que le même accident_county aura les mêmes population et revenu pour chaque accident_id . Par conséquent, cela peut répondre à vos besoins

import matplotlib.pyplot as plt

df = pd.DataFrame(data={'accident_id': ['A1', 'A2', 'A3', 'A4','A5', 'A6'],
                    'accident_county': ['abc', 'xyz', 'abc', 'abc', 'xyz', 'lmn'],
                    'population': [100000, 6000, 100000, 100000, 6000, 9000],
                    'income':  [11200, 78000, 11200, 11200, 78000, 28000]})

df = df.groupby('accident_county').agg({'accident_id':'count',
                                       'population':'max',
                                       'income':'max'})
df.rename(columns={'accident_id':'accident_number'}, inplace=True)

df[['population', 'income']].plot()
df['accident_number'].plot(legend=True, secondary_y=True)

plt.show()

 entrez la description de l'image ici


4 commentaires

Salut @FBruzzesi, merci pour la réponse. lorsque j'exécute l'exemple de code ci-dessus, j'obtiens "" au lieu du graphique comme ci-dessus


Cela peut dépendre de l'éditeur que vous utilisez, essayez d'ajouter l'importation suivante: importez matplotlib.pyplot en tant que plt et appelez plt.show () à la fin. Je les ajouterai dans le code ci-dessus


Cela a fonctionné, mais le numéro d'accident est une ligne horizontale droite, c'est quand je cours avec mon vrai jeu de données, il compte plus de 3000 comtés. Toute idée de ce qui pourrait en être la cause. les nombres vont exponectial sur le côté gauche contrairement à l'exemple ci-dessus avec 20000,40000 ...


vous pouvez essayer d'ajouter le paramètre logy = True dans la méthode de tracé de la trame de données, cela donnera une mise à l'échelle logarithmique pour l'axe y.



0
votes

Utilisez groupby:

df.set_index('accident_county', inplace=True)
df.groupby('accident_county')['population'].plot(legend=True)


0 commentaires

0
votes

Vous pouvez appeler .groupby () et transmettre le nom de la colonne sur laquelle vous souhaitez regrouper. Comme dans SQL

abc = df.groupby("accident_county ")["accident_id"].count()

Dans le cadre de données python:

SELECT COUNT(accident_id)
FROM COLUMN NAME
GROUP BY accident_county 


0 commentaires