📜 ⬆️ ⬇️

8+ in 1: how I wanted to attract attention

Good evening, harabrachiteli!

Before the release of 8+ in 1: our new messenger for iOS and Android , I had to do some work on exploring the places where we were going to publish press releases. One of these places was Habr.

We asked the following questions:

')
image



Introduction

From the very beginning, I did not leave the feeling that I had already seen a similar article, somewhere this question had already been raised, but where ?! I could not find it, most likely I was looking badly ( here , here , here ), so I decided to conduct an actual investigation and, if possible, find out some interesting points.

I want to clarify that by “best” we mean attracting the maximum number of users who either view (read), add to bookmarks, or comment on a post.

It all started with parsing articles. Fortunately, Habr has post identifiers for which you can safely walk and collect information:

habrahabr.ru/post[id]/


A quick grabber was written on Objective-C.
Grabber source code
 // // 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; } 



Nice to watch:



All it took me hours 17-19.

All pages from index 1 to 200,000 weigh at the moment (September 28, 2013, 20:03):
 AndrewShmigs-MacBook-Pro:TimeMachine Backup new$ du -sh HabrahabrPages/ 18G HabrahabrPages/ 


Filtration

Now you need to get rid of all unnecessary files - these are pages with posts that were hidden or those that have not yet been created.
In parallel, you can process each page, “rip out” the data we need and write it to another file (shared).

From each blog entry we will receive the following information:

Source code parser on 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; } 



Total articles that are now publicly available: 115468.
For this ( updated version ) link you can download the data file in the following format:
195428,26 19:56,13667,264,37


The comma is used as a delimiter. Parameters are listed in the following order:


If necessary, I can distribute or transfer all files (most likely with a torrent, in the compressed form it weighs about 4 GB). Write in the LAN.

The next thing we do is to bring the publication dates to a single format: TT:TT.DD.MM.YYYY
In the current data we can meet the following types of publication dates:
13 2006 18:23
15 05:27

For simplicity, I excluded the dates in the format (there were literally a couple of them, tolerable losses):
18:23
17:44

Our next parser should solve two problems:


Parser converts dates to the desired format in 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; } 



Download the file in the updated format at this link.
 1,18:23.13.7.2006,(null),4,32 2,00:45.14.7.2006,(null),0,34 


By hours and minutes, days, months and years

Note: the processed data includes records from 2006 to September 28, 2013.

Question: At what time of day is the largest number of posts published?
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; } 




Question: What are the minutes when the most posts are published?
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; } 




Question: What are the hours and minutes published the largest number of posts?
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;
}



Question: On which day of the month is the largest number of posts published?
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; } 




Question: In which month is the largest number of posts published?
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; } 




Question: In what year was published the largest number of posts?
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; } 




Views

Here, unfortunately, it is worth noting that 63310 articles were written before the functionality of fixing the number of article views was introduced, so we will work only with that part of articles in which the number of views has already been recorded.

Question: by posting at what time can I get the maximum number of views?
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; } 




Average values:
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; } 




Question: what hours is the maximum number of views achieved?
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; } 




Average values:
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; } 




Question: what days of the month is the maximum number of views?
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; } 




Average values:
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; } 




Favorites

Question: published posts in what minutes bring to their owners the most additions to your favorites?
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; } 




Average values:
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; } 




Question: posting a post at what time brings to its author a greater number of additions to favorites?
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; } 




Average values:
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; } 




Question: on what day of the month will the publication of the post bring the author the maximum number of additions to favorites?
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; } 




Average values:
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; } 




But only for 2013:


Question: the publication in which month will bring the maximum number of additions to favorites for the author of the post?
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; } 


On Habré, December is just a month of happiness and kindness :)


Comments

Question: the publication of the post at what moment will bring the author the greatest number of comments?
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; } 




Question: the publication of the post at what time will bring the author the maximum number of comments?
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; } 




Average values:


Only for 2013:


Question: the publication of the post on which day of the month will bring the greatest number of comments to the author?
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; } 




Question: publication in which month will bring the most comments to the author?
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; } 




Question: publication in which year the author will bring the greatest number of comments?
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; } 




Dependence of the number of comments on the number of views

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; } 




The dependence of the number of additions to favorites from the number of comments

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


I apologize for the quality of this graphic, LibreOffice refuses to process this amount of data, but keep quiet about Numbers.

On the X axis - the number of comments, and on the Y axis - the number of additions to favorites.

Guessing game

Who will estimate what is depicted on these graphs?




Finally

Thanks for attention!

We are already looking forward to showing you that we have developed on iOS and Android, but so far, unfortunately, it is too early to do it ...

Source: https://habr.com/ru/post/195552/


All Articles