Complètement pour moi. Tout d'abord, je ne connais pas le format Markdown, donc je ne le montre pas aux gens. Si vous ne voulez connaître que le résultat, ici
Le classement des œuvres de Naruro n'est-il pas fiable? → Je veux connaître des œuvres intéressantes! !! → Classement à partir du classement mensuel et du classement trimestriel basé sur le score d'évaluation moyen
→ Les œuvres avec une note de 500 ou moins peuvent être biaisées (la loi des grands nombres), donc je les ai exclues même si c'est mauvais! La valeur d'écart est également ajoutée aux points d'évaluation, vous pouvez donc voir les œuvres que vous jugez intéressantes d'un coup d'œil! Tu l'as fait!
Cliquez-ici pour le code! J'ai tout écrit en pythonista sur iphone! Je suis lycéen et pardonne-moi les codes sales!
Je l'ai fait en désordre avec l'élan, donc même si je fais une erreur, ce n'est pas quelque chose qui peut être montré aux gens.
import requests,json,datetime,math
import console #Peut-être une bibliothèque pythonista?
from statistics import mean,stdev
#from time import sleep(Pour le débogage)
#from pprint import pprint(Pour le débogage)
today = datetime.date.today().strftime('%Y%m%d')
bg = {
1: 'amour',
2: 'Fantaisie',
3: 'Arts littéraires',
4: 'SF',
99: 'Autre',
98: 'Non-genre'
}
gg = {
101: 'Un autre monde [amour]',
102: 'Monde réel [amour]',
201: 'Haute fantaisie [fantaisie]',
202: 'Faible fantaisie [fantaisie]',
301: 'Littérature pure [littérature]',
302: 'Drame humain [arts littéraires]',
303: 'Histoire [littérature]',
304: 'Raisonnement [littérature]',
305: 'Horreur [arts littéraires]',
306: 'Action [littérature]',
307: 'Comédie [littérature]',
401: 'Jeu VR [SF]',
402: 'Espace [SF]',
403: 'Fantaisie scientifique [SF]',
404: 'Panique [SF]',
9901: 'Histoire pour enfants [Autre]',
9902: 'Poésie [Autre]',
9903: 'Essai [Autre]',
9904: 'Rejouer [Autre]',
9999: 'Autre [Autre]',
9801: 'Non-genre [non-genre]'
}
def uni(seq):
seen = []
return [x for x in seq if x not in seen and not seen.append(x)]
#Obtenez des informations de classement mensuel
def otherlist():
u = 'https://api.syosetu.com/rank/rankget/?&out=json&rtype='+today[:6]+'01-m'
al = requests.get(u)
ali = json.loads(al.text)
return ali
#narrow.Lisez le type que vous avez ajouté au txt
def get_add_data():
with open('narrow.txt') as f:
l_strip = [s.strip() for s in f.readlines()]
return uni(list(filter(lambda a: a != '', l_strip)))#Évitez la duplication avec des données vides et retournez
#Passez le ncode de votre roman préféré et un fichier pour des données supplémentaires(narrow.txt)Écrire à
def add_data(ncode):
with open('narrow.txt', mode='a') as f:
f.write(ncode+'\n')
print('success')
def getdata():
c = 0
#Analyse à partir du classement trimestriel
u1 = 'https://api.syosetu.com/rank/rankget/?&out=json&rtype='+today[:6]+'01-q'
zen = requests.get(u1)
zeli = json.loads(zen.text)
#Obtenez de nouvelles informations de classement trimestriel
add_list = otherlist()
#Ajout des données de classement mensuel
for i in get_add_data():
#Plus étroit.Ajouter un ncode écrit en txt
add_list = add_list +[dict(ncode=i)]
for a in add_list:
zeli.append(a)
#À ce stade, zeli a un quart,Classement mensuel+narrow.Contient des données supplémentaires pour txt
all_data = list()
errors = list()
l = len(zeli)
for n in zeli:
url='https://api.syosetu.com/novelapi/api/?out=json&of=t-w-r-a-ah-bg-g-ka&ncode='+n['ncode']
#Obtenez de nouvelles informations de ncode
detail = dict()
res = requests.get(url)
text = json.loads(res.text)
i=zeli.index(n)
#Une belle barre de chargement trouvée sur le net
bar_template = "\r[{0}] {1}/{2} {3}"
x = math.ceil(l/30)
p = math.ceil(((l-i)/x))
#Réglage pour empêcher la barre de s'effondrer(Sans cela, il sera saccadé tous les multiples de 10.)
if(p+i/x < 30):p = p + 1
elif (p+i/x > 30):p = p - 1
if(i!=l):com='Chargement'
else:com='Chargement terminé'
bar = "#" * math.ceil(i/x) + " " * p
print(bar_template.format(bar,i,l,com), end="")
if(text[0]['allcount']==0):
errors.append('Error:Ncode='+n['ncode'])
else:
text=text[1]
detail['Nombre de personnes à évaluer']=text['all_hyoka_cnt']
detail['Note moyenne']=math.ceil(text['all_point']*10000/text['all_hyoka_cnt'])/1000
detail['Titre du travail']=text['title']
detail['Nombre d'avis']=text['review_cnt']
detail['Taux de conversation']=text['kaiwaritu']
detail['Grand genre']=bg[text['biggenre']]
detail['Petit genre']=gg[text['genre']]
all_data.append(detail)
c = c + 1
#if c == 10:
#return all_data
for error in errors:
print('\n'+error)
#Il crache ncode qui était une erreur de lecture car il a été supprimé
return all_data
def main():
sources = getdata()
l = len(sources)
sources = uni(sources)
ex = 0
lr = []
l0 = []
l1 = [] #Numéro d'évaluation de 1000 ou plus
l2 = []
l3 = []
l4 = []
l5 = []
console.clear()
#Console claire de pythonista3
for data in sources:
if(data['Nombre de personnes à évaluer'] < 500):
#Exclut moins de 500 évaluations(Pour éviter les biais tels que 10 points par une évaluation)
ex = ex + 1
#Mesure du nombre d'exclusion
else:
lr.append(data['Titre du travail']) #Titre du travailリスト
l0.append([data['Titre du travail'], data['Note moyenne']]) #Titre du travailとNote moyenneの関係
l1.append(data['Note moyenne']) #Liste des points d'évaluation
l3.append([data['Titre du travail'], data['Petit genre']]) #Titre du travailとPetit genreの対応
l4.append([data['Titre du travail'], data['Taux de conversation']]) #Titre du travailとTaux de conversationの対応
l5.append([data['Titre du travail'], data['Nombre d'avis']]) #Titre du travailとNombre d'avisの対応
mn = mean(l1) #Points d'évaluation moyens de tous les travaux analysés
sd = stdev(l1) #Écart type du point d'évaluation
k = 0
for x in l1: #Trouvez la valeur d'écart h
h = ((x-mn)*10/sd)+50
l2.append([lr[k],math.ceil(h*100)/100])
k=k+1
d1 = dict(l0) #Nom de l'œuvre et points d'évaluation
d2 = dict(l2) #Nom du travail et valeur d'écart
d3 = dict(l3) #Titre et petit genre
d4 = dict(l4) #Titre du travail et taux de conversation
d5 = dict(l5) #Titre des travaux et nombre de revues
d1_sorted = sorted(d1.items(), key=lambda x:x[1], reverse=True) #Trier les points d'évaluation par ordre de classement
d2_sorted = sorted(d2.items(), key=lambda x:x[1], reverse=True) #Trier les valeurs d'écart
w = 0
print('Nombre total de données:'+str(l))
print('Nombre de cas non évalués(Numéro d'évaluation inférieur à 500):'+str(ex))
print('Nombre de données nettes sans duplication:{}'.format(len(sources)))
print('Note moyenne:'+str(math.ceil(mn*10000)/10000))
for y in d1_sorted:
print('##'+str(w+1)+'Rang\n###『'+y[0]+'』\n genre:'+d3[y[0]]+'\n Points d'évaluation:'+str(y[1])+'\n Valeur de l'écart d'évaluation:'+str(d2_sorted[w][1])+'\n Taux de conversation des phrases:'+str(d4[y[0]])+'%\n Nombre d'avis:'+str(d5[y[0]]))
#La note d'évaluation moyenne est de 100 points
w = w + 1 #Découvrez quelle valeur
if __name__ == '__main__':
main()
#Si vous souhaitez rechercher un roman, veuillez rechercher avec un autre éditeur
Le top 10 des œuvres qui semblaient intéressantes (note moyenne élevée) était le suivant.
Au fait, mon préféré est Rebuild World.
Il y avait des œuvres que je ne connaissais pas du tout, je vais donc les lire.
1ère place "Amoureux des livres Shimojo-je ne peux pas choisir le moyen de devenir commis-"
2ème place "Matière qui a été rendue un humain inutile par l'ange d'à côté"
3e place "Shangri-La Frontier-Fucking Game Hunter, essayant de défier le jeu de Dieu-"
4ème place "Holy Cup of Ellis"
5ème place "Rebuild World"
6e place "Le fantôme du deuil veut prendre sa retraite - Le chasseur le plus faible rêve d'un héros - [Version Web]"
7e place "À la suite d'un mariage déguisé avec un collègue otaku, chaque jour est très amusant! 』\
8e place "Rosa, le noble veut veiller sur l'amour de l'ombre"
9ème place "Le roi des morts dans le palais des morts [version Web]"
10e place "Diacre de la fille méchante-Elle que j'ai élevée est très mignonne- (version sérialisée)"
Les résultats détaillés sont ici