[PYTHON] [Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬

Letzte Nacht habe ich die Grundlagen der wissenschaftlichen Berechnung, Datenverarbeitung und Verwendung der Graph Drawing Library zusammengefasst (https://qiita.com/MuAuan/items/d4475e15599b8c6e147e). Ab heute Abend werde ich sie endlich nutzen, um zum Hauptthema zu gelangen. Heute Abend werde ich deskriptive Statistiken und einfache Regressionsanalysen zusammenfassen. Ich werde die Erklärungen in diesem Buch ergänzen. 【Hinweis】 ["Data Scientist Training Course an der Universität von Tokio"](https://www.amazon.co.jp/%E6%9D%B1%E4%BA%AC%E5%A4%A7%E5%AD%A6%E3 % 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 82% B5% E3% 82% A4% E3% 82% A8% E3% 83% B3% E3% 83 % 86% E3% 82% A3% E3% 82% B9% E3% 83% 88% E8% 82% B2% E6% 88% 90% E8% AC% 9B% E5% BA% A7-Python% E3% 81 % A7% E6% 89% 8B% E3% 82% 92% E5% 8B% 95% E3% 81% 8B% E3% 81% 97% E3% 81% A6% E5% AD% A6% E3% 81% B6 % E3% 83% 87% E2% 80% 95% E3% 82% BF% E5% 88% 86% E6% 9E% 90-% E5% A1% 9A% E6% 9C% AC% E9% 82% A6% Ich werde E5% B0% 8A / dp / 4839965250 / ref = tmm_pap_swatch_0? _ Encoding = UTF8 & qid = & sr =) lesen und die Teile zusammenfassen, an denen ich einige Zweifel habe oder die ich nützlich finde. Daher denke ich, dass die Zusammenfassung unkompliziert sein wird, aber bitte lesen Sie sie und denken Sie, dass der Inhalt nichts mit diesem Buch zu tun hat.

Kapitel 3 Beschreibende Statistik und einfache Regressionsanalyse

Kapitel 3-1 Arten der statistischen Analyse

3-1-1 Beschreibende und Inferenzstatistik

Statistische Analysemethoden sind in deskriptive Statistiken und Inferenzstatistiken unterteilt.

3-1-1-1 Beschreibende Statistik

"Eine Methode, um die Eigenschaften der gesammelten Daten zu erfassen, sie leicht verständlich zu organisieren und leicht sichtbar zu machen. Berechnen Sie die Eigenschaften der Daten, indem Sie den Mittelwert, die Standardabweichung usw. berechnen, die Daten klassifizieren und mithilfe von Abbildungen und Grafiken ausdrücken. Es ist eine beschreibende Statistik. "

3-1-1-2 Inferenzstatistik

"Die Idee der Inferenzstatistik besteht darin, eine genaue Analyse unter Verwendung eines Modells durchzuführen, das auf einer Wahrscheinlichkeitsverteilung aus nur Teildaten basiert, und das Ganze abzuleiten, um Statistiken zu erhalten." "Es wird auch verwendet, um die Zukunft anhand vergangener Daten vorherzusagen. In diesem Kapitel wird eine einfache Regressionsanalyse beschrieben, die die Grundlage für Inferenzstatistiken bildet. Komplexere Inferenzstatistiken werden in den nächsten vier Kapiteln behandelt."

3-1-2 Bibliotheken importieren
import numpy as np
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

import matplotlib as mpl
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()

from sklearn import linear_model

Installieren Sie sklearn unten.


$ sudo pip3 install scikit-learn

Wie unten gezeigt, scheint es, dass es auch mit Rasipi4 verwendet werden kann.

 $ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sklearn import linear_model 
>>> 

Derzeit wurde python3-sklearn-doc nicht gefunden, aber es scheint, dass es unter Debian / Ubuntu installiert werden könnte.

$ sudo apt-get install python3-sklearn python3-sklearn-lib

Kapitel 3-2 Lesen und Interagieren mit Daten

...Kürzung 3-2-1-5 Beziehen Sie die Daten student.zip von der folgenden Site mit dem folgenden Programm. https://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip

import requests, zipfile
from io import StringIO
import io

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip'
r = requests.get(url, stream = True)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()

Die folgenden vier Dateien wurden erweitert. student.txt student-mat.csv student-merge.R student-pcr.csv

3-2-2 Daten lesen und bestätigen

Stellen Sie eine Verbindung zum obigen Import her und führen Sie Folgendes aus

student_data_math = pd.read_csv('./chap3/student-mat.csv')
print(student_data_math.head())

Daten; Sie können das Trennzeichen überprüfen.

school;sex;age;address;famsize;Pstatus;Medu;Fedu;Mjob;Fjob;reason;guardian;traveltime;studytime;failures;schoolsup;famsup;paid;activities;nursery;higher;internet;romantic;famrel;freetime;goout;Dalc;Walc;health;absences;G1;G2;G3
0  GP;"F";18;"U";"GT3";"A";4;4;"at_home";"teacher...                                                                                                                                                                              
1  GP;"F";17;"U";"GT3";"T";1;1;"at_home";"other";...                                                                                                                                                                              
2  GP;"F";15;"U";"LE3";"T";1;1;"at_home";"other";...                                                                                                                                                                              
3  GP;"F";15;"U";"GT3";"T";4;2;"health";"services...                                                                                                                                                                              
4  GP;"F";16;"U";"GT3";"T";3;3;"other";"other";"h... 

Ändern Sie den Lesevorgang in und laden Sie ihn neu.

student_data_math = pd.read_csv('./chap3/student-mat.csv', sep =';')
print(student_data_math.head())

Es sah wunderschön aus.

  school sex  age address famsize Pstatus  Medu  Fedu  ... goout Dalc Walc health  absences  G1  G2  G3
0     GP   F   18       U     GT3       A     4     4  ...     4    1    1      3         6   5   6   6
1     GP   F   17       U     GT3       T     1     1  ...     3    1    1      3         4   5   5   6
2     GP   F   15       U     LE3       T     1     1  ...     2    2    3      3        10   7   8  10
3     GP   F   15       U     GT3       T     4     2  ...     2    1    1      5         2  15  14  15
4     GP   F   16       U     GT3       T     3     3  ...     2    1    2      5         4   6  10  10

[5 rows x 33 columns]
3-2-3 Überprüfen Sie die Art der Daten

print(student_data_math.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 395 entries, 0 to 394
Data columns (total 33 columns):
 #   Column      Non-Null Count  Dtype
---  ------      --------------  -----
 0   school      395 non-null    object
 1   sex         395 non-null    object
 2   age         395 non-null    int64
 3   address     395 non-null    object
 4   famsize     395 non-null    object
 5   Pstatus     395 non-null    object
 6   Medu        395 non-null    int64
 7   Fedu        395 non-null    int64
 8   Mjob        395 non-null    object
 9   Fjob        395 non-null    object
 10  reason      395 non-null    object
 11  guardian    395 non-null    object
 12  traveltime  395 non-null    int64
 13  studytime   395 non-null    int64
 14  failures    395 non-null    int64
 15  schoolsup   395 non-null    object
 16  famsup      395 non-null    object
 17  paid        395 non-null    object
 18  activities  395 non-null    object
 19  nursery     395 non-null    object
 20  higher      395 non-null    object
 21  internet    395 non-null    object
 22  romantic    395 non-null    object
 23  famrel      395 non-null    int64
 24  freetime    395 non-null    int64
 25  goout       395 non-null    int64
 26  Dalc        395 non-null    int64
 27  Walc        395 non-null    int64
 28  health      395 non-null    int64
 29  absences    395 non-null    int64
 30  G1          395 non-null    int64
 31  G2          395 non-null    int64
 32  G3          395 non-null    int64
dtypes: int64(16), object(17)
memory usage: 102.0+ KB

Wenn man sich den Inhalt von cat student.txt ansieht, scheint es, dass diese Daten den folgenden Inhalt haben.

$ cat student.txt
# Attributes for both student-mat.csv (Math course) and student-por.csv (Portuguese language course) datasets:
1 school - student's school (binary: "GP" - Gabriel Pereira or "MS" - Mousinho da Silveira)
2 sex - student's sex (binary: "F" - female or "M" - male)
3 age - student's age (numeric: from 15 to 22)
4 address - student's home address type (binary: "U" - urban or "R" - rural)
5 famsize - family size (binary: "LE3" - less or equal to 3 or "GT3" - greater than 3)
6 Pstatus - parent's cohabitation status (binary: "T" - living together or "A" - apart)
7 Medu - mother's education (numeric: 0 - none,  1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education)
8 Fedu - father's education (numeric: 0 - none,  1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education)
9 Mjob - mother's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other")
10 Fjob - father's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other")
11 reason - reason to choose this school (nominal: close to "home", school "reputation", "course" preference or "other")
12 guardian - student's guardian (nominal: "mother", "father" or "other")
13 traveltime - home to school travel time (numeric: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - >1 hour)
14 studytime - weekly study time (numeric: 1 - <2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - >10 hours)
15 failures - number of past class failures (numeric: n if 1<=n<3, else 4)
16 schoolsup - extra educational support (binary: yes or no)
17 famsup - family educational support (binary: yes or no)
18 paid - extra paid classes within the course subject (Math or Portuguese) (binary: yes or no)
19 activities - extra-curricular activities (binary: yes or no)
20 nursery - attended nursery school (binary: yes or no)
21 higher - wants to take higher education (binary: yes or no)
22 internet - Internet access at home (binary: yes or no)
23 romantic - with a romantic relationship (binary: yes or no)
24 famrel - quality of family relationships (numeric: from 1 - very bad to 5 - excellent)
25 freetime - free time after school (numeric: from 1 - very low to 5 - very high)
26 goout - going out with friends (numeric: from 1 - very low to 5 - very high)
27 Dalc - workday alcohol consumption (numeric: from 1 - very low to 5 - very high)
28 Walc - weekend alcohol consumption (numeric: from 1 - very low to 5 - very high)
29 health - current health status (numeric: from 1 - very bad to 5 - very good)
30 absences - number of school absences (numeric: from 0 to 93)

# these grades are related with the course subject, Math or Portuguese:
31 G1 - first period grade (numeric: from 0 to 20)
31 G2 - second period grade (numeric: from 0 to 20)
32 G3 - final grade (numeric: from 0 to 20, output target)

Additional note: there are several (382) students that belong to both datasets . 
These students can be identified by searching for identical attributes
that characterize each student, as shown in the annexed R file.
3-2-4 Quantitative und qualitative Daten

・ Quantitative Daten Es sind Daten, die durch kontinuierliche Werte ausgedrückt werden, auf die die vier Regeln angewendet werden können, und das Verhältnis ist aussagekräftig. Beispiel: Anzahl der Personen, Geldbetrag usw. ・ Qualitätsdaten Es sind diskontinuierliche Daten, auf die die vier Regeln nicht angewendet werden können und die zum Ausdrücken des Zustands verwendet werden. Beispiel: Rangfolge, Kategorie usw.

Geschlecht ist qualitative Daten

print(student_data_math['sex'].head())
0    F
1    F
2    F
3    F
4    F
Name: sex, dtype: object

Die Anzahl der Abwesenden sind quantitative Daten

print(student_data_math['absences'].head())
0     6
1     4
2    10
3     2
4     4
Name: absences, dtype: int64
3-2-4-2 Berechnen Sie den Durchschnittswert für jede Achse
print(student_data_math.groupby('sex')['age'].mean())
sex
F    16.730769
M    16.657754
Name: age, dtype: float64

Frauen studieren.

print(student_data_math.groupby('sex')['studytime'].mean())
sex
F    2.278846
M    1.764706
Name: studytime, dtype: float64

Beschreibende Statistik

3-3-1 Histogramm
fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
y1 = student_data_math['absences']
ax1.hist(y1, bins = 10, range =(0.0,max(y1)))
ax1.set_ylabel('count')
ax1.set_xlabel('absences')
plt.grid(True)
plt.show()

Figure_13absences.png

3-3-2 Durchschnitt, Median, am häufigsten
print('Durchschnittswert{}'.format(student_data_math['absences'].mean()))
print('Median{}'.format(student_data_math['absences'].median()))
print('Häufigster Wert{}'.format(student_data_math['absences'].mode()))

Durchschnittswert 5.708860759493671
Medianwert 4.0
Häufigster Wert 0 0
dtype: int64

Vergrößern Sie die Abbildung oben, um sie in der Abbildung zu überprüfen.

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
y1 = student_data_math['absences']
ax1.hist(y1, bins = 30, range =(0.0,30))  #,max(y1)
x0 = student_data_math['absences'].mean()
ax1.plot(x0+0.5, 70,  'red', marker = 'o',markersize=10,label ='mean')
x0 = student_data_math['absences'].median()
ax1.plot(x0+0.5, 70, 'blue', marker = 'o',markersize=10,label ='median')
x0 = student_data_math['absences'].mode()
ax1.plot(x0+0.5, 70, 'black', marker = 'o',markersize=10,label ='mode')
ax1.legend()
ax1.set_ylabel('count')
ax1.set_xlabel('absences')
plt.grid(True)
plt.show()

Figure_13absences30m-.png

3-3-3 Dispersion und Standardabweichung

Definitionsformel Verteilung $ σ ^ 2 $

σ^2 = \frac{1}{n}\Sigma_{i=1}^{n}(x_i-\bar{x})^2

Standardabweichung $ σ $ std(standered deviation)

σ = \sqrt{\frac{1}{n}\Sigma_{i=1}^{n}(x_i-\bar{x})^2}
print('Verteilt{}'.format(student_data_math['absences'].var(ddof=0)))
print('Standardabweichung{}'.format(student_data_math['absences'].std(ddof = 0)))
print('Standardabweichung{}'.format(np.sqrt(student_data_math['absences'].var())))
Dispersion 63.887389841371565
Standardabweichung 7.99295876640006
Standardabweichung 8.00309568710818

Tragen Sie den Mittelwert ± Standardabweichung auf.

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
y1 = student_data_math['absences']
ax1.hist(y1, bins = 30, range =(0.0,30))  #,max(y1)
x0 = student_data_math['absences'].mean()
ax1.plot(x0+0.5, 70,  'red', marker = 'o',markersize=10,label ='mean')
x1 = student_data_math['absences'].std(ddof=0)
ax1.plot(x0+x1+0.5, 70, 'blue', marker = 'o',markersize=10,label ='mean+std')
ax1.plot(x0-x1+0.5, 70, 'black', marker = 'o',markersize=10,label ='mean-std')
ax1.legend()
ax1.set_ylabel('count')
ax1.set_xlabel('absences')
plt.grid(True)
plt.show()

Figure_13absences30m-std.png

3-3-4 Zusammenfassende Statistiken und Perzentilwerte

Der Perzentilwert ist die Rangfolge, wenn die Gesamtzahl 100 beträgt 25. Perzentil, 25. Perzentil, 1. Quadrant Das 75. ist das 75. Perzentil, der dritte Quadrant 50. Perzentil, Median

print('Zusammengefasste Statistiken', student_data_math['absences'].describe())
Zusammenfassende Statistik zählt 395.000000
mean       5.708861
std        8.003096
min        0.000000
25%        0.000000
50%        4.000000
75%        8.000000
max       75.000000
Name: absences, dtype: float64
Finden Sie den Quadrantenbereich
  1. Perzentil; beschreiben (4)
  2. Perzentil: beschreiben (6) Unterschied, beschreiben (6) - beschreiben (4) print ('75 -25 Perzentil ', student_data_math [' Abwesenheiten '] .describe () [6] -student_data_math [' Abwesenheiten '] .describe () [4]) 75-25% Century 8.0
fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
y1 = student_data_math['absences']
ax1.hist(y1, bins = 30, range =(0.0,30))  #,max(y1)
x0 = student_data_math['absences'].median()
ax1.plot(x0+0.5, 70,  'red', marker = 'o',markersize=10,label ='median')
x1 = student_data_math['absences'].describe()[4]
ax1.plot(x1+0.5, 70, 'blue', marker = 'o',markersize=10,label ='25percentile')
x1 = student_data_math['absences'].describe()[6]
ax1.plot(x1+0.5, 70, 'black', marker = 'o',markersize=10,label ='75percentile')
ax1.legend()
ax1.set_ylabel('count')
ax1.set_xlabel('absences')
plt.grid(True)
plt.show()

Figure_13absences30mpp.png

3-3-4-2 beschreiben () für alle Zeilen
print('Vollständige Statistik der Spaltenzusammenfassung', student_data_math.describe())
Vollständige Statistik der Spaltenzusammenfassung
              age        Medu        Fedu  traveltime  ...    absences          G1          G2          G3
count  395.000000  395.000000  395.000000  395.000000  ...  395.000000  395.000000  395.000000  395.000000
mean    16.696203    2.749367    2.521519    1.448101  ...    5.708861   10.908861   10.713924   10.415190
std      1.276043    1.094735    1.088201    0.697505  ...    8.003096    3.319195    3.761505    4.581443
min     15.000000    0.000000    0.000000    1.000000  ...    0.000000    3.000000    0.000000    0.000000
25%     16.000000    2.000000    2.000000    1.000000  ...    0.000000    8.000000    9.000000    8.000000
50%     17.000000    3.000000    2.000000    1.000000  ...    4.000000   11.000000   11.000000   11.000000
75%     18.000000    4.000000    3.000000    2.000000  ...    8.000000   13.000000   13.000000   14.000000
max     22.000000    4.000000    4.000000    4.000000  ...   75.000000   19.000000   19.000000   20.000000

[8 rows x 16 columns]

3-3-5 Box Whisker

Box Whisker ist (Mindestwert, 1 .. 1 Quadrant, Median, 3. Quadrant, Maximum) wie unten gezeigt.

fig, (ax1,ax2) = plt.subplots(2, 1, figsize=(8,2*4))
y1 = student_data_math['G1']
ax1.hist(y1, bins = 30, range =(0.0,max(y1)))  #,max(y1)
x0 = student_data_math['G1'].median()
ax1.plot(x0+0.5, 60,  'red', marker = 'o',markersize=10,label ='median')
x1 = student_data_math['G1'].describe()[4]
ax1.plot(x1+0.5, 60, 'blue', marker = 'o',markersize=10,label ='25percentile')
x1 = student_data_math['G1'].describe()[6]
ax1.plot(x1+0.5, 60, 'black', marker = 'o',markersize=10,label ='75percentile')
ax2.boxplot(y1)
ax2.set_xlabel('G1')
ax2.set_ylabel('count')
ax1.legend()
ax1.set_ylabel('count')
ax1.set_xlabel('G1')
plt.grid(True)
plt.show()

Figure_14-G1pp.png

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
y1 = [student_data_math['G1'],student_data_math['G2'],student_data_math['G3'],student_data_math['absences']]
ax1.boxplot(y1,labels=['G1', 'G2', 'G3', 'absences'])
ax1.set_xlabel('category')
ax1.set_ylabel('count')
ax1.legend()
ax1.set_ylabel('count')
ax1.set_xlabel('category')
plt.grid(True)
plt.show()

Figure_14-G1pp4.png

3-3-6 Schwankungskoeffizient

Der Fluktuationskoeffizient CV ist die Standardabweichung σ / Durchschnittswert $ \ bar {x} $ Der Fluktuationskoeffizient hängt nicht von der Skala ab, und der Dispersionsgrad ist erkennbar.

print(student_data_math.std()/student_data_math.mean())
age           0.076427
Medu          0.398177
Fedu          0.431565
traveltime    0.481668
studytime     0.412313
failures      2.225319
famrel        0.227330
freetime      0.308725
goout         0.358098
Dalc          0.601441
Walc          0.562121
health        0.391147
absences      1.401873
G1            0.304266
G2            0.351086
G3            0.439881
dtype: float64

3-3-7 Streudiagramm und Korrelationskoeffizient

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
x = student_data_math['G1']
y = student_data_math['G3']
ax1.plot(x,y, 'o')
ax1.set_xlabel('G1-grade')
ax1.set_ylabel('G3-grade')
ax1.legend()
plt.grid(True)
plt.show()

Diejenigen, die einen hohen G1-Grad hatten, haben auch einen hohen G3-Grad. Es gibt jedoch einige Leute, die 0 G3-Klasse haben. Dies ist ein Ausreißer, aber es gibt verschiedene Gründe dafür, und es gibt eine Debatte darüber, ob er ausgeschlossen werden soll. Figure_15-G1G3.png Wie steht es also mit der Anzahl der Tage, an denen Personen mit G3-Note 0 teilnehmen? Zeichnen Sie das folgende Korrelationsdiagramm.

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
x = student_data_math['G3']
y = student_data_math['absences']
ax1.plot(x,y, 'o')
ax1.set_xlabel('G3-grade')
ax1.set_ylabel('absences')
ax1.legend()
plt.grid(True)
plt.show()

Das Ergebnis ist, dass Personen mit einer G3-Note von 0 nicht anwesend sind. Irgendwas stimmt nicht. Eigentlich kann ich mir vorstellen, dass ich auf halber Strecke stehen geblieben bin und nicht gezählt habe. Figure_15-G3absences.png Darüber hinaus ist die Korrelation zwischen dem G1-Grad und der Anzahl der Abwesenden wie folgt. Figure_15-G1absences.png Erstens sind zum Zeitpunkt der G2-Klasse einige Personen 0-Grad. Figure_15-G1G2.png Und wenn man die Korrelation zwischen G2-Grad und G3-Grad betrachtet, kann man sehen, dass einige Menschen auf 0 Grad gefallen sind und dass die Anzahl solcher Menschen allmählich zunimmt. Und es scheint, dass die Verstorbenen von denen mit niedrigen Punktzahlen sind. Daher ist es wichtiger, verschiedene Daten zu analysieren, als mit einem Diagramm zum Schluss zu kommen. Figure_15-G2G3.png

3-3-7-1 Co-Dispersion

Die Definitionsformel lautet wie folgt

S_{xy}=\frac{1}{n}\Sigma_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})

Das heißt, der diagonale Term ist die oben definierte Varianz. Was bedeutet der Ausdruck außerhalb der Diagonale? Wenn $ x $ und $ y $ eine inhärent lineare Beziehung haben, lautet die Gleichung für die durch die Methode der kleinsten Quadrate abgeleitete Gerade als Referenz 【Referenz】 Lineare Regressionsanalyse / Minimum-Square-Methode bedeutet Kovarianz / Korrelationskoeffizient

y=\frac{S_{xy}}{\sigma^2_{x}}x + \bar y−\frac{S_{xy}}{\sigma^2_x}\bar x \\
Wenn transformiert,\\
\frac{y-\bar y}{\sigma_y}=\frac{S_{xy}}{\sigma_x\sigma_y}\frac{x-\bar x}{\sigma_x}

Das heißt, die Steigung der linearen Gleichung, die durch die Standardabweichung und den Durchschnittswert standardisiert ist, ist wie folgt.

r_{xy}=\frac{S_{xy}}{\sigma_x\sigma_y}

Das heißt, die Kovarianz wird durch die Standardabweichung standardisiert, und dies ist die Definitionsformel des sogenannten Korrelationskoeffizienten $ r_ {xy} $.

3-3-7-2 Korrelationskoeffizient

Hier werden die Kovarianz und der Korrelationskoeffizient berechnet. Kovarianz ist die Varianz von nicht diagonalen Termen und diagonale Terme sind G1 und G3.

print(np.cov(student_data_math['G1'],student_data_math['G3']))
[[11.01705327 12.18768232]
 [12.18768232 20.9896164 ]]

Die Front ist der Korrelationskoeffizient und der zweite Term ist der p-Wert.

print(sp.stats.pearsonr(student_data_math['G1'],student_data_math['G3']))
(0.801467932017414, 9.001430312277865e-90)

Die Korrelationsmatrix wird wie folgt berechnet.

print(np.corrcoef(student_data_math['G1'],student_data_math['G3']))
[[1.         0.80146793]
 [0.80146793 1.        ]]

3-3-8 Zeichnen Sie ein Histogramm oder Streudiagramm aller Variablen

Dalc; Alkoholkonsum an Wochentagen Walc; Alkoholkonsum am Wochenende Zeichnen Sie ein Streudiagramm, um festzustellen, ob eine Korrelation zwischen den G1- und G3-Werten besteht. Ergebnis, scheint unwahrscheinlich

g = sns.pairplot(student_data_math[['Dalc','Walc','G1','G3']])
g.savefig('seaborn_pairplot_g.png')

seaborn_pairplot_g.png

【Referenz】 Erstellen Sie ein Paar-Plot-Diagramm (Streudiagramm-Matrix) mit Python, Pandas, Seaborn Keine Korrelation zwischen Walc- und G3-Werten

print(np.corrcoef(student_data_math['Walc'],student_data_math['G3']))
[[ 1.         -0.05193932]
 [-0.05193932  1.        ]]

Keine Variation für jede Gruppe

print(student_data_math.groupby('Walc')['G3'].mean())
Walc
1    10.735099
2    10.082353
3    10.725000
4     9.686275
5    10.142857
Name: G3, dtype: float64

Übung 3-1

              age        Medu        Fedu  traveltime  ...    absences          G1          G2          G3
count  649.000000  649.000000  649.000000  649.000000  ...  649.000000  649.000000  649.000000  649.000000
mean    16.744222    2.514638    2.306626    1.568567  ...    3.659476   11.399076   11.570108   11.906009
std      1.218138    1.134552    1.099931    0.748660  ...    4.640759    2.745265    2.913639    3.230656
min     15.000000    0.000000    0.000000    1.000000  ...    0.000000    0.000000    0.000000    0.000000
25%     16.000000    2.000000    1.000000    1.000000  ...    0.000000   10.000000   10.000000   10.000000
50%     17.000000    2.000000    2.000000    1.000000  ...    2.000000   11.000000   11.000000   12.000000
75%     18.000000    4.000000    3.000000    2.000000  ...    6.000000   13.000000   13.000000   14.000000
max     22.000000    4.000000    4.000000    4.000000  ...   32.000000   19.000000   19.000000   19.000000

Übung 3-2

df =student_data_math.merge(student_data_por,left_on=['school','sex','age','address','famsize','Pstatus','Medu','Fedu','Mjob','Fjob','reason','nursery','internet'], right_on=['school','sex','age','address','famsize','Pstatus','Medu','Fedu','Mjob','Fjob','reason','nursery','internet'], suffixes=('_math', '_por'))
print(df.head())
  school sex  age address famsize Pstatus  ...  Walc_por  health_por absences_por G1_por G2_por G3_por
0     GP   F   18       U     GT3       A  ...         1           3            4      0     11     11
1     GP   F   17       U     GT3       T  ...         1           3            2      9     11     11
2     GP   F   15       U     LE3       T  ...         3           3            6     12     13     12
3     GP   F   15       U     GT3       T  ...         1           5            0     14     14     14
4     GP   F   16       U     GT3       T  ...         2           5            0     11     13     13

[5 rows x 53 columns]

Übung 3-3

gm = sns.pairplot(df[['G1_math','G3_math','G1_por','G3_por']])
gm.savefig('seaborn_pairplot_gm.png')

Die Korrelation zwischen Mathematik und Por scheint hoch zu sein Die Dispersion scheint in por kleiner zu sein als in Mathe seaborn_pairplot_gm.png Es wird auch durch die folgenden Ergebnisse unterstützt.

print(np.corrcoef(df['G1_math'],df['G3_math']))
[[1.        0.8051287]
 [0.8051287 1.       ]]
print(np.corrcoef(df['G3_math'],df['G3_por']))
[[1.         0.48034936]
 [0.48034936 1.        ]]

print(np.cov(df['G1_math'],df['G3_math']))
[[11.2169202  12.63919693]
 [12.63919693 21.9702354 ]]
print(np.cov(df['G3_math'],df['G3_por']))
[[21.9702354   6.63169394]
 [ 6.63169394  8.67560567]]

Kapitel 3-4 Einfache Regressionsanalyse

"Neben der deskriptiven Statistik lernen wir die Grundlagen der Regressionsanalyse." "Die Regressionsanalyse ist eine Analyse, die Zahlen vorhersagt. Ich habe die Schülerdaten oben grafisch dargestellt. Aus diesem Streudiagramm kann ich ersehen, dass G1 und G3 wahrscheinlich miteinander zusammenhängen."

fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
ax1.plot(student_data_math['G1'],student_data_math['G3'],'o')
ax1.set_xlabel('G1_Grade')
ax1.set_ylabel('G3_Grade')
ax1.grid(True)
plt.show()

Figure_16-G1G3.png "Im Regressionsproblem nehmen wir einen relationalen Ausdruck aus den angegebenen Daten an und finden den Koeffizienten, der am besten zu den Daten passt. Insbesondere prognostizieren wir die G3-Leistung basierend auf der G1-Leistung, die wir im Voraus kennen. Das heißt, es gibt eine Zielvariable G3 (als Zielvariable bezeichnet) und eine Variable G1 (als erklärende Variable bezeichnet), die erklärt, dass sie zur Vorhersage verwendet wird. Bei der Regressionsanalyse werden eine erklärende Variable und eine erklärende Variable verwendet. Ersteres wird als einfache Regression und letzteres als multiple Regressionsanalyse bezeichnet. In diesem Kapitel werden wir die einfache Regressionsanalyse erläutern. "

3-4-1 Lineare einfache Regressionsanalyse

"Hier werden wir erklären, wie das Regressionsproblem mit einer Methode namens lineare einfache Regression gelöst werden kann, bei der davon ausgegangen wird, dass Ausgabe und Eingabe in der einfachen Regressionsanalyse eine lineare Beziehung haben."

import pandas as pd
from sklearn import linear_model

reg = linear_model.LinearRegression()
student_data_math = pd.read_csv('./chap3/student-mat.csv', sep =';')

x = student_data_math.loc[:,['G1']].values
y = student_data_math['G3'].values
reg.fit(x,y)
print('Regressionskoeffizienten;',reg.coef_)
print('Sektion;',reg.intercept_)
Regressionskoeffizienten;[1.10625609]
Sektion;-1.6528038288004616
fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
ax1.plot(student_data_math['G1'],student_data_math['G3'],'o')
ax1.plot(x,reg.predict(x))
ax1.set_xlabel('G1_Grade')
ax1.set_ylabel('G3_Grade')
ax1.grid(True)
plt.show()

Figure_16-G1G3predict.png

3-4-2 Entscheidungsfaktor

R^2 = 1- \frac{\Sigma_{i=1}^{n}(y_i-f(x_i))^2}{\Sigma_{i=1}^{n}(y_i-\bar y)^2}

Die obige Gleichung wird als Bestimmungskoeffizient bezeichnet, und $ R ^ 2 = 1 $ ist der Maximalwert. Je näher er an 1 liegt, desto besser ist das Modell.

print('Koeffizient bestimmen;',reg.score(x,y))
Entscheidungskoeffizient; 0.64235084605227

Umfassendes Problem 3-2-1 Lorenzkurve

df0 = student_data_math[student_data_math['sex'].isin(['M'])]
df = df0.sort_values(by=['G1'])
df['Ct']=np.arange(1,len(df)+1)

x = df['Ct']
print(x)
y = df['G1'].cumsum()
print(y)
fig, (ax1) = plt.subplots(1, 1, figsize=(8,6))
ax1.plot(x/max(x),y/max(y))
ax1.set_xlabel('peoples')
ax1.set_ylabel('G1_Grade.cumsum')
ax1.grid(True)
plt.show()

248      1
144      2
164      3
161      4
153      5
      ...
113    183
129    184
245    185
42     186
47     187
Name: Ct, Length: 187, dtype: int32
248       3
144       8
164      13
161      18
153      23
       ...
113    2026
129    2044
245    2062
42     2081
47     2100
Name: G1, Length: 187, dtype: int64

M Figure_17-G1cumsumvspplesM.png F Figure_17-G1cumsumvspples.png Referenz M;G1 vs peaples Figure_17-G1vspeoplesM.png F;G1 vs peaples Figure_17-G1vspeoples.png

Recommended Posts

[Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬
Datenanalyse: Einfache Anwendung deskriptiver Statistiken und Schätzungsstatistiken auf CSV-Daten in Python
[Einführung in Datenwissenschaftler] Grundlagen der Wahrscheinlichkeit und Statistik ♬ Wahrscheinlichkeits- / Wahrscheinlichkeitsvariable und Wahrscheinlichkeitsverteilung
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
[Einführung in Data Scientist] Grundlagen von Python ♬
Einführung in die statistische Modellierung für die Datenanalyse GLM-Ähnlichkeitsverhältnis-Test und Testasymmetrie
Eine Einführung in die statistische Modellierung für die Datenanalyse
[Einführung zur Minimierung] Datenanalyse mit SEIR-Modell ♬
Lesehinweis: Einführung in die Datenanalyse mit Python
Ich entschied mich für eine einfache Regressionsanalyse manuell-1-
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Lesen von Notizen (in Python und Stan) zur Einführung in die statistische Modellierung für die Datenanalyse (Midorimoto)
Einfache Regressionsanalyse mit Python
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
Einführung in die statistische Modellierung für die Datenanalyse GLM-Modellauswahl
[Einführung in Data Scientist] Grundlagen der wissenschaftlichen Berechnung, Datenverarbeitung und Verwendung der Grafikzeichnungsbibliothek ♬ Grundlagen von Scipy
[Einführung in Data Scientist] Grundlagen der wissenschaftlichen Berechnung, Datenverarbeitung und Verwendung der Grafikzeichnungsbibliothek ♬ Grundlagen von Pandas
[Einführung in Data Scientist] Grundlagen der wissenschaftlichen Berechnung, Datenverarbeitung und Verwendung der Grafikzeichnungsbibliothek ♬ Grundlagen von Matplotlib
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
Einführung in die statistische Modellierung für die Datenanalyse Generalized Linear Model (GLM)
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
Erste einfache Regressionsanalyse in Python
[Einführung in Python3 Tag 1] Programmierung und Python
Algorithmus für maschinelles Lernen (Einzelregressionsanalyse)
Vorhersagestatistik (einfache Regression üben) Python
Datenanalyse zur Verbesserung von POG 3 ~ Regressionsanalyse ~
Einfache Implementierung einer Regressionsanalyse mit Keras
Einführung in die Bildanalyse opencv python
Zusammenfassung der Wahrscheinlichkeitsverteilungen, die häufig in Statistiken und Datenanalysen vorkommen
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
[Einführung in Data Scientist] Grundlagen der wissenschaftlichen Berechnung, Datenverarbeitung und Verwendung der Grafikzeichnungsbibliothek ♬ Umgebungskonstruktion
Visualisierung und Analyse von Stava Twitter-Datenstandortinformationen
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Einführung in Deep Learning ~ Falten und Pooling ~
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
Speichern Sie SQLite3-Daten und migrieren Sie zu MySQL
Nur 8 Techniken, um sich als Datenwissenschaftler auszugeben
Verständnis der Datentypen und des Beginns der linearen Regression
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
[Einführung in AWS] Text-Voice-Konvertierung und Wiedergabe ♪
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
[Python] Von der morphologischen Analyse von CSV-Daten bis zur CSV-Ausgabe und Diagrammanzeige [GiNZA]
[Einführung in cx_Oracle] (Teil 9) Zuordnung von DB- und Python-Datentypen (Version 8 oder höher)
Einführung in die Quizstatistik (1) -Mathematische Analyse von Fragensätzen, um die Tendenz von Fragen zu kennen-
Einführung in die statistische Modellierung für die Datenanalyse Erweiterung des Anwendungsbereichs von GLM
Einführung in die Zeitreihenanalyse ~ Saisonales Anpassungsmodell ~ In R und Python implementiert
Eine Einführung in die Datenanalyse mit Python - Um die Anzahl der Videoansichten zu erhöhen -
Der erste Schritt zur Protokollanalyse (Formatieren und Einfügen von Protokolldaten in Pandas)