Пара мыслей:
1) Пожалуйста, отправьте полный код. Я не вижу, где Crime_realEstate определяется где-либо. Если вы пропустите строку, в которой вы читаете данные в этой переменной, вам будет очень трудно воспроизвести вашу ошибку, и вы с меньшей вероятностью получите помощь. Кроме того, вы должны организовать все ваши операторы импорта так, чтобы они были в верхней части вашего кода. Это на самом деле не функциональная вещь, скорее соглашение, которое все ожидают и которое облегчает чтение.
2) Когда вы ссылаетесь на данные панели, вы действительно говорите о панде DataFrame? Это своего рода «типичный» способ хранения такого рода вещей для анализа. Вы можете захотеть ссылаться на данные как на фреймы данных, чтобы они были понятнее вашей аудитории. Вам также следует опубликовать полный текст трассировки ошибок, чтобы мы могли точно увидеть, какая строка кода бомбардировала.
3) Я думаю, что вы неправильно понимаете PCA или, по крайней мере, для чего он нужен. PCA (анализ основных компонентов) - это метод преобразования данных, при котором вы фиксируете изменение в данных, относящихся к нескольким переменным, и восстанавливаете эти данные как меньшее количество компонентов, которые фиксируют одинаковое количество (или меньше, в зависимости от того, сколько компонентов вы храните) изменчивости. , Запустив PCA, вы не сможете увидеть, какие функции способствуют преступности, поскольку они будут заменены совершенно новыми компонентами. Если важно определить функции, связанные с преступностью, то PCA - плохая идея.
Пожалуйста, исправьте пункты выше.
EDIT
Я не говорю, что PCA является неправильным , я просто говорю, что вопрос, который вы задали выше («как я применяю PCA и почему моя бомбардировка кода»), на самом деле не правильный вопрос PCA следует использовать, если вы считаете, что у вас много коррелированных переменных, которые необходимо уменьшить до более низкого уровня размерности. Я бы не стал там начинать - посмотрите, какую точность вы можете получить, не делая этого. Теперь вы переформулировали гораздо более широкий вопрос о том, «как сделать прогнозную модель для этих данных, предпочтительно с использованием регрессии?», Которая, вероятно, вместо этого должна перейти к https://datascience.stackexchange.com/, но я дам вам отправная точка того, как я подойду к кодированию этого решения.
Во-первых, PCA, вероятно, не является идеальной отправной точкой, потому что если вы просто посмотрите на данные / столбцы, ваша проблема не в размерности. У вас есть 10 различных преступлений за 5 лет. У вас также есть только 58 различных строк ... или это только пример данных? Кроме того, ваши данные немного странные - у вас одинаковые цены для нескольких строк, но преступления отличаются. Я не могу сказать, просто ли вы публикуете образцы данных. Если это действительно полный набор данных, остановите анализ сейчас и получите больше данных / сделайте что-нибудь еще.
Я принял некоторые исполнительные решения о том, как бы я подошел к проблеме. Все это только для демонстрации того, как кодировать регрессию. Я суммировал преступность за все годы (возможно, вы хотите получить среднее значение? Наивысшее? Изменение? Это все дизайнерские решения для вас). Моим показателем было изменение цены за период с 2012 по 2016 год, когда у вас есть данные о преступности. Я нормализовал количество преступлений по видам преступлений. Не масштабировал целевую переменную.
Вот как бы я начал:
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import r2_score
from sklearn.preprocessing import scale
import pandas as pd
# Load data
filePath = 'L:\\crime_realEstate.txt'
crime_df = pd.read_csv(filePath, sep = '\t').drop(['Unnamed: 0','community_area'],axis = 1)
#calculate price change between 2016 and 2012 - same timeframe you have crime data
crime_df['price_change'] = crime_df['Avg_Price_2016'] - crime_df['Avg_Price_2012']
crime_df.drop(['Avg_Price_2012','Avg_Price_2013','Avg_Price_2014','Avg_Price_2015','Avg_Price_2016','Avg_Price_2017','Avg_Price_2018','Avg_Price_2019'],axis = 1,inplace = True)
#split years if they are data over time
crime_df.columns = pd.MultiIndex.from_tuples([(x.split('_20')[1] if '_20' in x else x ,x.split('_20')[0]) for x in crime_df.columns])
#sum across years for crimeFields
crime_df = crime_df.groupby(level=[1],axis = 1).sum(axis = 1)
#split out tgt var
price_growth = crime_df['price_change']
#create dummy variable from area name
dummy_df = pd.get_dummies(crime_df['Area_Name'])
crime_df.drop(['Area_Name','price_change'],axis = 1,inplace = True)
#scales crime variables
scaler = StandardScaler()
crime_df[crime_df.columns] = scaler.fit_transform(crime_df)
crime_df = pd.merge(crime_df,dummy_df,left_index = True, right_index = True)
regModel = LinearRegression()
#split to training testing
train_df = crime_df.sample(frac=0.8,random_state=200)
test_df = crime_df.drop(train_df.index)
regModel.fit(train_df, price_growth[train_df.index])
#R2
r2_score(price_growth.drop(train_df.index),regModel.predict(test_df))
0.7355837132941521
Упрощенный ответ на ваш анализ: где бы ни жили белые люди в Чикаго, собственность стоит дорого.