# %load ipython_log.py
# IPython log file
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
path='./usagov_bitly_data2012-03-16-1331923249.txt'
open(path).readline()
import json
record=[json.loads(line) for line in open(path)] #Lire au format json
record[0] #Le contenu de l'enregistrement étant long, ne regardons qu'un seul élément pour le moment
record[0]['tz'] #Dont tz est la clé
time_zone=[rec['tz'] for rec in record if 'tz' in rec] #Voir seulement tz dans l'enregistrement. Mais seulement quand il y avait tz
time_zone[:10] #Voir seulement la 10e ligne à partir du haut
def get_counts(seq):
'''
Comptez combien sont identiques à la chaîne de caractères dans seq et dictionnaire{'Chaîne':Quantité,...}Retourner comme
def get_counts(seq):#Même sens que cela, mais facile avec defaultdict
count=defaultdict(int) #count={}
for x in seq:
if x in counts:
counts[x]+=1
else:
count[x]=1
return counts
'''
from collections import defaultdict
counts=defaultdict(int) #returns `defaultdict(<class 'int'>, {})`
for x in seq:
counts[x]+=1
return counts
counts=get_counts(time_zone)
counts['America/New_York']
len(time_zone)
Ce que nous faisons est de forme différente, mais tout le monde est ensemble
def top_counts(count_dict,n=10):
value_key_pairs=[(count,tz) for tz, count in count_dict.items()]
value_key_pairs.sort()
return value_key_pairs[-n:]
top_counts(counts)
from collections import Counter
counts= Counter(time_zone)
counts.most_common(10)
from pandas import DataFrame,Series
import pandas as pd
frame=DataFrame(record)
frame['tz'][:10]
tz_counts=frame['tz'].value_counts()
tz_counts[:10]
clean_tz=frame['tz'].fillna('Missing')
clean_tz[clean_tz=='']='UNknown'
clean_tz
tz_counts=clean_tz.value_counts()
tz_counts[:10]
tz_counts[:10].plot(kind='barh',rot=0)
import matplotlib.pyplot as plt
# plt.show()
frame['a'][1]
frame['a'][50]
frame['a'][51]
results=Series([x.split()[0] for x in frame.a.dropna()]) #.dropna()méthode pandas Supprimer la ligne vierge Spécifiez la ligne à supprimer avec l'argument
#str.split(x)Diviser str en une liste avec x comme délimiteur
#Répertoriez les chaînes séparées par des espaces(Notation dans la liste), Créez un cadre de données pandas dans la classe Série
results[:5]
results.value_counts()[:8] #value_counts()Comptez le nombre du même élément avec
cframe=frame[frame.a.notnull()] #J'ai collecté uniquement ceux qui ne sont pas nuls dans la colonne a du cadre(cframe['a']==frame.a.dropna())
bool(map(list,[cframe['a'],frame.a.dropna()])) #cframe la fonction de liste['a']Et cadre.a.dropna()Postulez et voyez si ce sont les mêmes
'Windows' or Not?
import numpy as np
operating_system=np.where(cframe['a'].str.contains('Windows'),'Windows','Not Windows') #cframe['a']Mais'Windows'En vrai, y compris les personnages'Windows'avec faux'Not Windows'rends le
#` ['Windows' if 'Windows' in x else 'Not Windows' for x in cframe['a']]`Pareil que
operating_system[:5]
operating_system Another Way
operating_system2=['Windows' if 'Windows' in x else 'Not Windows' for x in cframe['a']]
bool(list(operating_system)==operating_system2) #True
by_tz_os=cframe.groupby(['tz',operating_system])
agg_counts=by_tz_os.size().unstack().fillna(0)
agg_counts[:10]
#2016/07/28 22:56:30__
indexer=agg_counts.sum(1).argsort() #argsort()Index Np après tri.Renvoie au format tableau
#np.sum()En gros, retournez celui qui ajoute tout le contenu du tableau
'''
# ABOUT np.sum()
>>> np.sum([[0, 1], [0, 5]], axis=0)
array([0, 6]) #return array([0+0],[1+5])
>>> np.sum([[0, 1], [0, 5]], axis=1)
array([1, 5]) #return array([0+1],[0+5])
'''
indexer[:10]
count_subset=agg_counts.take(indexer)[-10:] #Agg à seulement 10 minutes de la fin de l'indexeur_Nombre de retours(take=avoir)
count_subset.plot(kind='barh', stacked=True)
# plt.show()
normed_subset=count_subset.div(count_subset.sum(1),axis=0)
normed_subset.plot(kind='barh',stacked=True)
# plt.show()
Recommended Posts