来自Bitly的USA.gov数据

0 读取文本文件(JSON格式)

读取文件中第一行

path = 'pydata-book/datasets/bitly_usagov/example.txt'
open(path).readline() # 文件第一行


上下文管理器with

with open(path) as file:print(file.readline())print(file.readline())

import jsonpath = 'pydata-book/datasets/bitly_usagov/example.txt'
records = [json.loads(line) for line in open(path)]
records[0]

1 用纯Python对时区进行计数

‘tz’: ‘America/New_York’ 时区 (time zone)

time_zones = [rec['tz'] for rec in records]


!!!不是所有记录都有时区字段

time_zones = [rec['tz'] for rec in records if 'tz' in rec] # 判别式
time_zones[:10]

遍历时区,将计数值保存在字典数据中 (count, time_zone)

def get_counts(sequence):counts = {} # 字典for x in sequence:if x in counts:counts[x] += 1else:counts[x] = 1return counts

将time_zones传入函数,并查看’America/New_York’的数量

counts = get_counts(time_zones)
counts['America/New_York']

collections.dedefaultdict

from collections import defaultdictdef get_counts2(sequence):counts = defaultdict(int) # 初始化为0for x in sequence:counts[x] += 1return countsget_counts2(time_zones)['America/New_York']

len(time_zones)

得到前10位时区及其计数值

def top10_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:]top10_counts(counts)

collections.Counter

from collections import Countercounts = Counter(time_zones)
counts.most_common(10)

2 用Pandas对时区进行计数

创建DataFrame

import pandas as pdframe = pd.DataFrame(records)
frame.info()

摘要视图(summary view)

frame['tz'][:10]

pd.Series.value_counts

tz_counts = frame['tz'].value_counts()
tz_counts[:10]

pd.Series.fillna

clean_tz = frame['tz'].fillna('Missing') # 替换缺失值(NA) -> 未知值(空字符串)则可以通过布尔型数组索引加以替换
clean_tz[clean_tz == ''] = 'Unknown'
tz_counts = clean_tz.value_counts()
tz_counts[:10]

sns.barplot

import seaborn as snssubset = tz_counts[:10]
sns.barplot(subset.values, subset.index)

‘a’ - 执行URL短缩操作的浏览器、设备、应用程序的相关信息 agent
User-Agent
用户代理

pd.Series.dropna

results = pd.Series([x.split()[0] for x in frame.a.dropna()])
results[:5]

 results.value_counts()[:5]

按’Windows’ | ‘Not Windows’ 用户对时区统计信息进行分解(是否含’Windows’)

删除缺失值
pd.Series.notnull

cframe = frame[frame.a.notnull()]

计算出各行是否含有’Windows’
np.where
str.contains

cframe['os'] = np.where(cframe['a'].str.contains('Windows'), 'Windows', 'Not Windows')
cframe['os'][:5]

按照时区 & 新得到的操作系统 列对数据进行分组
pd.Series.groupby # 分组
pd.Series.unstack # 透视索引标签
pd.Series.fillna # 填充缺失值

by_tz_os = cframe.groupby(['tz', 'os'])
agg_counts = by_tz_os.size().unstack().fillna(0)
agg_counts[:10]

根据agg_counts中的行数构造一个间接索引数组
pd.Series.sum
pd.Series.argsort

indexer = agg_counts.sum(1).argsort()
indexer[:10]

按照indexer截取最后10行最大值
pd.Series.take

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

pd.Series.nlargest #

agg_counts.sum(1).nlargest(10)

pd.DataFrame.stack # 透视列标签

count_subset

count_subset.stack()

count_subset = count_subset.stack()
count_subset.name = 'total'
count_subset = count_subset.reset_index()
count_subset[:10]

sns.barplot #堆积条形图

sns.barplot(x='total', y='tz', hue='os', data=count_subset)

不易看出Windows用户在小分组中的相对比例,因此标椎化分组百分比之和为1
pd.Series.sum # 合计
pd.Series.apply # 应用函数

def norm_total(group):group['normed_toal'] = group.total / group.total.sum()return groupresults = count_subset.groupby('tz').apply(norm_total)results.head()


sns.barplot(x=‘normed_toal’, y=‘tz’, hue=‘os’, data=results)

pd.Series.transform # 高效计算标椎化的和

g = count_subset.groupby('tz')
results = count_subset.total / g.total.transform('sum')
results

来自Bitly的USA.gov数据相关推荐

  1. 来自Bitly的USA.gov数据,数据分析案例

    数据分析案例01 xiaoyao 1.USA.gov Data from Bitly–来自Bitly的USA.gov数据 数据背景:2011年,URL缩短服务Bitly跟美国政府⽹站USA.gov合作 ...

  2. 第14章 14.1 来自Bitly的USA.gov数据(1)

    1.数据是每小时更新一次,格式是JSON形式,下面是只读取文件中的第一行 2.可以使用Python内置或第三方模块将json字符串转换成Python字典对象 3.用纯Python代码对时区进行计数,采 ...

  3. 14.1 来自Bitly的USA.gov的数据(2)

    1.用pandas对时区进行计数 2.取出前10个时区并计数 3.先将缺失数据填充,再可视化这个数据:fillna对缺失数据进行填充.seaborn对数据进行可视化 4.按Windows和非Windo ...

  4. Python实现对Bitly的USA.gov数据集的可视化

    数据集链接:example.txt import json import pandas import seaborn import numpydef main():# 读取json文件 来自Bitly ...

  5. mongodb数据合并设计_MongoDB:将来自多个集合的数据合并成一个

    我如何(在MongoDB)将来自多个集合的数据合并到一个集合? 我可以使用map-reduce,如果是这样,怎么样? 我会非常感谢一些例子,因为我是一个新手. 虽然你不能做这个实时,你可以运行map- ...

  6. USA gov data from Bitly

    #数据处理中使用函数解析: ##json.load()与json.loads()的区别 json.loads() #将json string解析为python dictionary json.load ...

  7. 奉送9个重磅PPT:来自2015中国互联网大会-大数据应用论坛

    本次论坛围绕主题"大数据开启大未来",邀请了众多互联网政企代表,包括中国互联网协会.贵阳市政府.阿里.微软.缔元信.中国电信.晶赞科技.搜狗广告.秒针.世界邦旅行网.友盟等.此次论 ...

  8. 整合来自多个Aurora数据库数据,亚马逊云科技为用户提供数据分析一体化融合解决方案

    亚马逊云科技近日在沙利文联合头豹研究院发布的<2023年中国数据管理解决方案市场报告>中再次获评中国数据管理解决方案的领导者位置,并在增长指数和创新指数上获得最高评分.亚马逊云科技凭借其独 ...

  9. 来自程序媛的大数据分享(文中有彩蛋)

    今天是个美丽的日子,女神节到啦!有很多聪明.自信.知性.可爱的技术系女同学,平时被深藏在上万名猿类中.趁着女神节的来到,我们也寻找到云栖社区的程序媛们来个精彩亮相. 女神节第一弹:觐见女神 所谓程序媛 ...

最新文章

  1. css编写要注意什么 及一些公用的样式和外部引用 转码
  2. 各版本mysql乱码的问题解决(转)
  3. ASP.net本地调试时正常,发布时错误的几个问题解析
  4. 高中必背88个数学公式_高中常考的88个数学公式,全部整理给你,赶紧收藏一下!...
  5. 不管马斯克怎么说,中国智能汽车激光雷达军备竞赛已经开始
  6. JAVASCRIPT学习笔记----Javascript引用类型
  7. EasyX和Windows库函数实现音乐播放
  8. ubuntu16.04安装ssh服务,远程登录
  9. 让XP远程桌面支持多用户
  10. mysql漏洞包_MySQL npm包中的本地文件泄露漏洞
  11. linux C++ 多进程初步02
  12. 选择Bootstrap的理由
  13. html 图片旋转插件,jQuery插件expander实现图片翻转特效
  14. 牛顿法的优缺点及特征
  15. 两个HC05蓝牙模块相互之间的通信
  16. php 匹配中英文分号,PHP正则匹配中英文、数字及下划线的方法【用户名验证】 原创...
  17. 油菜的做法及营养知识详细介绍
  18. 192.168.0.1登录入口
  19. 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报...
  20. 网线线序及网线转RS232—— DB9线序

热门文章

  1. 微商靠什么引流?微商有哪些平台可以精准引流?
  2. 现场直击汶川地震都江堰灾情(图)
  3. 一台linux同时安装两个mysql库,使用不同端口
  4. 2017下半年掘金日报优质文章合集:iOS篇
  5. Java 贪吃虫小游戏
  6. 看过这样一个纪录片吗《父亲》,令人深思
  7. 简单说下YOLOv1、v2、v3、v4各自的特点与发展史
  8. 什么是数字化?为什么需要数字化?
  9. LTE中REG和CCE概念
  10. ACW95 费解的开关