Gleichzeitig im Blog gepostet: https://leoluistudio.com/blog/24/python%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%9d%b1%e4%ba%ac%e9%83%bd%e5%ae%b6%e8%b3%83%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e7%a0%94%e7%a9%b6-4%e3%81%ae2/
Datenbankstruktur
info | |
---|---|
id | 1 (PRIMARY KEY) |
municipal | Chiyoda Ward |
train | 7 (Gehen Sie zum Bahnhof) |
type | Wohnung |
date | 1983 |
structure | Verstärkter Stahl |
floor | 8 |
carpark | 0 (0 ist keine, 1 ist ja) |
price | |
---|---|
id | 1 (PRIMARY KEY) |
pid | 160000 (Kreis) |
1 (=info id) | 7 (Gehen Sie zum Bahnhof) |
area | 42.9 (Quadrat) |
date | Osten |
Erste 5. Reihe für jeden Tisch
Installieren Sie zuerst die erforderlichen Bibliotheken
import sqlite3
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.offline import plot
from sklearn.decomposition import PCA
Verbinden Sie die Datenbank
#Wenn das Ergebnis nur ausgegeben wird
conn = sqlite3.connect(‘info.db’)
c = conn.cursor()
cursor = c.execute("SQL-Code")
for row in cursor:
print(Ergebnis)
conn.close()
#Zur Verarbeitung durch Speichern des Ergebnisses
conn = sqlite3.connect(‘info.db’)
df = pd.read_sql_query("SQL-Code", conn)
conn.close()
Schauen Sie sich zunächst die Verteilung der Daten an
#Anzahl der Infozeilen
SELECT COUNT(id) FROM info
#Ergebnis: 82,812
#Anzahl der Zeilen im Preis
SELECT COUNT(id) FROM price
#Ergebnis: 624,499
#Anzahl der "Wohnungen" und "Wohnungen"
SELECT type,COUNT(type) FROM info GROUP BY type
#Ergebnis: Wohnung 33,110 /Herrenhaus 49,702
Verteilung der Fertigstellungstermine
# SQL
SELECT date AS year,COUNT(date) AS count FROM info WHERE date > 0 GROUP BY date
#Graph
fig = px.bar(df, x=’year’, y=’count’, height=500, width=1000)
Verteilung der Gebäudestruktur
# SQL
SELECT structure,COUNT(structure) AS count FROM info WHERE structure != 0 GROUP BY structure
#Graph
fig = px.bar(df, x=structure, y=’count’, height=500, width=1000)
Verteilung der Böden
# SQL
SELECT floor,COUNT(floor) AS count FROM info WHERE floor != 0 GROUP BY floor
#Graph
fig = px.bar(df, x=floor, y=’count’, height=500, width=1000)
In der obigen Tabelle ist die Verteilung im 20. Stock und darüber überhaupt nicht zu sehen. Schauen wir uns das hier genauer an.
# SQL
SELECT floor,COUNT(floor) AS count FROM info WHERE floor > 20 GROUP BY floor
#Graph
fig = px.bar(df, x=floor, y=’count’, height=500, width=1000)
Kontinuierliche Variablen (z. B. Preis) müssen gruppiert werden, bevor sie analysiert werden können.
def pricegroup(df):
if df[‘price’] < 30000:
return ‘<30,000’
elif df[‘price’] < 60000:
return ‘30,000-60,000’
……
else:
return ‘>270,000’
pricegroup_list = [‘<30,000’,
‘30,000-60,000’,
‘60,000-90,000’,
……
‘240,000-270,000’,
‘>270,000’]
Preisverteilung
# SQL
SELECT price FROM price
#Datenrahmenverarbeitung df[‘pricegroup’] = df.apply(pricegroup, axis=1)
dfcount = df.groupby([‘pricegroup’]).count()
#Graph
fig = px.bar(dfcount, x=dfcount.index, y=’price’, height=500, width=1000)
fig.update_layout(xaxis={‘categoryorder’:’array’, ‘categoryarray’:pricegroup_list}, yaxis_title=’count’)
Die Flächenverteilung ist gleich
def pricegroup(df):
if df[‘area’] < 5:
return ‘<5’
elif df[‘area’] < 10:
return ‘5-10’
……
else:
return ‘>45’
pricegroup_list = [‘<5′, ’5-10′, ’10-15′, ’15-20′,
’20-25′, ’25-30′, ’30-35′, ’35-40′,
’40-45′,’>45′]
# SQL
SELECT area FROM price
#Datenrahmenverarbeitung
df[‘areagroup’] = df.apply(areagroup, axis=1)
dfcount = df.groupby([‘areagroup’]).count()
#Graph
fig = px.bar(dfcount, x=dfcount.index, y=’area’, height=500, width=1000)
fig.update_layout(xaxis={‘categoryorder’:’array’, ‘categoryarray’:areagroup_list}, yaxis_title=’count’)
Richtungsverteilung
# SQL
SELECT direction,COUNT(direction) AS count FROM price WHERE direction != ‘-‘ GROUP BY direction
#Graph
fig = px.bar(df, x=direction, y=’count’, height=500, width=1000)
Teilen Sie die Bezirke, Städte und Dörfer vor der Analyse in 23 Bezirke und Städte ein.
m23_list = ["Chiyoda Ward","Chuo-ku",'Minato-ku',"Shinjuku Ward","Bunkyo Ward","Taito","Sumida Ward",
"Koto Ward","Shinagawa Ward","Meguro","Ota-ku","Setagaya","Shibuya Ward","Nakano",
"Suginami","Toshima Ward","Kita Ward","Arakawa","Itabashi Ward","Nerima Ward","Adachi Ward",
"Katsushika","Edogawa Ward"]
municipal_dict = {}
conn = sqlite3.connect(‘info.db’)
c = conn.cursor()
cursor = c.execute(“SELECT id,municipal FROM info”)
for row in cursor:
municipal_dict.update({row[0]:row[1]})
conn.close()
def municipal(df):
return municipal_dict[df[‘pid’]]
def municipal23(df):
if df[‘municipal’] in m23_list:
return ‘Special Wards’
else:
return ‘Non Special Wards’
Verhältnis zwischen Preis und Fläche (unterteilt in 23 Bezirke und Stadtgebiete)
# SQL
SELECT pid,price,area FROM price
#Datenrahmenverarbeitung
df[‘municipal’] = df.apply(municipal, axis=1)
df[‘municipal23’] = df.apply(municipal23, axis=1)
dfmedian = df.groupby([‘pid’, ‘municipal23’])[‘price’, ‘area’].median()
dfmedian_reset = dfmedian.reset_index(level=’municipal23′)
#Graph
fig = px.scatter(dfmedian_reset, x=’area’, y=’price’, color=’municipal23′, labels={‘municipal23’: ‘Special Wards’}, height=500, width=1000)
Recommended Posts