2014-06-23 1 views
0

j'ai un fichier .json contenant beaucoup d'articles, chaque article est formaté comme ceci:données du groupe par mois et l'année

{ 
"source": "....", 
"title": ".......", 
"original_time": "ora: 20:03, 06 dec 2006", 
"datetime": "2006-12-06T20:03:00+00:00", 
"views": 398, 
"comments": 1, 
"content": "..." 
"id": "13", 
} 

Maintenant, je dois résumer le nombre de vues de tous les articles pour chaque mois et l'année et de tracer les résultats ... mais je ne sais pas comment faire cela parce que je suis nouveau python ... Voilà ce que je l'ai fait:

import json 
#from pprint import pprint 
import csv 
import time 
import datetime 

views = [] 
time = [] 
art_timpul = 0 
unimedia = 0 
total_articles = 0 
json_data=open('all.json') 
data = json.load(json_data) 
#pprint(data) 
json_data.close() 

for i in data: 
    if i["source"] == 'unimedia': 
     art_unimedia += 1 
     x = i["views"] 
     views.append(int(x)) 
     y = i["original_time"] 
     time.append(y) 
    if i["source"] == 'timpul': 
     art_timpul += 1 
    total_articles += 1 

myfile = open('output.csv', 'wb') 
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
wr.writerow(views) 

print time 
#print views 
print "Articles from Unimedia", art_unimedia 
print "Articles from Timpul", art_timpul   
print "Total articles", total_articles 

Edit: Je dois regrouper les données par mois et année, je dois résumer le nombre de vues des articles écrits dans ce mois et l'année ... et les exporter dans un fichier

+2

Quel est exactement le problème? Extraire les données de json, analyser la chaîne de date, regrouper les données, ...? S'il vous plaît soyez plus précis. –

+0

Je dois regrouper les données par mois et année, je dois résumer le nombre de vues des articles écrits dans ce mois et l'année ... et les exporter dans un fichier – PlugaruT

+1

vous devriez regarder dans les pandas. c'est bon pour ce genre de chose, mais il y a une courbe d'apprentissage abrupte. – acushner

Répondre

0

Pas tout à fait clair à partir de votre question, mais je suppose que vous n'avez aucun problème avec la lecture et l'écriture des fichiers, mais seulement avec l'analyse de la chaîne de date et le regroupement des données.

D'abord, en analysant la date. Ici, vous pouvez utiliser par ex. dateutil.parser.parse ou time.strptime. dateutil.parser semble attendre un format de date comme le vôtre par défaut, donc nous allons l'utiliser au lieu de configuring the format pour strptime.

Ensuite, le regroupement: Le plus simple serait d'utiliser un nombre de dictionaries mappage des mois ou des années pour afficher. Vous pouvez également utiliser un dictionnaire pour différentes sources, au lieu de ces deux variables que vous avez maintenant. Utilisez simplement le mois ou l'année comme clé du dictionnaire et mettez à jour la valeur en conséquence. Pour rendre la vie un peu plus facile, nous pouvons utiliser collections.defaultdict, nous n'avons donc pas à vérifier si cette clé existe déjà.

Exemple de regroupement par mois (similaire pour l'année et la source, etc. dans la même boucle):

import collections, dateutil.parser 
views_by_month = collections.defaultdict(int) 
for item in data: 
    views = item["views"] 
    date = dateutil.parser.parse(item["datetime"]) 
    views_by_month[date.month] += views 
print views_by_month 
+0

merci, j'ai un peu modifié pour travailler comme ceci: Jan 2006, Feb 2006, Mars 2006 ... jusqu'en Mai 2014 ... pour chaque mois de chaque année :) – PlugaruT