url分析案例

本文通过分析《利用Python进行数据分析》中的案例,展示了如何处理和统计访问网页数据,包括时区和操作系统使用情况。数据经过处理后发现,纽约地区的上网冲浪人数最多。进一步将数据整理为DataFrame,填充空值并分析,揭示了用户的行为模式,特别是在不同时区的操作系统使用偏好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇分析出自《利用python进行数据分析》,为巩固学习成果,我对其进行了代码实践。
本数据记录了访问某时段内,访问网页的数据,包括所用系统型号,所在时区,访问的域名等数据。

import numpy as np
from numpy.random import randn 
np.random.seed(123)
import os
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(10, 6))
np.set_printoptions(precision=4)
pd.options.display.max_rows = 20
#导入模块,规定画布,规定小数位数,规定数据显示行数

path = 'datasets/bitly_usagov/example.txt'
a = open(path)
import json
my_dic = [json.loads(line) for line in a] #json数据的读取,弄进一个列表
my_dic[:10]

在这里插入图片描述
json数据读取出来是字典的形式,tz代表时区,我们想看看大家都在哪里进行的网上冲浪。

time_zones = [obj['tz'] for obj in my_dic if 'tz' in obj]#不是所有的字典都有tz字段,所以如果没有if就会报错。
time_zones[:10]

在这里插入图片描述

from collections import Counter
counts = Counter(time_zones) 
#对列表进行计数,这里用了函数,也可以自己编写程序进行计数:
#for i  in time_zones:
#    zonescount = {}
#    if i in zonescount:
#       zonescount[i] += 1
#    else:
#       zonescount[i] = 1
       
#def sort_zones_values(group):
#    sort_zones = [(value,key)for key,value in zonescount ]
#    sort_zones = sort_zones.sort(reverse = True)  
#返回的是一个装有各个元组的列表     
counts.most_common(10)

在这里插入图片描述
看来纽约上网冲浪的人数最多。下面我们把my_dic整理成Datafram,更加便于统计操作

frame = pd.DataFrame(my_dic)
frame

在这里插入图片描述

tz_counts = frame['tz'].value_counts()
tz_counts.isnull().sum()
clean_tz = tz_counts.fillna('missing')
clean_tz

结果是有空值,有120个,我们用Missing字符串对其填充

clean_tz[clean_tz == ''] = 'unkown'
tz = clean_tz.value_counts()
tz

空白不会显示Null,我们对空白进行处理为unkown

import seaborn as sns
data = tz[:10]
sns.barplot(y=data.index,x=data.values)

在这里插入图片描述我们知道了时区,下面我们对用户的系统进行统计,用户的系统储存在a里,并最后和时区组合起来,看看用户行为。我们先看一下a里面的信息

cframe = frame[frame.a.notnull()]
os = [x for x in cframe.a if 'Windows' in x]
os

在这里插入图片描述
添加一列os


cframe['os'] = np.where(cframe['a'].str.contains('Windows'),
                        'Windows', 'Not Windows')
#numpy.where相当于excel里的if
cframe['os'][:5]

在这里插入图片描述
对tz和os进行聚合

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

在这里插入图片描述
选取最常出现的时区

agg_counts.sum(1).nlargest(10)
#排序然后取出前十的时区

在这里插入图片描述
下面我们把总数统计然后画图

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

在这里插入图片描述
这张图与分析总统竞选时一样不容易看出基数小的对比效果,我们百分数一下

def norm_total(group):
    group['normed_total'] = group.total / group.total.sum()
    return group

results = count_subset.groupby('tz').apply(norm_total)
results

在这里插入图片描述

sns.barplot(x = 'normed_total',y = 'tz',hue='os',data = results)

在这里插入图片描述这样我们就可以看出哪个时区的用户,分别用什么系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值