借助文心一言写的:
项目实验报告
本实验旨在通过数据预处理、创建Hive表和指标统计等步骤,对WebLog数据进行分析,以便为网站运营提供数据支持。
3.1 数据预处理
(1)获取到每个字段所对应的值(ip、logtime、url、traffic)
data = [
("192.168.1.1", "2022/01/01 00:00:00", "http://www.example.com/index.html", 10),
("192.168.1.2", "2022/01/01 00:05:00", "http://www.example.com/static/style_1_widthauto.css?y7a", 5),
("192.168.1.3", "2022/01/01 01:00:00", "http://www.example.com/uc_server", 3),
]
(2)将logtime字段处理成yyYY/MM/dd HH:mm:ss格式的
from datetime import datetime
def format_logtime(logtime):
return datetime.strptime(logtime, "%Y/%m/%d %H:%M:%S").strftime("%Y%m%d %H:%M:%S")
formatted_data = [(ip, format_logtime(logtime), url, traffic) for ip, logtime, url, traffic in data]
(3)通过MapReduce将获取静态资源的记录清洗掉,并将url记录处理成只有目录地址的格式。去除以GET /static和GET /uc_server开头的记录,均为请求静态资源;url最终格式:“GET /data/cache/style_1_widthauto.css?y7a HTTP/1.1”,去除请求方式和后缀,得到“/data/cache/style_1_widthauto.css?y7a”。代码如下:
from collections import defaultdict
import re
def remove_static_resources(record):
url = record[2]
if not url.startswith("GET /static") and not url.startswith("GET /uc_server"):
parts = re.split("\\?|&", url)[1].split("&")[0].split("/")[-1] + " HTTP/1.1"
return (record[0], record[1], parts)
else:
return record
filtered_data = list(map(remove_static_resources, formatted_data))
3.2 创建Hive表将预处理后的结果数据导入到hive表当中,方便下面使用hive对weblog数据进行统计分析。执行命令:
CREATE TABLE weblog_data (ip VARCHAR, logtime DATE, url VARCHAR, traffic INT);
for record in filtered_data:
hive_cmd = f"INSERT INTO weblog_data VALUES('{record[0]}', '{record[1]}', '{record[2]}', {record[3]})"
os.system(hive_cmd)
3.3 指标统计
(1) 在hive中创建一个外部表,将处理后的weblog数据加载到表中执行命令:
CREATE EXTERNAL TABLE weblog_summary (ip VARCHAR, logtime DATE, url VARCHAR, traffic INT) LOCATION '/path/to/hivetable';
hive_cmd = f"LOAD DATA INPATH '/path/to/weblog_data' INTO TABLE weblog_summary;"
os.system(hive_cmd)
(2)PV分析(浏览量即多少条记录)并将结果写入到hive表中执行命令:
SELECT COUNT(*) as PV FROM weblog_summary;
(3)分析VIP用户(每天访问网站次数大于50次的用户,通过IP进行统计)执行命令:
SELECT ip, COUNT(*) as VIP_visits FROM weblog_summary WHERE traffic > 50 GROUP BY ip HAVING COUNT(*) > 50;
(4)UV分析(网站每天访客数。通过IP总数进行统计)执行命令:
```sql
你如果自己写了七八成,我们还可以帮你修改一下,解决遇到的问题。从头做确实工作量太大。
直接结题吧,15找人做项目,真希望以后你的老板也给你15一个月