python jupyter notebook Meisterschaft zur Datenvorverarbeitung (Zielort: große Kamera)

Dinge die zu tun sind

Ich werde so etwas tun. Dieses Mal werden wir "3, Datenvorverarbeitung" durchführen. [Grundlagen der Datenanalyse] 1, Datenerfassung (Scraping) 2, Datenspeicherung 3, Datenvorverarbeitung 4, Datenvisualisierung und -betrachtung 5, Schlussfolgerungen und Maßnahmen für Daten

Das letzte Mal war übrigens "1, Datenerfassung (Scraping)". Vorheriger Artikel Link für Personen, die das Video sehen möchten

Die Vorverarbeitung wird unter Verwendung der Daten durchgeführt, die durch das obige Scraping gesammelt wurden. Wenn Sie es nicht gelesen haben, ist es schwierig, den Ablauf zu verstehen. Ich hoffe, Sie können den vorherigen Artikel grob lesen.

Erstellungshintergrund

Selbst wenn Sie nach "Python-Datenvorverarbeitung" suchen, handelt es sich bei allen um dieselben Titanic- und andere Scikit-Lerndaten. Es war langweilig, also wollte ich eine Datenvorverarbeitung durchführen, die niemand mit Daten machte, die niemand machte.

Umgebung

Erforderliche Fähigkeiten und Umgebung

1, beobachten Sie die Daten

■ Lesen Sie zuerst die CSV-Datei als Pandas-Datenrahmen.

Nun, ich habe die Daten selbst erhalten, daher ist der Inhalt einfach.

python


import pandas as pd
df = pd.read_csv("biccamera_all_laptop.csv")
df.head()

スクリーンショット 2019-11-09 20.09.01.png

■ Ermitteln Sie die Anzahl der Zeilen, überprüfen Sie den Spaltennamen und die Anzahl der Nullen

Normalerweise weiß ich es erst, wenn ich mir die Daten anschaue, aber Wai verarbeitet im Voraus, dass die Anzahl der Nullen Null ist.

python


#Holen Sie sich die Anzahl der Zeilen
print(len(df))
#Überprüfen Sie den Spaltennamen
print(df.columns)
#Überprüfen Sie die Anzahl der Nullen
print(df.isnull().sum())

スクリーンショット 2019-11-09 20.10.02.png

■ Überprüfen Sie die Datenrahmeninformationen und zählen Sie eindeutige Nummern für jede Spalte

Ich kenne auch info ().
Bei Betrachtung der eindeutigen Zahlen überschneiden sich die Titel jedoch nicht geringfügig.
Es gibt 30 Hersteller und die Anzahl der Preise und Punkte ist unterschiedlich.
Ich habe den Punkt im Voraus gesehen und es war "Punkt (10%)", also
Ich dachte, es wären 10% des Preises, aber ich frage mich, ob es anders ist Ich dachte.

python


#Überprüfen Sie die Datenrahmeninformationen
print(df.info())
#Zählen Sie die Anzahl der Unikate pro Spalte
print(df.nunique())

スクリーンショット 2019-11-09 20.15.28.png

■ Probieren Sie verschiedene value_counts () aus

Nun, ist es so?
Ich sage nicht viel (lacht)

python


#Lieferdatum
print(df.terms.value_counts())
#Lagerinformationen
print(df.stock.value_counts())
#Herstellername
print(df.maker.value_counts())

2, extrahieren Sie notwendige Daten

■ Der Titel ist verdächtig, schauen Sie also mal rein

python


for t in df.title:
    print(t)
    print(len(t))
    print("*" * 100)

スクリーンショット 2019-11-09 20.25.17.png

■ Da es sich um eine Mischung aus voller und halber Breite handelt, habe ich eine Funktion zum Vereinheitlichen erstellt

Eine Funktion, mit der Katakana in halber Breite und alphanumerische Zeichen in voller Breite halbiert werden.
Ich benutze es oft persönlich.

python


import re
import jctconv

def han2zen2han(string):
    """
Machen Sie Katakana in halber Breite in voller Breite,
Machen Sie alphanumerische Zeichen in voller Breite zur halben Breite
    :param string: string text
    :return: string text
    """
    string = jctconv.h2z(string, kana=True, digit=False, ascii=False)
    string = jctconv.z2h(string, kana=False, digit=True, ascii=True)
    return string

■ Holen Sie sich eine Liste wie [XXXX / XXXX /] aus dem Titel.

Holen Sie sich alle [] einmal mit dem regulären Ausdruck r "\ [. +? ]".
Einige Muster haben mehrere [] im Titel.
Nehmen Sie also die Bildschirmgröße des Notebooks mit einem regulären Ausdruck.
Einige [] haben eine Größe, andere nicht.

python


#Versuchen Sie es mit Serie zu bekommen
df.title.apply(get_spec_list)
#Nehmen Sie eine heraus und überprüfen Sie sie
df.title.apply(get_spec_list)[0]

スクリーンショット 2019-11-09 20.30.53.png

Die Funktion ist unten.

python


def get_spec_list(title):
    """
    spec_list =Aus dem Produkttitel[]Mit dem Inhalt extrahieren
    inch_list =Extrahieren Sie den PC-Bildschirm-Zoll-Text aus dem Produkttitel
    l = spec_Geben Sie die aus der Liste extrahierten PC-Spezifikationen erneut in die Liste ein
    :param title: string text
    :return: list
    """
    l = []
    t = han2zen2han(title)
    spec_list = re.findall(r"\[.+?\]", t)
    inch_list = re.findall(r"(\d\d\.\d|\d\d|\d\..|\d)(Zoll|Schimmel)", t)
    inch = "".join(inch_list[0]) if inch_list else ""
    for spec in spec_list:
        specs = spec.replace("[", "").replace("]", "").replace(" ", "").replace("・", "/").replace(":", "").split("/")
        for s in specs:
            l.append(s)
    if inch:
        l.append(inch)
    return list(set(l))

■ Da es schwierig ist, die Schaufel zu schreiben und einzufügen, werde ich mich an diesen Bereich halten.

Bitte versuchen Sie vorerst Folgendes.

python


#Extrahieren Sie die Liste, die den PC-Spezifikationen zugrunde liegt
df["spec_list"] = df.title.apply(get_spec_list)

#CPU-Daten abrufen
df["intel_cpu"] = df.spec_list.apply(get_intelcpu)
df["amd_cpu"] = df.spec_list.apply(lambda x: "".join([i for i in x if re.search(r"amd", i.lower())]))

#Speicherdatenerfassung(int)
df["memory"] = df.spec_list.apply(get_memory)

#HDD-Datenerfassung(int)
df["hdd"] = df.spec_list.apply(get_hdd)

#SSD-Datenerfassung(int)
df["ssd"] = df.spec_list.apply(get_ssd)

#eMMC-Datenerfassung(int)
df["emmc"] = df.spec_list.apply(get_emmc)

#Typ Datenerfassung(float)
df["inch"] = df.spec_list.apply(get_inch)

#Typ Datenerfassung(int)
df["int_inch"] = df.inch.astype("int")

#Erworbener Herstellername(str)
df["new_maker"] = df.maker.apply(get_maker)

#Holen Sie sich den PC-Preis(int)
df["new_price"] = df.price.str.replace(r"\D", "").astype("int")

#Holen Sie sich Punkte beim Kauf eines PCs(int)
df["new_point"] = df.point.str.replace(r"(Punkt|\n).*", "").str.replace(",", "").astype("int")

#PC-Bewertung erhalten(int)
df["new_ratings"] = df.ratings.str.replace(r"\D", "").astype("int")

#Holen Sie sich die Anzahl der Zeichen im PC-Titel(int)
df["string_len"] = df.title.str.len()

#Holen Sie sich die Anzahl der Wörter im PC-Titel(int)
df["words_len"] = df.title.str.split().str.len()

Das Endergebnis wird so sein.

スクリーンショット 2019-11-09 20.34.08.png

Am Ende

Ich habe es als Video eingefügt. Wenn Sie also den Prozessablauf sehen möchten, schauen Sie es sich bitte auf Youtube an.

Videolink

Wenn Sie möchten, dass der Code ausgeführt wird, gehen Sie im obigen Link zu "Datenverarbeitung 02". Die Erklärung ist ziemlich lang, daher wird ein schneller Vorlauf empfohlen.

Recommended Posts

python jupyter notebook Meisterschaft zur Datenvorverarbeitung (Zielort: große Kamera)
3 Jupyter Notebook (Python) Tricks
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
jupyter notebook in python3.8 venv umgebung
<Python> Erstellen Sie einen Server für die Datenanalyse mit Jupyter Notebook
Snippet-Einstellungen für Python Jupyter Notebook
Python-Memo Anaconda x Jupyter-Notizbuch
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Generieren Sie das Jupyter-Notizbuch ".ipynb" in Python
Persönliche Notizen zur Vorverarbeitung von Python Pandas-Daten
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Einfach zu bedienendes Jupyter-Notebook (Python3.5)
Speicherverlust im Python Jupyter Lab (Notebook)?
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen