Ganz für mich. Erstens kenne ich das Markdown-Format nicht, deshalb zeige ich es nicht den Leuten. Wenn Sie nur das Ergebnis wissen möchten, hier
Funktioniert das Ranking von Naruro nicht zuverlässig? → Ich möchte interessante Werke kennenlernen! !! → Rangfolge aus monatlicher und vierteljährlicher Rangliste basierend auf der durchschnittlichen Bewertungspunktzahl
→ Arbeiten mit einer Bewertung von 500 oder weniger können voreingenommen sein (das Gesetz der großen Zahlen), deshalb habe ich sie ausgeschlossen, obwohl es schlecht ist! Da der Abweichungswert auch zu den Bewertungspunkten addiert wird, sind die Arbeiten, die interessant erscheinen, offensichtlich! Du hast es geschafft!
Klicken Sie hier für den Code! Ich habe alles in Pythonista auf dem iPhone geschrieben! Ich bin ein Schüler und vergebe mir für schmutzige Codes!
Ich habe es mit dem Schwung chaotisch gemacht, und selbst wenn ich einen Fehler mache, kann es den Menschen nicht gezeigt werden.
import requests,json,datetime,math
import console #Vielleicht eine Pythonista-Bibliothek?
from statistics import mean,stdev
#from time import sleep(Zum Debuggen)
#from pprint import pprint(Zum Debuggen)
today = datetime.date.today().strftime('%Y%m%d')
bg = {
1: 'Liebe',
2: 'Fantasie',
3: 'Literarische Kunst',
4: 'SF',
99: 'Andere',
98: 'Nicht-Genre'
}
gg = {
101: 'Eine andere Welt [Liebe]',
102: 'Reale Welt [Liebe]',
201: 'Hohe Fantasie [Fantasie]',
202: 'Geringe Fantasie [Fantasie]',
301: 'Reine Literatur [Literatur]',
302: 'Menschliches Drama [literarische Kunst]',
303: 'Geschichte [Literatur]',
304: 'Argumentation [Literatur]',
305: 'Horror [literarische Kunst]',
306: 'Aktion [Literatur]',
307: 'Komödie [Literatur]',
401: 'VR-Spiel [SF]',
402: 'Raum [SF]',
403: 'Phantasie Wissenschaft [SF]',
404: 'Panik [SF]',
9901: 'Kindergeschichte [Andere]',
9902: 'Poesie [Andere]',
9903: 'Essay [Andere]',
9904: 'Wiedergabe [Andere]',
9999: 'Andere andere]',
9801: 'Nicht-Genre [Nicht-Genre]'
}
def uni(seq):
seen = []
return [x for x in seq if x not in seen and not seen.append(x)]
#Erhalten Sie monatliche Ranking-Informationen
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.Lesen Sie den Typ, den Sie zu txt hinzugefügt haben
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)))#Vermeiden Sie Doppelarbeit mit leeren Daten und kehren Sie zurück
#Übergeben Sie den Ncode Ihres Lieblingsromanes und eine Datei für zusätzliche Daten(narrow.txt)Schreiben Sie an
def add_data(ncode):
with open('narrow.txt', mode='a') as f:
f.write(ncode+'\n')
print('success')
def getdata():
c = 0
#Analyse aus dem vierteljährlichen Ranking
u1 = 'https://api.syosetu.com/rank/rankget/?&out=json&rtype='+today[:6]+'01-q'
zen = requests.get(u1)
zeli = json.loads(zen.text)
#Erhalten Sie vierteljährlich neuartige Informationen
add_list = otherlist()
#Hinzufügen von monatlichen Ranking-Daten
for i in get_add_data():
#Weiter schmal.Fügen Sie in txt geschriebenen ncode hinzu
add_list = add_list +[dict(ncode=i)]
for a in add_list:
zeli.append(a)
#Zu diesem Zeitpunkt hat Zeli ein Viertel,Monatliches Ranking+narrow.Enthält zusätzliche Daten für 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']
#Holen Sie sich neuartige Informationen von ncode
detail = dict()
res = requests.get(url)
text = json.loads(res.text)
i=zeli.index(n)
#Eine schöne Ladestange im Netz
bar_template = "\r[{0}] {1}/{2} {3}"
x = math.ceil(l/30)
p = math.ceil(((l-i)/x))
#Einstellung, um ein Zusammenfallen der Stange zu verhindern(Ohne dies wird es jedes Vielfache von 10 ruckeln.)
if(p+i/x < 30):p = p + 1
elif (p+i/x > 30):p = p - 1
if(i!=l):com='Wird geladen'
else:com='Laden abgeschlossen'
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['Anzahl der zu bewertenden Personen']=text['all_hyoka_cnt']
detail['Durchschnittliche Bewertung']=math.ceil(text['all_point']*10000/text['all_hyoka_cnt'])/1000
detail['Titel der Arbeit']=text['title']
detail['Anzahl der Bewertungen']=text['review_cnt']
detail['Gesprächsrate']=text['kaiwaritu']
detail['Großes Genre']=bg[text['biggenre']]
detail['Kleines Genre']=gg[text['genre']]
all_data.append(detail)
c = c + 1
#if c == 10:
#return all_data
for error in errors:
print('\n'+error)
#Es spuckt ncode aus, was ein Lesefehler war, weil es gelöscht wurde
return all_data
def main():
sources = getdata()
l = len(sources)
sources = uni(sources)
ex = 0
lr = []
l0 = []
l1 = [] #Bewertungsnummer von 1000 oder mehr
l2 = []
l3 = []
l4 = []
l5 = []
console.clear()
#Löschen Sie die Konsole von pythonista3
for data in sources:
if(data['Anzahl der zu bewertenden Personen'] < 500):
#Schließt weniger als 500 Bewertungen aus(Um Verzerrungen wie 10 Punkte durch eine Bewertung zu vermeiden)
ex = ex + 1
#Messung der Ausschlussnummer
else:
lr.append(data['Titel der Arbeit']) #Titel der Arbeitリスト
l0.append([data['Titel der Arbeit'], data['Durchschnittliche Bewertung']]) #Titel der ArbeitとDurchschnittliche Bewertungの関係
l1.append(data['Durchschnittliche Bewertung']) #Bewertungspunktliste
l3.append([data['Titel der Arbeit'], data['Kleines Genre']]) #Titel der ArbeitとKleines Genreの対応
l4.append([data['Titel der Arbeit'], data['Gesprächsrate']]) #Titel der ArbeitとGesprächsrateの対応
l5.append([data['Titel der Arbeit'], data['Anzahl der Bewertungen']]) #Titel der ArbeitとAnzahl der Bewertungenの対応
mn = mean(l1) #Durchschnittliche Bewertungspunkte aller analysierten Arbeiten
sd = stdev(l1) #Bewertungspunkt Standardabweichung
k = 0
for x in l1: #Finden Sie den Abweichungswert h
h = ((x-mn)*10/sd)+50
l2.append([lr[k],math.ceil(h*100)/100])
k=k+1
d1 = dict(l0) #Arbeitsname und Bewertungspunkte
d2 = dict(l2) #Arbeitsname und Abweichungswert
d3 = dict(l3) #Titel und kleines Genre
d4 = dict(l4) #Titel der Arbeit und Gesprächsrate
d5 = dict(l5) #Titel der Arbeit und Anzahl der Bewertungen
d1_sorted = sorted(d1.items(), key=lambda x:x[1], reverse=True) #Sortieren Sie die Bewertungspunkte nach Rang
d2_sorted = sorted(d2.items(), key=lambda x:x[1], reverse=True) #Abweichungswerte sortieren
w = 0
print('Gesamtzahl der Daten:'+str(l))
print('Anzahl der nicht bewerteten Fälle(Bewertungsnummer weniger als 500):'+str(ex))
print('Anzahl der Nettodaten ohne Duplizierung:{}'.format(len(sources)))
print('Durchschnittliche Bewertung:'+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 Bewertungspunkte:'+str(y[1])+'\n Wert der Bewertungsabweichung:'+str(d2_sorted[w][1])+'\n Satzgesprächsrate:'+str(d4[y[0]])+'%\n Anzahl der Bewertungen:'+str(d5[y[0]]))
#Die durchschnittliche Bewertungspunktzahl beträgt 100 Punkte
w = w + 1 #Finden Sie heraus, welchen Wert
if __name__ == '__main__':
main()
#Wenn Sie nach einem Roman suchen möchten, suchen Sie bitte mit einem anderen Herausgeber
Die Top 10 Werke, die interessant zu sein schienen (hohe Durchschnittsbewertung), waren wie folgt.
Mein Favorit ist übrigens Rebuild World.
Es gab einige Werke, die ich überhaupt nicht kannte, also werde ich sie lesen.
Platz "Buchliebhaber Shimojo - ich kann nicht die Mittel wählen, um Angestellter zu werden -"
Platz "Angelegenheiten, die vom Engel nebenan unbrauchbar gemacht wurden"
Platz "Shangri-La Frontier-Fucking Game Hunter, der versucht, Gott Game- herauszufordern-"
Platz "Holy Cup of Ellis"
Platz "Rebuild World"
Platz "Der Geist der Trauer will sich zurückziehen - Der schwächste Jäger träumt von einem Helden - [Webversion]"
Platz "Durch die verschleierte Ehe mit einem Otaku-Kollegen macht jeder Tag viel Spaß! 』\
Platz "Rosa, der Adlige will aus den Schatten über die Liebe wachen"
Platz "König der Toten im Palast der Toten [Webversion]"
Platz "Diakon der Bösewichtstochter - Sie, die ich großgezogen habe, ist sehr süß - (serialisierte Version)"
Detaillierte Ergebnisse finden Sie hier [https://qiita.com/jjns/items/efd573d43a9c1ede8727)
Recommended Posts