Mikhail Kolodin. Project: Internet temperature. 2015-12-15 1.4.1

IPython research for internet temperature. We use now only fontanka.ru website, later other sites and methods will be added.

Version with database recording. Now full archive of headers since 2000.

Here we count good and bad words in the database. No more downloading info from websites.


In [16]:
import datetime
now = datetime.datetime.now()
import time

import sqlite3

Part I. Get database with data and correct it.


In [17]:
#db = "mp-nettemp3-fru-2015.db"
db = "mp-nettemp3-fru-2000-2015.db"
conn = sqlite3.connect(db)
cur = conn.cursor()

In [18]:
conn.execute ("alter table netdata add dtyear int")


Out[18]:
<sqlite3.Cursor at 0x7f8d804c2dc0>

In [19]:
cur.execute ("select count(*) from netdata")
print ("total records: {}" .format(cur.fetchone()))


total records: (512351,)

In [20]:
rc = cur.execute ("select distinct substr(ndate, 1, 10) from netdata")
cnt = 0
for r in rc: cnt += 1
print ("We have data for {} days" .format(cnt))


We have data for 5378 days

In [21]:
cur.execute ("update netdata set dtyear = substr(ndate, 1, 10)")
conn.commit()

Part II. get good and bad words and strore them locally.


In [22]:
goods, bads = "words-good.txt", "words-bad.txt"

In [23]:
with open(goods) as good:
    goodw = good.read().split()
goodw.sort()
goodw = tuple(goodw)

In [24]:
print ("Good words:", goodw)


Good words: ('абонент', 'автобус', 'автодорог', 'акварел', 'актер', 'актрис', 'артист', 'балет', 'безопасн', 'бесплатн', 'библиоте', 'блюз', 'богатство', 'богаты', 'вальс', 'велосипед', 'верност', 'вернул', 'верны', 'возлюбленн', 'волейбол', 'восстанов', 'вручен', 'встреч', 'выделени', 'выдели', 'выжил', 'выпущен', 'высажен', 'высокоскоростно', 'выставк', 'выставочн', 'выступи', 'выступлени', 'выяснил', 'галере', 'гаранти', 'гимнази', 'гирлянд', 'график', 'гуляни', 'гулять', 'детск', 'дзюдо', 'диплом', 'дирижер', 'добилась', 'добился', 'добро', 'добры', 'доволен', 'довольн', 'договор', 'доплачива', 'дорог', 'друг', 'дружествен', 'друзья', 'завершен', 'застрахова', 'защита', 'защитил', 'здоров', 'зелен', 'знаменательбн', 'игруше', 'изготов', 'изучени', 'изучит', 'имущество', 'институт', 'интернет', 'информатик', 'исследовали', 'исследовани', 'историческ', 'история', 'карнавал', 'картин', 'кинотеатр', 'кинофестивал', 'книг', 'книжн', 'коллекци', 'компьютер', 'концерт', 'корректиров', 'костюм', 'круглогодичн', 'круглосуточн', 'культур', 'курорт', 'лауреат', 'легенда', 'лучше', 'лучши', 'лыжни', 'лыжни', 'лыжны', 'любоваться', 'мастер', 'материн', 'матч', 'медал', 'международн', 'метро', 'мозаи', 'молочн', 'музее', 'музей', 'музею', 'музея', 'музыка', 'мясно', 'наград', 'надежн', 'наилучш', 'написал', 'наук', 'науч', 'нашел', 'нашли', 'новы', 'ноутбук', 'нравится', 'обмен', 'обнаружил', 'обыграл', 'одобр', 'оздоровлени', 'озеленени', 'опрашива', 'опрос', 'оптимальн', 'оптимиз', 'организован', 'орден', 'оркестр', 'освоен', 'открыл', 'открыти', 'отпустил', 'отремонтирова', 'охран', 'памят', 'певец', 'певиц', 'певчески', 'пешеход', 'писател', 'победит', 'подар', 'подключ', 'подновили', 'подписан', 'покажет', 'показыв', 'пользовател', 'полюбоваться', 'помирил', 'помог', 'помощ', 'популяр', 'посетит', 'посмотреть', 'поставк', 'поставл', 'почет', 'почтен', 'почтил', 'поэзи', 'поэт', 'праздник', 'праздничн', 'празднова', 'предприяти', 'преми', 'призер', 'призов', 'приятн', 'программи', 'продовольств', 'продукт', 'путешеств', 'радост', 'разработа', 'разреш', 'раритет', 'расширен', 'регат', 'реставра', 'решил', 'рождени', 'салат', 'салон', 'самбо', 'свадеб', 'свадьб', 'свобод', 'сервис', 'скоростно', 'скульпт', 'слетать', 'совершенств', 'создадут', 'создани', 'социальн', 'спасает', 'спасают', 'спасени', 'спектакл', 'спорт', 'стадион', 'стимулирова', 'стихи', 'стихов', 'стихотворени', 'строител', 'студен', 'счастлив', 'счасть', 'танец', 'танцев', 'театр', 'тенор', 'тимуров', 'товар', 'трамва', 'транспорт', 'тренер', 'троллейбус', 'туризм', 'турист', 'убедил', 'уверенн', 'удалось', 'удач', 'удовольстви', 'улучшен', 'умственны', 'университет', 'услуг', 'усовершенствован', 'успех', 'успеш', 'устрое', 'фабрик', 'фантаст', 'фестивал', 'фотограф', 'фотокорреспондент', 'футбол', 'хокке', 'хокку', 'хорош', 'художествен', 'художни', 'чемпион', 'шахмат', 'шашечны', 'шашки', 'школ', 'экскурси', 'юбиле', 'язык')

In [25]:
with open(bads) as bad:
    badw = bad.read().split()
badw.sort()
badw = tuple(badw)

In [26]:
print ("Bad words:", badw)


Bad words: ('авария', 'агресси', 'арест', 'атака', 'атакова', 'банкрот', 'бастовать', 'бастующи', 'беда', 'бедственн', 'беженец', 'беженц', 'бездейств', 'безработ', 'беспоряд', 'беспризорн', 'бестви', 'болеет', 'болезн', 'болеют', 'бомб', 'бомж', 'взорва', 'взрыв', 'взятк', 'взяточни', 'вирус', 'военизированны', 'военны', 'возбужден', 'война', 'вооружени', 'воровств', 'вред', 'вынужден', 'генерал', 'героин', 'горел', 'гранат', 'грипп', 'давлени', 'депортаци', 'депортирован', 'дестабилиз', 'дискриминаци', 'домушник', 'жалоб', 'жалуются', 'забастовк', 'заболе', 'завал', 'задержан', 'зажор', 'заминирова', 'запрет', 'запрещен', 'заражен', 'застави', 'застрелил', 'затоплен', 'затор', 'землятрясени', 'избиени', 'избил', 'избит', 'казни', 'казнь', 'контрабанд', 'конфликт', 'коррумпирован', 'коррупци', 'криминал', 'кровав', 'кровь', 'ликвидир', 'лимит', 'лишили', 'лохотрон', 'мафии', 'мафиоз', 'мафия', 'мешает', 'мешать', 'миномет', 'наводнени', 'наган', 'наказани', 'напавш', 'нападени', 'наркодилер', 'наркоман', 'наркоти', 'нарушен', 'нацизм', 'национализм', 'националист', 'нацист', 'неблагополуч', 'недовольн', 'недополуч', 'незаконн', 'несанкционирован', 'нехватк', 'обанкротил', 'обвинил', 'обвинител', 'обвиня', 'обокрал', 'обстрел', 'оглуш', 'огнестрельно', 'ограбил', 'ограблен', 'ограничени', 'ограничить', 'опасност', 'опасны', 'опоздал', 'опоздани', 'оружейн', 'оружи', 'оскверн', 'отсуди', 'падени', 'парализован', 'перебо', 'перевернул', 'перелом', 'пистолет', 'плесен', 'побег', 'поврежден', 'погиб', 'погубил', 'подкуп', 'подозр', 'подорвал', 'подрал', 'подтоплены', 'пожар', 'покончил', 'покушени', 'помех', 'поножовщин', 'порнографи', 'пострада', 'потерпевши', 'потеря', 'потоп', 'похитил', 'похищен', 'похмель', 'правонарушен', 'пресечени', 'преступн', 'претензи', 'принудит', 'принужден', 'пробит', 'пробк', 'провал', 'простуд', 'протест', 'пулево', 'пуля', 'разбит', 'разворовывани', 'развратн', 'разруха', 'разруш', 'ранен', 'расстроенны', 'расстройств', 'растрат', 'расхищение', 'револьвер', 'рецесси', 'рухнул', 'сатанизм', 'сатанист', 'сбил', 'сбитого', 'сбитый', 'скандал', 'скончал', 'скорь', 'следстви', 'смертельн', 'смертн', 'смерть', 'снаряд', 'солдат', 'спад', 'спам', 'столкновени', 'столкнул', 'страшны', 'танк', 'террор', 'траур', 'тревог', 'тревож', 'тротил', 'троян', 'трудност', 'труп', 'туберкулез', 'тунеяд', 'тюремн', 'тюремны', 'тюрьм', 'убиенн', 'убийц', 'убил', 'убит', 'убытки', 'убыток', 'уволен', 'увольнени', 'угнал', 'угнан', 'угнать', 'уголовн', 'угонщи', 'угрожа', 'угроз', 'ужас', 'украден', 'украсть', 'умер', 'умира', 'уничтож', 'упадок', 'упадочны', 'уплотнени', 'уплотнительн', 'ухудшается', 'ухудшени', 'ущерб', 'форточни', 'хищени', 'цензур', 'шпион', 'штраф', 'эвакуир', 'экстремизм', 'экстремист', 'энцефалит', 'эпидеми')

Part III. Process add data in database, set wpos, wneg, mark as counters for good and bad words in each record.


In [27]:
cur.execute ("select *, rowid from netdata")


Out[27]:
<sqlite3.Cursor at 0x7f8d804c2e30>

In [28]:
toshow = 10
shown = 0

for row in cur.fetchall():
    header = row[3].lower()
    dthere = row[1]
    cpos = cneg = 0
    for w in goodw:
        if w in header:
            cpos += 1
    for w in badw:
        if w in header:
            cneg += 1
    mark = cpos - cneg
    rid = row[-1]
    cur.execute ("update netdata set wpos=?, wneg=?, mark=? where rowid=?", (cpos, cneg, mark, rid))
    if shown < toshow:
#        print ("update: rowid={5}, dt={4}, header={0}, wpos={1}, wneg={2}, mark={3}" .format(header, cpos, cneg, mark, dthere, rid))
        shown += 1

In [29]:
conn.commit()

In [30]:
conn.close()

In [ ]: