[PYTHON] Après tout, combien dois-je écrire un article sur Qiita?

Contexte

À partir de ce mois-ci, je suis entré dans une école appelée Protoout Studio (https://protoout.studio/), et j'ai eu un problème pour publier un article sur Qiita. À l'origine, j'ai écrit un blog sur note et un blog Hatena, mais c'est mon premier article sur Qiita. Je fixe généralement une norme telle que l'écriture de 1000 caractères à la fois, mais combien dois-je écrire un article Qiita en moyenne? Alors j'ai cherché.

Objectif de l'enquête

Quoi qu'il en soit, je veux analyser diverses choses, j'ai donc essayé d'extraire des éléments autres que le nombre de caractères dans le corps de l'article. ・ Nombre de caractères du titre ・ Nombre de tags ・ Nombre de caractères dans le texte ・ Nombre d'insertions de code (abandonnées car la logique d'extraction du nombre de caractères dans le code est difficile) ・ Nombre de sections ・ Nombre de caractères de texte par section ・ Nombre de LGTM ・ Nombre de commentaires J'ai sorti 5000 articles incluant le mot "node.js" avec l'API Qiita, je les ai moulés en csv, et je les ai visualisés et analysés avec le notebook jupyter.

environnement

node v12.18.2 Visual Studio Code 1.47.1 jupyter-notebook 6.0.3 python 3.7.6

Exemple de code

//package require
const axios = require("axios");
const fs = require("fs");
const csvStr = require("csv-stringify/lib/sync");

//Obtenez des données avec l'API Qiita et exportez-les au format CSV
async function getArticle(query) {
  
  //liste pour la conversion en csv
  let outcsv = [];
  let columns = ["Titre","Titre文字数","Nombre de balises","Nombre de caractères dans le texte","Nombre d'insertions de code","Nombre de sections","Nombre de caractères par section","Numéro LGTM","Nombre de commentaires"];
  outcsv.push(columns);

  //Paramètres de recherche
  var PAGE_MAX = 50;

  for (PAGE = 1;PAGE<=PAGE_MAX;PAGE++){
    //OBTENIR la demande
    var PER_PAGE = 100;   
    let response = await axios.get("https://qiita.com/api/v2/items?page=" + PAGE + "&per_page=" + PER_PAGE+"&query="+encodeURIComponent(query));
    
    for (i =0 ; i<PER_PAGE ; i++) {
      //Liste de stockage des informations d'un enregistrement
      let record = [];

      //Les éléments que vous voulez
      var title_name = response["data"][i]["title"];
      var title_len = response["data"][i]["title"].length;
      var tag = response["data"][i]["tags"].length;
      var body = response["data"][i]["rendered_body"].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').length;
      var code = (response["data"][i]["rendered_body"].match(/code-frame/g)||[]).length;
      var section = (response["data"][i]["rendered_body"].match(/<h1>|<h2>|<h3>/g)||[]).length;
      var body_ratio = section == 0 ? body : Math.round(body / section); //section=0 personnes sont section=Calculé comme 1
      var like = response["data"][i]["likes_count"];
      var comment = response["data"][i]["comments_count"];
      
      //Stocker dans la liste
      record.push(title_name,title_len,tag,body,code,section,body_ratio,like,comment); 
      outcsv.push(record);
    }
  }
  //Sortie en csv
  fs.writeFileSync("node.csv", csvStr(outcsv));
}

var query = "node.js";
getArticle(query);

Petites pièces

Nombre de caractères dans le corps de l'article

var body = response["data"][i]["rendered_body"].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').length;

Voici où compter le nombre de caractères dans le corps de l'article. Étant donné que la balise html est attachée au corps de l'article renvoyé en tant que réponse, elle est remplacée à l'aide d'une expression régulière. (Référence: https://qiita.com/miiitaka/items/793555b4ccb0259a4cb8)

Nombre d'insertions de code

var code = (response["data"][i]["rendered_body"].match(/code-frame/g)||[]).length;

Le nombre de fois où le code est inséré est compté en extrayant la balise html `<div class =" code-frame ">`. La logique pour extraire la partie de code est trop difficile, j'ai donc abandonné cette fois. Je veux contester un jour.

Nombre de sections

var section = (response["data"][i]["rendered_body"].match(/<h1>|<h2>|<h3>/g)||[]).length;
var body_ratio = section == 0 ? body : Math.round(body / section); //section=0 personnes sont section=Calculé comme 1

La section retire et compte les balises html ``

''. Certains articles n'ont jamais été utilisés, et le nombre de caractères par section semble être infini, donc quand section = 0, le nombre de caractères dans le corps est affecté à body_ratio tel quel.

une analyse

import pandas as pd
//Lire les données
df = pd.read_csv("node.csv")
//Retirez l'élément indexth et dessinez un histogramme
df[df.columns[index]].hist(bins=Nombre de bâtons,range=(Bord gauche de la figure,Bord droit de la figure))
//Calcul de chaque statistique
df.describe()
//Calcul du coefficient de corrélation
df.corr()
//Dessiner une carte thermique
import seaborn as sns
df_corr = df.corr()
sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)

J'ai fait une analyse de base avec le notebook jupyter. Je veux me plonger dans l'apprentissage automatique. Référence: https://pythondatascience.plavox.info/matplotlib/%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0

résultat

Nom du titre Nombre de caractères

title_len.png Moyenne: 36,3, médiane 34,0, minimum 4,0, maximum 225,0

Il semble qu'environ 35 caractères sont la moyenne. «Combien de temps dois-je écrire un article Qiita après tout?» Est-ce 23 caractères, il semble donc qu'un article légèrement plus long soit courant. 225 personnages sont incroyables, ils sont vraiment longs ...

Nombre de balises

tag.png Moyenne: 3,4, médiane 3,0, minimum 1,0, maximum 5,0

Environ 3 est la moyenne. C'est en quelque sorte intuitif.

Texte de l'article

image.png image.png Moyenne de 5700 caractères, médiane de 3540, minimum 15,0, maximum 559479

Le chiffre du haut est l'image entière et le chiffre du bas est le chiffre avec l'extrémité droite de 30 000. Il semble que la moyenne soit remontée, de sorte que la valeur médiane d'environ 3540 caractères est courante. Article de 560 000 caractères ... Combien d'heures faudra-t-il pour le réaliser ...?

Le nombre de caractères n'étant pas clair, je citerai un chapitre mémorable. ・ Prix parfait de 2000 personnages https://qiita.com/keenjoe007/items/c7068c58c63c17388f39 https://qiita.com/lelouch99v/items/3dc11676bb9c23457d41 ・ Prix parfait de 3000 personnages https://qiita.com/Ryusuke-Kawasaki/items/87dd43c176a489aa9fa5 ・ Prix parfait de 4000 personnages N'est pas applicable ・ Prix parfait de 5000 personnages https://qiita.com/seki0809/items/5f831d63146e44dc106a

Nombre d'insertions de code

image.png image.png Moyenne 8,4, médiane 5,0, minimum 0, maximum 222

De même, le chiffre supérieur est l'image entière et le chiffre inférieur est le chiffre avec l'extrémité droite à 40. J'ai l'impression que la moyenne est légèrement augmentée, alors est-ce généralement environ 5 fois? Ensuite, je voudrais analyser le nombre de caractères dans le code.

Nombre de sections

image.png image.png Moyenne 9,8, médiane 8,0, minimum 0, maximum 132

De même, le chiffre supérieur est l'image entière et le chiffre inférieur est le chiffre avec l'extrémité droite à 40. Il semble qu'il y ait de 8 à 9 sections. Je voudrais discuter du rapport de h1, h2, h3 séparément.

Nombre de caractères par section

image.png image.png Moyenne 738, médiane 448, minimum 15,0, maximum 207108

Dans la figure ci-dessous, l'extrémité droite est 6000. C'est environ 450 caractères et c'est une section. C'était un peu inattendu qu'il y ait une telle variation.

Je ne l'ai pas compris ici non plus, alors je publierai le prix parfait (il est arrondi, donc ce n'est pas strict) ・ Prix parfait de 300 personnages https://qiita.com/deren2525/items/43386d5d5872967195d4 ・ 400 caractères https://qiita.com/mejileben/items/cbe0608ee43aa1fab258 ・ 500 caractères https://qiita.com/ryokkkke/items/602a35595090e2224fbd

Numéro LGTM

image.png image.png Moyenne 13,6, médiane 2,0, minimum 0,0, maximum 1954

Dans la figure ci-dessous, l'extrémité droite est 40. Une médiane de 2 signifie que si vous obtenez 3 LGTM, vous êtes au-dessus de 2500. Il semble préférable d'arrêter d'attendre des goûts comme SNS.

Nombre de commentaires

image.png image.png Moyenne 0,27, médiane 0,0, minimum 0,0, maximum 26,0

Dans la figure ci-dessous, l'extrémité droite est définie sur 5 (puisque bacs = 30, le chiffre est clairsemé) La médiane est de 0, mais le point de 75% était également de 0. Ne vous attendez pas à des commentaires! C'est ça.

Corrélation entre chaque variable

image.png

Ceci est un dessin du coefficient de corrélation. Il semble intuitivement raisonnable qu'il semble y avoir une légère corrélation entre le nombre de caractères dans le texte, le nombre d'insertions de code, le nombre de sections et le nombre de caractères par section. Il est intuitif qu'il semble y avoir une légère corrélation entre le nombre de LGTM et le nombre de commentaires.

Je m'attendais à une corrélation entre le nombre de LGTM et d'autres facteurs, mais il semble qu'il n'y ait pas beaucoup de corrélation. Cela suggère que la quantité n'est pas très impliquée dans LGTM, est-ce le contenu après tout? Cependant, la possibilité qu'il existe de nombreux enregistrements avec le numéro LGTM = 0 ne peut pas être exclue.

Conclusion

Nombre de caractères du titre: environ 35 caractères Nombre d'étiquettes: 3 Nombre de caractères dans le texte: environ 3500 caractères Nombre d'insertions de code: environ 5 fois Nombre de sections: 8/9 sections Nombre de caractères par section: environ 450 caractères Nombre de LGTM: Hourra si vous l'obtenez deux fois Nombre de commentaires: Hourra si vous en avez un

Ce que je veux faire

Le nombre de caractères dans le texte est maintenant de 3500, mais il y a aussi un code à l'intérieur. Je me demande quelle est la part du code. Je suppose que la partie de code a plus de caractères.

Cette fois, j'ai cherché des articles en utilisant node.js comme requête, mais j'aimerais également essayer d'autres requêtes. Que se passe-t-il si vous interrogez python, que se passe-t-il si vous interrogez de la musique, etc. Il serait utile de se demander s'il existe des différences entre les requêtes.

Articles qui atteignent diverses valeurs maximales

Veuillez noter que cette fois, ce n'est pas la valeur maximale dans tous les articles Qiita car il ne prend que 5000 cas comme requête de node.js.

・ 225 caractères de titre (c'est long car c'est anglais!)   https://qiita.com/PINTO/items/865250ee23a15339d556

・ 559479 caractères dans le texte   https://qiita.com/K-Hama/items/5c1d4759fd5cbcf397b2

・ Nombre d'insertions de code 222 fois, nombre de sections 132 (Je pense que c'est le caractère numéro un, 182 000 caractères. Est-ce la quantité de code?)   https://qiita.com/y-bash/items/09575a8e3d85656015bc

・ Numéro LGTM 1954 Nombre de commentaires 26 (purement incroyable ...!)   https://qiita.com/akaoni_sohei/items/186121bd9994197aab50

Au fait

Les paramètres de cet article sont les suivants: Nombre de caractères du titre: 23 caractères Nombre d'étiquettes: 4 Caractères du corps: 6129 caractères Nombre d'insertions de code: 8 fois Nombre de sections: 23 Nombre de caractères par section: 266 caractères Nombre de LGTM: 0 Nombre de commentaires: 0

Pour ton information!

Recommended Posts

Après tout, combien dois-je écrire un article sur Qiita?
Qiita (1) Comment écrire un nom de code
Comment puis-je écrire un bon programme?
[Python débutant] Comment puis-je développer et exécuter Python après tout?
Configuration MacBookPro Après tout, je veux faire une installation propre
Que dois-je faire avec la structure de répertoires Python après tout?
Comment accéder aux variables de classe?
Un mémorandum sur la façon d'écrire des pandas que j'ai tendance à oublier personnellement
Après tout, que dois-je utiliser pour faire des comparaisons de types en Python?
Après avoir étudié Python3, j'ai créé un Slackbot
Comment écrire un fichier auquel vous devez faire attention dans toutes les langues