利用python进行数据分析ch02(usa.gob)

@author: Jemila
"""


import os  # 导入模块


os.chdir('D:/Documents/Python Scripts')  # 切换工作目录


import json
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt'


#按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" }这个示例非常基本,而且实际上比等效的纯文本 "名称 / 值对" 占用更多的空间:firstName=Brett


#但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:


#{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }


#从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。


records = [json.loads(line) for line in open(path)]  # 列表推导式逐行读取文件数据


records[0]  


print records[0]['tz']


time_zones = [col['tz'] for col in records if 'tz' in col]
#去除record表中tz列的数据 col可以自己命名 条件写进列表推导式[for in if] 用于筛选
time_zones[:10]


找出time_zone出现最多的区,计算结果
from pandas import DataFrame,Series
#表格函数和字符串函数
import pandas as pd; import numpy as np
frame = DataFrame(records)
#利用Dataframe将数据表示为表格 显示基本信息
frame['tz'][:10]
#frame输出的是摘要视图
frame['tz'][:10].value_counts()
#计算前十个数量较大的tz 
#上面是错误的,正确形式为
frame['tz'].value_counts()[:10]
#可见其规律是,先找出tz列,计数之后再排序出前十


利用matplotlib为上面生成图片
#为缺失值进行替代,使用fillna函数,空字符串通过布尔型数组索引加以替换


clean_tz = frame['tz'].fillna('Missing')#frame['tz']提取tz中N/A替换为missing  列表推导式,notnull(),dropna()函数用于增删,使用fillna,[=='']用于替换,where判断某列每一行值返回相应结果


clean_tz[clean_tz == ''] = 'Unknown' # 未知值(空字符串)通过布尔型索引加以替换


tz_count = clean_tz.value_counts()


tz_count[:10]


tz_count[:10].plot(kind = 'barh',rot = 8)#条形图 rot为标签的倾斜度
浏览器agent的解析
results = Series([x.split()[0] for x in frame['a'].dropna()])#字符串函数Series
results[:5]#第一个空格前 去掉na值


results.value_counts()[:8]


是否是windows用户,去掉na值去掉null值


cframe =frame[frame['a'].notnull()]
#取出非空值
#接下来计算并且分类
cframe#依然是整个frame结构


wframe =frame['a'][frame['a'].notnull()]
wframe#取出a列结构


wframe.str.contains('Windows')#判断返回True 和 False
#where 相当于if函数
operating_system = np.where(wframe.str.contains('Windows'),'Windows','Not Windows')


operating_system[:5]


对不同时区是否是windows用户进行分组


by_os = cframe.groupby(['tz',operating_system])


#size计数类似于value_counts(),对于groupby只能用size计数
by_os.size()
#利用un_stack进行重塑结果


agg_counts = by_os.size().unstack().fillna(0)


agg_counts
#选出最常出现的时区,将agg_counts的行数构造一个间接索引数组




indexer = agg_counts.sum(1).argsort()
#argsort函数返回的是数组值从小到大的索引值


indexer[:10]
#利用take对index的顺序截取最后10行,即前十个最大的时区


count_subset = agg_counts.take(indexer)[-10:]
count_subset




count_subset.plot(kind = 'barh',stacked = True)#在同一行堆积
count_subset.plot(kind = 'barh',stacked = False)#在上下两行不堆积

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值