python jupyter notebook championnat de prétraitement des données (site cible: grande caméra)

Choses à faire

Je vais faire quelque chose comme ça. Cette fois, nous allons faire "3, pré-traitement des données". [Principes de base de l'analyse des données] 1, collecte de données (grattage) 2, stockage de données 3, prétraitement des données 4, visualisation et considération des données 5, Conclusions et mesures pour les données

À propos, la dernière fois était "1, collecte de données (grattage)". Article précédent Lien pour les personnes qui souhaitent voir dans la vidéo

Le prétraitement est effectué à l'aide des données collectées par le grattage ci-dessus. Si vous ne l'avez pas lu, il est difficile de comprendre le flux, j'espère donc que vous pourrez lire l'article précédent en gros.

Contexte de création

Même si vous recherchez "pré-traitement des données python", toutes sont les mêmes données Titanic et autres données scikit-learn. C'était ennuyeux, alors je voulais faire un prétraitement des données que personne ne faisait avec des données que personne ne faisait.

environnement

Compétences et environnement requis

1, observez les données

■ Tout d'abord, lisez le fichier csv comme un bloc de données pandas.

Eh bien, j'ai moi-même les données, donc le contenu est facile.

python


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

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

■ Obtenez le nombre de lignes, vérifiez le nom de la colonne, vérifiez le nombre de valeurs nulles

Normalement, je ne sais pas jusqu'à ce que je regarde les données, mais Wai traite à l'avance que le nombre de valeurs nulles est zéro.

python


#Obtenez le nombre de lignes
print(len(df))
#Vérifiez le nom de la colonne
print(df.columns)
#Vérifiez le nombre de valeurs nulles
print(df.isnull().sum())

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

■ Vérifiez les informations de la trame de données, comptez des nombres uniques pour chaque colonne

Je connais aussi info ().
Cependant, en regardant les numéros uniques, les titres ne se chevauchent pas un peu.
Il y a 30 fabricants, et le nombre de prix et de points est différent.
J'ai regardé le point à l'avance et c'était "point (10%)", alors
Je pensais que c'était 10% du prix, mais je me demande si c'est différent
J'ai pensé.

python


#Vérifier les informations de la trame de données
print(df.info())
#Compter le nombre d'uniques par colonne
print(df.nunique())

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

■ Essayez différents value_counts ()

Eh bien, est-ce que c'est comme ça?
Je ne dis pas grand chose (rires)

python


#Date de livraison
print(df.terms.value_counts())
#Information sur les stocks
print(df.stock.value_counts())
#Nom de fabrication
print(df.maker.value_counts())

2, extraire les données nécessaires

■ Le titre est suspect, alors jetez un œil

python


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

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

■ Comme il s'agit d'un mélange de pleine largeur et demi-largeur, j'ai créé une fonction pour unifier

Une fonction qui rend les caractères alphanumériques Katakana demi-largeur pleine largeur et pleine largeur demi-largeur.
Je l'utilise souvent personnellement.

python


import re
import jctconv

def han2zen2han(string):
    """
Faire des Katakana demi-largeur pleine largeur,
Rendre les caractères alphanumériques pleine largeur en demi-largeur
    :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

■ Obtenez une liste comme [XXXX / XXXX /] à partir du titre.

Obtenez tous [] une fois avec l'expression régulière r "\ [. +? ]".
Certains modèles ont plusieurs [] dans le titre.
Alors, prenez la taille de l'écran du PC portable avec une expression régulière.
Certains [] ont une taille, d'autres pas.

python


#Essayez de l'obtenir avec Series
df.title.apply(get_spec_list)
#Sortez-en un et vérifiez à l'intérieur
df.title.apply(get_spec_list)[0]

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

La fonction est ci-dessous.

python


def get_spec_list(title):
    """
    spec_list =À partir du titre du produit[]Extrait avec le contenu
    inch_list =Extraire le texte en pouces de l'écran du PC du titre du produit
    l = spec_Entrez à nouveau les spécifications PC extraites de la liste dans la liste
    :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)(pouce|Moule)", 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))

■ Parce qu'il est difficile d'écrire et de coller le scoop, je m'en tiendrai à cette zone.

Pour le moment, essayez ce qui suit.

python


#Extraire la liste qui est à la base des spécifications PC
df["spec_list"] = df.title.apply(get_spec_list)

#Obtenir les données du processeur
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())]))

#Acquisition de données de mémoire(int)
df["memory"] = df.spec_list.apply(get_memory)

#Acquisition de données HDD(int)
df["hdd"] = df.spec_list.apply(get_hdd)

#Acquisition de données SSD(int)
df["ssd"] = df.spec_list.apply(get_ssd)

#Acquisition de données eMMC(int)
df["emmc"] = df.spec_list.apply(get_emmc)

#Acquisition de données de type pouces(float)
df["inch"] = df.spec_list.apply(get_inch)

#Acquisition de données de type pouces(int)
df["int_inch"] = df.inch.astype("int")

#Nom du fabricant acquis(str)
df["new_maker"] = df.maker.apply(get_maker)

#Obtenez le prix du PC(int)
df["new_price"] = df.price.str.replace(r"\D", "").astype("int")

#Obtenez des points lors de l'achat d'un PC(int)
df["new_point"] = df.point.str.replace(r"(point|\n).*", "").str.replace(",", "").astype("int")

#Obtenir la classification PC(int)
df["new_ratings"] = df.ratings.str.replace(r"\D", "").astype("int")

#Obtenez le nombre de caractères dans le titre du PC(int)
df["string_len"] = df.title.str.len()

#Obtenez le nombre de mots dans le titre du PC(int)
df["words_len"] = df.title.str.split().str.len()

Le résultat final sera comme ça.

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

À la fin

Je l'ai mis en vidéo, donc si vous voulez voir le déroulement du processus, veuillez le regarder sur youtube.

Lien vidéo

Si vous voulez voir le code en cours d'exécution, allez dans "traitement des données 02" dans le lien ci-dessus. L'explication est assez longue, une avance rapide est donc recommandée.

Recommended Posts

python jupyter notebook championnat de prétraitement des données (site cible: grande caméra)
3 astuces du notebook Jupyter (Python)
L'édition définitive du grattage python! (Site cible: grande caméra)
notebook jupyter dans l'environnement venv python3.8
<Python> Construisez un serveur dédié pour l'analyse des données Jupyter Notebook
Paramètres d'extrait de code pour le notebook jupyter python
Mémo Python Anaconda x Jupyter Notebook
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Générer le notebook Jupyter ".ipynb" en Python
Notes personnelles de prétraitement des données Python Pandas
Modèle de prétraitement pour l'analyse des données (Python)
Bloc-notes Jupyter facile à utiliser (Python3.5)
Fuite de mémoire dans Python Jupyter Lab (Notebook)?
Python: prétraitement en machine learning: acquisition de données
Lier Python et JavaScript avec le notebook Jupyter
Python: prétraitement dans l'apprentissage automatique: conversion de données
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python