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 Réponses :
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()
Salut @FBruzzesi, merci pour la réponse. lorsque j'exécute l'exemple de code ci-dessus, j'obtiens "
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.
Utilisez groupby
:
df.set_index('accident_county', inplace=True) df.groupby('accident_county')['population'].plot(legend=True)
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
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.