8+ в 1: как я хотел привлечь внимание

от автора

Добрый вечер, хабрачитатели!

Перед выходом 8+ в 1: наш новый мессенджер под iOS и Android, мне пришлось проделать кое-какую работу по изучению тех мест, куда мы собирались публиковать пресс-релизы. Одним из таких мест стал Хабр.

Мы задались следующими вопросами:

  • В какой день недели лучше всего публиковать пост?
  • В какое время (интервал времени) лучше всего публиковать пост?
  • В какое время года лучше всего публиковать пост?

image

Вступление

Меня с самого начала не покидало ощущение того, что где-то я подобную статью уже видел, где-то уже этот вопрос поднимался, но где?! Я так и не смог найти, скорее всего плохо искал (тут, тут, тут), поэтому решил провести собственно расследование и, по возможности, выяснить какие-то интересные моменты.

Хочу уточнить, что под «лучше всего» мы подразумеваем привлечение максимального числа пользователей, которые либо просмотрят (прочитают), либо добавят в закладки, либо прокомментируют пост.

Началось всё с парсинга статей. Благо у хабра есть идентификаторы постов по которым можно спокойно пройтись и собрать информацию:

http://habrahabr.ru/post/[id]/

На скорую руку был написан граббер на Objective-C.

Исходный код граббера

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>   NSString* getPublishDate(NSString *); NSString* getPostViewsCount(NSString *); NSString* getFavCount(NSString *); NSString* getCommentsCount(NSString *); NSString* removeTags(NSString *);   int main(int argc, const char * argv[]) {     //    freopen("/Users/new/Documents/Development/HabrahabrParser/habrahabr.txt", "w", stdout);                  const int MAX = 200000;                  for(int i=1; i<=MAX; i++) {                          @autoreleasepool {                                  NSString *url = [NSString stringWithFormat:@"http://habrahabr.ru/post/%d/", i];                 NSURL *link = [NSURL URLWithString:url];                 NSURLRequest *request = [NSURLRequest requestWithURL:link];                                  NSError *error = nil;                 NSData *post = [NSURLConnection sendSynchronousRequest:request                                                      returningResponse:nil                                                                  error:&error];                 NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrPages/%d.txt", i];                 [post writeToFile:path atomically:YES];                                  NSLog(@"[%d / %d]", i, MAX);             }         }          return 0; }  NSString* removeTags(NSString *matchString) {     if(nil == matchString)         return nil;          NSRegularExpression *tagContent = [NSRegularExpression regularExpressionWithPattern:@">.+<"                                                                                 options:NSRegularExpressionCaseInsensitive                                                                                   error:nil];     __block NSString* resultingString;     [tagContent enumerateMatchesInString:matchString                                  options:0                                    range:NSMakeRange(0, [matchString length])                               usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                   resultingString = [matchString substringWithRange:[result range]];                                   *stop = YES;                               }];          return [resultingString substringWithRange:NSMakeRange(1, [resultingString length] - 2)]; }  NSString* getCommentsCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"id=\"comments_count\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *comments;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            comments = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return comments; }  NSString* getFavCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"title=\"Количество пользователей, добавивших пост в избранное\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *fav;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            fav = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return fav; }  NSString* getPostViewsCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"title=\"Просмотры поста\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *views;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            views = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return views; }  NSString* getPublishDate(NSString *html) {          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"class=\"published\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *date;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            date = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return date; } 

Приятно наблюдать:

На всё у меня ушло часов 17-19.

Все страницы начиная с индекса 1 по 200000 весят на текущий момент (28 сентября 2013, 20:03):

AndrewShmigs-MacBook-Pro:TimeMachine Backup new$ du -sh HabrahabrPages/  18G	HabrahabrPages/ 
Фильтрация

Теперь необходимо избавиться от всех лишних файлов — это страницы с постами, которые были скрыты или те, которые еще не были созданы.
Параллельно обрабатывать можно каждую страницу, «выдирать» нужные нам данные и записывать их в другой файл (общий).

Из каждой записи в блоге мы будем получать следующую информацию:

  • Дату публикации
  • Кол-во просмотров
  • Кол-во добавлений в избранное
  • Кол-во комментариев

Исходный код парсера на Objective-C

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>   NSString* getPublishDate(NSString *); NSString* getPostViewsCount(NSString *); NSString* getFavCount(NSString *); NSString* getCommentsCount(NSString *); NSString* removeTags(NSString *);   int main(int argc, const char * argv[]) {     FILE *output = fopen("/Volumes/TimeMachine Backup/HabrahabrData.txt", "a");          @autoreleasepool {                  const int MAX = 200000;         int totalOk = 0;                  for(int i=1; i<=MAX; i++) {                          @autoreleasepool {                                  //                NSString *url = [NSString stringWithFormat:@"http://habrahabr.ru/post/%d/", i];                 //                NSURL *link = [NSURL URLWithString:url];                 //                NSURLRequest *request = [NSURLRequest requestWithURL:link];                 //                 //                NSError *error = nil;                 //                NSData *post = [NSURLConnection sendSynchronousRequest:request                 //                                                     returningResponse:nil                 //                                                                 error:&error];                 //                NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrPages/%d.txt", i];                 //                [post writeToFile:path atomically:YES];                 //                 //                NSLog(@"[%d / %d]", i, MAX);                 NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrPages/%d.txt", i];                 NSString *page = [NSString stringWithContentsOfFile:path                                                            encoding:NSUTF8StringEncoding                                                               error:nil];                                  if(nil == page) continue; // мой косяк с файлами                                  NSString *publishedAt = removeTags(getPublishDate(page));                 NSString *viewsCount = removeTags(getPostViewsCount(page));                 NSString *favsCount = removeTags(getFavCount(page));                 NSString *commentsCount = removeTags(getCommentsCount(page));                                  if(nil == publishedAt) {                     [[NSFileManager defaultManager] removeItemAtPath:path                                                                error:nil];                                          continue; // closed post                 }                                  totalOk++;                                  NSLog(@"%d,%@,%@,%@,%@", i, publishedAt, viewsCount, favsCount, commentsCount);                                  fprintf(output, "%d,%s,%s,%s,%s\n", i, [publishedAt UTF8String],                         [viewsCount UTF8String], [favsCount UTF8String],                         [commentsCount UTF8String]);             }         }                  NSLog(@"totalOK: %d", totalOk);                  fclose(output);     }          return 0; }  NSString* removeTags(NSString *matchString) {     if(nil == matchString)         return nil;          NSRegularExpression *tagContent = [NSRegularExpression regularExpressionWithPattern:@">.+<"                                                                                 options:NSRegularExpressionCaseInsensitive                                                                                   error:nil];     __block NSString* resultingString;     [tagContent enumerateMatchesInString:matchString                                  options:0                                    range:NSMakeRange(0, [matchString length])                               usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                   resultingString = [matchString substringWithRange:[result range]];                                   *stop = YES;                               }];          return [resultingString substringWithRange:NSMakeRange(1, [resultingString length] - 2)]; }  NSString* getCommentsCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"id=\"comments_count\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *comments;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            comments = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return comments; }  NSString* getFavCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"title=\"Количество пользователей, добавивших пост в избранное\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *fav;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            fav = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return fav; }  NSString* getPostViewsCount(NSString *html) {     if(nil == html)         return nil;          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"title=\"Просмотры поста\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *views;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            views = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return views; }  NSString* getPublishDate(NSString *html) {          NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"class=\"published\">.+</"                                                                            options:NSRegularExpressionCaseInsensitive                                                                              error:nil];     __block NSString *date;     [regex enumerateMatchesInString:html                             options:0                               range:NSMakeRange(0, [html length])                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {                                                            date = [html substringWithRange:[result range]];                              *stop = YES;                                                        }];          return date; } 

Всего статей, которые сейчас находятся в открытом доступе: 115468.
По этой (обновленный вариант) ссылке вы можете скачать файл с данными в следующем формате:
195428,26 сентября в 19:56,13667,264,37

В качестве разделителя выступает запятая. Параметры перечислены в следующем порядке:

  • Идентификатор поста
  • Дата публикации
  • Кол-во просмотров
  • Кол-во добавлений в избранное
  • Кол-во комментариев

Если необходимо, то все файлы могу раздать или передать (скорее всего торрентом, в сжатом виде весит порядка 4 GB). Пишите в ЛС.

Следующее, что мы сделаем, так это приведем даты публикаций к единому формату: TT:TT.DD.MM.YYYY
В текущих данных у нас могут встречаться следующие виды дат публикаций:
13 июля 2006 в 18:23
15 февраля в 05:27

Для простоты я исключил даты в формате (их буквально пару штук было, потери терпимые):
сегодня в 18:23
вчера в 17:44

Наш следующий парсер должен решать две задачи:

  • Преобразовывать дату публикации в нужный формат
  • Исправить (null) записи в столбце «Закладки» на «0» (null запись в столбце с просмотрами означает, что во время публикации статьи такого функционала еще не было)
Парсер преобразующий даты в нужный формат на Objective-C

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     FILE *output = fopen("/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt", "a");     for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];                          if(0 == [components count])                 continue;                          NSString *newDateFormat = parseDate(components[1]);             NSString *newFavFormat = parseFav(components[3]);                          if(nil == newDateFormat) {                 continue;             }                          components[1] = newDateFormat;             components[3] = newFavFormat;                          NSString *newLine = [components componentsJoinedByString:@","];             NSLog(@"%@", newLine);             fprintf(output, "%s\n", [newLine UTF8String]);         }     }     fclose(output);          return 0; }  NSString* parseDate(NSString *date) {     NSArray *components = [date componentsSeparatedByString:@" "];     NSUInteger count = [components count];          if(5 == count || 4 == count || 6 == count) {         //        0, 1, 2, 4         NSLog(@"date: %@", date);                  NSString *day;         NSString *month = components[1];         if(6 == count) {             day = components[1];             month = components[2];         } else {             day = components[0];             month = components[1];         }                  NSString *year;         if(5 == count) {             year = components[2];         } else {             year = @"2013";         }         NSString *time = [components lastObject];                  NSArray *months = @[@"января", @"февраля", @"марта", @"апреля", @"мая",                             @"июня", @"июля", @"августа", @"сентября", @"октября",                             @"ноября", @"декабря"];         NSUInteger index = [months indexOfObject:month] + 1;                  return [NSString stringWithFormat:@"%@.%@.%@.%@", time, day, @(index), year];     }          return nil; }  NSString* parseFav(NSString *fav) {     if([fav isEqualToString:@"(null)"]) {         return @"0";     }          return fav; } 

Скачать файл в обновленном формате можно по этой ссылке.

1,18:23.13.7.2006,(null),4,32 2,00:45.14.7.2006,(null),0,34 
По часам и минутам, дням, месяцам и годам

Примечание: обрабатываемые данные включают в себя записи начиная с 2006 года по 28 сентября 2013.

Вопрос: В какие часы суток публикуется наибольшее число постов?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int hours[24] = {0};          for(NSString *line in lines) {         NSArray *components = [line componentsSeparatedByString:@","];         NSString *time = [components[1] componentsSeparatedByString:@"."][0];         int hour = (int)[[time componentsSeparatedByString:@":"][0] integerValue];          hours[hour]++;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/HabrahabrByOurs.txt", "a");     for(int index=0; index<24; index++) {         fprintf(file, "%d, %d\n", index, hours[index]);     }     fclose(file);          return 0; } 

Вопрос: В какие минуты публикуется наибольшее число постов?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int mins[59] = {0};          for(NSString *line in lines) {         NSArray *components = [line componentsSeparatedByString:@","];         NSString *time = [components[1] componentsSeparatedByString:@"."][0];         int min = (int)[[time componentsSeparatedByString:@":"][1] integerValue];          mins[min]++;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/HabrahabrByOurs.txt", "a");     for(int index=0; index<60; index++) {         fprintf(file, "%d, %d\n", index, mins[index]);     }     fclose(file);          return 0; } 

Вопрос: В какие часы и минуты публикуется наибольшее число постов?

Objective-C Source Code

//
// main.m
// HabrahabrParser
//
// Created by AndrewShmig on 9/27/13.
// Copyright © 2013 AndrewShmig. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];
NSString *fileContent = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];

NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];
int time[1440] = {0};

for(NSString *line in lines) {
NSArray *components = [line componentsSeparatedByString:@","];
NSString *timeStr = [components[1] componentsSeparatedByString:@"."][0];

int min = (int)[[timeStr componentsSeparatedByString:@":"][1] integerValue];
int hour = (int)[[timeStr componentsSeparatedByString:@":"][0] integerValue];

time[hour*60+min]++;
}

FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", «a»);
for(int index=0; index<1440; index++) {
fprintf(file, "%d, %d\n", index, time[index]);
}
fclose(file);

return 0;
}

Вопрос: В какой день месяца публикуется наибольшее число постов?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int days[31] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];                          int day = (int)[datetime[1] integerValue];             days[day]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=1; i<32; i++) {         fprintf(output, "%d,%d\n", i, days[i]);     }     fclose(output);          return 0; } 

Вопрос: В какой месяц публикуется наибольшее число постов?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int months[31] = {0};          for(NSString *line in lines) {         NSArray *components = [line componentsSeparatedByString:@","];         NSString *month = [components[1] componentsSeparatedByString:@"."][2];                  months[(int)[month integerValue]]++;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     for(int index=1; index<13; index++) {         fprintf(file, "%d, %d\n", index, months[index]);     }     fclose(file);          return 0; } 

Вопрос: В какой год было опубликовано наибольшее число постов?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int years[2020] = {0};          for(NSString *line in lines) {         NSArray *components = [line componentsSeparatedByString:@","];         NSString *year = [components[1] componentsSeparatedByString:@"."][3];                  years[(int)[year integerValue]]++;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     for(int index=2005; index<2014; index++) {         fprintf(file, "%d, %d\n", index, years[index]);     }     fclose(file);          return 0; } 

Просмотры

Здесь, к сожалению, стоит отметить, что 63310 статей было написано до того, как был введен функционал фиксирования кол-ва просмотров статьи, поэтому мы будем работать только с той частью статей, в которых кол-во просмотров уже фиксировалось.

Вопрос: опубликовав пост в какую минуту можно получить максимальное кол-во просмотров?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int mins[60] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *views = parts[2];         if([views isEqualToString:@"(null)"]) continue;                  int viewsCount = (int)[views integerValue];         int min = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][1] integerValue];                  mins[min]+=viewsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 60;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, mins[index]);     }     fclose(file);          return 0; } 

Средние значения:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int mins[60] = {0};     int minsCount[60] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue];             int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];                          if([components[2] isEqualToString:@"(null)"]) continue;                          int viewsCount = (int)[components[2] integerValue];             mins[min]+=viewsCount;             minsCount[min]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=0; i<60; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

Вопрос: в какие часы достигается максимальное кол-во просмотров?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int hours[60] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *views = parts[2];         if([views isEqualToString:@"(null)"]) continue;                  int viewsCount = (int)[views integerValue];         int hour = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][0] integerValue];                  hours[hour]+=viewsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 60;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, hours[index]);     }     fclose(file);          return 0; } 

Средние значения:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 24;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];             int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];                          if([components[2] isEqualToString:@"(null)"]) continue;                          int viewsCount = (int)[components[2] integerValue];             mins[hour]+=viewsCount;             minsCount[hour]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=0; i<MAX; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

Вопрос: в какие дни месяца достигается максимальное кол-во просмотров?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int days[31] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];                          int day = (int)[datetime[1] integerValue];                          if([components[2] isEqualToString:@"(null)"]) continue;             int viewsCount = (int)[components[2] integerValue];                          days[day]+=viewsCount;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=1; i<32; i++) {         fprintf(output, "%d,%d\n", i, days[i]);     }     fclose(output);          return 0; } 

Средние значения:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 32;     const int MIN = 1;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue];             int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];                          if([components[2] isEqualToString:@"(null)"]) continue;                          int viewsCount = (int)[components[2] integerValue];             mins[day]+=viewsCount;             minsCount[day]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=MIN; i<MAX; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

Избранное

Вопрос: опубликованные посты в какие минуты приносят своим владельцам больше всего добавлений в избранное?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int mins[60] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *favs = parts[3];         int favsCount = (int)[favs integerValue];         int min = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][1] integerValue];                  mins[min]+=favsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 60;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, mins[index]);     }     fclose(file);          return 0; } 

Средние значение:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 60;     const int MIN = 0;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue];             int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];              //            if([components[2] isEqualToString:@"(null)"]) continue;              //            int viewsCount = (int)[components[2] integerValue];             int favsCount = (int)[components[3] integerValue];             mins[min]+=favsCount;             minsCount[min]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=MIN; i<MAX; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

Вопрос: публикация поста в какой час приносит своему автору большее число добавлений в избранное?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int hours[24] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *favs = parts[3];         int favsCount = (int)[favs integerValue];         int hour = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][0] integerValue];                  hours[hour]+=favsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 24;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, hours[index]);     }     fclose(file);          return 0; } 

Средние значения:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 24;     const int MIN = 0;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];             int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];              //            if([components[2] isEqualToString:@"(null)"]) continue;              //            int viewsCount = (int)[components[2] integerValue];             int favsCount = (int)[components[3] integerValue];             mins[hour]+=favsCount;             minsCount[hour]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=MIN; i<MAX; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

Вопрос: в какой день месяца публикация поста принесет автору максимальное кол-во добавлений в избранное?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int days[31] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];             int day = (int)[datetime[1] integerValue];                          int favsCount = (int)[components[3] integerValue];             days[day]+=favsCount;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=1; i<32; i++) {         fprintf(output, "%d,%d\n", i, days[i]);     }     fclose(output);          return 0; } 

Средние значения:

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 32;     const int MIN = 1;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue];             int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue];              //            if([components[2] isEqualToString:@"(null)"]) continue;              //            int viewsCount = (int)[components[2] integerValue];             int favsCount = (int)[components[3] integerValue];             mins[day]+=favsCount;             minsCount[day]++;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=MIN; i<MAX; i++) {         fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]);     }     fclose(output);          return 0; } 

А вот только за 2013 год:

Вопрос: публикация в какой месяц принесет автору поста максимальное число добавлений в избранное?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int months[12] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *favs = parts[3];         int favsCount = (int)[favs integerValue];         int month = (int)[[parts[1] componentsSeparatedByString:@"."][2] integerValue];                  months[month]+=favsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 1;     int end = 13;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, months[index]);     }     fclose(file);          return 0; } 

На Хабре декабрь прям какой-то месяц счастья и доброты 🙂

Комментарии

Вопрос: публикация поста в какую минуту принесет автору наибольшее число комментариев?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int mins[60] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *comments = parts[3];         int favsCount = (int)[comments integerValue]; //        int mins = (int)[[parts[1] componentsSeparatedByString:@"."][2] integerValue];         int min = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][1] integerValue];                  mins[min]+=favsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 60;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, mins[index]);     }     fclose(file);          return 0; } 

Вопрос: публикация поста в какой час принесут автору максимальное кол-во комментариев?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int hours[24] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *comments = parts[3];         int favsCount = (int)[comments integerValue]; //        int mins = (int)[[parts[1] componentsSeparatedByString:@"."][2] integerValue];         int hour = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][0] integerValue];                  hours[hour]+=favsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 0;     int end = 24;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, hours[index]);     }     fclose(file);          return 0; } 

Средние значения:

Только за 2013 год:

Вопрос: публикация поста в какой день месяца принесет автору наибольшее кол-во комментариев?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int days[31] = {0};          for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."];             int day = (int)[datetime[1] integerValue];                          int comments = (int)[components[4] integerValue];             days[day]+=comments;         }     }          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(int i=1; i<32; i++) {         fprintf(output, "%d,%d\n", i, days[i]);     }     fclose(output);          return 0; } 

Вопрос: публикация в каком месяце принесет автору наибольше число комментариев?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int months[12] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *comments = parts[3];         int commentsCount = (int)[comments integerValue];         int month = (int)[[parts[1] componentsSeparatedByString:@"."][2] integerValue]; //        int hour = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][0] integerValue];                  months[month]+=commentsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 1;     int end = 13;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, months[index]);     }     fclose(file);          return 0; } 

Вопрос: публикация в каком году принесёт автору наибольшее число комментариев?

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  int main(int argc, const char * argv[]) {          NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedDate.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     int years[2020] = {0};          for(NSString *line in lines) {         NSArray *parts = [line componentsSeparatedByString:@","];                  NSString *comments = parts[3];         int commentsCount = (int)[comments integerValue];         int year = (int)[[parts[1] componentsSeparatedByString:@"."][3] integerValue]; //        int hour = (int)[[[parts[1] componentsSeparatedByString:@"."][0] componentsSeparatedByString:@":"][0] integerValue];                  years[year]+=commentsCount;     }               FILE *file = fopen("/Volumes/TimeMachine Backup/RESULTS.txt", "a");     int start = 2005;     int end = 2014;     for(int index=start; index<end; index++) {         fprintf(file, "%d, %d\n", index, years[index]);     }     fclose(file);          return 0; } 

Зависимость числа комментариев от числа просмотров

Objective-C

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 24;     const int MIN = 0;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue]; //            if(year != 2013) continue;                          if([components[2] isEqualToString:@"(null)"]) continue;                          int viewsCount = (int)[components[2] integerValue]; //            int favsCount = (int)[components[3] integerValue];             int comments = (int)[components[4] integerValue]; //            mins[hour]+=comments; //            minsCount[hour]++;             fprintf(output, "%d,%d\n", viewsCount, comments);         }     }      //    FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a"); //    for(int i=MIN; i<MAX; i++) { //        fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]); //    }     fclose(output);          return 0; } 

Зависимость числа добавлений в избранное от числа комментариев

Objective-C Source Code

// //  main.m //  HabrahabrParser // //  Created by AndrewShmig on 9/27/13. //  Copyright (c) 2013 AndrewShmig. All rights reserved. //  #import <Foundation/Foundation.h>  NSString* parseDate(NSString *); NSString* parseFav(NSString *);  int main(int argc, const char * argv[]) {     NSString *path = [NSString stringWithFormat:@"/Volumes/TimeMachine Backup/HabrahabrDataParsedData.txt"];     NSString *fileContent = [NSString stringWithContentsOfFile:path                                                       encoding:NSUTF8StringEncoding                                                          error:nil];          NSArray *lines = [fileContent componentsSeparatedByString:@"\n"];     const int MAX = 24;     const int MIN = 0;     int mins[MAX] = {0};     int minsCount[MAX] = {0};          FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a");     for(NSString *line in lines) {         @autoreleasepool {             NSMutableArray *components = [[line componentsSeparatedByString:@","] mutableCopy];             NSArray *datetime = [components[1] componentsSeparatedByString:@"."]; //            int hour = (int)[[datetime[0] componentsSeparatedByString:@":"][0] integerValue]; //            int min = (int)[[datetime[0] componentsSeparatedByString:@":"][1] integerValue]; //            int day = (int)[datetime[1] integerValue]; //            int month = (int)[datetime[2] integerValue]; //            int year = (int)[datetime[3] integerValue]; //            if(year != 2013) continue;              //            if([components[2] isEqualToString:@"(null)"]) continue;              //            int viewsCount = (int)[components[2] integerValue];             int favsCount = (int)[components[3] integerValue];             int comments = (int)[components[4] integerValue]; //            mins[hour]+=comments; //            minsCount[hour]++;             fprintf(output, "%d,%d\n", favsCount, comments);         }     }      //    FILE *output = fopen("/Volumes/TimeMachine Backup/RESULT.txt", "a"); //    for(int i=MIN; i<MAX; i++) { //        fprintf(output, "%d,%f\n", i, 1.0f * mins[i] / minsCount[i]); //    }     fclose(output);          return 0; } 

MATLAB Source Code

fid = fopen('/Volumes/TimeMachine Backup/RESULT.txt', 'r');  while ~feof(fid)     arr = fscanf(fid,'%d,%d',2);     favs = arr(1);     comments = arr(2);          hold on;     plot(comments, favs, '*b') end  fclose(fid); 

За качество этого графика приношу свои извинения, LibreOffice отказывается обрабатывать такое кол-во данных, а про Numbers молчу.

По оси Х — кол-во комментариев, а по оси У — кол-во добавлений в избранное

Угадайка

Кто прикинет, что же изображено на этих графиках?




В заключение

Спасибо за внимание!

Мы с большим нетерпением хотим уже показать Вам, что мы наработали на iOS и Android, но пока, к сожалению, это делать рано…

ссылка на оригинал статьи http://habrahabr.ru/post/195552/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *