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()

posted @ 2025-02-19 23:15  混沌武士丞  阅读(8)  评论(0)    收藏  举报