Diese Seite basiert auf der Annahme, dass sie unter Windows eigenständig ist, aber ich habe die neueste Version des Setups mit Sakuras VPS geschrieben. Schau langsam! : entspannt: LAMP + WP + Py Setup Note 2018
Die neueste Version von 2018 (von VisualStudio) zum Erstellen einer eigenständigen Umgebung unter Windows ist jetzt verfügbar! Schau langsam! : entspannt: Hinweise zum Erstellen einer Python-Umgebung und zum Ausführen von SQL in einer DB 2018
Da es viele Ansichten gibt, werde ich alle Inhalte überprüfen. Wie erwartet hat die Anzahl der japanischen Seiten nach drei Jahren erheblich zugenommen: entspannt:
Installationsort
C:\Python
https://www.python.org/downloads/windows/
Aktivieren Sie "Python 3.x zu PATH hinzufügen". Dann erkennt die Eingabeaufforderung Python. Ich habe die Installation anpassen ausgewählt, weil ich den Installationsort ändern wollte.
Wenn Sie die Starttaste drücken und "en" (= Umgebung) eingeben, wird "Systemumgebungsvariablen bearbeiten" angezeigt. Stellen Sie daher sicher, dass der Installationsort aufgezeichnet ist.
Drücken Sie die Starttaste und geben Sie "cmd" ein, um die "Eingabeaufforderung" aufzurufen. Durch Setzen der Umgebungsvariablen kann der Befehl Python Nantoka übergeben werden.
Überprüfen Sie die Python-Version
Microsoft Windows [Version 10.0.17134.523]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\yoshi> python -V
Python 3.7.2
Liste der aktuell enthaltenen Bibliotheken (nichts enthalten)
C:\Users\yoshi> pip freeze
C:\Users\yoshi>
pyodbc wird für die Datenbankverbindung verwendet pandas ist eine Bibliothek, die CSV und XL leicht lesen und analysieren kann.
Setzen Sie Pandas und Pyodbc vorerst ein
C:\Users\yoshi> python -m pip install --upgrade pip
C:\Users\yoshi> pip install pandas
C:\Users\yoshi> pip install pyodbc
Listen Sie die aktuell in
C:\Users\yoshi>pip freeze
numpy==1.16.1
pandas==0.24.0
pyodbc==4.0.25
python-dateutil==2.7.5
pytz==2018.9
six==1.12.0
Die Grundlagen von MS-DOS. Bewegen Sie sich, wenn Sie ein Python-Programm ausführen
Deshalb wähle ich dieses Verzeichnis als Arbeitsort
C:\Users\yoshi> cd/d "D:\OneDrive\Dokument\Project\Python"
D:\OneDrive\Dokument\Project\Python>
Wechseln Sie in das Verzeichnis mit dem auszuführenden Programm "cd C: \ xxxx \ xxxx .." Sie können das Programm ausführen, indem Sie "python xxxx.py" eingeben.
main.py
print("Hello world!")
Du hast es geschafft!
D:\OneDrive\Dokument\Project\Python> python main.py
Hello world!
Zusammenfassung des Python-Imports Nehmen wir zum Beispiel an, Sie haben eine praktische Bibliothek namens "PyUtils.py" erstellt und in einem Verzeichnis namens "lib" gespeichert, oder? Dann können Sie eine bequeme Bibliothek (= benutzerdefinierte Funktion?) Von main.py mit dem reservierten Wort "Import" aufrufen, aber es gibt zwei Möglichkeiten, dies zu tun. 2 ist ein kürzerer Gesang, aber welcher ist es?
Aktueller Verzeichnisstatus
D:\OneDrive\Dokument\Project\Python> tree /F
D:.
│ main.py
└─ lib
PyUtils.py
main.py
import lib.PyUtils
print("Hello world!")
instance = lib.PyUtils.HelloClass()
instance.HelloWorldByPyUtils()
lib/PyUtils.py
class HelloClass:
def HelloWorldByPyUtils(self):
print("Hello PyUtils")
Prüfung
D:\OneDrive\Dokument\Project\Python> python main.py
Hello world!
Hello PyUtils
main.py
from lib.PyUtils import *
print("Hello world!")
instance = HelloClass()
instance.HelloWorldByPyUtils()
lib/PyUtils.py
class HelloClass:
def HelloWorldByPyUtils(self):
print("Hello PyUtils")
Prüfung
D:\OneDrive\Dokument\Project\Python> python main.py
Hello world!
Hello PyUtils
VisualStudioCode Wirklich: entspannt: Oh, das ist ein schöner Name, weil er mit einem Namensgenerator erstellt wurde (dieser Generator ist auch praktisch für diesen)
(Legen Sie die, die Sie kopieren und einfügen können)
Zugehörigkeit | Vollständiger Name | Vollständiger Name(Wunder) | Mail Adresse | Adresse | Geburtstag |
---|---|---|---|---|---|
rekrutieren | Honda Mamoru | Honda Mamoru | [email protected] | Hokkaido | 2019/2/1 |
rekrutieren | Kengo Hayasaka | Hayasaka Kengo | [email protected] | Präfektur Aomori | 2019/2/2 |
rekrutieren | Shin Tateishi | Vorgehen | [email protected] | Präfektur Iwate | 2019/2/3 |
rekrutieren | Takayuki Washio | Takayuki Washio | [email protected] | Präfektur Miyagi | 2019/2/4 |
rekrutieren | Takuji Guo | Kakutakuji | [email protected] | Akita | 2019/2/5 |
rekrutieren | Mikio Ogushi | Mikio Ogushi | [email protected] | Präfektur Yamagata | 2019/2/6 |
rekrutieren | Norihiko Shimanuki | Shimanuki Norihiko | [email protected] | Präfektur Fukushima | 2019/2/7 |
rekrutieren | Hidetaka Kojo | Hidetaka Kojo | [email protected] | Präfektur Ibaraki | 2019/2/8 |
rekrutieren | Takeshi Kurei | Kujirai Kenji | [email protected] | Präfektur Tochigi | 2019/2/9 |
rekrutieren | Genta Kurusu | Kurusu Genta | [email protected] | Präfektur Gunma | 2019/2/10 |
rekrutieren | Takahiro Shioi | Shioi Takahiro | [email protected] | Saitama | 2019/2/11 |
rekrutieren | Kiyoto Moroda | Kiyohito Morota | [email protected] | Präfektur Chiba | 2019/2/12 |
rekrutieren | Jinguji Yoshifumi | Jinguuji Yoshifumi | [email protected] | Tokio | 2019/2/13 |
rekrutieren | Ikemizu Ryo | Satori Ikemizu | [email protected] | Präfektur Kanagawa | 2019/2/14 |
rekrutieren | Yusuke Kashii | Yusuke | [email protected] | Präfektur Niigata | 2019/2/15 |
rekrutieren | Shin Shugo | Mashugo | [email protected] | Präfektur Toyama | 2019/2/16 |
rekrutieren | Hirohiko Nishizono | Nishizono Hirohiko | [email protected] | Präfektur Ishikawa | 2019/2/17 |
rekrutieren | Nobuhiro Kuroda | Ich habe es getan, Nobuhiro | [email protected] | Präfektur Fukui | 2019/2/18 |
rekrutieren | Masaharu Nezuka | Masaharu Nezuka | [email protected] | Präfektur Yamanashi | 2019/2/19 |
rekrutieren | Nakamuro Ikki | Kazuki Nakamuro | [email protected] | Präfektur Nagano | 2019/2/20 |
rekrutieren | Kenji Mimata | Kenji Mitsumata | [email protected] | Präfektur Gifu | 2019/2/21 |
rekrutieren | Chihiro Mezaki | Chihiro Mesaki | [email protected] | Präfektur Shizuoka | 2019/2/22 |
rekrutieren | Yugo Takita | Yugo Takida | [email protected] | Präfektur Aichi | 2019/2/23 |
rekrutieren | Acht Wahrheit | Makoto Yamoto | [email protected] | Präfektur Mie | 2019/2/24 |
rekrutieren | Akihiro Ori | Orii Akihiro | [email protected] | Präfektur Shiga | 2019/2/25 |
rekrutieren | Hirotaka Nomaru | Kein Umaru Hirotaka | [email protected] | Kyoto | 2019/2/26 |
rekrutieren | Meiden | Jun Yasushi | [email protected] | Präfektur Osaka | 2019/2/27 |
rekrutieren | Kiichiro Yukishima | Kojima Kiichirou | [email protected] | Präfektur Hyogo | 2019/2/28 |
rekrutieren | Mitsuya Shimotsuura | Shimotsuura Mitsuya | [email protected] | Präfektur Nara | 2019/3/1 |
rekrutieren | Takayuki Azuchi | Und Takayuki | [email protected] | Präfektur Wakayama | 2019/3/2 |
db verwendet SQL Server Die SQL Server-Engine und Manegement Studio (zu betreibende Client-Software) unterscheiden sich. Download der SQL Server Engine
Benutzername: Python Passwort: Python Nachtrag: Wenn Sie Django ausführen, aktivieren Sie hier "db_ddladmin" (TABELLE ERSTELLEN usw. kann ausgegeben werden).
Selbst wenn ich die Anzahl der Benutzer mit dem Namen Python erhöhe, kann ich mich nur anmelden, wenn ich in den SQL Server-Authentifizierungsmodus wechsle. Wenn Sie dies ändern, vergessen Sie nicht, den Server neu zu starten.
CREATETABLE.sql
TABELLE ERSTELLEN Kunde(
[Zugehörigkeit] NVARCHAR(20) NULL
, [Vollständiger Name] NVARCHAR(20) NULL
, [Name (Kana)] NVARCHAR(20) NULL
, [Mail Adresse] NVARCHAR(20) NULL
, [Adresse] TEXT NULL
, [Geburtstag] NVARCHAR(20) NULL
);
main.py
import pyodbc
import pandas as pd
import lib.PyUtils
#Stellen Sie eine Datenlöschabfrage aus
SQL_TEMPLATE = "DELETE FROM [dbo].[Klient]" #SQL Original
editSql = SQL_TEMPLATE #Ersetzen Sie das ursprüngliche SQL
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Ausgeben einer DELETE-Anweisung
#Die CSV, die die Daten enthält, die in die Datenbank gelangen, ist UTF-8
df = pd.read_csv(r"data\customer.csv")
#Zusätzliche Datenabfrage ausgeben
SQL_TEMPLATE = "INSERT INTO [dbo].[Klient]([Zugehörigkeit],[VollständigerName],[VollständigerName(かな)],[MailAdresse],[Adresse],[Geburtstag])VALUES('{0}','{1}','{2}','{3}','{4}','{5}')"
for line in df.values:
editSql = SQL_TEMPLATE #SQL Original
for i,col in enumerate(line): #Ersetzen Sie das ursprüngliche SQL
editSql = editSql.replace('{' + str(i) + '}', col)
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Ausgabe der INSERT-Anweisung
#Stellen Sie eine Auswahlabfrage aus
SQL_TEMPLATE = "SELECT * FROM [dbo].[Klient]" #SQL Original
editSql = SQL_TEMPLATE #Ersetzen Sie das ursprüngliche SQL
df = lib.PyUtils.ReadQueryBySQLServer(editSql) #Ausgabe der SELECT-Anweisung
for line in df.values:
print(','.join(line)) #Kochen und servieren Sie SQL-Ergebnisse
lib/PyUtils.py
import pyodbc
import pandas as pd
def ExecuteSQLBySQLServer(sql):
con = pyodbc.connect(r'DRIVER={SQL Server};SERVER=localhost\SQLExpress;DATABASE=db;UID=python;PWD=python;')
cur = con.cursor()
cur.execute(sql)
con.commit()
con.close()
def ReadQueryBySQLServer(sql):
con = pyodbc.connect(r'DRIVER={SQL Server};SERVER=localhost\SQLExpress;DATABASE=db;UID=python;PWD=python;')
df = pd.io.sql.read_sql(sql,con)
con.close()
return(df)
Prüfung
D:\OneDrive\Dokument\Project\Python> python main.py
rekrutieren,Honda Mamoru,Honda Mamoru,[email protected],Hokkaido,2019/2/1
rekrutieren,Kengo Hayasaka,Hayasaka Kengo,[email protected],Präfektur Aomori,2019/2/2
rekrutieren,Shin Tateishi,Vorgehen,[email protected],Präfektur Iwate,2019/2/3
rekrutieren,Takayuki Washio,Takayuki Washio,[email protected],Präfektur Miyagi,2019/2/4
rekrutieren,Takuji Guo,Kakutakuji,[email protected],Akita,2019/2/5
rekrutieren,Mikio Ogushi,Mikio Ogushi,[email protected],Präfektur Yamagata,2019/2/6
rekrutieren,Norihiko Shimanuki,Shimanuki Norihiko,[email protected],Präfektur Fukushima,2019/2/7
rekrutieren,Hidetaka Kojo,Hidetaka Kojo,[email protected],Präfektur Ibaraki,2019/2/8
rekrutieren,Takeshi Kurei,Kujirai Kenji,[email protected],Präfektur Tochigi,2019/2/9
rekrutieren,Genta Kurusu,Kurusu Genta,[email protected],Präfektur Gunma,2019/2/10
rekrutieren,Takahiro Shioi,Shioi Takahiro,[email protected],Saitama,2019/2/11
rekrutieren,Kiyoto Moroda,Kiyohito Morota,[email protected],Präfektur Chiba,2019/2/12
rekrutieren,Jinguji Yoshifumi,Jinguuji Yoshifumi,[email protected],Tokio,2019/2/13
rekrutieren,Ikemizu Ryo,Satori Ikemizu,[email protected],Präfektur Kanagawa,2019/2/14
rekrutieren,Yusuke Kashii,Yusuke,[email protected],Präfektur Niigata,2019/2/15
rekrutieren,Shin Shugo,Mashugo,[email protected],Präfektur Toyama,2019/2/16
rekrutieren,Hirohiko Nishizono,Nishizono Hirohiko,[email protected],Präfektur Ishikawa,2019/2/17
rekrutieren,Nobuhiro Kuroda,Ich habe es getan, Nobuhiro,[email protected],Präfektur Fukui,2019/2/18
rekrutieren,Masaharu Nezuka,Masaharu Nezuka,[email protected],Präfektur Yamanashi,2019/2/19
rekrutieren,Nakamuro Ikki,Kazuki Nakamuro,[email protected],Präfektur Nagano,2019/2/20
rekrutieren,Kenji Mimata,Kenji Mitsumata,[email protected],Präfektur Gifu,2019/2/21
rekrutieren,Chihiro Mezaki,Chihiro Mesaki,[email protected],Präfektur Shizuoka,2019/2/22
rekrutieren,Yugo Takita,Yugo Takida,[email protected],Präfektur Aichi,2019/2/23
rekrutieren,Acht Wahrheit,Makoto Yamoto,[email protected],Präfektur Mie,2019/2/24
rekrutieren,Akihiro Ori,Orii Akihiro,[email protected],Präfektur Shiga,2019/2/25
rekrutieren,Hirotaka Nomaru,Kein Umaru Hirotaka,[email protected],Kyoto,2019/2/26
rekrutieren,Meiden,Jun Yasushi,[email protected],Präfektur Osaka,2019/2/27
rekrutieren,Kiichiro Yukishima,Kojima Kiichirou,[email protected],Präfektur Hyogo,2019/2/28
rekrutieren,Mitsuya Shimotsuura,Shimotsuura Mitsuya,[email protected],Präfektur Nara,2019/3/1
rekrutieren,Takayuki Azuchi,Und Takayuki,[email protected],Präfektur Wakayama,2019/3/2
D:\OneDrive\Dokument\Project\Python>
Ein Datenrahmen ist ein "konzeptioneller Zustand, in dem Array-Daten wie das Spielen mit einer Tabelle in SQL verarbeitet werden können". Sie können Spalten löschen oder NaN durch 0 ersetzen. Sobald Sie sich daran gewöhnt haben, ist es einfacher zu verwenden als ein Array. Ich benutze es oft in R-Sprache, richtig? Datenrahmen. Offizielle Referenz von Pandas
main.py
import pyodbc
import pandas as pd
import lib.PyUtils
#Stellen Sie eine Datenlöschabfrage aus
SQL_TEMPLATE = "DELETE FROM [dbo].[Klient]" #SQL Original
editSql = SQL_TEMPLATE #Ersetzen Sie das ursprüngliche SQL
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Ausgeben einer DELETE-Anweisung
#Die CSV, die die Daten enthält, die in die Datenbank gelangen, ist UTF-8
df = pd.read_csv(r"data\customer.csv")
##################################
#Verarbeiten Sie nun die Daten mit Pandas#
##################################
Da es sich von hier aus um eine Zeichenfolgenverarbeitung handelt, werde ich dies mit der Python-Konsole tun Ich denke, es gibt drei Dinge, mit denen Sie Datenrahmen auf Geschäftsbasis betreiben können (der vierte ist auch weniger häufig).
Python3.7Console
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import pandas as pd
#Bereiten Sie Beispieldaten vor
>>> df = pd.DataFrame([np.nan, 2, np.nan, 0])
>>> df
0
0 NaN
1 2.0
2 NaN
3 0.0
# No.1 NaN(Fehlender Wert)Durch 0 ersetzen
>>> df = df.fillna(0)
>>> df
0
0 0.0
1 2.0
2 0.0
3 0.0
# No.In 2 Zeichen konvertieren und mit 5 Ziffern Null auffüllen
# astype(str) ...Typkonvertierung in Zeichenfolge
# .str. ...Accessor zur str-Methode(.Sie können Befehle wie split verwenden)
>>> df[0] = df[0].astype(str).str.zfill(5)
>>> df
0
0 000.0
1 002.0
2 000.0
3 000.0
# No.3 Konvertieren Sie in null, das db versteht
#Es gibt kein NULL (undefiniert), NaN kann nicht verwendet werden(Nicht verfügbar, fehlender Wert)
#In der Standardbibliothek entspricht None Null. Wenn Sie NULL in Sqlite3 einfügen möchten, übergeben Sie None.
>>> df = pd.DataFrame([np.nan, 2, np.nan, 0])
>>> df = df.where(pd.notna(df), None)
>>> df
# No.4 Spalten löschen (Achse)(Bedeutung:Achse)Wann wird auf 1 "der Spalte gesetzt...」のBedeutung合いになるようだ)
>>> df = df.drop([0], axis=1)
>>> df
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]
Bei der Vorverarbeitung statistischer Daten gibt es Dinge wie das Setzen des Durchschnittswerts und das Setzen des Medianwerts in den fehlenden Wert (≈Null-Wert) vorerst.
Beispiel: Dies ist Kaggles Seite zur Analyse der Regressionsanalyse für Eigenheimpreise zeigt den Median der fehlenden Werte nach Gruppe. Der Teil, mit dem Sie füllen möchten. Es scheint im Geschäft sehr wahrscheinlich zu sein. Ich kann mir einen Weg vorstellen, dies mit SQL zu tun ...
Die Grundstücksfront ist "Breite der Fassade (Breite der Vorderseite des Hauses)". Welchen Wert soll ich eingeben, wenn LotFrontage fehlt? Ein Beispiel ist die Idee, dass "benachbarte Häuser, dh die Nachbarschaft, ungefähr dem LotFrontage-Wert desselben Hauses entsprechen". Daher verwenden wir dieses Mal den "Medianwert von LotFrontafe von Häusern mit derselben Nachbarschaft" als zusätzlichen Wert.
Der zellförmige Wert unten ist der Medianwert von "Nachbarschaft". Sobald ich na gefunden habe, möchte ich es mit dem "Medianwert der Gruppe nach Element" unten füllen.
Neighborhood | LotFrontage(median) |
---|---|
Blmngtn | 43 |
Blueste | 24 |
BrDale | 21 |
BrkSide | 52 |
ClearCr | 80 |
CollgCr | 70 |
Crawfor | 74 |
Edwards | 64.5 |
Gilbert | 65 |
IDOTRR | 60 |
MeadowV | 21 |
Mitchel | 73 |
NAmes | 73 |
NoRidge | 91 |
NPkVill | 24 |
NridgHt | 88.5 |
NWAmes | 80 |
OldTown | 60 |
Sawyer | 71 |
SawyerW | 66.5 |
Somerst | 73.5 |
StoneBr | 61.5 |
SWISU | 60 |
Timber | 85 |
Veenker | 68 |
Geben Sie den Medianwert für na ein (für jede Gruppe werden jedoch unterschiedliche Werte eingegeben).
#Nehmen Sie den LotFrontage-Median für jedes benachbarte Haus (Nachbarschaft) und füllen Sie ihn mit diesem Wert.
print(data['LotFrontage'].isnull().sum()) #Fehlender Wert 259
data["LotFrontage"] = data.groupby("Neighborhood")["LotFrontage"].apply(lambda x: x.fillna(x.median()))
print(data['LotFrontage'].isnull().sum()) #Fehlender Wert 0
Hier finden Sie Python-Lambda Python-Lambda ist leicht zu verstehen Dies ist ein Bild, das "sobald na gefunden wird, während ein vollständiger Scan vertikal durchgeführt wird (= der gesamte Betrag wird verarbeitet), mit dem Medianwert einer Gruppe nach Element gefüllt wird".
Über Lambda
#Lambda formelles Argument:Rückgabewert
#Definieren Sie das in dieser Lambda-Funktion verwendete Argument als x
#x ist der volle Betrag eines der Elemente, aufgeteilt nach Gruppen
#Immerhin wird die Gesamtmenge an na mit dem Medianwert gefüllt.
lambda x: x.fillna(x.median())
"Neighborhood" hat 25 Platten, die mit Blmngtn beginnen und mit Veenker enden. Wenn dies gruppiert ist, wird es intern in 25 Tabellen für jede Gruppe unterteilt (die Gesamtzahl der Details wird durch Hinzufügen aller Details von 25 Tabellen erhalten). Anschließend wird der Inhalt der Klammern der Apply-Funktion auf jede der 25 Tabellen angewendet. ** Nun, was Sie tun, ist dasselbe wie SQL. ** Im Gegenteil, es gibt nur wenige Schritte, wenn Sie den Standpunkt verstehen ("Anwenden" bedeutet "Anwenden"), aber O'Reillys Zahl sagt Für Details kaufen Sie dieses Buch richtig w Es ist ziemlich leicht zu verstehen.
Dieser Spickzettel ist so einfach zu schreiben, aber schließlich haben Statistiken einen hohen Anfangsschwellenwert. Bei der allgemeinen Programmierung ist es dasselbe, dass Sie nicht wissen, was Sie tun, es sei denn, Sie kopieren es und fügen es ein, nachdem Sie es verstanden haben. Ich konnte keine Statistiken erhalten und habe den Data Science-Kurs der Techacademy ausprobiert (139.000 Yen für 4 Wochen). Grundsätzlich [ein neues Statistiklehrbuch, das mit Python gelernt wurde](https://www.amazon.co.jp/Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%81] % 82% E3% 81% 9F% E3% 82% 89% E3% 81% 97% E3% 81% 84% E7% B5% B1% E8% A8% 88% E5% AD% A6% E3% 81% AE % E6% 95% 99% E7% A7% 91% E6% 9B% B8-AI-TECHNOLOGIE-% E9% A6% AC% E5% A0% B4-% E7% 9C% 9F% E5% 93% 89 / dp Es wird ein Formular sein, das nachzeichnet (4798155063), aber da Sie lernen können, wie man in Kaggle kämpft, kann ich es als Online-Unterrichtsmaterial empfehlen. Ich konnte viele Fragen stellen, die nicht im Buch geschrieben waren, wie zum Beispiel die umgekehrte Frage: "Auf welche Mathematik muss ich zurückgreifen, um dieses Problem jetzt zu lösen?" Ich gebe mein Bestes alleine, aber es tut mir leid, dass ich Arzt geworden bin und Bücher gekauft habe. .. Wo bist du jetzt? Wenn es so aussieht, solltest du dafür bezahlen (wenn du diesen Schritt machst, bist du tatsächlich in einem Zustand, in dem du dich im Dungeon verirrt und das Level zu stark erhöht hast, und du kannst scharfe Fragen stellen: Muskel :). Ich kann es jedoch nicht tun, aber während ich arbeite, kann ich in 4 Wochen 456 Seiten (alle ein Buch) bekommen lol
Der Punkt beim Erstellen eines Modells besteht darin, eine mathematische Funktion zu erstellen (machen Sie so etwas wie y = x ^ 2, und dann führt der Personal Computer die Berechnung durch Drücken der Formel durch).
Cheet Sheet 1 (Variablennamen werden nicht kontrolliert, da es sich um eine Sammlung handelt)
#◆ Importieren
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%precision 3 #3-stellige Dezimalschreibweise
%matplotlib inline #nur jupyter
sns.set()
#◆ Daten lesen
data = pd.read_csv(r'data/kaggle_housing_price_revised.csv')
#◆ Bestätigung 1 Datenvisualisierung
# 【pairplot】
sns.pairplot(data, hue='Category') #Der Farbton ist für jede angegebene Gruppe farblich gekennzeichnet
#[Streudiagramm mit Histogramm]
sns.jointplot(x = 'temperature', y = 'beer', data = beer, color = 'black')
#[Box Bart Figur]
sns.boxplot(x = 'Line', y = 'Density', data = data, color = 'gray')
#【Streudiagramm】
fig, ax = plt.subplots()
ax.scatter(x = data['GrLivArea'], y = data['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
#◆ Bestätigung 2 Zeichnen Sie das Verhältnis fehlender Werte zu den einzelnen Daten
all_data_na = (data.isnull().sum() / len(data)) * 100
#Löschen Sie Datensätze, die alle Werte (= 0) enthalten, und ordnen Sie sie in absteigender Reihenfolge an.
all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)
f, ax = plt.subplots(figsize=(15, 12))
plt.xticks(rotation='90')
sns.barplot(x=all_data_na.index, y=all_data_na)
plt.xlabel('Features', fontsize=15)
plt.ylabel('Percent of missing values', fontsize=15)
plt.title('Percent missing data by feature', fontsize=15)
plt.ylim([0,100]) #Feste Skala mit maximalem Wert auf 100
#◆ Geben Sie fehlende Werte ein (Bestätigung 2)
#Füllen Sie keine:
for col in ('GarageType', 'GarageFinish', 'GarageQual', 'GarageCond'):
all_data[col] = all_data[col].fillna('None')
#0 füllen:
for col in ('GarageYrBlt', 'GarageArea', 'GarageCars'):
all_data[col] = all_data[col].fillna(0)
#Medianfüllung:
data["LotFrontage"] = data.groupby("Neighborhood")["LotFrontage"].apply(lambda x: x.fillna(x.median()))
#◆ Löschen stark korrelierter Variablen
threshold = 0.8
#Erstellen und Anzeigen einer Korrelationsmatrix aus Daten. Wenden Sie zu diesem Zeitpunkt den absoluten Wert an und konvertieren Sie den negativen Wert in einen positiven (corr)()Da nur die numerische Zeichenfolge berechnet wird, wird korr_matrix.Spalten werden reduziert)
corr_matrix = data.corr().abs()
#Die Korrelationsmatrix wird in eine obere Dreiecksmatrix (corr) umgewandelt, da die Informationen auf der diagonalen Linie absolut 1 sind und die Informationen auf dem Teil unterhalb der diagonalen Linie mit den Informationen auf dem oberen Teil überlappen._Matrix 0 oder!Angenommen, ein Bool-Typ mit 0!Dies bedeutet, dass 0 durch wo extrahiert wurde)
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))
#Extrahieren Sie Spalten mit einem oder mehreren Werten, die größer oder gleich dem Schwellenwert für andere Spalten als SalePrice sind, aus der oberen Dreiecksmatrix
to_drop = [column for column in upper.columns if any(upper[column] > threshold)]
print('There are %d columns to remove.' % (len(to_drop)))
to_drop.remove('SalePrice')
data_dropped = data.drop(columns = to_drop)
#◆ Dummy-Variable
data_dummied = pd.get_dummies(data_dropped)
data_dummied.head()
#◆ Modell erstellen
#[Minimum Square Methode]
lm_model = smf.ols(formula = 'beer ~ temperature', data = beer).fit()
lm_model.summary()
#[Verallgemeinertes lineares Modell]
glm_model = smf.glm(formula = 'beer ~ temperature', data = data, family=sm.families.Binomial()).fit()
glm_model.summary()
#[AIC-Inspektion] Überprüfen Sie, ob AIC kleiner als das NULL-Modell ist
null_model = smf.ols('beer ~ 1', data = beer).fit()
print('null_model.aic: ', null_model.aic)
print('lm_model.aic: ', lm_model.aic)
print('Wenn die erklärende Temperaturvariable enthalten ist, ist der AIC kleiner, sodass die Vorhersagegenauigkeit höher ist.')
#◆ (Inspektion 1) Gerade zurückgeben
sns.lmplot(x = 'temperature', y = 'beer', data = beer, scatter_kws = {'color': 'black'}, line_kws = {'color': 'black'})
#[Bestätigung 1] Der vorhergesagte Wert der Temperatur von 0 Grad ist der Abschnitt(intercept)Passt zu
lm_model.predict(pd.DataFrame({'temperature':[0]}))
#[Bestätigung 2] Der vorhergesagte Wert der Temperatur von 20 Grad entspricht der Position der Regressionslinie des Meeresgeborenen.
lm_model.predict(pd.DataFrame({'temperature':[20]}))
#◆ (Inspektion 2) Q mit dem ausgewählten Modell-Überprüfen Sie die Normalität der Residuen im Q-Diagramm
sm.qqplot(lm_model.resid, line = 's')
#Der vorhergesagte Wert und der tatsächliche Verkaufspreis können einem Streudiagramm überlagert werden
x = range(len(data))
y = data['SalePrice']
plt.scatter(x, y)
plt.scatter(x, lm_model.predict(data))
Es ist leicht, einen zufälligen Wald loszuwerden, aber die Interpretation von "was passiert ist" ist wichtig.
Cheet Sheet 2 (Variablennamen werden nicht kontrolliert, da es sich um eine Sammlung handelt)
#Führen Sie eine zufällige Gesamtstruktur aus und berechnen Sie die MSE mit Validierungsdaten
model_random_forest = RandomForestRegressor(criterion='mse').fit(X_train, y_train)
mean_squared_error(y_test, model_random_forest.predict(X_test))
> 1322565474.5486445
#Was ist das für eine Nummer! ?? Wenn Sie das glauben, können Sie mit "der Differenz zwischen den durchschnittlichen zwei Artikeln der Verifizierungsdaten und dem vorhergesagten Wert" überprüfen.
#◆ Machen Sie sich ein Bild von Überzeugung, indem Sie mit mse (durchschnittlicher quadratischer Fehler) und manuellem mse prüfen
np.mean((y_test - model_random_forest.predict(X_test))**2)
> 1322565474.5486445
#Nach dem Erstellen eines Modells y und y^In einem Streudiagramm anordnen
fig, ax = plt.subplots()
ax.scatter(x = y_test, y = model_random_forest.predict(X_test))
plt.ylabel('predict', fontsize=13)
plt.xlabel('SalePrice', fontsize=13)
plt.show()
◆ Handlung eines zufälligen Waldes. SalePrice und prognostizierter Wert werden auf einer geraden Linie ausgerichtet (prognostizierte Leistung ist angemessen).
Clustering ist einfach, aber die Interpretation von "was passiert ist" ist wichtig.
Cheet Sheet 3 (Variablennamen werden nicht kontrolliert, da es sich um eine Sammlung handelt)
#Modul laden
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
#Daten gelesen
dataset = pd.read_csv('data/baseball_salary.csv')
#Inhalt'Schlagdurchschnitt'Wann'Punktpunkt'Nur in der Spalte
dataset = dataset[['Schlagdurchschnitt', 'Punktpunkt']]
#Normalisiert mit MinMaxScaler
dataset_scaled = MinMaxScaler().fit(dataset).transform(dataset)
#Zeichnen Sie nach der Normalisierung ein Streudiagramm der Trefferquote und der Trefferpunkte
fig, ax = plt.subplots()
ax.scatter(x = dataset_scaled[:,0], y = dataset_scaled[:,1])
plt.ylabel('points', fontsize=13)
plt.xlabel('batting average', fontsize=13)
plt.show()
#Bestimmen Sie die Anzahl der Cluster anhand des Ellbogens (6)....)
# WCSS:Die Summe der Abstände vom Knoten zum kürzesten Clusterzentrum (innerhalb)-cluster sum of squares)
wcss = []
n_comps = np.arange(1, 10)
for k in n_comps:
#Initialisierung von KMeans. init ist standardmäßig"k-means++"
km = KMeans(n_clusters=k, init='k-means++').fit(dataset_scaled)
# inertia_Das Attribut enthält den Wert von WCSS
wcss.append(km.inertia_)
fig = plt.figure(figsize=(6, 4))
plt.plot(n_comps, wcss)
plt.xlabel("# of clusters")
plt.ylabel("WCSS")
plt.show()
#Anpassen und Plotten im Streudiagramm (für die Aussage ist Cluster-Färbung)
km = KMeans(n_clusters=6, init='k-means++').fit(dataset_scaled)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
colors = ['dodgerblue', 'orange', 'green', 'tomato', 'blueviolet', 'cornflowerblue']
cluster_ids = list(set(km.labels_))
for k in range(len(cluster_ids)):
average = dataset_scaled[km.labels_ == k, 0]
points = dataset_scaled[km.labels_ == k, 1]
ax.scatter(average, points, c=colors[k], s=3, label=f'cluster = {cluster_ids[k]}')
ax.scatter(average.mean(), points.mean(), marker='*', c=colors[k], s=150)
ax.set_title('Clustering')
ax.set_xlabel('batting average')
ax.set_ylabel('points')
ax.legend(loc='upper right')