Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
1. Введение
1.1 Цель написания
1.2 Предыстория проекта
1.2 Обзор проекта
2.1 Обзор функций системы
2.2 Функциональные требования к системе
3.1 Анализ требований к программному обеспечению
3.2 软件的概要дизайн
3.2.1 Описание конструкции программного обеспечения
3.2.3 Основные концепции проектирования и процесс обработки
3.3 Детальный проект программного обеспечения
3.3.1 Структура системы
3.3.2 Описание конструкции модуля
3.3.3 Гусеничный модуль
3.3.4 Модуль журнала
3.3.5 Обработка данных
3.3.6 Моделирование данных
3.3.7 Изображения происшествий
3.3.8 Визуальный дисплей
3.4 Проектирование базы данных
3.4.1 Описание базы данных
3.4.2 Операции с базой данных
3.4.3 Структура базы данных
3.4.4 Структура таблицы
1.1 Цель написания
Название проекта: Интеллектуальная система сбора и профилирования событий на основе больших данных Интернета Участники проекта: Юй Цзинцзин, Лю Кеке, Лю Сяньхуэй
Описать алгоритм и конструкцию программного обеспечения интеллектуальной системы сбора и профилирования событий на основе больших данных Интернета.
1.2 Предыстория проекта
Предыстория проект: С Интернетом большой Разработка данных, различных больших Анализ данных оказал разное влияние на различные отрасли. Данные веб-сайтов, данные социальных сетей и т. д. – это огромный Интернет. Важная часть данных. Для гражданской авиации,возникновение социальных событий,Сильно повлияет на изменения спроса пассажиров на поездки,Это повлияет на размещение воздушных судов авиакомпании, организацию рейсов, корректировку тарифной стратегии и т. д.,Точный сбор и анализ интернет-событий может помочь авиакомпаниям лучше обслуживать рынок.、Обслуживать путешественников、Увеличить доход.
Предыстория отрасли. Для авиакомпаний вопрос о том, могут ли они заранее судить о потребностях пассажиров в поездках, может быть использован авиакомпаниями и отделами управления отраслью для определения рациональности использования отраслевых мощностей, тем самым улучшая уровень обслуживания пассажиров и уровень доходов авиакомпаний. Получение информации из Интернета. Большой объем информации, затрагивающей сферу гражданской авиации, может помочь авиакомпаниям сформулировать стратегии продаж.
1.3 Обзор проекта
Команда разработчиков: Уханьский профессионально-технический колледж Команда Zhumengyun Studio demo01
Описание платформы разработки проекта:
Операционная система: Windows7 и выше
Сервер приложений: Ubuntu Server 14.04 LTS, 64-разрядная версия.
Конфигурация сервера: CUP: 1 ядро Память: 1 ГБ Пропускная способность общедоступной сети: 1 Мбит/с Жесткий диск: 20 ГБ
Сервер приложений: Серверы Windows 2008
Конфигурация сервера: CUP: 1 ядро Память: 2 ГБ Пропускная способность общедоступной сети: 1 Мбит/с Жесткий диск: 40 ГБ
Сетевая архитектура: полностью поддерживает протокол TCP/IP.
Инструменты разработки или технологические системы: Язык разработки: Python 3.6, Инструменты разработки: Pycharm 2017.
База данных: MongoDB 3.4.3.
Описание операционной среды программного обеспечения:
оборудование:
Аппаратные требования клиентской программы:
Компьютер с 1-ядерным процессором, отвечающий следующим требованиям:
Минимум 1 ГБ памяти
Жесткий диск минимум 20 ГБ
Требования к оборудованию веб-сервера:
Компьютер с 1-ядерным процессором, отвечающий следующим требованиям:
Минимум 1 ГБ памяти
Жесткий диск минимум 20 ГБ
Шина ввода-вывода: 8 М/с;
Требования к оборудованию сервера базы данных:
Компьютер с 1-ядерным процессором, отвечающий следующим требованиям:
Минимум 1 ГБ памяти
Жесткий диск минимум 20 ГБ
2.1 Обзор функций системы
Получайте события из Интернета, обрабатывайте данные о событиях, сохраняйте их в базе данных, выполняйте сегментацию слов и семантическую обработку, извлекайте атрибуты события, стройте модель событий и отображайте ее визуально.
1. Обеспечить сбор данных об интернет-событиях на уровне дня или с более высокой частотой, а также собрать основные события, такие как политические встречи, выставки, спортивные мероприятия, концерты, внезапные и аномальные погодные условия и т. д. Каждый тип данных о событиях поступает как минимум из 2 источников данных. (веб-сайт) сканируется один раз в день.
2. Реализовать функцию дедупликации событий. Во-первых, дедупликация событий из разных источников данных (сайтов), во-вторых, дедупликация событий, зафиксированных в разные дни.
3. Моделирование портрета событий, то есть автоматическое извлечение атрибутов событий.
4. Используйте DataV для визуального отображения.
2.2 Функциональные требования к системе
1. Модуль веб-сканера осуществляет захват интернет-событий.
2. Модуль журналов осуществляет генерацию журналов между каждым модулем.
3. Модуль обработки данных осуществляет подготовку, очистку, дедупликацию и преобразование данных.
4. Модуль моделирования данных устанавливает модели, расчеты и преобразования данных.
5. Модуль портрета событий сегментирует события и извлекает атрибуты.
6. DataV выполняет визуальное отображение.
3.1 Анализ требований к программному обеспечению
Анализ системных требований: предоставление услуг по распределению пропускной способности самолетов авиакомпаний, планированию полетов и стратегии тарифов.
Описание структуры программной системы: Интеллектуальная система захвата и портретирования событий на основе больших данных Интернета состоит из модуля сканера, модуля журнала, модуля обработки данных, модуля моделирования данных, модуля портрета событий и системы визуализации.
3.2 Эскизный проект программного обеспечения
3.2.1 Описание конструкции программного обеспечения
Программная система использует архитектуру B/S, а программа развертывается на облачном сервере.
3.2.2 Основные концепции проектирования и процесс обработки
Учитывая, что сложность данных в Интернете очень высока, а данные о событиях, как правило, представляют собой неструктурированные данные, их обработка и анализ сложны, а также предъявляются высокие требования к стабильности и скорости сканирования сканера. Мы используем технологию Scrapy Crawler. используется для сканирования данных с различных веб-сайтов, их обработки, использования базы данных NoSQL MongoDB для хранения полуструктурированных данных, профилирования, анализа, моделирования данных и развертывания программы в облаке. При доступе к облачной базе данных поток данных сопоставляется с DataV для визуального отображения.
Работа системы показана на рисунке 3-2-2:
Рисунок 3-2-2 Блок-схема системы
Описание дизайна:
1. На каждом компьютере не требуется устанавливать клиентскую программу, но он должен поддерживать IE4.0 или выше;
2. Сервер веб-публикации обращается к серверу базы данных, и сервер базы данных не виден снаружи;
3. Сервер базы данных реализован с использованием MongoDB. Для текущего количества посещений MongoDB может применяться при поддержке достаточного аппаратного обеспечения, а также экономически целесообразно;
4. Многопользовательский одновременный доступ и обработка, блокировка данных и координация транзакций выполняются с помощью базы данных MongoDB. Эта система не предоставляет отдельный сервер обработки транзакций;
5. Фреймворк Scrapy Crawler позволяет обеспечить быстрое, высокопараллельное и высокоуровневое сканирование сети.
3.3 Детальный проект программного обеспечения
3.3.1 Структура системы
Приложение разработано с использованием языка Python, а веб-сканер разработан с использованием платформы Scrapy и развернут на облачном сервере. Учитывая, что данные, собираемые сканером, в основном представляют собой полуструктурированные или неструктурированные данные, мы используем базу данных NoSQL MongoDB. обработка данных. Хранение и развертывание на облачном сервере.
3.3.2 Описание конструкции модуля
Вся система разделена на 6 модулей.
1. Гусеничный модуль
2. Модуль журнала
3. Обработка данных
4. Моделирование данных
5, изображение происшествия
6. Визуальный дисплей
Конструкция системного модуля следующая:
1. Гусеничный модуль разделен на тайминги.
Модуль искателя по расписанию: управляет всем модулем искателя, отслеживает состояние работы искателя, устанавливает частоту сканирования искателя (сканирование один раз в день), обрабатывает исключения программы искателя и управляет журналами искателя.
Модуль Scrapy-сканера: сканирует данные с целевых веб-сайтов, собирает события с веб-сайтов-источников данных, таких как политические встречи, выставки, спортивные мероприятия, концерты, неожиданные погодные условия, новостные сети управления дорожным движением и т. д., обрабатывает данные и генерирует журналы сканера для хранения. в базе данных. Этот модуль состоит из 11 скриптов-сканеров, которые сканируют данные из соответствующих источников данных.
Модуль сканера показан на рисунке 3-3-2:
Рисунок 3-3-2 Схема модуля обходчика
2. Модуль журнала:Модуль журнал тесно связан с каждым модулем системы. Каждый модуль генерирует журналы при работе, и сгенерированные журналы будут храниться в базе. данных,Удобное управление системой, признание, поиск неисправностей.
Схема конструкции журнала показана на рисунке 3-3-3:
Рисунок 3-3-3 Схема конструкции модуля журнала
3. Обработка данных:Обработка Данные делятся на подготовку данных, преобразование данных и агрегирование данных. В основном обрабатывает неструктурированные/полуструктурированные данные для получения чистых и регулярных данных. рептилия выполняет предварительную обработку данных при сканировании источников данных веб-сайтов, а также выполняет такие операции, как просмотр, фильтрация и сортировка собранных данных. После завершения предварительной обработки данных данные очищаются, данные, не соответствующие требованиям, отфильтровываются, а грязные данные преобразуются в данные, соответствующие требованиям. Затем выполните обработку пропущенных значений, заполните пропущенные элементы специальными значениями и сохраните их в базе. данные. Дедупликация данных в основном дедуплицирует данные о событиях с разных веб-сайтов.
4. Моделирование данные: создайте единую модель данных о событиях и используйте алгоритмы машинного обучения, такие как кластеризация, для выявления скрытых атрибутов и связей между данными. По алгоритму кластеризациии Количество индексов поисковых Система состоит из двух субмодулей.
Алгоритм кластеризации: используйте K-средние для обучения без учителя для выполнения кластерного анализа данных.
Количество включений в поисковые системы. Для отсутствующих данных о популярности мы заполнили недостающие данные о популярности, получив количество событий, включенных в поисковую систему Baidu.
5, изображение происшествия:изображение Модуль инцидента реализует автоматическое извлечение атрибутов событий. Позвонить Моделирование Модуль данных кластеризует данные, выполняет сегментацию слов и извлечение атрибутов для различных событий, инициализирует образцы данных, генерирует журналы, а также выполняет сегментацию и извлечение атрибутов изображения. инцидента, генерировать образцы событий.
Таблица атрибутов событий выглядит следующим образом:
Уровень спонсора | Это международная организация? |
---|---|
Это национальное правительство? | |
Это правительство провинции? | |
Это правительство местного уровня? | |
Тип спонсора | Это отечественная ассоциация гражданского общества? |
Это международная ассоциация гражданского общества? | |
Это отечественная отраслевая ассоциация? | |
Это международная отраслевая ассоциация? | |
В основном зависит от возрастной группы | Возрастная группа, которая в основном затрагивается – это дети. |
Основная возрастная группа пострадавших – молодежь. | |
Основная возрастная группа пострадавших – взрослые. | |
Возрастная группа, в основном затронутая – это пожилые люди. | |
Есть ли фиксированная группа участников? | Есть ли фиксированная группа участников? |
влиять на социальные группы | Влияет ли это на деловых людей? |
Влияет ли это на широкую публику? | |
максимальная сфера влияния | Самое большое глобальное влияние |
Наибольшее влияние носит межконтинентальный характер. | |
Наибольшее влияние по всей стране | |
Наибольшее влияние на всю провинцию | |
Наибольшее влияние на город | |
тип события | Это выставка? |
Это концерт? | |
Это спортивное мероприятие? | |
Это встреча? | |
Это местный праздник? | |
Популярность мероприятия | Популярность мероприятия |
История события | История события |
Частота событий в течение года | Частота событий в течение года |
Основные свойства | Дата начала |
дата окончания | |
Принимающий город | |
название события |
6. Визуальный свет Мы используем инструмент визуализации DataV от Alibaba Cloud для создания изображений на больших цифровых экранах.
3.3.3 Гусеничный модуль
время Гусеничный модульдизайннравиться Рисунок 3.3.3:
Рисунок 3.3.3 время Гусеничный модуль
Скрипт управления синхронизацией программы и сканером TimerAdmins.py
import multiprocessing
import time
import pymongo
from SpiderAdmin import CrawlAdmin
from Log import LogUtils
class ProcessingTest(multiprocessing.Process):
host = '' #targetIP
port = 0 #Номер порта
def __init__(self,sleep):
multiprocessing.Process.__init__(self)
self.sleep=sleep
self.ConfigDB='Config'
self.ConfigTdb='timer'
#уровень операции
def run(self):
log = LogUtils()
client = pymongo.MongoClient(host=self.host, port=self.port)
db = client[self.ConfigDB]
table = db[self.ConfigTdb]
while True:
''' Получить отметку текущего времени'''
times=time.time()
'''Получить текущее время и удалить десятичные дроби'''
tim=int(str(times).split('.')[0])
'''Получить текущую дату'''
date=tim//86400
'''отбаза данных Запросдата'''
info=table.find_one({"config": "timer"})
print('data----------------------->'+str(date ))
dateInfo=-1
'''Если база данных Если записи нет, сохраните ее'''
if info==None:
печать('Нет данных')
log.I('TimerAdmins','Первый запуск базы В данных нет данных')
table.insert({"config": "timer","time":date})
p = CrawlAdmin(1)
p.start()
print("Гусеничный запущен модуль")
log.I('TimerAdmins', 'Уже начал Гусеничный модуль')
time.sleep(self.sleep)
else:
'''
Если база Если в данных есть запись, сравните ее с текущей датой, полученной выше.
'''
print(info)
dateInfo=int(info['time'])
''' Как текущая дата больше базы данныхдата '''
print("------------------------"+str(dateInfo))
if date>dateInfo:
timers=tim%86400
print('timers'+str(timers))
if date-dateInfo==1:
if timers>21600:
info['time']=date
table.save(info)
p=CrawlAdmin(1)
p.start()
print("Гусеничный запущен модуль---")
log.I('TimerAdmins', 'Уже начал Гусеничный модуль')
else:
info['time'] = date-1
table.save(info)
p = CrawlAdmin(1)
p.start()
print("Гусеничный запущен модуль---")
log.I('TimerAdmins', 'Уже начал Гусеничный модуль')
time.sleep(self.sleep)
else:
print('Данные уже самые свежие, обновлять не нужно')
log.I('TimerAdmins', 'Данные уже самые свежие, Гусеничного заводить не надо модуль Обновление')
time.sleep(self.sleep)
если __name__ =="__main__":
print('Администратор времени начинает работу')
p=ProcessingTest(900)
p.start()
print(p.pid)
3.3.4 Модуль журнала
Модуль журналадизайннравитьсякартина 3.3.4:
Рисунок 3.3.4 Диаграмма классов интерфейса журнала
Алгоритм и конструкция исходного кода следующие:
import pymongo
import time
import traceback
class LogUtils():
host = '' #Целевой IP-адрес хоста
port = 0 #Номер порта
def __init__(сам):
self.LogDB='Журнал'
self.Table=''
self.client=pymongo.MongoClient(хост=self.Host,порт=self.port)
self.db=self.client[self.LogDB]
'''
обычно Информация журнала
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def InfoLog(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
except:
traceback.print_exc()
'''
обычно Информация журнала перегруженный метод Простой способ написания
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def I(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
кроме:
трассировка.print_exc()
'''
ошибка Информация журнала
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def ErrorLog(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
кроме:
трассировка.print_exc()
'''
ошибка Информация журнала перегруженный метод Простой способ написания
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def E(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
except:
traceback.print_exc()
'''
отладочная информация журнала
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def DeBugLog(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
except:
traceback.print_exc()
'''
отладочная информация журнала перегруженный метод Простой способ написания
table : название поверхности бревна Пишите имена классов единообразно
LogInfo: содержимое журнала
'''
def D(self,Table,LogInfo):
try:
self.Table=Table
table=self.db[self.Table]
times=str(time.time()).split('.')[0]
timeArray=time.localtime(int(times))
OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
except:
traceback.print_exc()
3.3.5 Обработка данных
Обработка файл данныхscript ToHeavy.py
Схема дедупликации данных показана на рисунке 3.3.5:
Рисунок 3.3.5 Интерфейс дедупликации данных и диаграмма классов
Описание алгоритма дедупликации данных: запросите соответствующую таблицу базы данных по имени таблицы, получите все данные о событии за последние три дня и сегментируйте имя события, если есть сходство между именем события и записями о событии. за последние три дня превышает 65%, отметьте это как повторяющиеся данные, флагу присваивается значение 0.
import jieba
from datetime import *
from pymongo import MongoClient
import time
from OperatingDB import OperatingDB
def connDB(ip, port, tableName, base):
db = OperatingDB(ip, port)
table = db.createTable(tableName, base)
return table
#Получить дату за последние три дня (добавить к поверхности столбца в виде строки)
def past_three_days(time, daynum, pastday_lit):
date_time = datetime.strptime(time, '%Y-%m-%d')
for i in range(daynum):
pastday = date_time - timedelta(i)
strpastday = datetime.strftime(pastday, '%Y-%m-%d')
pastday_lit.append(strpastday)
#Запросить данные за последние три дня
def pastThreeDayData(table, pastday_lit):
past_one_day = {}
past_two_day= {}
past_three_day = {}
key = 'Дата начала'
past_one_day[key] = pastday_lit[0]
past_two_day[key] = pastday_lit[1]
past_three_day[key] = pastday_lit[2]
data = table.find({'$or':[past_one_day, past_two_day, past_three_day]})
title_lit = []
for i in data:
title_lit.append(i['название события'])
return title_lit
#возвращаться отметьте, если flag = 0, тогда поверхность указывает на повторяющиеся данные
def toheavy(table, title, titles):
#Обработка словесной сегментации заголовков
title_Participle = jieba.lcut(title)
for title in titles:
count = 0
title_tmp = jieba.lcut(title)
for i in title_Participle:
if i in title_tmp:
count += 1
frequency = count/len(title_Participle)*100
if(frequency > 65):
print('Сходство превышает 65%, Удалить дубликаты')
flag = 0
if flag == 1:
print('Нет повторяющихся данных')
return flag
3.3.6 Моделирование данных
3.3.6.1 Алгоритм кластеризации
Моделирование Данные Описание: Мы используем алгоритм машинного обучения без учителя, чтобы создать модель классификации исходных данных. Используйте алгоритмы кластерного анализа для моделирования данных.
Описание данных: в собранных нами данных есть поля, связанные с популярностью. Например, часть данных с Китайского портала выставок и конгрессов на рисунке ниже имеет поле данных индекса внимания. Однако невозможно оценить уровень. популярности, основываясь только на исходных данных. Непосредственно разделите уровни тепла.
Данные выставочного портала Китая показаны на рисунке 3.3.6.1:
Рисунок 3.3.6.1 Диаграмма данных Китайского выставочного портала
K-Means Алгоритм кластеризациииллюстрировать:в конкретном Алгоритм кластеризации Мы используемK-MeansАлгоритм кластеризации,верно Моделирование данных,Воля Популярность мероприятия Разделен на три категории,теперь это Кластеризация популярности级别为 1, 2, 3. Алгоритм K-Means представляет собой неиерархический алгоритм, основанный на расстоянии. кластеризации,существоватьсамый На основе функции ошибок, основанной на небольшом количестве, данные делятся на заранее определенное количество категорий K, а расстояние используется в качестве показателя оценки сходства. Считается, что чем меньше расстояние между двумя объектами, тем больше сходство. Евклидово расстояние используется для измерения сходства между образцами, и формула такая: картина 3.3.6.2:
Рисунок 3.3.6.2 Схема формулы евклидова расстояния
Подробное описание алгоритма показано на рисунке 3.3.6.3:
Рисунок 3.3.6.3 Описание алгоритма
Конструкция программы моделирования и описание алгоритма: файл алгоритма кластеризации KMeans.py.
Исходный код алгоритма кластеризации K-Means выглядит следующим образом:
#-*- coding: utf-8 -*-
import pandas as pd
from sklearn.cluster import KMeans
import xlrd
import openpyxl
import matplotlib.pyplot as plt
class Kmeans:
'''Кластеризация данных'''
k = 3 #Количество категорий кластеризации (встроено)
iteration = 500 #Максимальное количество циклов кластеризации (встроенное)
jobs = 4 #Устанавливаем количество параллелизма (встроенное)
def readData(self, inputfile):
'''Читать данные с диска'''
self.inputfile = inputfile
#Читать данные
data = pd.read_excel(self.inputfile)
# Удалить ненужные поля
data.drop(['название события','начинатьвремя'], 1, inplace=True)
return data
def writeData(self, outputfile, data):
'''Запись в файл'''
self.outputfile = outputfile
data.to_excel(self.outputfile)
def KMeansCompute(self, data):
'''Расчет кластеризации K-средних'''
#нормализация данных
data_zs = 1.0 * (data - data.mean())/data.std()
#Анализируется как категория K, Количество параллелизма 4
model = KMeans(n_clusters = self.k, n_jobs = self.jobs, max_iter = self.iteration)
model.fit(data_zs) #Начать кластеризацию
r1 = pd.Series(model.labels_).value_counts()
r2 = pd.DataFrame(model.cluster_centers_) #Находим центр кластера
r = pd.concat([r2, r1], axis = 1) #горизонтальное соединение
r.columns = list(data.columns) + ['количество категорий']
#Подробный вывод
r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1)
r.columns = list(data.columns) + ['Категория кластера'] #renameповерхностьголова
return r
После завершения кластеризации по Уровню события спонсора、Тип спонсора и сфера влияния свойств на Кластеризацию Популярность взвешивается для получения атрибута нагревать.
3.3.6.2 Количество включений в поисковые системы
При сканировании других источников данных вы обнаружите отсутствующие поля, связанные с нагревом и количеством. индексов поисковых система в определенной степени отображает атрибут «нагревание» события. Поскольку чем более популярны события, тем больше их включено. Мы определяем количество включенных событий в поисковой системе Baidu в соответствии с уровнем события. спонсора、Тип спонсора и сфера влияния свойств на Кластеризацию Популярность взвешенных значений для получения значения нагрева события.
Получите файл с номером, включенным в поисковую систему: GetSearchEngineResult.py.
import re
import requests
class GetSearchEngineResult:
#Получить количество результатов поисковой системы Baidu
def getHTMLText(self, url):
try:
r = requests.get(url, timeout = 10, headers = {'user-agent' : 'Mozilla/5.0'})
r.raise_for_status()
return r.text
except:
print("Исключение при анализе результатов Baidu")
def getBaiduResult(self, title):
baseURL = 'http://www.baidu.com/'
url = baseURL + 's?' + 'wd=' + title
html = self.getHTMLText(url)
regex = r'Baidu нашел для вас подходящие результаты.*?'
numRegex = r'[0-9]'
data = re.search(regex, html)
heatStr = ''
if data:
num = re.findall(numRegex, data.group())
for i in num:
heatStr += i
heat = self.getBaiduHeat(eval(heatStr))
return heat
3.3.7 Изображения происшествий
3.3.7.1 изображение инцидентасистемадизайн
изображение интегрированное изображение системы аварии сценарий управления инцидентами, инициализация выборки данных, вывод выборки событий, Моделирование данных、изображение инцидентаи другие функции。изображение инцидентасистема调用Моделирование Модуль данных извлекает атрибуты различных событий и генерирует образцы событий. изображение инцидентасистемадизайннравитьсякартина 3.3.7.1:
картина 3.3.7.1изображение инцидентасистемадизайнкартина
3.3.7.2изображение инцидента
Основными классами модуля изображения происшествия являются классы сущностей, интерфейсы доступа к данным и функциональные классы.
Класс сущности содержит основные сведения о событии. свойстваданные, база подключения интерфейса доступа данные, функциональный класс Извлеките атрибуты из события.
изображение инцидентадизайн и классы интерфейса, такие как картина 3.3.7.2:
картина 3.3.7.2 изображение инцидента模块接口и类картина
3.3.8 Визуальный дисплей
Мы используем DataV от Alibaba для создания визуальных изображений. светильник, построение облачной базы с DataV соединение данных для реализации сопоставления потока данных с DataV. таким образом генерируя Большой экран данных。
Визуальный дисплей Предварительный просмотркартинанравитьсякартина 3.3.8:
картина 3.3.8 Большой экран данных
3.4 Проектирование базы данных
3.4.1 Описание базы данных
Учитывая стабильность программы и командную работу, мы развернули базу данных на облачном сервере, чтобы обеспечить доступ в режиме реального времени, высокую производительность и высокую масштабируемость.
Программное обеспечение базы данных: MongoDB. Имя созданной базы данных: Spider、Config、DataV、Log Сохраните данные, полученные сканером: Spider База данных конфигурации системы: Config хранилище Визуальный База данных данных об светильниках: DataV Сохранение данных журнала: Log
3.4.2 Операции с базой данных
Инкапсулируйте работу базы данных в модуль. Каждый модуль должен хранить данные. Преимущества разделения хранилища данных на один модуль очевидны. Оно реализует слабую связь между модулями системы и облегчает такие операции, как запись и чтение данных.
** ** Функция ConnectMongoDB.py: подключение к базе данных mongodb.
Исходный код для подключения к интерфейсу базы данных:
from pymongo import MongoClient
class ConnectMongo:
'''Подключить базу данных'''
client = None
# ipaddr: IP-адрес, порт: номер порта
def connect(self, ipaddr, port): #Установить соединение
self.client = MongoClient(ipaddr, port)
def close(self): #Закрыть соединение
return self.client.disconnect()
def getConn(self): #возвращатьсясоединять
return self.client
Функция OperatingDB.py: инкапсулирует операции с базой данных, создание таблиц\коллекций, вставку данных, удаление данных, запрос данных и закрытие соединений с базой данных.
from ConnectMongoDB import ConnectMongo
class OperatingDB:
'''Операция Монгодббаза данных'''
def __init__(self, ipaddr, port):
conn = ConnectMongo()
conn.connect(ipaddr,port)
self.client = conn.getConn()
#tableName:поверхностьимя, base:база данныхимя
def createTable(self, tableName, base):
'''Создать базу данныхиповерхность'''
self.crawl = self.client[base]
self.table = self.crawl[tableName]
return self.table
#data: вставленные данные
def insertDatas(self, data):
self.table.insert(data)
def deleteData(self, data):
'''Удалить данные'''
self.table.remove(data)
#q: условие запроса, проекция: поле запроса.
def query_one(self, q = {}, projection = {'_id' : 0}):
'''Запросить фрагмент данных'''
return self.table.find_one(q, projection)
def query(self, q = {}, projection = {'_id' : 0}):
'''Данные запроса'''
return self.table.find(q, projection)
def closeConn(self):
'''Тесное соединение'''
self.client.close()
3.4.3 Структура базы данных
Поскольку базы данных NoSQL отличаются от традиционных реляционных баз данных, при установлении структур таблиц и операциях индексирования в них отсутствуют отношения, ограничения и т. д., подобные реляционным. Конструктивное решение также относительно простое.
Структура базы данных следующая.
база данных | поверхность |
---|---|
Spider | CityWeather |
DamaiConcert | |
DamaiSports | |
JuchengConcert | |
WaringWeahter | |
XishiquSports | |
YongleConcert | |
YongleSports | |
cnena | |
eshow | |
people | |
trafficcontrol | |
xinhuanet | |
XishiquConcert | |
Config | timer |
Log | CityWeather |
ConcertAttr | |
CrawlAdmin | |
DaMaiPW | |
DaMaiWang | |
EventPortraitAdmin | |
ExhibitionAttr | |
JuChenSpider | |
SportAttr | |
TimerAdmins | |
WarningCrawl | |
XishiquConcert.. | |
XishiquSports | |
people | |
xinhuanet | |
yonglePW | |
DataV | DataV |
3.4.4 Структура таблицы
MongoDB хранит данные в виде документа/поверхности.,Структура данных состоит из ключевых значений(key=>value)верно组成。MongoDB Документ/поверхность похож на JSON объект. база данныхкаждыйповерхность Поледизайннравиться下。
база данных:Spider
поверхностьимя:CityWeather
Имя поля | Китайское описание | тип данных |
---|---|---|
city | название города | String |
high | максимальная температура | String |
fengxiang | направление ветра | String |
low | самый низкийтемпература | String |
fengli | сила ветра | String |
type | тип погоды | String |
date | дата | String |
Wendu | температура | String |
Status | состояние | String |
поверхностьимя:DamaiConcert、JuchengConcert、YongleConcert
Имя поля | тип данных |
---|---|
название события | String |
Принимающий город | String |
Место проведения | String |
Дата начала | String |
дата окончания | String |
Стоимость билета | String |
тип события | String |
поверхностьимя:DamaiSports
Имя поля | тип данных |
---|---|
название события | String |
Принимающий город | String |
Место проведения | String |
Дата начала | String |
дата окончания | String |
тип события | String |
поверхностьимя:Longitudes
Имя поля | тип данных |
---|---|
Город | String |
долгота | String |
Размеры | String |
поверхностьимя:WaringWeather
Имя поля | тип данных |
---|---|
название события | String |
Время выпуска | String |
Раннее предупреждение | String |
Тип предупреждения | String |
Подробности предупреждения | String |
поверхностьимя:XishiquConcert、XishiquSports
Имя поля | тип данных |
---|---|
тип события | String |
название события | String |
Дата начала | String |
Место проведения | String |
Принимающий город | String |
дата окончания | String |
Совокупные транзакции | String |
Количество подписчиков | String |
Подробная популярность | String |
поверхностьимя:YongleSports
Имя поля | тип данных |
---|---|
название события | String |
Место проведения | String |
Принимающий город | String |
Дата начала | String |
дата окончания | String |
тип | String |
тип события | String |
поверхностьимя:cnena
Имя поля | тип данных |
---|---|
тип события | String |
название события | String |
индекс внимания | String |
Дата начала | String |
дата окончания | String |
Место проведения выставки | String |
Организационная структура | String |
Обзор выставки | String |
Область обзора | String |
Принимающий город | String |
Кластеризация популярности | String |
поверхностьимя:eshow
Имя поля | тип данных |
---|---|
тип события | String |
Этикетка | String |
название события | String |
Дата начала | String |
дата окончания | String |
Выставочный зал | String |
Промышленность | String |
Принимающий город | String |
Организатор | String |
Выставочная площадь | String |
Количество проведенных сессий | String |
Цикл выдержки | String |
Плата за посещение | String |
Обзор выставки | String |
частота событий | String |
поверхностьимя:people
Имя поля | тип данных |
---|---|
тип события | String |
название события | String |
ключевые слова | String |
источник | String |
описывать | String |
Дата начала | String |
Содержание встречи | String |
поверхностьимя:trafficcontrol
Имя поля | тип данных |
---|---|
тип события | String |
название события | String |
содержание | String |
Дата начала | String |
поверхностьимя:xinhuanet
Имя поля | тип данных |
---|---|
тип события | String |
название события | String |
ключевые слова | String |
Дата начала | String |
Содержание встречи | String |
база данных:Config
поверхностьимя:timer
Имя поля | Китайское описание | тип данных |
---|---|---|
_id | идентификационный номер | ObjectId |
config | Информация о конфигурации | String |
timer | время | Date |
база данных:Log
поверхностьимя:CityWeather、ConcertAttr、CrawlAdmin、DaMaiPW、EventPortrait、EventPortraitAdmin、
ExhibitionAttr、JuChenSpider、SportAttr、TimerAdmin、WarngingCrawl、XishiquConcert、XishiquSports、people、xinhuanet、yonglePW。
Имя поля | Китайское описание | тип данных |
---|---|---|
_id | идентификационный номер | ObjectId |
logInfo | Информация журнала | String |
Grade | Сообщение об ошибке | String |
Time | время | String |
база данных:DataV
поверхностьимя:DataV
Имя поля | тип данных |
---|---|
_id | ObjectId |
нагревать | int |
Характер отрасли | String |
Влиять на людей | String |
максимальная сфера влияния | String |
тип события | String |
Влияние на бизнес и общественную долю | String |
Организационная природа | String |
Заявление об авторских правах: Эта статья была добровольно предоставлена пользователями Интернета.,Мнения, выраженные в данной статье, принадлежат исключительно автору. Этот сайт предоставляет только услуги по хранению информации.,нет собственности,Никакая соответствующая юридическая ответственность не предполагается. Если на этом сайте обнаружено какое-либо предполагаемое нарушение авторских прав/незаконный контент,, Пожалуйста, отправьте электронное письмо на Сообщите, после проверки этот сайт будет немедленно удален.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/190675.html Исходная ссылка: https://javaforall.cn