来自Bitly的USA.gov数据
来自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数据相关推荐
- 来自Bitly的USA.gov数据,数据分析案例
数据分析案例01 xiaoyao 1.USA.gov Data from Bitly–来自Bitly的USA.gov数据 数据背景:2011年,URL缩短服务Bitly跟美国政府⽹站USA.gov合作 ...
- 第14章 14.1 来自Bitly的USA.gov数据(1)
1.数据是每小时更新一次,格式是JSON形式,下面是只读取文件中的第一行 2.可以使用Python内置或第三方模块将json字符串转换成Python字典对象 3.用纯Python代码对时区进行计数,采 ...
- 14.1 来自Bitly的USA.gov的数据(2)
1.用pandas对时区进行计数 2.取出前10个时区并计数 3.先将缺失数据填充,再可视化这个数据:fillna对缺失数据进行填充.seaborn对数据进行可视化 4.按Windows和非Windo ...
- Python实现对Bitly的USA.gov数据集的可视化
数据集链接:example.txt import json import pandas import seaborn import numpydef main():# 读取json文件 来自Bitly ...
- mongodb数据合并设计_MongoDB:将来自多个集合的数据合并成一个
我如何(在MongoDB)将来自多个集合的数据合并到一个集合? 我可以使用map-reduce,如果是这样,怎么样? 我会非常感谢一些例子,因为我是一个新手. 虽然你不能做这个实时,你可以运行map- ...
- USA gov data from Bitly
#数据处理中使用函数解析: ##json.load()与json.loads()的区别 json.loads() #将json string解析为python dictionary json.load ...
- 奉送9个重磅PPT:来自2015中国互联网大会-大数据应用论坛
本次论坛围绕主题"大数据开启大未来",邀请了众多互联网政企代表,包括中国互联网协会.贵阳市政府.阿里.微软.缔元信.中国电信.晶赞科技.搜狗广告.秒针.世界邦旅行网.友盟等.此次论 ...
- 整合来自多个Aurora数据库数据,亚马逊云科技为用户提供数据分析一体化融合解决方案
亚马逊云科技近日在沙利文联合头豹研究院发布的<2023年中国数据管理解决方案市场报告>中再次获评中国数据管理解决方案的领导者位置,并在增长指数和创新指数上获得最高评分.亚马逊云科技凭借其独 ...
- 来自程序媛的大数据分享(文中有彩蛋)
今天是个美丽的日子,女神节到啦!有很多聪明.自信.知性.可爱的技术系女同学,平时被深藏在上万名猿类中.趁着女神节的来到,我们也寻找到云栖社区的程序媛们来个精彩亮相. 女神节第一弹:觐见女神 所谓程序媛 ...
最新文章
- css编写要注意什么 及一些公用的样式和外部引用 转码
- 各版本mysql乱码的问题解决(转)
- ASP.net本地调试时正常,发布时错误的几个问题解析
- 高中必背88个数学公式_高中常考的88个数学公式,全部整理给你,赶紧收藏一下!...
- 不管马斯克怎么说,中国智能汽车激光雷达军备竞赛已经开始
- JAVASCRIPT学习笔记----Javascript引用类型
- EasyX和Windows库函数实现音乐播放
- ubuntu16.04安装ssh服务,远程登录
- 让XP远程桌面支持多用户
- mysql漏洞包_MySQL npm包中的本地文件泄露漏洞
- linux C++ 多进程初步02
- 选择Bootstrap的理由
- html 图片旋转插件,jQuery插件expander实现图片翻转特效
- 牛顿法的优缺点及特征
- 两个HC05蓝牙模块相互之间的通信
- php 匹配中英文分号,PHP正则匹配中英文、数字及下划线的方法【用户名验证】 原创...
- 油菜的做法及营养知识详细介绍
- 192.168.0.1登录入口
- 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报...
- 网线线序及网线转RS232—— DB9线序