分析工作基于某5天内的60万左右微博用户签到数据,采用shell&awk脚本;
1、最热门的国家签到排行(除中国)
1.1 API请求出经纬对应的国家省份城市信息,得到问文件:lat_lon_country_uniq
把国家等信息拓展weibo_locate.2018-05.1-5的列
1.2 合并2018-5.1-5.5数据到weibo_locate.2018-05.1-5
awk -F "\t" 'NR==FNR{a[$1$2]=$3"\t"$4"\t"$5;next}{if(a[$8$9]) print $0"\t"a[$8$9]; else print $0"\t""NA""\t""NA""\t""NA"}' lat_lon_country_uniq weibo_locate.2018-05.1-5 > new_weibo_locate
得到文件是源数据上添加三列:国家-省份-城市(国外则仅有国家)
1.3
#提取出userid和国家
cat new_weibo_locate | cut –f5,12 | sort| uniq >userid_country
#统计国家热门排行榜
cat userid_country | cut -f2 | sort | uniq -c | sort -k1rn > cnt_country
最热门的国家签到排行榜如下:
6728 Japan
4714 United States
3932 Thailand
2931 Australia
2615 South Korea
2534 United Kingdom
…
截取的时间是五一期间,看来去国外旅游的人还是蛮多的,比较热门的国家有日本,米国,泰国,澳大利利亚和韩国,我也想去泰国....
2、最热门的中国省份排行
2.1
#提取出userid和中国省份信息
cat new_weibo_locate | cut -f5,12,13,14 | awk '{if ($2=="中国") print $1"\t"$3}' | sort | uniq > userid_province
2.2
#统计热门省份(去掉直辖市)
cat userid_province | cut -f2 | sort | uniq -c | sort -k1rn | awk '{if (!match ($2,".*市")) print $1"\t"$2}'>cnt_province
热门省份排行榜:
56571 广东省
46351 山东省
42992 江苏省
37447 浙江省
32144 四川省
31570 河南省
...
广东银好爱刷微博啊,其实北京人更爱刷微博,因为这里过滤掉了直辖市....
3、最热门的中国城市排行。
3.1
#提取出userid和对应城市信息
cat new_weibo_locate | cut -f5,12,13,14 | awk '{if ($2=="中国") print $1"\t"$4}' | sort | uniq > userid_city
#统计热门城市(按用户签到数量)
cat userid_city | cut -f2 | sort | uniq -c | awk '{print $2"\t"$1}' > cntUserid_city
#提取出weiboid和对应城市信息
cat new_weibo_locate | cut -f4,12,14 | awk '{if ($2=="中国") print $1"\t"$3}' | sort | uniq > weiboid_city
#统计热门城市(按微博签到数量)
cat weiboid_city | cut -f2 | sort | uniq -c | awk '{print $2"\t"$1}' > cntWeiboid_city
#join到一张表排序
join cntUserid_city cntWeiboid_city | sort -k2rn > join_city_userid_weiboid
热门城市排行榜:
city userid_cnt weiboid_cnt
北京市 40842 53557
上海市 26919 34426
成都市 20204 26270
西安市 17666 22745
广州市 17304 21973
深圳市 15702 20270
...
热门城市依然是北京北京....
4、在5月份(实际统计1-5号这五天)有跨国旅行的人,计算这部分人在微博总用户的比例
#计算跨国旅行的人数(userid_country 组合去重)
cat new_weibo_locate | cut -f5,12 | awk -F"\t" '{if ($2!="中国") print $1"\t"$2}' | sort | uniq | wc –l
返回:41334
#总人数计算
cat new_weibo_locate | cut -f5,12 | sort | uniq | wc -l
返回:656676
跨国旅行比例: 59461/875554 = 6.3%
Conclusion:祖国人民小数据范围统计有6.3%的人跨国旅行,你拖后腿了吗?
5、跨国旅行的人喜欢用什么手机
#提取出跨国旅行人的userid
cat new_weibo_locate | cut -f5,12 | awk -F"\t" '{if ($2!="中国") print $1"\t"$2}' | sort | uniq > userid_travel_country
#去之前一份总数据中提取出userid_device信息(存为文件:userid_device_uniq)
#然后兑出userid的手持设备信息
awk -F "\t" 'NR==FNR{a[$1]=$2;next}{if(a[$1]) print $1"\t"a[$1]; else print $1"\t""NA"}' userid_device_uniq userid_travel_country > userid_device_travel_abroad
#归并5个指定品牌,统计用户数量(运行 count_top5.sh)
#!/bin/bash
for kw in "小米|红米" "苹果|iPhone" "华为|荣耀|huawei" "Oppo" "Vivo"
do
cmd1="echo -n `echo \"$kw\" | cut -d '|' -f1`\$'\t' >> device_travel_abroad_Top5"
eval $cmd1
#echo -n $kw$'\t' >> device_travel_abroad_Top5
cmd="grep -c -E -i \"$kw\" device_travel_abroad >> device_travel_abroad_Top5"
eval $cmd
done
#排除5个指定品牌,统计用户数量
grep -v -E -i "小米|红米|苹果|iPhone|华为|荣耀|huawei|Oppo|vivo" device_travel_abroad | sort | uniq -c |sort -k 1rn | awk '{print $2"\t"$1}' > device_travel_abroad_withoutTop5_cnt
#合并排序
cat device_travel_abroad_withoutTop5_cnt device_travel_abroad_Top5 | sort -k2rn > device_travel_ranking
跨国旅行的人热门手机排行榜
手机品牌 用户数量
苹果 9939
华为 595
微博 541
微博故事 152
小米 143
Vivo 131
三星android智能手机 106
Oppo 96
...
额,依然是苹果的天下吗,特别是跨国旅行的富人们用苹果的还是居多...尽管下个月小米就要IPO了...
P.S 数据来源是集训期间梁斌penny共享,更多信息可以去微博搜索他的信息。
有时间会分享一下经纬度数据获取地理位置信息的一个多进程类爬虫小项目(国内百度,国外Being)。
网友评论