transform.py
import re
import pandas as pd
import numpy as np
import codecs
import matplotlib.pyplot as plt
from sklearn import linear_model
with codecs.open(<Fahrzeugdaten>, "r", "Shift-JIS", "ignore") as file: #http://qiita.com/niwaringo/items/d2a30e04e08da8eaa643
df = pd.read_table(file, delimiter=",")
dfx = df.copy()
dfx.iloc[:,5:] = dfx.iloc[:,5:].applymap(lambda x: re.sub(',','',x)).applymap(lambda x: re.sub('-','',x)).convert_objects(convert_numeric=True)
#FutureWarning: convert_objects is deprecated. Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.
with codecs.open('Wohngebiet.csv', "r", "Shift-JIS", "ignore") as file:
df2 = pd.read_table(file, delimiter=",")
df2.iloc[:,3:] = df2.iloc[:,3:].applymap(lambda x: re.sub(',','',x)).applymap(lambda x: re.sub('-','',x)).convert_objects(convert_numeric=True)
nan = float('nan')
static_data=pd.DataFrame({
'Population_Signal':[nan],
'Bereich_Signal':[nan],
'Präfekturen':[nan],
'Wagen_Signal':[nan],
'Wohngebiet_Signal':[nan],
'Zusammengesetzte Funktion_Population_Bereich':[nan],
'Zusammengesetzte Funktion_Wagen_Bereich':[nan],
'Zusammengesetzte Funktion_Population_Wohngebiet':[nan],
'Zusammengesetzte Funktion_Wagen_Wohngebiet':[nan]
}).dropna()
for iteritem in range(1,48):
iter_shape = df2[df2['Präfekturcode']==iteritem]
iter_data = dfx[
(dfx['Präfekturcode']==iteritem)
& (dfx['Gemeinde'].str.contains('Stadt$') | dfx['Gemeinde'].str.contains('Gesamt$') | dfx['Gemeinde'].str.contains('$') | dfx['Gemeinde'].str.contains('$'))
& (dfx[''].str.contains('^$'))
]
iter_data2 = iter_data.copy()
iter_data2.loc[:,''] = iter_data2.loc[:,''].apply(lambda x: re.sub(r'Stadt insgesamt$','Stadt',x))
iter_data2.loc[:,'Gemeinde'] = iter_data2.loc[:,'Gemeinde'].apply(lambda x: re.sub(r'^.*Bezirk','',x))
merged = pd.merge(iter_shape,iter_data2,on='Gemeinde')
merged = merged.assign(
Zusammengesetzte Funktion_Population=np.nan,
Zusammengesetzte Funktion_Wagen_Bereich=(merged['Insgesamt insgesamt']**(2/3))*(merged['総Bereich']**(1/3)),
Zusammengesetzte Funktion_Population_Bereich=(merged['Population総数']**(2/3))*(merged['総Bereich']**(1/3)),
Zusammengesetzte Funktion_Wagen_Wohngebiet=(merged['Insgesamt insgesamt']**(2/3))*(merged['Wohngebiet']**(1/3)),
Zusammengesetzte Funktion_Population_Wohngebiet=(merged['Population総数']**(2/3))*(merged['Wohngebiet']**(1/3)),
Fläche Quadratwurzel=np.sqrt(merged['Gesamtfläche']),
Quadratwurzel des Wohngebiets=np.sqrt(merged['Wohngebiet']),
Signalschätzung= np.around(0.0027*merged['Insgesamt insgesamt'].astype(np.float),0)
)
people_signal = linear_model.LinearRegression(fit_intercept=False)
car_signal = linear_model.LinearRegression(fit_intercept=False)
shape_signal = linear_model.LinearRegression(fit_intercept=False)
liveshape_signal = linear_model.LinearRegression(fit_intercept=False)
people_shape = linear_model.LinearRegression(fit_intercept=False)
car_shape = linear_model.LinearRegression(fit_intercept=False)
people_liveshape = linear_model.LinearRegression(fit_intercept=False)
car_liveshape = linear_model.LinearRegression(fit_intercept=False)
people = np.array(merged['Gesamtfläche']).reshape(-1,1)
car = np.array(merged['Insgesamt insgesamt']).reshape(-1,1)
shape = np.array(merged['Fläche Quadratwurzel']).reshape(-1,1)
liveshape = np.array(merged['Quadratwurzel des Wohngebiets']).reshape(-1,1)
peopleShape = np.array(merged['Zusammengesetzte Funktion_Population_Bereich']).reshape(-1,1)
carShape = np.array(merged['Zusammengesetzte Funktion_Wagen_Bereich']).reshape(-1,1)
peopleLiveShape = np.array(merged['Zusammengesetzte Funktion_Population_Wohngebiet']).reshape(-1,1)
carLiveShape = np.array(merged['Zusammengesetzte Funktion_Wagen_Wohngebiet']).reshape(-1,1)
y_data=np.array(merged['Signalschätzung']).reshape(-1,1)
people_signal.fit(people,y_data)
car_signal.fit(car,y_data)
shape_signal.fit(shape,y_data)
liveshape_signal.fit(liveshape,y_data)
people_shape.fit(peopleShape,y_data)
car_shape.fit(carShape,y_data)
people_liveshape.fit(peopleLiveShape,y_data)
car_liveshape.fit(carLiveShape,y_data)
df_result=pd.DataFrame({
'Population_Signal':[people_signal.score(people,y_data)],
'Bereich_Signal':[shape_signal.score(shape,y_data)],
'Präfekturen':[merged['Präfekturen'][0]],
'Wagen_Signal':[car_signal.score(car,y_data)],
'Wohngebiet_Signal':[liveshape_signal.score(liveshape,y_data)],
'Zusammengesetzte Funktion_Population_Bereich':[people_shape.score(peopleShape,y_data)],
'Zusammengesetzte Funktion_Wagen_Bereich':[car_shape.score(carShape,y_data)],
'Zusammengesetzte Funktion_Population_Wohngebiet':[people_liveshape.score(peopleLiveShape,y_data)],
'Zusammengesetzte Funktion_Wagen_Wohngebiet':[car_liveshape.score(carLiveShape,y_data)]
})
static_data = static_data.append(df_result)
static_data.to_csv('static_data.csv',encoding='shift_jis')
with codecs.open(<Fahrzeugdaten>, "r", "Shift-JIS", "ignore") as file: #http://qiita.com/niwaringo/items/d2a30e04e08da8eaa643
df = pd.read_table(file, delimiter=",")
hokkaido_data = df[(df['Regionales Verkehrsbüro'].str.contains('Nordsee'))
& (df['Gemeinde'].str.contains('Stadt$') | df['Gemeinde'].str.contains('Gesamt$') | df['Gemeinde'].str.contains('Stadt, Dorf$') | df['Gemeinde'].str.contains('Dorf$'))
& (df['Unternehmensart'].str.contains('Gesamt')) ]
#Das lokale Verkehrsbüro umfasst die Nordsee&& (Der Name der Stadt endet mit der Stadt|Der Name der Stadt umfasst die Grafschaft=>Der Name der Gemeinde endet mit Stadt, Dorf|Endet in der Stadt, im Dorf) &&Der Geschäftstyp ist insgesamt
#Zeilenende-Übereinstimmung
Quelle: http://sinhrks.hatenablog.com/entry/2014/12/06/233032
Daher wird durch Hinzufügen des Zugriffs "str" die Stapelverarbeitung von Zeichenketten möglich.
df[(df['Regionales Verkehrsbüro'].str.contains('^Nordsee'))].Regionales Verkehrsbüro.str.replace(r'^Nordsee道', '')
#Alle"Hokkaido Transport Bureau"Zu"Transportbüro"Ersetzen mit
Konvertiert eine durch Kommas getrennte dreistellige Zeichenfolge in eine Zahl
dfx.iloc[:,4:] = # iloc()Da der mit extrahierte Slice kein Slice ist, kann der Wert direkt geändert werden.
dfx.iloc[:,4:].applymap(lambda x: re.sub(',','',x))
.applymap(lambda x: re.sub('-','',x))
.convert_objects(convert_numeric=True)
applymap
eine Kopie erstellt, ersetzen Sie diese.
-Applymap
wendet die Argumentfunktion auf alle Elemente an.from sklearn import linear_model
lm = linear_model.LinearRegression(fit_intercept=False) #Option zum Setzen des Abschnitts auf 0
x_data=merged['Wohngebiet']
y_data=merged['Gesamtbevölkerung']
#Da sklearn nur mit numpy umgehen kann, ändern Sie es in numpy type. Ändern Sie es auch neu, da es in Form von Spalten anstelle von Zeilen vorliegen muss.
x_data = np.array(x_data).reshape(-1,1)
y_data = np.array(y_data).reshape(-1,1)
lm.fit(x_data,y_data)
print(lm.coef_) #Partieller Regressionskoeffizient
print(lm.intercept_) #=> 0.0 Natürlich, weil der Abschnitt auf 0 gesetzt ist
print(lm.score(x_data,y_data)) #Entscheidungskoeffizient
http://qiita.com/irs/items/4ebbfd8bef63db1892fb http://qiita.com/Attsun/items/5af3efdc241aa2fd3959 http://sinhrks.hatenablog.com/entry/2015/01/28/073327 Über die anonyme Funktion Lambda http://www.lifewithpython.com/2013/01/python-anonymous-function-lambda.html
Recommended Posts