2.19数据集可视化
Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) Day:10,(天数) Traffic: 54 ,(流量) Type: video,(类型:视频video或文章article) Id: 8701(视频或者文章的id) 测试要求: 1、数据清洗:按照进行数据清洗,并将清洗后的数据导入hive数据库中。 两阶段数据清洗:
(1)第一阶段:把需要的信息从原始日志中提取出来 ip: 199.30.25.88 time: 10/Nov/2016:00:01:03 +0800 traffic: 62 文章: article/11325 视频: video/3235
(2)第二阶段:根据提取出来的信息做精细化操作 ip--->城市 city(IP) date--> time:2016-11-10 00:01:03 day: 10 traffic:62 type:article/video id:11325
(3)hive数据库表结构: create table data( ip string, time string , day string, traffic bigint, type string, id string )
2、数据分析:在HIVE统计下列数据。 (1)统计最受欢迎的视频/文章的Top10访问次数 (video/article) (
2)按照地市统计最受欢迎的Top10课程 (ip) (3)按照流量统计最受欢迎的Top10课程 (traffic)
3、数据可视化: 将统计结果倒入MySql数据库中,通过图形化展示的方式展现出来
from datetime import datetime
# IP到城市的映射函数(假设有一个IP映射表)
def ip_to_city(ip):
ip_map = {'106.39.41.166': '北京', '199.30.25.88': '上海'}
return ip_map.get(ip, '未知')
# 时间格式化函数
def format_time(date_str):
dt = datetime.strptime(date_str, '%d/%b/%Y:%H:%M:%S %z')
return dt.strftime('%Y-%m-%d %H:%M:%S')
# 示例数据
ip = '106.39.41.166'
date = '10/Nov/2016:00:01:02 +0800'
traffic = 54
type_ = 'video'
id_ = 8701
# 转换处理
city = ip_to_city(ip)
time_formatted = format_time(date)
print(f"City: {city}, Time: {time_formatted}, Traffic: {traffic}, Type: {type_}, ID: {id_}")
上传到虚拟机环境中打开hive建表
CREATE TABLE data (
ip STRING,
time STRING,
day STRING,
traffic BIGINT,
type STRING,
id STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 插入数据(假设数据已清洗并存储在文件中)
LOAD DATA LOCAL INPATH '/path/to/cleaned_data.txt' INTO TABLE data;
3. 数据可视化
(1)将统计结果导入MySQL数据库
首先将Hive查询结果导出到文件:
Sql
深色版本
INSERT OVERWRITE LOCAL DIRECTORY '/path/to/output'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM result_table;
然后使用Python或其他工具将文件导入MySQL:
Python
深色版本
import pymysql
# 连接MySQL
conn = pymysql.connect(host='localhost', user='root', password='password', database='mydb')
cursor = conn.cursor()
# 导入数据
with open('/path/to/output', 'r') as f:
for line in f:
fields = line.strip().split('\t')
cursor.execute("INSERT INTO result_table (field1, field2, field3) VALUES (%s, %s, %s)", fields)
conn.commit()
conn.close()