Dieses Mal wird "Datenformat und Visualisierung" in "Kapitel 4 Informations- und Kommunikationsnetzwerk und Datennutzung / Ende des Buches" der auf der Seite des Ministeriums für Bildung, Kultur, Sport, Wissenschaft und Technologie veröffentlichten Informationsmaterialien für Lehrer I in Python implementiert. Und ich möchte einige zusätzliche Überlegungen anstellen.
[Lehrmaterial für die Lehrerinformation der High School "Information I" (Hauptteil): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm "Informationsabteilung der High School Unterrichtsmaterialien "Information I" für die Lehrerausbildung (Hauptteil): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie ") [Kapitel 4 Nutzung des Informations- und Kommunikationsnetzes und der Daten / Buchende (PDF: 10284 KB)](https://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2019/09/24/ 1416758_006_1.pdf "Kapitel 4 Nutzung des Informations- und Kommunikationsnetzwerks und des Datenendes des Buches (PDF: 10284KB)")
Ich möchte das Implementierungsbeispiel, das R in Learning 24 "Datenformat und Visualisierung" (p202-) gezeigt hat, in Python umschreiben.
Für Unterrichtsmaterialien
Aus den Probendaten der Körpermessung des Statistikamtes des Ministeriums für innere Angelegenheiten und Kommunikation wurden ein Box-Whisker-Diagramm und ein Geigenplot erstellt.
Obwohl es heißt, dass die von R gelesene Datendatei das Ergebnis von Männern und Frauen ist, die 50 m laufen, habe ich die folgenden Daten verwendet, die hier entsprechend vorbereitet wurden. high_male_data.csv
Außerdem war die in der Python-Implementierungsversion in der zweiten Hälfte verwendete "Diamonds.csv" diejenige auf der Kaggle-Site. Diamonds - Kaggle
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
gen_50 = pd.read_csv('/content/gen_50.csv')
plt.subplots_adjust(wspace=0.5)
sns.boxplot(x = 'gender', y = 'run50m', data = gen_50)
plt.show()
sns.violinplot(x = "gender", y = "run50m", data = gen_50)
plt.show()
Da ich das Seaborn-Modul zum Zeichnen des Geigenplots verwendet habe, habe ich auch das Seaborn-Modul zum Zeichnen der Box-Whisker verwendet.
library( ggplot2 )
#Daten lesen
gen_50 <- read.csv("gen_50.csv")
boxplot(run50m~gender, data=gen_50)
ggplot(data=gen_50, aes(x=gender, y=run50m, color=gender)) + geom_violin()
Übrigens ist der Quellcode, der in den eigentlichen Unterrichtsmaterialien geschrieben ist, wie folgt.
Bitte beachten Sie, dass hier ein Fehler vorliegt. Falsch: Boxplot (run50m ~ gender.data = gen_50) Richtig: Boxplot (run50m ~ gender, data = gen_50)
Was ist der Zweck der Visualisierung von Daten? Durch die Visualisierung können Probleme entdeckt und detaillierte Analysen, Interpretationen und Lösungen berücksichtigt werden. Lassen Sie uns hier anhand der Diamanten-Probendaten erklären, die im Paket ggplot2 der statistischen Analysesoftware R enthalten sind. Bei diesen Daten handelt es sich um Zehntausende großer Datenmengen, einschließlich Karat, Schliff, Transparenz, Größe, Preis usw. von Diamanten, die tatsächlich in den USA vertrieben werden.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('/content/diamonds.csv')
df_carat_lt3 = df[df['carat'] < 3]
#Karat auf der x-Achse, auf der y-Achse zählen
plt.xlabel('carat')
plt.ylabel('count')
#Zeichnen Sie ein Histogramm
df_carat_lt3['carat'].hist(bins=250)
plt.show()
#Zeichnen Sie ein Streudiagramm
df_carat_lt3.plot.scatter(x = 'carat', y = 'price')
plt.show()
sns.boxplot(x = 'cut', y = 'price', data = df_carat_lt3)
plt.show()
Es ist ersichtlich, dass der Preis umso höher ist, je größer die Karatzahl ist.
Die Reihenfolge der x-Achse in der letzten Abbildung ist nicht sehr gut, aber die Reihenfolge der Schnittqualität ist Ideal> Premium> Sehr gut> Gut> Fair.
Die Unterrichtsmaterialien sind wie folgt geschrieben.
Dies wird wie ein mysteriöses Phänomen aussehen. Je höher die Qualität des Schnitts ist, desto niedriger ist der Preis. Das gleiche Umkehrphänomen tritt bei hoher Farbe und Transparenz auf. Der Hinweis ist der "Verschränkungsfaktor". Ein Verschränkungsfaktor ist eine versteckte Variable (Faktor), die stark mit den beiden Zielvariablen korreliert.
Die bisherigen Ergebnisse zeigen, dass der Preis umso höher ist, je höher die Karatzahl ist. Daraus kann geschlossen werden, dass viele Diamanten mit einer großen Karatzahl eine schlechte Schnittqualität aufweisen. (Das heißt, je höher die Qualität des Schnitts ist, desto niedriger ist der Preis, was möglicherweise auf die Anzahl der Karat zurückzuführen ist, was ein zusammenhängender Faktor ist.)
sns.boxplot(x = 'cut', y = 'carat', data = df_carat_lt3)
plt.show()
Es war wie erwartet, und insbesondere beim Blick auf den Median wurde festgestellt, dass die ideale Karatzahl mit der höchsten Schnittqualität am niedrigsten und die faire Karatzahl mit der niedrigsten Schnittqualität am niedrigsten war.
Wenn Sie eine detailliertere Analyse dieser Diamantdatenanalyse wünschen, sollten Sie die folgenden Websites überprüfen. https://www.kaggle.com/fuzzywizard/diamonds-in-depth-analysis
library(ggplot2)
diamonds
smaller <- diamonds %>% filter(carat < 3)
ggplot(data = smaller, mapping = aes(x = carat)) + geom_histogram(binwidth = 0.01)
ggplot(data = diamonds) + geom_point(mapping = aes(x = carat, y = price))
ggplot(diamonds, aes(cut, price)) + geom_boxplot()
Übrigens ist der Quellcode, der in den eigentlichen Unterrichtsmaterialien geschrieben ist, wie folgt.
Bitte beachten Sie, dass hier ein Fehler vorliegt. Falsch: kleinerer <-Diamant%>% + Filter (Karat <3) Richtig: kleinerer <-Diamanten%>% Filter (Karat <3)
A tibble: 53940 × 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
(Kürzung)
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
0.86 Premium H SI2 61.0 58 2757 6.15 6.12 3.74
0.75 Ideal D SI2 62.2 55 2757 5.83 5.87 3.64
Python-Version https://gist.github.com/ereyester/68b781bd6668005c157b300c5bf22905
R-Version https://gist.github.com/ereyester/737207c4c99556850950c5b5a49dbfcc
Recommended Posts