[PYTHON] Lösen von Übungen im GCI Data Scientist Training Course Kapitel 7

GCI Data Scientist-Schulungskurs

"GCI Data Scientist Training Course" wird von der Universität Tokio (Matsuo Laboratory) angeboten "* Praktische Daten Der Inhalt des Übungsteils wird im Jupyter NoteBook-Format (CC-BY-NC-ND) im Scientist Training Course und im Deep Learning Course </ u> * "veröffentlicht. Kapitel 7 ist "** Datenvisualisierung mit Matplotlib **". Zusätzlich zu den in Kapitel 2 erlernten Streudiagrammen, Liniendiagrammen und Histogrammen lernen Sie Balkendiagramme, Kreisdiagramme, Blasendiagramme und Kerzendiagramme. Anstelle der Schaltfläche "Gefällt mir" für die wertvollen und wunderbaren Unterrichtsmaterialien, die Sie auf Japanisch lernen können, werde ich die Antworten veröffentlichen, die Sie gelöst haben. Bitte weisen Sie auf Fehler hin.

Das allgemeine Problem am Ende des Kapitels war äußerst schwierig. Ich frage mich, ob ich die Absicht des Problems überhaupt verstehe ...

Kapitel 7 Datenvisualisierung mit Matplotlib

7.1 Datenvisualisierung

7.1.1 Grundlagen der Datenvisualisierung

** <Übung 1> ** Verwenden Sie die Schülerdaten (student-mat.csv), mit denen Sie sich zuvor befasst haben, um den Grund für die Auswahl einer Schule (Grund) grafisch darzustellen und das Verhältnis für jede Schule zu berechnen.

import matplotlib.pyplot as plt
student_data_math = pd.read_csv("student-mat.csv",sep=";")

allCount = len(student_data_math["reason"])
reasonCount = student_data_math["reason"].value_counts()
reasonRatio = reasonCount / allCount
plt.pie(reasonRatio.values, labels=reasonRatio.index, autopct='%1.1f%%', startangle=90, counterclock=False)
plt.axis('equal')

711-1

** <Übung 2> ** Zeigen Sie mit den gleichen Daten wie oben den Durchschnittswert der Abschlussnote G3 jeder Mathematik in einem Balkendiagramm an, zentriert auf höher - ob Sie eine höhere Ausbildung erhalten möchten (binär: ja oder nein). Gibt es etwas, das Sie von hier aus erraten können?

import matplotlib.pyplot as plt
student_data_math = pd.read_csv("student-mat.csv",sep=";")

x = student_data_math["higher"].unique()
y = []
for x_ in x:
    y.append(student_data_math["G3"][student_data_math["higher"] == x_].mean())

plt.bar(x, y)

711-2

** <Übung 3> Zeigen Sie mit den gleichen Daten wie oben den Durchschnittswert der Abschlussnote G3 jeder Mathematik in einem horizontalen Balkendiagramm mit der Laufzeit als Achse an. Kannst du etwas erraten?

import matplotlib.pyplot as plt
student_data_math = pd.read_csv("student-mat.csv",sep=";")

x = student_data_math["traveltime"].unique()
y = []
for x_ in x:
    y.append(student_data_math["G3"][student_data_math["traveltime"] == x_].mean())

plt.barh(x,y)

711-3

7.1.2 Anwendung: Visualisierung von Finanzdaten

7.2 Überlegen wir uns, wie die Analyseergebnisse angezeigt werden

7.2.1 Punkte zum Erstellen von Materialien

7.3 Umfassendes Problem

** 7.3.1 Zeitreihendatenanalyse ** Lassen Sie uns hier Zeitreihendaten mit den Pandas und Scipy behandeln, die wir in diesem Kapitel gelernt haben.

(1) (Erfassung und Bestätigung von Daten) Laden Sie dow_jones_index.zip von der folgenden Site herunter, lesen Sie die Daten mit dow_jones_index.data und zeigen Sie die ersten 5 Zeilen an. Überprüfen Sie auch die Spalteninformationen der einzelnen Daten und prüfen Sie, ob Null vorhanden ist.

https://archive.ics.uci.edu/ml/machine-learning-databases/00312/dow_jones_index.zip

# (1)
# import requests, zipfile
# from io import StringIO
# import io
# zip_file_url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00312/dow_jones_index.zip"
# r = requests.get(zip_file_url, stream=True)
# z = zipfile.ZipFile(io.BytesIO(r.content))
# z.extractall()

data = pd.read_csv("dow_jones_index.data")
data[:5]

731-1

(2) (Verarbeitung von Daten) Daten wie Öffnen, Hoch, Niedrig, Schließen in der Spalte haben ein $ -Zeichen vor der Nummer. Entfernen Sie sie daher. Wenn Datum und Uhrzeit nicht als Datumstyp gelesen werden, konvertieren Sie sie in den Datumstyp.

# (2)
data.open = data.open.str.strip("$").astype(float)
data.high = data.high.str.strip("$").astype(float)
data.low = data.low.str.strip("$").astype(float)
data.close = data.close.str.strip("$").astype(float)
data.date = pd.to_datetime(data.date)
data[:5]

731-2

(3) Berechnen Sie die zusammenfassende Statistik für jeden Bestand für das Schließen der Spalte.

# (3)
data.groupby("stock").close.describe()

731-3

(4) Geben Sie zum Schließen der Spalte eine Korrelationsmatrix aus, die die Korrelation für jeden Bestand berechnet. Zeichnen wir außerdem eine Wärmekarte der Korrelationsmatrix unter Verwendung der Wärmekarte von Seaborn. (Hinweis: Verwenden Sie pandas corr ().)

# (4) 
#Plötzlich ist die Frage unfreundlich ...
# "stock"Jeder"date(Erklärende Variable)"Gegen"close(Objektive Variable)"Wenn man den Wert von betrachtet
# "close"Korrelieren Sie mit dem Übergang von"stock"Bedeutung zu suchen?
import seaborn as sns
pv = data.pivot(index="date", columns="stock", values="close")
cr = pv.corr()
sns.heatmap(cr, square=True, vmax=1, vmin=-1, center=0)

731-4

(5) Extrahieren Sie die Bestandskombination mit dem höchsten Korrelationskoeffizienten in der in (4) berechneten Korrelationsmatrix. Extrahieren Sie außerdem das Paar mit dem höchsten Korrelationskoeffizienten und zeichnen Sie jeweils ein Zeitreihendiagramm.

# (5)
#Was ist ein Paar mit einem höheren Korrelationskoeffizienten unter Kombinationen mit einem höheren Korrelationskoeffizienten?
#Kombination=Paar?
cr = data.pivot(index="date", columns="stock", values="close").corr()
cr[cr==cr[cr<1].max().max()]
# --
plt.plot(pv.index, pv.CSCO, label="CSCO")
plt.plot(pv.index, pv.MSFT, label="MSFT")
plt.xlabel("date")
plt.ylabel("close")
plt.legend()

731-5-1

731-5-2

(6) Verwenden Sie die Pandas-Roll- und Fensterfunktion (Fensterfunktion), um die letzten 5 Perioden (5 Wochen) der gleitenden durchschnittlichen Zeitreihendaten des Abschlusses für jeden oben verwendeten Bestand zu berechnen.

# (6)
pv.rolling(5).mean().dropna()

731-6

(7) Verwenden Sie die Verschiebung () von Pandas, um die logarithmischen Zeitreihendaten des Verhältnisses nahe der vorherigen Periode (vor 1 Woche) für jede oben verwendete Aktie zu berechnen. Extrahieren Sie außerdem die Aktie mit der höchsten Volatilität (Standardabweichung) und die Aktie mit der niedrigsten Volatilität und zeichnen Sie ein Diagramm der logarithmischen Änderungsrate.

# (7)
pv_lgrt = np.log(pv/pv.shift()).dropna()
print(pv_lgrt.std()[pv_lgrt.std()==pv_lgrt.std().max()])
print(pv_lgrt.std()[pv_lgrt.std()==pv_lgrt.std().min()])
# --
plt.plot(pv_lgrt.index, pv_lgrt.CSCO)
plt.plot(pv_lgrt.index, pv_lgrt.KO)
> Max stock
> CSCO    0.041205
> dtype: float64
> Min stock
> KO    0.01623
> dtype: float64

731-7

** 7.3.2 Marketinganalyse ** Im Folgenden werden Kaufdaten aufgeführt, die häufig in Marketinganalysen verwendet werden. Obwohl es sich um Kaufdaten eines Unternehmens handelt, die sich von allgemeinen Benutzern unterscheiden, ist die zu analysierende Achse im Wesentlichen dieselbe.

(1) Bitte lesen Sie die Daten mit Pandas unter der folgenden URL (Es wird einige Zeit dauern, da die Anzahl der Daten 500.000 oder mehr beträgt und relativ groß ist.)

"http://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx"

(Hinweis) Verwenden Sie pd.ExcelFile, um das Blatt in .parse ('Online-Einzelhandel') anzugeben.

Da das Analyseziel diesmal nur die Datensätze sind, die Daten in der Kunden-ID enthalten, führen Sie bitte die entsprechende Verarbeitung durch. Wenn die Rechnungsnummer der Spalte ein C vor der Nummer hat, wird sie storniert. Entfernen Sie daher diese Daten. Wenn noch etwas als Daten entfernt werden muss, gehen Sie bitte entsprechend damit um. Im Folgenden werden wir anhand dieser Daten analysieren.

# (1)
import requests
import pandas as pd

# xlsx_file_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx"
# r = requests.get(xlsx_file_url, stream=True)
# with open("Online%20Retail.xlsx", 'wb') as saveFile:
#     saveFile.write(r.content)

book = pd.ExcelFile("Online%20Retail.xlsx")
data = book.parse("Online Retail")
# --
data_ = data.dropna(subset = ["CustomerID"])
mask = data_['InvoiceNo'].str.startswith('C', na=False)
data_ = data_[~mask]

data_.head()

732-1

(2) Die Spalten dieser Daten enthalten Kaufdatum und -zeit, Produktname, Menge, Häufigkeit, Käufer-ID usw. Hier finden Sie die Anzahl der eindeutigen Käufer (CustomerID), die Anzahl der Körbe (eindeutige Anzahl von InvoiceNo) und die Art des Produkts (eindeutige Anzahl basierend auf StockCode und Beschreibung).

# (2)
print("CustomerID unique:", data_["CustomerID"].nunique())
print("InvoiceNo unique:", data_["InvoiceNo"].nunique())
print("StockCode unique:", data_["StockCode"].nunique())
print("Description unique:", data_["Description"].nunique())
> CustomerID unique: 4339
> InvoiceNo unique: 18536
> StockCode unique: 3665
> Description unique: 3877

(3) In dieser Datenspalte befindet sich ein Land. Berechnen Sie anhand dieser Spalte als Achse den Gesamtkaufbetrag (Betrag pro Einheit x Gesamtmenge) jedes Landes, ordnen Sie diese in absteigender Reihenfolge an und zeigen Sie die Ergebnisse der fünf wichtigsten Länder an.

# (3)
data_["price"] = data_["Quantity"] * data_["UnitPrice"]
data_[["price", "Country"]].groupby("Country").sum().sort_values("price").iloc[-1:-6:-1]

732-3

(4) Für die fünf oben genannten Länder stellen Sie bitte den monatlichen Übergang der Produktverkäufe (Gesamtbetrag) in jedem Land grafisch dar. Hier zeigen Sie die Grafik bitte separat an.

# (4)
top5countries = data_[["price", "Country"]].groupby("Country").sum().sort_values("price").iloc[-1:-6:-1].index.to_list()
data_top5countries = data_[data_["Country"].isin(top5countries)]

data_dict={}
i=0
f, axs = plt.subplots(5,1,figsize=(6,10))
for country, df in data_top5countries.groupby("Country"):
    df.index = df.InvoiceDate
    df_ = df.resample("M").sum()
    axs[i].plot(df_.index, df_.price, label=country)
    axs[i].legend(loc="best")
    data_dict[country] = df
    i+=1

732-4

(5) Für die oben genannten Top-5-Länder extrahieren Sie bitte die Top-5-Produkte nach Produktverkäufen in jedem Land. Machen Sie sie auch zu einem Kreisdiagramm für jedes Land. Zusätzlich addieren Sie bitte die Produkte basierend auf "Beschreibung".

# (5)
i=0
f, axs = plt.subplots(5,1,figsize=(5,15))
for country in top5countries:
    top5descriptionData = data_dict[country][["price", "Description"]].groupby("Description").sum().sort_values("price").iloc[-1:-6:-1]
    print(country, "\n", top5descriptionData, "\n")
    axs[i].pie(top5descriptionData["price"], labels=top5descriptionData.index.to_list(), autopct='%1.1f%%', startangle=90, counterclock=False)
    axs[i].title.set_text(country)
    i+=1
> United Kingdom 
>                                          price
> Description                                  
> PAPER CRAFT , LITTLE BIRDIE         168469.60
> REGENCY CAKESTAND 3 TIER            110990.20
> WHITE HANGING HEART T-LIGHT HOLDER   94858.60
> MEDIUM CERAMIC TOP STORAGE JAR       80291.44
> JUMBO BAG RED RETROSPOT              77371.57 
> 
> Netherlands 
>                                         price
> Description                                 
> RABBIT NIGHT LIGHT                   9568.48
> ROUND SNACK BOXES SET OF4 WOODLAND   7991.40
> SPACEBOY LUNCH BOX                   7485.60
> DOLLY GIRL LUNCH BOX                 6828.60
> ROUND SNACK BOXES SET OF 4 FRUITS    4039.20 
> 
> EIRE 
>                                   price
> Description                           
> REGENCY CAKESTAND 3 TIER       7388.55
> CARRIAGE                       4875.00
> 3 TIER CAKE TIN RED AND CREAM  4235.65
> Manual                         3374.34
> JAM MAKING SET WITH JARS       2976.00 
> 
> Germany 
>                                          price
> Description                                  
> POSTAGE                              21001.00
> REGENCY CAKESTAND 3 TIER              9061.95
> ROUND SNACK BOXES SET OF4 WOODLAND    3598.95
> Manual                                2296.25
> ROUND SNACK BOXES SET OF 4 FRUITS     1982.40 
> 
> France 
>                                    price
> Description                            
> POSTAGE                        15454.00
> Manual                          9492.37
> RABBIT NIGHT LIGHT              7234.24
> REGENCY CAKESTAND 3 TIER        2816.85
> RED TOADSTOOL LED NIGHT LIGHT   2130.15 

732-5

Recommended Posts

Lösen von Übungen im GCI Data Scientist Training Course Kapitel 6
Lösen von Übungen im GCI Data Scientist Training Course Kapitel 7
Lösen von Übungen im GCI Data Scientist-Schulungskurs Kapitel 8
Data Scientist Training Course Kapitel 2 Tag 2
Data Scientist Training Course Kapitel 3 Tag 3
Data Scientist Training Course Kapitel 4 Tag 1
Data Scientist Training Course Kapitel 3 Tag 1 + 2