Wer als letztes antwortet kriegt viel mehr als nur 128 Dias

@Fscript Ich brauche Hilfe :(. Die Funktion, die über alle Posts iteriert wird von Iteration zu Iteration langsamer, obwohl sie unter 200MB Ram verbraucht und auch nur 12% CPU Leistung.
Edit: Ich weiß natürlich, dass das Script nur auf einem Kern läuft, was die CPU Auslastung erklärt.

Code:
Processing uw_stats\.html_content\page_0001.html
0.006998538970947266
0.002943754196166992
0.004000425338745117
0.0039980411529541016
0.0030014514923095703
0.00500035285949707
0.004004001617431641
0.004994630813598633
0.004004478454589844
0.0049953460693359375
0.005000591278076172
0.003999948501586914
0.00500035285949707
0.003998994827270508
0.0049974918365478516
0.006000995635986328
0.0049991607666015625
0.006000041961669922
0.0060956478118896484
0.005991458892822266
Processing uw_stats\.html_content\page_0002.html
0.005001544952392578
0.0060007572174072266
0.004999399185180664
0.005998849868774414
0.007001399993896484
0.00600123405456543
0.0069980621337890625
0.00700068473815918
0.009998559951782227
0.008001565933227539
0.006999015808105469
0.006999015808105469
0.006997823715209961
0.007001399993896484
0.0070002079010009766
0.00700068473815918
0.007998943328857422
0.00800013542175293
0.007999897003173828
0.00800013542175293
Processing uw_stats\.html_content\page_0003.html
0.007000446319580078
0.008000612258911133
0.008999347686767578
0.008000612258911133
0.007999420166015625
0.008999347686767578
0.008001327514648438
0.008997678756713867
0.008000373840332031
0.00893712043762207
0.009002208709716797
0.00807809829711914
0.009924888610839844
0.009999275207519531
0.010001182556152344
0.008997201919555664
0.010002851486206055
0.00899958610534668
0.009001016616821289
0.010006189346313477
Processing uw_stats\.html_content\page_0004.html
0.009981393814086914
0.009961843490600586
0.009999990463256836
0.010999679565429688
0.010003805160522461
0.009999275207519531
0.010998725891113281
0.011003971099853516
0.010997533798217773
0.010998010635375977
0.011002063751220703
0.011000871658325195
0.01199793815612793
0.014001607894897461
0.012999773025512695
0.012999773025512695
0.012003421783447266
0.010996818542480469
0.01111912727355957
0.012880802154541016
Processing uw_stats\.html_content\page_0005.html
0.01000070571899414
0.011999130249023438
0.012001276016235352
0.014030694961547852
0.012971162796020508
0.013000726699829102
0.014835119247436523
0.01500082015991211
0.01500082015991211
0.012997150421142578
0.014002084732055664
0.012999773025512695
0.012999296188354492
0.01400303840637207
0.013998746871948242
0.014001607894897461
0.022001028060913086
0.01599884033203125
0.015000104904174805
0.014000415802001953
Processing uw_stats\.html_content\page_0006.html
0.012989997863769531
0.015999317169189453
0.015002012252807617
0.015996694564819336
0.0149993896484375
0.014999866485595703
0.015001535415649414
0.015000104904174805
0.015000343322753906
0.02199864387512207
0.018006324768066406
0.01599574089050293
0.016999483108520508
0.016000986099243164
0.015998125076293945
0.020001888275146484
0.016002655029296875
0.017996788024902344
0.018000125885009766
0.01668524742126465
Processing uw_stats\.html_content\page_0007.html
0.015004158020019531
0.016957759857177734
0.027009248733520508
0.016962766647338867
0.01799774169921875
0.015977859497070312
0.017003774642944336
0.017000913619995117
0.018000125885009766
0.024997711181640625
0.01797008514404297
0.017000913619995117
0.01699972152709961
0.01798868179321289
0.019993066787719727
0.01799917221069336
0.02700042724609375
0.019000530242919922
0.01896214485168457
0.018998384475708008
Processing uw_stats\.html_content\page_0008.html
0.01797342300415039
0.01899886131286621
0.018999338150024414
0.020000934600830078
0.019999027252197266
0.01799774169921875
0.020002126693725586
0.023561477661132812
0.022028207778930664
0.020973920822143555
0.021996021270751953
0.021001577377319336
0.020999670028686523
0.024000883102416992
0.046001434326171875
0.029996633529663086
0.023000240325927734
0.024001598358154297
0.024001121520996094
0.0240018367767334
Processing uw_stats\.html_content\page_0009.html
0.020000934600830078
0.023000717163085938
0.023000717163085938
0.021998167037963867
0.022001266479492188
0.02200007438659668
0.02299809455871582
0.023000717163085938
0.025999069213867188
0.023000717163085938
0.02399921417236328
0.02400040626525879
0.024000167846679688
0.02499985694885254
0.024999618530273438
0.02300095558166504
0.02499985694885254
0.02499866485595703
0.023999691009521484
0.027002573013305664
Processing uw_stats\.html_content\page_0010.html
0.022999048233032227
0.025000333786010742
0.02604055404663086
0.024959325790405273
0.02395009994506836
0.02400040626525879
0.024003982543945312
0.02899646759033203
0.024997234344482422
0.025002479553222656
0.02399897575378418
0.02802729606628418
0.031000852584838867
0.02599954605102539
0.025000572204589844
0.02599954605102539
0.025000810623168945
0.026999711990356445
0.02893853187561035
0.02699899673461914
Processing uw_stats\.html_content\page_0011.html
0.029999494552612305
0.028001070022583008
0.02799844741821289
0.027999162673950195
0.031002044677734375
0.031998395919799805
0.027997732162475586
0.027002811431884766
0.02700328826904297
0.02699732780456543
0.027998924255371094
0.02500128746032715
0.02599930763244629
0.02599644660949707
0.026999711990356445
0.029000520706176758
0.02700042724609375
0.028140544891357422
0.02885723114013672
0.027000904083251953
Processing uw_stats\.html_content\page_0012.html
0.027000904083251953
0.029999256134033203
0.026999711990356445
0.0280001163482666
0.0279998779296875
0.02800130844116211
0.029999971389770508
0.026999711990356445
0.028002500534057617
0.027997493743896484
0.02900242805480957
0.03599882125854492
0.028002262115478516
0.029999971389770508
0.02900075912475586
0.029999256134033203
0.030031442642211914
0.030971050262451172
0.0299990177154541
0.0319974422454834
Processing uw_stats\.html_content\page_0013.html
0.03199887275695801
0.032001495361328125
0.03300070762634277
0.032006263732910156
0.03099989891052246
0.03200173377990723
0.03300023078918457
0.029039621353149414
0.03000473976135254
0.030956745147705078
0.030997037887573242
0.03200030326843262
0.030039310455322266
0.03000354766845703
0.030040264129638672
0.031986236572265625
0.0340118408203125
0.028959989547729492
0.030045509338378906
0.03195309638977051
Processing uw_stats\.html_content\page_0014.html
0.03200030326843262
0.03500056266784668
0.03799796104431152
0.034002065658569336
0.03499746322631836
0.03600287437438965
0.03599882125854492
0.03399944305419922
0.036000967025756836
0.03599882125854492
0.0360410213470459
0.03200078010559082
0.03103041648864746
0.033988237380981445
0.03600931167602539
0.032999515533447266
0.03200340270996094
0.0360417366027832
0.0410006046295166
0.03199958801269531
Processing uw_stats\.html_content\page_0015.html
0.03200888633728027
0.0340273380279541
0.03398609161376953
0.03400111198425293
0.03600931167602539
0.03303980827331543
0.0350189208984375
0.03495979309082031
0.04102897644042969
0.03401017189025879
0.035001277923583984
0.03298759460449219
0.03601551055908203
0.03304243087768555
0.03403973579406738
0.03499865531921387
0.03800177574157715
0.0350031852722168
0.03499889373779297
0.03598523139953613
Processing uw_stats\.html_content\page_0016.html
0.03200054168701172
0.04002833366394043
0.03701043128967285
0.03600621223449707
0.03595471382141113
0.04203152656555176
0.03599667549133301
0.03500938415527344
0.036005496978759766
0.03898453712463379
0.03701066970825195
0.036004066467285156
0.037039995193481445
0.03998994827270508
0.0360262393951416
0.03600287437438965
0.03702902793884277
0.04101157188415527
0.03658294677734375
0.037999868392944336
Processing uw_stats\.html_content\page_0017.html
0.0360107421875
0.03598833084106445
0.05011296272277832
0.03899979591369629
0.037352800369262695
0.04191780090332031
0.0391690731048584
0.03700089454650879
0.03699302673339844
0.0420069694519043
0.03800082206726074
0.0380406379699707
0.03897356986999512
0.0390169620513916
0.0380396842956543
0.03999948501586914
0.04296135902404785
0.0400393009185791
0.04000067710876465
0.049988508224487305
Processing uw_stats\.html_content\page_0018.html
0.039006710052490234
0.03999924659729004
0.039000511169433594
0.053003787994384766
0.03899335861206055
0.0410003662109375
0.043946266174316406
0.04000043869018555
0.040038108825683594
0.04099011421203613
0.042040109634399414
0.03998589515686035
0.04100990295410156
0.051039695739746094
0.039994001388549805
0.03898954391479492
0.04797077178955078
0.04304242134094238
0.040997982025146484
0.04196286201477051
Processing uw_stats\.html_content\page_0019.html
0.03998851776123047
0.042969703674316406
0.0400395393371582
0.04198813438415527
0.04397153854370117
0.04403996467590332
0.040999650955200195
0.0449674129486084
0.048041343688964844
0.043956756591796875
0.04403495788574219
0.0460052490234375
0.04300093650817871
0.0429995059967041
0.05699944496154785
0.04199028015136719
0.04198718070983887
0.045035600662231445
0.04400038719177246
0.04400205612182617
Processing uw_stats\.html_content\page_0020.html
0.04000377655029297
0.04695844650268555
0.044037818908691406
0.04300737380981445
0.04500102996826172
0.04503750801086426
0.043004512786865234
0.044986724853515625
0.05202054977416992
0.042992591857910156
0.055021047592163086
0.0450291633605957
0.04399752616882324
0.0479731559753418
0.04504108428955078
0.044998884201049805
0.04496264457702637
0.046998023986816406
0.0449976921081543
0.05096316337585449
Processing uw_stats\.html_content\page_0021.html
0.04200291633605957
0.04899764060974121
0.046000003814697266
0.04499363899230957
0.052039384841918945
0.04500842094421387
0.045001983642578125
0.049948930740356445
0.04804039001464844
0.046003103256225586
0.05599379539489746
0.04600334167480469
0.046002864837646484
0.05100059509277344
0.04599571228027344
0.047003984451293945
0.049015045166015625
0.04600262641906738
0.04698801040649414
0.052027225494384766
Processing uw_stats\.html_content\page_0022.html
0.04899454116821289
0.045984506607055664
0.04602694511413574
0.051000356674194336
0.04700446128845215
0.04603838920593262
0.062004804611206055
0.05000042915344238
0.04899311065673828
0.05001330375671387
0.04799699783325195
0.08300113677978516
0.04803657531738281
0.04797792434692383
0.050002098083496094
0.0480043888092041
0.05199551582336426
0.053040266036987305

Du bist jetzt übrigens mein persönlicher CodeGPT.

Python:
def construct_dataframe(path: str | Path) -> pd.DataFrame:
    """Constructs a dataframe pagewise from HTML files.
    This could eventually be split up into multiple functions or a class.

    Args:
        path (str | Path): The path containing the HTML files.

    Returns:
        pd.DataFrame: The newly created dataframe.
    """
    df = pd.DataFrame(
        columns=(
            "raw",
            "author",
            "content",
            "like_count",
            "quote_count",
            "quoted_list",
            "spoiler_count",
            "mentions_count",
            "mentioned_list",
            "word_count",
            "emoji_count",
            "emoji_frequency_mapping",
        )
    )

    for file in sorted(
        Path(path).iterdir(), key=lambda s: re.findall(r"\d+", s.name)[0]
    ):
        if file.is_dir():
            continue
        print("Processing", file)
        soup = bs4.BeautifulSoup(file.read_text("utf-8"))
        import time

        for message in find_all_messages(soup):
            start = time.time()  # Timings
            raw = str(message)
            author = message["data-author"]
            content = find_message_content(message)
            insert_dot_before_last_emoji(content)
            like_count = get_amount_of_likes(message)
            quote_count = get_amount_of_quotes(message)
            quoted_list = get_list_of_quoted_usernames(message)
            spoiler_count = get_amount_of_spoilers(message)
            mentioned_list = get_list_of_mentioned_usernames(message)
            mentions_count = len(mentioned_list)
            word_count = get_amount_of_words(message)
            emoji_frequency_mapping = (
                get_mapping_of_emojis_and_frequency(message))
            emoji_count = len(emoji_frequency_mapping)
            message_series = pd.Series(
                data=(
                    raw,
                    author,
                    content,
                    like_count,
                    quote_count,
                    quoted_list,
                    spoiler_count,
                    mentions_count,
                    mentioned_list,
                    word_count,
                    emoji_count,
                    emoji_frequency_mapping,
                )
            )
            df = pd.concat([df, message_series])
            print(time.time() - start)  # Timings

    return df
Die einzelnen get_* funktionen brauchen alle ungefähr gleich lang (am Anfang sogar 0.000000), nur der Series constructor und pd.concat dauert etwas länger.

Weißt du wieso bzw. wie hast du das gelöst?
 
Zuletzt bearbeitet:
Schau dir das mal mit meiner my_profiling Funktion an. Den Dump kannst du mit snakeviz visualisieren. Screenshot?

EDIT: Wie sieht die find_all_messages() aus?
EDIT2: Die Zeile df = pd.concat([df, message_series]) erzeugt glaube ich jedes mal eine Kopie. Sinnvoller wäre df.append(message_series) (bin mir mit der syntax da nicht ganz sicher) zu verwenden.
Edit3: Aus dem Hanbuch-Eintrag zu pandas.concat(): "It is not recommended to build DataFrames by adding single rows in a for loop. Build a list of rows and make a DataFrame in a single concat."
Edit4:
Edit: Ich weiß natürlich, dass das Script nur auf einem Kern läuft, was die CPU Auslastung erklärt.
Das ist relativ egal. Wenn du Multithreading brauchst, hast du entweder ineffizienten Code, oder einen riesen Datensatz (oder beides). Bei großen Datensätzen lässt du ein script oft lieber mehrfach parallel laufen als Multithreading zu implementieren. Letzteres ist in der Wissenschaft oft so.
Edit5: Mein script läuft für 717 Seiten unter 5 Minuten, was ganz okay ist. Alles singelthreading und kein async. Ich weiß was ich optimieren könnte, aber eigentlich ist es mir in dem Fall egal. :)
 
Zuletzt bearbeitet:
Schau dir das mal mit meiner my_profiling Funktion an. Den Dump kannst du mit snakeviz visualisieren. Screenshot?

EDIT: Wie sieht die find_all_messages() aus?
EDIT2: Die Zeile df = pd.concat([df, message_series]) erzeugt glaube ich jedes mal eine Kopie. Sinnvoller wäre df.append(message_series) (bin mir mit der syntax da nicht ganz sicher) zu verwenden.
Edit3: Aus dem Hanbuch-Eintrag zu pandas.concat(): "It is not recommended to build DataFrames by adding single rows in a for loop. Build a list of rows and make a DataFrame in a single concat."
Edit4: Das ist relativ egal. Wenn du Multithreading brauchst, hast du entweder ineffizienten Code, oder einen riesen Datensatz (oder beides). Bei großen Datensätzen lässt du ein script oft lieber mehrfach parallel laufen als Multithreading zu implementieren. Letzteres ist in der Wissenschaft oft so.
Edit5: Mein script läuft für 717 Seiten unter 5 Minuten, was ganz okay ist. Alles singelthreading und kein async. Ich weiß was ich optimieren könnte, aber eigentlich ist es mir in dem Fall egal. :)
Ich find Programmieren eigentlich eine sehr nette Sache, wie fängt man denn da am Besten an, wenn man das Lernen möchte?
 
Nimm am besten die schwerste Programmiersprache. Was genau würdest du denn eigentlich programmieren wollen? Das wäre dafür wichtig für welche Programmiersprache man sich entscheidet.
 
Für den Anfang sind Java, Javascript und Python ganz nett, je nachdem was du machen willst.

Schau dir das mal mit meiner my_profiling Funktion an. Den Dump kannst du mit snakeviz visualisieren. Screenshot?

EDIT: Wie sieht die find_all_messages() aus?
EDIT2: Die Zeile df = pd.concat([df, message_series]) erzeugt glaube ich jedes mal eine Kopie. Sinnvoller wäre df.append(message_series) (bin mir mit der syntax da nicht ganz sicher) zu verwenden.
Edit3: Aus dem Hanbuch-Eintrag zu pandas.concat(): "It is not recommended to build DataFrames by adding single rows in a for loop. Build a list of rows and make a DataFrame in a single concat."
Edit4: Das ist relativ egal. Wenn du Multithreading brauchst, hast du entweder ineffizienten Code, oder einen riesen Datensatz (oder beides). Bei großen Datensätzen lässt du ein script oft lieber mehrfach parallel laufen als Multithreading zu implementieren. Letzteres ist in der Wissenschaft oft so.
Edit5: Mein script läuft für 717 Seiten unter 5 Minuten, was ganz okay ist. Alles singelthreading und kein async. Ich weiß was ich optimieren könnte, aber eigentlich ist es mir in dem Fall egal. :)
Zu edit1: Nur ein Aufruf zur find_all methode mit tag `article` und class `message`.

Zu edit2 und 3: Du hast recht, .append wurde allerdings entfernt. Dann werde da mal eine liste von Series machen.

Profiling und Snakeviz mach ich dann später mal.
 
  • Gefällt mir
Wertungen: paulisttot

Benutzer, die dieses Thema gerade lesen

ONLINE 14 Spieler