À 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é.
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.
node v12.18.2 Visual Studio Code 1.47.1 jupyter-notebook 6.0.3 python 3.7.6
//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);
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)
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.
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 ``
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
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 ...
Moyenne: 3,4, médiane 3,0, minimum 1,0, maximum 5,0
Environ 3 est la moyenne. C'est en quelque sorte intuitif.
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
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.
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.
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
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.
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.
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.
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
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.
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
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