Habrastatistica: quomodo Habr sine geektimes vivit?

Salve, Habr.

Hic articulus est logica continuatio rating Optima Habr vasa pro MMXVIII ". Et quamvis annus nondum sit, ut scis, aestate in regulas mutatum est, ideo, si res affectata est, interest videre.

Habrastatistica: quomodo Habr sine geektimes vivit?

Praeter actuales statisticos, renovatio articulorum aestimatio providebitur, sicut fons quidam codicem iis qui quomodo operatur interest.

Nam ea, quae intersunt, quae facta sunt, continuatio sub incisa est. Qui in accuratiore analysi sectionum situs sunt, etiam inspicere possunt altera pars.

initial notitia

Haec aestimatio privata est, et nullam habeo informationem interiorem. Cum facile perspicere potes inspiciendo vecturam navigatri tui, omnes articulos in HabrΓ© continuam numerationem habent. Tunc ars est, omnes articulos in ordine in cyclo simpliciter legimus (in uno filo et cum morulis, ne servo oneratis). Valores ipsae a simplici in Pythone parser (fontes in promptu sunt) consecuti sunt hic) et servavit in fasciculo csv simile hoc:

2019-08-11T22:36Z,https://habr.com/ru/post/463197/,"Blazor + MVVM = Silverlight наносит ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹ΠΉ ΡƒΠ΄Π°Ρ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Ρ€Π΅Π²Π½Π΅Π΅ Π·Π»ΠΎ Π½Π΅ΠΏΠΎΠ±Π΅Π΄ΠΈΠΌΠΎ",votes:11,votesplus:17,votesmin:6,bookmarks:40,views:5300,comments:73
2019-08-11T05:26Z,https://habr.com/ru/news/t/463199/,"Π’ NASA испытали систСму Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ управлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ микроспутника Π΄Ρ€ΡƒΠ³ΠΈΠΌ",votes:15,votesplus:15,votesmin:0,bookmarks:2,views:1700,comments:7

processus

Parsing utemur Pythone, Pandas et Matplotlib. Qui in statisticis non sunt, hanc partem transilire possunt et ad articulos recta ire.

Primum opus est dataset in memoriam onerare ac datas eligere ad annum desideratum.

import pandas as pd
import datetime
import matplotlib.dates as mdates
from matplotlib.ticker import FormatStrFormatter
from pandas.plotting import register_matplotlib_converters


df = pd.read_csv("habr.csv", sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#')
dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ')
df['datetime'] = dates
year = 2019
df = df[(df['datetime'] >= pd.Timestamp(datetime.date(year, 1, 1))) & (df['datetime'] < pd.Timestamp(datetime.date(year+1, 1, 1)))]

print(df.shape)

Evenit ut hoc anno (quamvis nondum finiatur) tempore scripto, articuli 12715 publici iuris facti sint. Ad comparationem, pro toto 2018 - 15904. In genere multum - hoc est de 43 articulis per diem (et hoc solum cum aestimatione positivo; quotque capitula totali recepta sunt, quae negativa vel deleta sunt, unum tantum suspicari potest. vel male hiatus inter identificatores aestimandus est).

Agros necessarios eligatus ex dataset. Ut metrica ratione utemur numero sententiarum, commentorum, aestimationerum, numero notarum.

def to_float(s):
    # "bookmarks:22" => 22.0
    num = ''.join(i for i in s if i.isdigit())
    return float(num)

def to_int(s):
    # "bookmarks:22" => 22
    num = ''.join(i for i in s if i.isdigit())
    return int(num)

def to_date(dt):
    return dt.date() 

date = dates.map(to_date, na_action=None)
views = df["views"].map(to_int, na_action=None)
bookmarks = df["bookmarks"].map(to_int, na_action=None)
votes = df["votes"].map(to_float, na_action=None)
votes_up = df["up"].map(to_float, na_action=None)
votes_down = df["down"].map(to_float, na_action=None)
comments = df["comments"].map(to_int, na_action=None)

df['date'] = date
df['views'] = views
df['votes'] = votes
df['bookmarks'] = bookmarks
df['up'] = votes_up
df['down'] = votes_down

Data iam adiecta sunt et uti possumus. Cogere notitias in die et media bona accipe.

g = df.groupby(['date'])
days_count = g.size().reset_index(name='counts')
year_days = days_count['date'].values
grouped = g.median().reset_index()
grouped['counts'] = days_count['counts']
counts_per_day = grouped['counts'].values
counts_per_day_avg = grouped['counts'].rolling(window=20).mean()
view_per_day = grouped['views'].values
view_per_day_avg = grouped['views'].rolling(window=20).mean()
votes_per_day = grouped['votes'].values
votes_per_day_avg = grouped['votes'].rolling(window=20).mean()
bookmarks_per_day = grouped['bookmarks'].values
bookmarks_per_day_avg = grouped['bookmarks'].rolling(window=20).mean()

Nunc interesting pars est ut lacinia purus intueri possumus.

Intueamur numerum publicationum in Habre in MMXIX.

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = (16, 8)
fig, ax = plt.subplots()

plt.bar(year_days, counts_per_day, label='Articles/day')
plt.plot(year_days, counts_per_day_avg, 'g-', label='Articles avg/day')
plt.xticks(rotation=45)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%d-%m-%Y"))  
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
plt.legend(loc='best')
plt.tight_layout()
plt.show()

Consequens est interesting. Ut vides, Habr paulo "farcimen" per annum fuit. Nescio rationem.

Habrastatistica: quomodo Habr sine geektimes vivit?

Ad comparationem, 2018 paulo levius spectat:

Habrastatistica: quomodo Habr sine geektimes vivit?

In genere, nullam acrem diminutionem vidi in numero articulorum editorum 2019 in graph. Immo contra, cum aestas leviter aucta videtur.

Sed duae proximae graphae me paulo plus deprimunt.

Mediocris numerus sententiarum per articulum:

Habrastatistica: quomodo Habr sine geektimes vivit?

Mediocris rating per articulum:

Habrastatistica: quomodo Habr sine geektimes vivit?

Ut vides, mediocris numerus sententiarum leviter per annum decrescit. Hoc explicari potest ex eo quod nova vasa nondum per inquisitiones recensita sunt, et toties non inveniuntur. Sed declinatio mediocris rating per articulum est incomprehensibilis. Sensus est, lectores vel simpliciter non vacat quaerere per tot articulos vel non attendere ad censum. Ex parte auctoris programma praemii, haec inclinatio valde ingrata est.

Obiter hoc in MMXVIII non fuit, et etiam schedula plus minusve.

Habrastatistica: quomodo Habr sine geektimes vivit?

In genere, resource possessores habent aliquid cogitandum.

Sed de tristibus non loquimur. In genere dicere possumus Habr "superesse" mutationes aestatis satis feliciter, et numerus articulorum in situ non decrevit.

rating

Nunc etiam, ratings. Gratulor iis qui in eam conscenderunt. Iterum me moneam, censum privatum esse, fortasse aliquid desiderari, et si aliquis articulus certus hic sit, sed non est scribe, ego manually addam. Secundum aestimationem, utimur metri ratione calculi, quod satis interesting evasit.

Top articulis per numerum views

Top vasa ab rating ad views ratio

Top vasa by comments to views ratio

Top controversias vasa

Top vasa per rating

Top vasa per numerum bookmarks

Top by ratio bookmarks ad views

Top vasa per numerum comment

Et tandem, ultimum Antitop numero fastidiorum

Ugh. Pauca plus interesting excerpta habeo, sed lectores non pertuli.

conclusio,

Cum construendo censum, ad duo puncta quae mihi placuisse videbantur, animum attendi.

Primo, 60% summi sunt articuli "geektimes" generis. Num pauciores erunt anno proximo, et quid Habr sine articulis de cervisia, spatio, medicina, etc. videbunt, ignoro. Reprehenderit, aliquid deserunt lectores. Videamus.

Secundo tabulae summae evasit ex improviso qualitas. Hoc est psychice comprehensibile, lectores non attendentes ad censum, sed ad articulum opustum adjicietur tuis notis. Atque hinc summa utilitas et gravium articulorum intentio est. Situs dominis puto aliquo modo cogitare debere per connexionem inter notas et praemia programmatis, si hanc particularem categoriam articulorum hic in HabrΓ© augere velint.

Aliquid simile hoc. Spero fore informativum.

Index articulorum longum evasit, bene, melius verisimile est. Beatus quisque legens.

Source: www.habr.com