Cette page est basée sur l'hypothèse qu'elle est autonome sur Windows, mais j'ai écrit la dernière version de l'installation en utilisant le VPS de Sakura. Regardez lentement! : détendu: Note d'installation LAMP + WP + Py 2018
La dernière version de 2018 (par VisualStudio) pour créer un environnement autonome sous Windows est maintenant disponible! Regardez lentement! : détendu: Notes sur la création d'un environnement Python et l'exécution de SQL sur une base de données 2018
Puisqu'il y a beaucoup de vues, je vais passer en revue tout le contenu. Comme prévu, le nombre de pages japonaises a considérablement augmenté après trois ans: assoupli:
Lieu d'installation
C:\Python
https://www.python.org/downloads/windows/
Cochez "Ajouter Python 3.x à PATH". Ensuite, l'invite de commande reconnaîtra python. J'ai choisi Personnaliser l'installation parce que je voulais changer l'emplacement d'installation.
Lorsque vous appuyez sur le bouton de démarrage et tapez "en" (= environnement), "Modifier les variables d'environnement système" apparaîtra, alors assurez-vous que l'emplacement d'installation est enregistré.
Appuyez sur le bouton de démarrage et tapez "cmd" pour faire apparaître "l'invite de commande". En définissant la variable d'environnement, la commande python Nantoka peut être passée.
Vérifiez la version Python
Microsoft Windows [Version 10.0.17134.523]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\yoshi> python -V
Python 3.7.2
Liste les bibliothèques actuellement dans (rien)
C:\Users\yoshi> pip freeze
C:\Users\yoshi>
pyodbc est utilisé pour la connexion db pandas est une bibliothèque qui lit et analyse facilement csv et xls.
Mettez les pandas et pyodbc dedans pour le moment
C:\Users\yoshi> python -m pip install --upgrade pip
C:\Users\yoshi> pip install pandas
C:\Users\yoshi> pip install pyodbc
Répertoriez les bibliothèques actuellement en
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
Les bases de MS-DOS. Déplacer lors de l'exécution d'un programme python
C'est pourquoi je choisis ce répertoire comme lieu de travail
C:\Users\yoshi> cd/d "D:\OneDrive\document\Project\Python"
D:\OneDrive\document\Project\Python>
Déplacer vers le répertoire contenant le programme à exécuter "cd C: \ xxxx \ xxxx .." Vous pouvez exécuter le programme en tapant "python xxxx.py".
main.py
print("Hello world!")
Tu l'as fait!
D:\OneDrive\document\Project\Python> python main.py
Hello world!
Résumé de l'importation Python Par exemple, disons que vous avez créé une bibliothèque pratique appelée "PyUtils.py" et que vous l'avez stockée dans un répertoire appelé "lib", non? Ensuite, vous pouvez appeler une bibliothèque pratique (= fonction définie par l'utilisateur?) Avec le mot réservé "Importer" de main.py, mais il y a deux façons de le faire. 2 est un chant plus court, mais lequel est-ce?
État actuel du répertoire
D:\OneDrive\document\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")
tester
D:\OneDrive\document\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")
tester
D:\OneDrive\document\Project\Python> python main.py
Hello world!
Hello PyUtils
VisualStudioCode Vraiment: détendu: Ah, c'est un joli nom car il est fait avec un générateur de nom (ce générateur est également utile avec ça)
(Mettez celui que vous pouvez copier et coller)
Affiliation | Nom complet | Nom complet(Merveille) | adresse mail | adresse de rue | anniversaire |
---|---|---|---|---|---|
recruter | Honda Mamoru | Honda Mamoru | [email protected] | Hokkaido | 2019/2/1 |
recruter | Kengo Hayasaka | Hayasaka Kengo | [email protected] | Préfecture d'Aomori | 2019/2/2 |
recruter | Shin Tateishi | Procéder | [email protected] | Préfecture d'Iwate | 2019/2/3 |
recruter | Takayuki Washio | Takayuki Washio | [email protected] | Préfecture de Miyagi | 2019/2/4 |
recruter | Takuji Guo | Kakutakuji | [email protected] | Akita | 2019/2/5 |
recruter | Mikio Ogushi | Mikio Ogushi | [email protected] | Préfecture de Yamagata | 2019/2/6 |
recruter | Norihiko Shimanuki | Shimanuki Norihiko | [email protected] | Préfecture de Fukushima | 2019/2/7 |
recruter | Hidetaka Kojo | Hidetaka Kojo | [email protected] | Préfecture d'Ibaraki | 2019/2/8 |
recruter | Takeshi Kurei | Kujirai Kenji | [email protected] | Préfecture de Tochigi | 2019/2/9 |
recruter | Genta Kurusu | Kurusu Genta | [email protected] | Préfecture de Gunma | 2019/2/10 |
recruter | Takahiro Shioi | Shioi Takahiro | [email protected] | Saitama | 2019/2/11 |
recruter | Kiyoto Moroda | Kiyohito Morota | [email protected] | Préfecture de Chiba | 2019/2/12 |
recruter | Jinguji Yoshifumi | Jinguuji Yoshifumi | [email protected] | Tokyo | 2019/2/13 |
recruter | Ikemizu Ryo | Satori Ikemizu | [email protected] | Préfecture de Kanagawa | 2019/2/14 |
recruter | Yusuke Kashii | Yusuke | [email protected] | Préfecture de Niigata | 2019/2/15 |
recruter | Shin Shugo | Mashugo | [email protected] | Préfecture de Toyama | 2019/2/16 |
recruter | Hirohiko Nishizono | Nishizono Hirohiko | [email protected] | Préfecture d'Ishikawa | 2019/2/17 |
recruter | Nobuhiro Kuroda | Je l'ai fait Nobuhiro | [email protected] | Préfecture de Fukui | 2019/2/18 |
recruter | Masaharu Nezuka | Masaharu Nezuka | [email protected] | Préfecture de Yamanashi | 2019/2/19 |
recruter | Nakamuro Ikki | Kazuki Nakamuro | [email protected] | Préfecture de Nagano | 2019/2/20 |
recruter | Kenji Mimata | Kenji Mitsumata | [email protected] | Préfecture de Gifu | 2019/2/21 |
recruter | Chihiro Mezaki | Chihiro Mesaki | [email protected] | Préfecture de Shizuoka | 2019/2/22 |
recruter | Yugo Takita | Yugo Takida | [email protected] | Préfecture d'Aichi | 2019/2/23 |
recruter | Huit vérité | Makoto Yamoto | [email protected] | Préfecture de Mie | 2019/2/24 |
recruter | Akihiro Ori | Orii Akihiro | [email protected] | Préfecture de Shiga | 2019/2/25 |
recruter | Hirotaka Nomaru | Pas d'Umaru Hirotaka | [email protected] | Kyoto | 2019/2/26 |
recruter | Éviter | Jun Yasushi | [email protected] | Préfecture d'Osaka | 2019/2/27 |
recruter | Kiichiro Yukishima | Kojima Kiichirou | [email protected] | Préfecture de Hyogo | 2019/2/28 |
recruter | Mitsuya Shimotsuura | Shimotsuura Mitsuya | [email protected] | Préfecture de Nara | 2019/3/1 |
recruter | Takayuki Azuchi | Et Takayuki | [email protected] | Préfecture de Wakayama | 2019/3/2 |
db utilise SQL Server Le moteur SQL Server et Manegement Studio (logiciel client à utiliser) sont différents. Téléchargement du moteur SQL Server
Nom d'utilisateur: python Mot de passe: python Postscript: Lorsque vous faites Django, vérifiez "db_ddladmin" ici (CREATE TABLE etc. peut être émis)
Même si vous augmentez le nombre d'utilisateurs appelés python, vous ne pouvez pas vous connecter sauf si vous passez en mode d'authentification SQL Server. Si vous modifiez cela, n'oubliez pas de redémarrer le serveur.
CREATETABLE.sql
CRÉER UN CLIENT TABLE(
[Affiliation] NVARCHAR(20) NULL
, [Nom complet] NVARCHAR(20) NULL
, [Nom (Kana)] NVARCHAR(20) NULL
, [adresse mail] NVARCHAR(20) NULL
, [adresse de rue] TEXT NULL
, [anniversaire] NVARCHAR(20) NULL
);
main.py
import pyodbc
import pandas as pd
import lib.PyUtils
#Émettre une requête de suppression de données
SQL_TEMPLATE = "DELETE FROM [dbo].[client]" #SQL original
editSql = SQL_TEMPLATE #Remplacez le SQL d'origine
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Émettre une instruction DELETE
#Le CSV qui contient les données qui vont dans la base de données est UTF-8
df = pd.read_csv(r"data\customer.csv")
#Émettre une requête de données supplémentaire
SQL_TEMPLATE = "INSERT INTO [dbo].[client]([Affiliation],[Nomcomplet],[Nomcomplet(かな)],[adressemail],[adressederue],[anniversaire])VALUES('{0}','{1}','{2}','{3}','{4}','{5}')"
for line in df.values:
editSql = SQL_TEMPLATE #SQL original
for i,col in enumerate(line): #Remplacez le SQL d'origine
editSql = editSql.replace('{' + str(i) + '}', col)
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Émission de la déclaration INSERT
#Émettre une requête de sélection
SQL_TEMPLATE = "SELECT * FROM [dbo].[client]" #SQL original
editSql = SQL_TEMPLATE #Remplacez le SQL d'origine
df = lib.PyUtils.ReadQueryBySQLServer(editSql) #Émission de l'instruction SELECT
for line in df.values:
print(','.join(line)) #Préparez et diffusez des résultats SQL
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)
tester
D:\OneDrive\document\Project\Python> python main.py
recruter,Honda Mamoru,Honda Mamoru,[email protected],Hokkaido,2019/2/1
recruter,Kengo Hayasaka,Hayasaka Kengo,[email protected],Préfecture d'Aomori,2019/2/2
recruter,Shin Tateishi,Procéder,[email protected],Préfecture d'Iwate,2019/2/3
recruter,Takayuki Washio,Takayuki Washio,[email protected],Préfecture de Miyagi,2019/2/4
recruter,Takuji Guo,Kakutakuji,[email protected],Akita,2019/2/5
recruter,Mikio Ogushi,Mikio Ogushi,[email protected],Préfecture de Yamagata,2019/2/6
recruter,Norihiko Shimanuki,Shimanuki Norihiko,[email protected],Préfecture de Fukushima,2019/2/7
recruter,Hidetaka Kojo,Hidetaka Kojo,[email protected],Préfecture d'Ibaraki,2019/2/8
recruter,Takeshi Kurei,Baleine Kenji,[email protected],Préfecture de Tochigi,2019/2/9
recruter,Genta Kurusu,Kurusu Genta,[email protected],Préfecture de Gunma,2019/2/10
recruter,Takahiro Shioi,Shioi Takahiro,[email protected],Saitama,2019/2/11
recruter,Kiyoto Moroda,Kiyohito Morota,[email protected],Préfecture de Chiba,2019/2/12
recruter,Jinguji Yoshifumi,Jinguuji Yoshifumi,[email protected],Tokyo,2019/2/13
recruter,Ikemizu Ryo,Satori Ikemizu,[email protected],Préfecture de Kanagawa,2019/2/14
recruter,Yusuke Kashii,Yusuke,[email protected],Préfecture de Niigata,2019/2/15
recruter,Shin Shugo,Mashugo,[email protected],Préfecture de Toyama,2019/2/16
recruter,Hirohiko Nishizono,Nishizono Hirohiko,[email protected],Préfecture d'Ishikawa,2019/2/17
recruter,Nobuhiro Kuroda,Je l'ai fait Nobuhiro,[email protected],Préfecture de Fukui,2019/2/18
recruter,Masaharu Nezuka,Masaharu Nezuka,[email protected],Préfecture de Yamanashi,2019/2/19
recruter,Nakamuro Ikki,Kazuki Nakamuro,[email protected],Préfecture de Nagano,2019/2/20
recruter,Kenji Mimata,Kenji Mitsumata,[email protected],Préfecture de Gifu,2019/2/21
recruter,Chihiro Mezaki,Chihiro Mesaki,[email protected],Préfecture de Shizuoka,2019/2/22
recruter,Yugo Takita,Yugo Takida,[email protected],Préfecture d'Aichi,2019/2/23
recruter,Huit vérité,Makoto Yamoto,[email protected],Préfecture de Mie,2019/2/24
recruter,Akihiro Ori,Orii Akihiro,[email protected],Préfecture de Shiga,2019/2/25
recruter,Hirotaka Nomaru,Pas d'Umaru Hirotaka,[email protected],Kyoto,2019/2/26
recruter,Éviter,Jun Yasushi,[email protected],Préfecture d'Osaka,2019/2/27
recruter,Kiichiro Yukishima,Kojima Kiichirou,[email protected],Préfecture de Hyogo,2019/2/28
recruter,Mitsuya Shimotsuura,Shimotsuura Mitsuya,[email protected],Préfecture de Nara,2019/3/1
recruter,Takayuki Azuchi,Et Takayuki,[email protected],Préfecture de Wakayama,2019/3/2
D:\OneDrive\document\Project\Python>
Une trame de données est un "état conceptuel dans lequel les données de tableau peuvent être traitées comme jouer avec une table en SQL". Vous pouvez supprimer des colonnes ou remplacer NaN par 0. Donc, une fois que vous vous y êtes habitué, c'est plus facile à utiliser qu'un tableau. Je l'utilise souvent en langage R, n'est-ce pas? Référence officielle de Pandas
main.py
import pyodbc
import pandas as pd
import lib.PyUtils
#Émettre une requête de suppression de données
SQL_TEMPLATE = "DELETE FROM [dbo].[client]" #SQL original
editSql = SQL_TEMPLATE #Remplacez le SQL d'origine
lib.PyUtils.ExecuteSQLBySQLServer(editSql) #Émettre une instruction DELETE
#Le CSV qui contient les données qui vont dans la base de données est UTF-8
df = pd.read_csv(r"data\customer.csv")
##################################
#Traitez maintenant les données avec des pandas#
##################################
A partir de là, c'est le traitement des chaînes, donc je vais le faire avec la console Python Je pense qu'il y a trois choses pour lesquelles vous pouvez exploiter des trames de données sur une base commerciale (la quatrième est également moins fréquente).
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
#Préparer des exemples de données
>>> df = pd.DataFrame([np.nan, 2, np.nan, 0])
>>> df
0
0 NaN
1 2.0
2 NaN
3 0.0
# No.1 NaN(Valeur manquante)Remplacer par 0
>>> df = df.fillna(0)
>>> df
0
0 0.0
1 2.0
2 0.0
3 0.0
# No.Convertir en 2 caractères et remplir avec 5 chiffres zéro
# astype(str) ...Conversion de type en chaîne
# .str. ...Accesseur à la méthode str(.Vous pourrez utiliser des commandes telles que fractionner)
>>> 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 Convertir en null que db comprend
#Il n'y a pas de NULL (non défini), NaN ne peut pas être utilisé(Non disponible, valeur manquante)
#Dans la bibliothèque standard, None correspond à Null. Si vous voulez mettre NULL dans Sqlite3, passez None.
>>> df = pd.DataFrame([np.nan, 2, np.nan, 0])
>>> df = df.where(pd.notna(df), None)
>>> df
# No.Supprimer 4 colonnes (axe)(sens:axe)Quand est défini sur 1, "de la colonne...」のsens合いになるようだ)
>>> df = df.drop([0], axis=1)
>>> df
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]
Dans le prétraitement des données statistiques, il y a des choses telles que l'insertion de la valeur moyenne et l'insertion de la valeur médiane pour la valeur manquante (≈Null value) pour le moment.
Par exemple, This is Kaggle's Home Price Forecast Regression Analysis Page montre les valeurs médianes manquantes par groupe. La partie que vous souhaitez remplir. Cela semble très probable dans les affaires. Je peux penser à un moyen de le faire avec SQL ...
La façade du lot est "largeur de la façade (largeur de la façade de la maison)". Quelle valeur dois-je indiquer si LotFrontage est manquant? Un exemple est l'idée que «les maisons de quartier, c'est-à-dire le« quartier », seront à peu près égales à la valeur LotFrontage de la même maison». Par conséquent, cette fois, nous utiliserons "la médiane de LotFrontafe des maisons avec le même quartier" comme valeur supplémentaire.
La forme de cellule ci-dessous est la valeur médiane de «voisinage». Dès que je trouve na, je veux le remplir avec la "valeur médiane du groupe par élément" ci-dessous.
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 |
Remplissez avec la valeur médiane pour na (cependant, des valeurs différentes sont entrées pour chaque groupe)
#Prenez la médiane LotFrontage pour chaque maison voisine (quartier) et remplissez-la avec cette valeur.
print(data['LotFrontage'].isnull().sum()) #Valeur manquante 259
data["LotFrontage"] = data.groupby("Neighborhood")["LotFrontage"].apply(lambda x: x.fillna(x.median()))
print(data['LotFrontage'].isnull().sum()) #Valeur manquante 0
Voir ici pour Python lambda Python lambda est facile à comprendre Il s'agit d'une image qui "dès que na est trouvé en effectuant une analyse complète verticalement (= le montant total est traité), remplissez-la avec la valeur médiane de tout groupe par élément".
À propos de Lambda
#argument formel lambda:Valeur de retour
#Définissez l'argument utilisé dans cette fonction lambda comme x
#x est le montant total de l'un des éléments divisé par groupe
#Après tout, il sera rempli avec la valeur médiane pour tous les na.
lambda x: x.fillna(x.median())
"Neighborhood" a 25 enregistrements commençant par Blmngtn et se terminant par Veenker. Lorsqu'il est groupé, il est divisé en interne en 25 tableaux pour chaque groupe (le nombre total de détails est obtenu en ajoutant tous les détails de 25 tableaux). Ensuite, le contenu des parenthèses de la fonction apply est appliqué à chacune des 25 tables. ** Eh bien, ce que vous faites est le même que SQL ** Au contraire, il est écrit comme la figure d'O'Reilly qu'il y a quelques étapes si vous comprenez le point de vue («appliquer» signifie «appliquer»). Pour plus de détails, achetez ce livre correctement w Il est assez facile à comprendre.
Cette feuille de triche est écrite si facilement, mais après toutes les statistiques ont un premier seuil élevé. C'est la même chose avec la programmation générale que vous ne savez pas ce que vous faites à moins de le copier et de le coller après l'avoir compris. Je n'ai pas pu obtenir de statistiques, j'ai donc essayé le cours de science des données de Techacademy (139 000 ¥ pour 4 semaines). Fondamentalement, [nouveau manuel de statistiques appris avec Python](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-TECHNOLOGY-% E9% A6% AC% E5% A0% B4-% E7% 9C% 9F% E5% 93% 89 / dp Ce sera un formulaire qui trace / 4798155063), mais comme vous pouvez apprendre à vous battre à Kaggle, je peux le recommander comme matériel pédagogique en ligne. J'ai pu poser un grand nombre de questions qui n'étaient pas écrites dans le livre, comme la question de secours, "À quelles mathématiques dois-je revenir pour résoudre ce problème maintenant?" Je fais de mon mieux tout seul, mais je suis désolé d'avoir fini par devenir médecin en achetant des livres. .. Où es tu maintenant? Si cela ressemble à ceci, vous devriez payer pour cela (si vous franchissez cette étape, vous êtes en fait dans un état où vous êtes perdu dans le donjon et que vous avez trop élevé le niveau, et vous pouvez poser des questions pointues: muscle :). Cependant, je ne peux pas le faire, mais en travaillant, je peux obtenir 456 pages (un seul livre) en 4 semaines lol
Le but de faire un modèle est de créer une fonction mathématique (faire quelque chose comme y = x ^ 2 et ensuite l'ordinateur personnel effectuera le calcul en poussant la formule)
Cheet sheet 1 (Les noms de variables ne sont pas contrôlés car il s'agit d'une collection)
#◆ Importer
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%precision 3 #Notation décimale à 3 chiffres
%matplotlib inline #jupyter seulement
sns.set()
#◆ Lire les données
data = pd.read_csv(r'data/kaggle_housing_price_revised.csv')
#◆ Confirmation 1 Visualisation des données
# 【pairplot】
sns.pairplot(data, hue='Category') #la teinte est codée par couleur pour chaque groupe spécifié
#[Diagramme de dispersion avec histogramme]
sns.jointplot(x = 'temperature', y = 'beer', data = beer, color = 'black')
#[Figure barbe de boîte]
sns.boxplot(x = 'Line', y = 'Density', data = data, color = 'gray')
#【Nuage de points】
fig, ax = plt.subplots()
ax.scatter(x = data['GrLivArea'], y = data['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
#◆ Confirmation 2 Représente graphiquement le rapport des valeurs manquantes à chaque donnée
all_data_na = (data.isnull().sum() / len(data)) * 100
#Supprimez les enregistrements contenant toutes les valeurs (= 0) et organisez-les par ordre décroissant.
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]) #Échelle fixe avec valeur maximale fixée à 100
#◆ Remplissez les valeurs manquantes (confirmation 2)
#Remplir aucun:
for col in ('GarageType', 'GarageFinish', 'GarageQual', 'GarageCond'):
all_data[col] = all_data[col].fillna('None')
#0 remplissage:
for col in ('GarageYrBlt', 'GarageArea', 'GarageCars'):
all_data[col] = all_data[col].fillna(0)
#Remplissage médian:
data["LotFrontage"] = data.groupby("Neighborhood")["LotFrontage"].apply(lambda x: x.fillna(x.median()))
#◆ Suppression de variables fortement corrélées
threshold = 0.8
#Créez et affichez une matrice de corrélation à partir des données. À ce moment, appliquez la valeur absolue et convertissez la valeur négative en valeur positive (corr)()Puisque seule la chaîne numérique est calculée, corr_matrix.les colonnes sont réduites)
corr_matrix = data.corr().abs()
#La matrice de corrélation est convertie en une matrice triangulaire supérieure (corr) car les informations sur la ligne diagonale sont absolument 1 et les informations sur la partie en dessous de la ligne diagonale chevauchent les informations sur la partie supérieure._matrice 0 ou!En supposant un type booléen avec 0!Cela signifie que 0 a été extrait par où)
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))
#Extraire les colonnes avec une ou plusieurs valeurs supérieures ou égales au seuil pour les colonnes autres que SalePrice de la matrice triangulaire supérieure
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)
#◆ Variable fictive
data_dummied = pd.get_dummies(data_dropped)
data_dummied.head()
#◆ Création d'un modèle
#[Méthode du carré minimum]
lm_model = smf.ols(formula = 'beer ~ temperature', data = beer).fit()
lm_model.summary()
#[Modèle linéaire généralisé]
glm_model = smf.glm(formula = 'beer ~ temperature', data = data, family=sm.families.Binomial()).fit()
glm_model.summary()
#[Inspection AIC] Voir si AIC est plus petit que le modèle NULL
null_model = smf.ols('beer ~ 1', data = beer).fit()
print('null_model.aic: ', null_model.aic)
print('lm_model.aic: ', lm_model.aic)
print('Si la variable explicative de température est incluse, l'AIC sera plus petite, donc la précision de la prédiction sera plus élevée.')
#◆ (Inspection 1) Retour en ligne droite
sns.lmplot(x = 'temperature', y = 'beer', data = beer, scatter_kws = {'color': 'black'}, line_kws = {'color': 'black'})
#[Confirmation 1] La valeur prédite de la température de 0 degré est la section(intercept)Correspond avec
lm_model.predict(pd.DataFrame({'temperature':[0]}))
#[Confirmation 2] La valeur prévue de la température de 20 degrés correspond à la position de la droite de régression marine.
lm_model.predict(pd.DataFrame({'temperature':[20]}))
#◆ (Inspection 2) Q en utilisant le modèle sélectionné-Vérifier la normalité des résidus sur le diagramme Q
sm.qqplot(lm_model.resid, line = 's')
#La valeur prévue et le SalePrice réel peuvent être superposés sur un diagramme de dispersion
x = range(len(data))
y = data['SalePrice']
plt.scatter(x, y)
plt.scatter(x, lm_model.predict(data))
Il est facile de se débarrasser d'une forêt aléatoire, mais l'interprétation de «ce qui s'est passé» est importante.
Cheet sheet 2 (Les noms de variables ne sont pas contrôlés car il s'agit d'une collection)
#Exécutez une forêt aléatoire et calculez MSE avec des données de validation
model_random_forest = RandomForestRegressor(criterion='mse').fit(X_train, y_train)
mean_squared_error(y_test, model_random_forest.predict(X_test))
> 1322565474.5486445
#Quel est le nombre! ?? Si vous pensez que, vous pouvez vérifier avec "la différence entre les deux articles moyens des données de vérification et la valeur prévue"
#◆ Obtenez un sentiment de conviction en vérifiant avec mse (erreur quadratique moyenne) par rapport à mse manuel
np.mean((y_test - model_random_forest.predict(X_test))**2)
> 1322565474.5486445
#Après avoir fait un modèle, y et y^Organiser dans un diagramme de dispersion
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()
◆ Parcelle de forêt aléatoire. Le prix de vente et la valeur prévue sont alignés sur une ligne droite (les performances prévues sont raisonnables)
Le regroupement est facile, mais l'interprétation de «ce qui s'est passé» est importante.
Cheet sheet 3 (Les noms de variables ne sont pas contrôlés car il s'agit d'une collection)
#Module de charge
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
#Lecture des données
dataset = pd.read_csv('data/baseball_salary.csv')
#Contenu'moyenne au bâton'Quand'Point de point'Seulement dans la colonne
dataset = dataset[['moyenne au bâton', 'Point de point']]
#Normalisé avec MinMaxScaler
dataset_scaled = MinMaxScaler().fit(dataset).transform(dataset)
#Dessinez un diagramme de dispersion du taux de réussite et des points de vie après normalisation
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()
#Déterminez le nombre de grappes en regardant le coude (6)...)
# WCSS:Somme des distances entre le nœud et le centre de cluster le plus court (à l'intérieur)-cluster sum of squares)
wcss = []
n_comps = np.arange(1, 10)
for k in n_comps:
#Initialisation de KMeans. init est par défaut"k-means++"
km = KMeans(n_clusters=k, init='k-means++').fit(dataset_scaled)
# inertia_L'attribut contient la valeur de 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()
#Ajuster et tracer sur le diagramme de dispersion (pour l'instruction est la coloration de cluster)
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')