Очистка данных и вычисления в таблицах

В этом примере показано, как к достоверным данным сохранен в таблице MATLAB®. Это также показывает, как выполнить вычисления при помощи числовых и категориальных данных, которые содержит таблица.

Поскольку таблицы и расписания являются контейнерами, работающий с ними несколько отличается, чем работа с обычными числовыми массивами. Пример показывает, как использовать различные табличные режимы индексирования, как эти режимы отличаются, и преимущества и недостатки каждого режима для различных ситуаций. Это также показывает, как получить доступ и присвоить данные, применяет преобразование и функции summary, преобразует табличные переменные в различные типы данных и строит результаты.

Данные о Корпусе Эймса, используемые в этом примере, прибывают из данных о жилой недвижимости для города Эймса, Айова, в Соединенных Штатах. Можно загрузить исходные данные из XLS (Excel® Workbook) электронная таблица. Описание данных доступно как текстовый файл. (Используемый с разрешением владельца авторских прав. Свяжитесь с владельцем авторских прав, если вы хотите опубликовать или перераспределить эти данные. )

Импортируйте данные об электронной таблице к таблице

Лучший способ импортировать электронную таблицу в MATLAB состоит в том, чтобы использовать readtable функция, или для данных, которые включают метки времени, readtimetable функция. В то время как Данные о Корпусе Эймса включают месяц продаж и год для каждого дома, месяц и год хранятся в отдельных столбцах. В этом случае более просто использовать readtable.

Считайте данные о корпусе. С readtable можно считать данные непосредственно из URL. Храните все текстовые данные из электронной таблицы как строковые массивы в выходной таблице. Кроме того, когда readtable заголовки столбцов чтений из файла, это использует их в качестве табличной переменной, называет и преобразовывает их в допустимые идентификаторы MATLAB. Чтобы сохранить настоящие имена, используйте 'VariableNamingRule' аргумент значения имени.

housing = readtable("http://jse.amstat.org/v19n3/decock/AmesHousing.xls","TextType","string");
Warning: Column headers from the file were modified to make them valid MATLAB identifiers before creating variable names for the table. The original column headers are saved in the VariableDescriptions property.
Set 'VariableNamingRule' to 'preserve' to use the original column headers as table variable names.

Отобразите housing. Таблица имеет одну переменную для каждого из этих 82 столбцов в электронной таблице.

housing
housing=2930×82 table
    Order        PID         MSSubClass    MSZoning    LotFrontage    LotArea    Street    Alley    LotShape    LandContour    Utilities    LotConfig    LandSlope    Neighborhood    Condition1    Condition2    BldgType    HouseStyle    OverallQual    OverallCond    YearBuilt    YearRemod_Add    RoofStyle    RoofMatl     Exterior1st    Exterior2nd    MasVnrType    MasVnrArea    ExterQual    ExterCond    Foundation    BsmtQual    BsmtCond    BsmtExposure    BsmtFinType1    BsmtFinSF1    BsmtFinType2    BsmtFinSF2    BsmtUnfSF    TotalBsmtSF    Heating    HeatingQC    CentralAir    Electrical    x1stFlrSF    x2ndFlrSF    LowQualFinSF    GrLivArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    KitchenAbvGr    KitchenQual    TotRmsAbvGrd    Functional    Fireplaces    FireplaceQu    GarageType    GarageYrBlt    GarageFinish    GarageCars    GarageArea    GarageQual    GarageCond    PavedDrive    WoodDeckSF    OpenPorchSF    EnclosedPorch    x3SsnPorch    ScreenPorch    PoolArea    PoolQC     Fence     MiscFeature    MiscVal    MoSold    YrSold    SaleType    SaleCondition    SalePrice
    _____    ____________    __________    ________    ___________    _______    ______    _____    ________    ___________    _________    _________    _________    ____________    __________    __________    ________    __________    ___________    ___________    _________    _____________    _________    _________    ___________    ___________    __________    __________    _________    _________    __________    ________    ________    ____________    ____________    __________    ____________    __________    _________    ___________    _______    _________    __________    __________    _________    _________    ____________    _________    ____________    ____________    ________    ________    ____________    ____________    ___________    ____________    __________    __________    ___________    __________    ___________    ____________    __________    __________    __________    __________    __________    __________    ___________    _____________    __________    ___________    ________    ______    _______    ___________    _______    ______    ______    ________    _____________    _________

      1      "0526301100"      "020"         "RL"          141         31770     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Corner"       "Gtl"       "NAmes"         "Norm"         "Norm"      "1Fam"       "1Story"          6              5           1960           1960          "Hip"       "CompShg"     "BrkFace"      "Plywood"     "Stone"          112          "TA"         "TA"        "CBlock"       "TA"        "Gd"          "Gd"           "BLQ"            639          "Unf"              0          441          1080        "GasA"       "Fa"          "Y"         "SBrkr"        1656            0            0            1656            1               0             1           0             3               1             "TA"              7           "Typ"           2            "Gd"        "Attchd"         1960           "Fin"            2            528           "TA"          "TA"          "P"           210             62               0             0               0           0         "NA"     "NA"         "NA"              0       5        2010       "WD"        "Normal"        2.15e+05
      2      "0526350040"      "020"         "RH"           80         11622     "Pave"    "NA"      "Reg"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "NAmes"         "Feedr"        "Norm"      "1Fam"       "1Story"          5              6           1961           1961          "Gable"     "CompShg"     "VinylSd"      "VinylSd"     "None"             0          "TA"         "TA"        "CBlock"       "TA"        "TA"          "No"           "Rec"            468          "LwQ"            144          270           882        "GasA"       "TA"          "Y"         "SBrkr"         896            0            0             896            0               0             1           0             2               1             "TA"              5           "Typ"           0            "NA"        "Attchd"         1961           "Unf"            1            730           "TA"          "TA"          "Y"           140              0               0             0             120           0         "NA"     "MnPrv"      "NA"              0       6        2010       "WD"        "Normal"        1.05e+05
      3      "0526351010"      "020"         "RL"           81         14267     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Corner"       "Gtl"       "NAmes"         "Norm"         "Norm"      "1Fam"       "1Story"          6              6           1958           1958          "Hip"       "CompShg"     "Wd Sdng"      "Wd Sdng"     "BrkFace"        108          "TA"         "TA"        "CBlock"       "TA"        "TA"          "No"           "ALQ"            923          "Unf"              0          406          1329        "GasA"       "TA"          "Y"         "SBrkr"        1329            0            0            1329            0               0             1           1             3               1             "Gd"              6           "Typ"           0            "NA"        "Attchd"         1958           "Unf"            1            312           "TA"          "TA"          "Y"           393             36               0             0               0           0         "NA"     "NA"         "Gar2"        12500       6        2010       "WD"        "Normal"        1.72e+05
      4      "0526353030"      "020"         "RL"           93         11160     "Pave"    "NA"      "Reg"         "Lvl"       "AllPub"     "Corner"       "Gtl"       "NAmes"         "Norm"         "Norm"      "1Fam"       "1Story"          7              5           1968           1968          "Hip"       "CompShg"     "BrkFace"      "BrkFace"     "None"             0          "Gd"         "TA"        "CBlock"       "TA"        "TA"          "No"           "ALQ"           1065          "Unf"              0         1045          2110        "GasA"       "Ex"          "Y"         "SBrkr"        2110            0            0            2110            1               0             2           1             3               1             "Ex"              8           "Typ"           2            "TA"        "Attchd"         1968           "Fin"            2            522           "TA"          "TA"          "Y"             0              0               0             0               0           0         "NA"     "NA"         "NA"              0       4        2010       "WD"        "Normal"        2.44e+05
      5      "0527105010"      "060"         "RL"           74         13830     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "2Story"          5              5           1997           1998          "Gable"     "CompShg"     "VinylSd"      "VinylSd"     "None"             0          "TA"         "TA"        "PConc"        "Gd"        "TA"          "No"           "GLQ"            791          "Unf"              0          137           928        "GasA"       "Gd"          "Y"         "SBrkr"         928          701            0            1629            0               0             2           1             3               1             "TA"              6           "Typ"           1            "TA"        "Attchd"         1997           "Fin"            2            482           "TA"          "TA"          "Y"           212             34               0             0               0           0         "NA"     "MnPrv"      "NA"              0       3        2010       "WD"        "Normal"       1.899e+05
      6      "0527105030"      "060"         "RL"           78          9978     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "2Story"          6              6           1998           1998          "Gable"     "CompShg"     "VinylSd"      "VinylSd"     "BrkFace"         20          "TA"         "TA"        "PConc"        "TA"        "TA"          "No"           "GLQ"            602          "Unf"              0          324           926        "GasA"       "Ex"          "Y"         "SBrkr"         926          678            0            1604            0               0             2           1             3               1             "Gd"              7           "Typ"           1            "Gd"        "Attchd"         1998           "Fin"            2            470           "TA"          "TA"          "Y"           360             36               0             0               0           0         "NA"     "NA"         "NA"              0       6        2010       "WD"        "Normal"       1.955e+05
      7      "0527127150"      "120"         "RL"           41          4920     "Pave"    "NA"      "Reg"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "StoneBr"       "Norm"         "Norm"      "TwnhsE"     "1Story"          8              5           2001           2001          "Gable"     "CompShg"     "CemntBd"      "CmentBd"     "None"             0          "Gd"         "TA"        "PConc"        "Gd"        "TA"          "Mn"           "GLQ"            616          "Unf"              0          722          1338        "GasA"       "Ex"          "Y"         "SBrkr"        1338            0            0            1338            1               0             2           0             2               1             "Gd"              6           "Typ"           0            "NA"        "Attchd"         2001           "Fin"            2            582           "TA"          "TA"          "Y"             0              0             170             0               0           0         "NA"     "NA"         "NA"              0       4        2010       "WD"        "Normal"       2.135e+05
      8      "0527145080"      "120"         "RL"           43          5005     "Pave"    "NA"      "IR1"         "HLS"       "AllPub"     "Inside"       "Gtl"       "StoneBr"       "Norm"         "Norm"      "TwnhsE"     "1Story"          8              5           1992           1992          "Gable"     "CompShg"     "HdBoard"      "HdBoard"     "None"             0          "Gd"         "TA"        "PConc"        "Gd"        "TA"          "No"           "ALQ"            263          "Unf"              0         1017          1280        "GasA"       "Ex"          "Y"         "SBrkr"        1280            0            0            1280            0               0             2           0             2               1             "Gd"              5           "Typ"           0            "NA"        "Attchd"         1992           "RFn"            2            506           "TA"          "TA"          "Y"             0             82               0             0             144           0         "NA"     "NA"         "NA"              0       1        2010       "WD"        "Normal"       1.915e+05
      9      "0527146030"      "120"         "RL"           39          5389     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "StoneBr"       "Norm"         "Norm"      "TwnhsE"     "1Story"          8              5           1995           1996          "Gable"     "CompShg"     "CemntBd"      "CmentBd"     "None"             0          "Gd"         "TA"        "PConc"        "Gd"        "TA"          "No"           "GLQ"           1180          "Unf"              0          415          1595        "GasA"       "Ex"          "Y"         "SBrkr"        1616            0            0            1616            1               0             2           0             2               1             "Gd"              5           "Typ"           1            "TA"        "Attchd"         1995           "RFn"            2            608           "TA"          "TA"          "Y"           237            152               0             0               0           0         "NA"     "NA"         "NA"              0       3        2010       "WD"        "Normal"       2.365e+05
     10      "0527162130"      "060"         "RL"           60          7500     "Pave"    "NA"      "Reg"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "2Story"          7              5           1999           1999          "Gable"     "CompShg"     "VinylSd"      "VinylSd"     "None"             0          "TA"         "TA"        "PConc"        "TA"        "TA"          "No"           "Unf"              0          "Unf"              0          994           994        "GasA"       "Gd"          "Y"         "SBrkr"        1028          776            0            1804            0               0             2           1             3               1             "Gd"              7           "Typ"           1            "TA"        "Attchd"         1999           "Fin"            2            442           "TA"          "TA"          "Y"           140             60               0             0               0           0         "NA"     "NA"         "NA"              0       6        2010       "WD"        "Normal"        1.89e+05
     11      "0527163010"      "060"         "RL"           75         10000     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Corner"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "2Story"          6              5           1993           1994          "Gable"     "CompShg"     "HdBoard"      "HdBoard"     "None"             0          "TA"         "TA"        "PConc"        "Gd"        "TA"          "No"           "Unf"              0          "Unf"              0          763           763        "GasA"       "Gd"          "Y"         "SBrkr"         763          892            0            1655            0               0             2           1             3               1             "TA"              7           "Typ"           1            "TA"        "Attchd"         1993           "Fin"            2            440           "TA"          "TA"          "Y"           157             84               0             0               0           0         "NA"     "NA"         "NA"              0       4        2010       "WD"        "Normal"       1.759e+05
     12      "0527165230"      "020"         "RL"          NaN          7980     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "1Story"          6              7           1992           2007          "Gable"     "CompShg"     "HdBoard"      "HdBoard"     "None"             0          "TA"         "Gd"        "PConc"        "Gd"        "TA"          "No"           "ALQ"            935          "Unf"              0          233          1168        "GasA"       "Ex"          "Y"         "SBrkr"        1187            0            0            1187            1               0             2           0             3               1             "TA"              6           "Typ"           0            "NA"        "Attchd"         1992           "Fin"            2            420           "TA"          "TA"          "Y"           483             21               0             0               0           0         "NA"     "GdPrv"      "Shed"          500       3        2010       "WD"        "Normal"        1.85e+05
     13      "0527166040"      "060"         "RL"           63          8402     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "2Story"          6              5           1998           1998          "Gable"     "CompShg"     "VinylSd"      "VinylSd"     "None"             0          "TA"         "TA"        "PConc"        "Gd"        "TA"          "No"           "Unf"              0          "Unf"              0          789           789        "GasA"       "Gd"          "Y"         "SBrkr"         789          676            0            1465            0               0             2           1             3               1             "TA"              7           "Typ"           1            "Gd"        "Attchd"         1998           "Fin"            2            393           "TA"          "TA"          "Y"             0             75               0             0               0           0         "NA"     "NA"         "NA"              0       5        2010       "WD"        "Normal"       1.804e+05
     14      "0527180040"      "020"         "RL"           85         10176     "Pave"    "NA"      "Reg"         "Lvl"       "AllPub"     "Inside"       "Gtl"       "Gilbert"       "Norm"         "Norm"      "1Fam"       "1Story"          7              5           1990           1990          "Gable"     "CompShg"     "HdBoard"      "HdBoard"     "None"             0          "TA"         "TA"        "PConc"        "Gd"        "TA"          "Gd"           "GLQ"            637          "Unf"              0          663          1300        "GasA"       "Gd"          "Y"         "SBrkr"        1341            0            0            1341            1               0             1           1             2               1             "Gd"              5           "Typ"           1            "Po"        "Attchd"         1990           "Unf"            2            506           "TA"          "TA"          "Y"           192              0               0             0               0           0         "NA"     "NA"         "NA"              0       2        2010       "WD"        "Normal"       1.715e+05
     15      "0527182190"      "120"         "RL"          NaN          6820     "Pave"    "NA"      "IR1"         "Lvl"       "AllPub"     "Corner"       "Gtl"       "StoneBr"       "Norm"         "Norm"      "TwnhsE"     "1Story"          8              5           1985           1985          "Gable"     "CompShg"     "HdBoard"      "HdBoard"     "None"             0          "Gd"         "TA"        "PConc"        "Gd"        "TA"          "Av"           "GLQ"            368          "BLQ"           1120            0          1488        "GasA"       "TA"          "Y"         "SBrkr"        1502            0            0            1502            1               0             1           1             1               1             "Gd"              4           "Typ"           0            "NA"        "Attchd"         1985           "RFn"            2            528           "TA"          "TA"          "Y"             0             54               0             0             140           0         "NA"     "NA"         "NA"              0       6        2010       "WD"        "Normal"        2.12e+05
     16      "0527216070"      "060"         "RL"           47         53504     "Pave"    "NA"      "IR2"         "HLS"       "AllPub"     "CulDSac"      "Mod"       "StoneBr"       "Norm"         "Norm"      "1Fam"       "2Story"          8              5           2003           2003          "Hip"       "CompShg"     "CemntBd"      "Wd Shng"     "BrkFace"        603          "Ex"         "TA"        "PConc"        "Gd"        "TA"          "Gd"           "ALQ"           1416          "Unf"              0          234          1650        "GasA"       "Ex"          "Y"         "SBrkr"        1690         1589            0            3279            1               0             3           1             4               1             "Ex"             12           "Mod"           1            "Gd"        "BuiltIn"        2003           "Fin"            3            841           "TA"          "TA"          "Y"           503             36               0             0             210           0         "NA"     "NA"         "NA"              0       6        2010       "WD"        "Normal"        5.38e+05
      ⋮

Электронная таблица имеет некоторые заголовки столбцов с пробелами и другие заголовки столбцов, которые запускаются с чисел. Заголовки столбцов становятся именами переменных в выходной таблице. По умолчанию, readtable стандартизирует имена с пробелами при помощи Camel-регистра и стандартизирует имена, начинающиеся с чисел путем предварительного ожидания их с 'x'. Несмотря на то, что таблица может иметь имена переменных с пробелами и другими неалфавитно-цифровыми символами в них, стандартизация делает работу с именами табличной переменной более естественной. Прежде, чем стандартизировать имена, readtable сохраняет заголовки первоначального столбца в housing.Properties.VariableDescriptions.

housing.Properties.VariableDescriptions
ans = 1×82 cell
    {'Order'}    {'PID'}    {'MS SubClass'}    {'MS Zoning'}    {'Lot Frontage'}    {'Lot Area'}    {'Street'}    {'Alley'}    {'Lot Shape'}    {'Land Contour'}    {'Utilities'}    {'Lot Config'}    {'Land Slope'}    {'Neighborhood'}    {'Condition 1'}    {'Condition 2'}    {'Bldg Type'}    {'House Style'}    {'Overall Qual'}    {'Overall Cond'}    {'Year Built'}    {'Year Remod/Add'}    {'Roof Style'}    {'Roof Matl'}    {'Exterior 1st'}    {'Exterior 2nd'}    {'Mas Vnr Type'}    {'Mas Vnr Area'}    {'Exter Qual'}    {'Exter Cond'}    {'Foundation'}    {'Bsmt Qual'}    {'Bsmt Cond'}    {'Bsmt Exposure'}    {'BsmtFin Type 1'}    {'BsmtFin SF 1'}    {'BsmtFin Type 2'}    {'BsmtFin SF 2'}    {'Bsmt Unf SF'}    {'Total Bsmt SF'}    {'Heating'}    {'Heating QC'}    {'Central Air'}    {'Electrical'}    {'1st Flr SF'}    {'2nd Flr SF'}    {'Low Qual Fin SF'}    {'Gr Liv Area'}    {'Bsmt Full Bath'}    {'Bsmt Half Bath'}    {'Full Bath'}    {'Half Bath'}    {'Bedroom AbvGr'}    {'Kitchen AbvGr'}    {'Kitchen Qual'}    {'TotRms AbvGrd'}    {'Functional'}    {'Fireplaces'}    {'Fireplace Qu'}    {'Garage Type'}    {'Garage Yr Blt'}    {'Garage Finish'}    {'Garage Cars'}    {'Garage Area'}    {'Garage Qual'}    {'Garage Cond'}    {'Paved Drive'}    {'Wood Deck SF'}    {'Open Porch SF'}    {'Enclosed Porch'}    {'3Ssn Porch'}    {'Screen Porch'}    {'Pool Area'}    {'Pool QC'}    {'Fence'}    {'Misc Feature'}    {'Misc Val'}    {'Mo Sold'}    {'Yr Sold'}    {'Sale Type'}    {'Sale Condition'}    {'SalePrice'}

В этом примере исходные имена переменных не нужны. Чтобы удалить их, присвойте массив пустой ячейки VariableDescriptions свойство.

housing.Properties.VariableDescriptions = {};

Достоверные данные перед анализом

Можно удалить Order переменная, потому что это - индекс строки и не нужный. Чтобы удалить одну переменную из таблицы, присвойте пустой массив, [], к переменной, так же, как вы удаляете строки или столбцы из матрицы.

housing.Order = [];

Существует 81 переменная, оставленная в таблице. Для полного анализа цен на жилье большинство переменных, вероятно, важно. Но для этого примера, необходимо только намного меньшее подмножество. Удалить нежелательные переменные один за другим утомительно. removevars функция может удалить их целиком, но в этом случае существует более легкий путь. Сначала перечислите переменные, которые вы хотите сохранить. Затем используйте индексирование, чтобы выбрать их и удалить другие. Выбор переменных по наименованию часто намного легче, чем выяснение их числовых индексов.

keep = ["PID" "MSSubClass" "LotFrontage", "LotArea" "Neighborhood" "BldgType" ...
        "OverallCond" "YearBuilt" "YearRemod_Add" "Foundation" "Heating" ...
        "CentralAir" "x1stFlrSF" "x2ndFlrSF" "LowQualFinSF" "GrLivArea" ...
        "BsmtFullBath" "BsmtHalfBath" "FullBath" "HalfBath" "BedroomAbvGr" ...
        "GarageType" "MoSold" "YrSold" "SalePrice"];
housing = housing(:,keep)
housing=2930×25 table
        PID         MSSubClass    LotFrontage    LotArea    Neighborhood    BldgType    OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    x1stFlrSF    x2ndFlrSF    LowQualFinSF    GrLivArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    MoSold    YrSold    SalePrice
    ____________    __________    ___________    _______    ____________    ________    ___________    _________    _____________    __________    _______    __________    _________    _________    ____________    _________    ____________    ____________    ________    ________    ____________    __________    ______    ______    _________

    "0526301100"      "020"           141         31770      "NAmes"        "1Fam"           5           1960           1960          "CBlock"     "GasA"        "Y"          1656            0            0            1656            1               0             1           0             3          "Attchd"        5        2010      2.15e+05
    "0526350040"      "020"            80         11622      "NAmes"        "1Fam"           6           1961           1961          "CBlock"     "GasA"        "Y"           896            0            0             896            0               0             1           0             2          "Attchd"        6        2010      1.05e+05
    "0526351010"      "020"            81         14267      "NAmes"        "1Fam"           6           1958           1958          "CBlock"     "GasA"        "Y"          1329            0            0            1329            0               0             1           1             3          "Attchd"        6        2010      1.72e+05
    "0526353030"      "020"            93         11160      "NAmes"        "1Fam"           5           1968           1968          "CBlock"     "GasA"        "Y"          2110            0            0            2110            1               0             2           1             3          "Attchd"        4        2010      2.44e+05
    "0527105010"      "060"            74         13830      "Gilbert"      "1Fam"           5           1997           1998          "PConc"      "GasA"        "Y"           928          701            0            1629            0               0             2           1             3          "Attchd"        3        2010     1.899e+05
    "0527105030"      "060"            78          9978      "Gilbert"      "1Fam"           6           1998           1998          "PConc"      "GasA"        "Y"           926          678            0            1604            0               0             2           1             3          "Attchd"        6        2010     1.955e+05
    "0527127150"      "120"            41          4920      "StoneBr"      "TwnhsE"         5           2001           2001          "PConc"      "GasA"        "Y"          1338            0            0            1338            1               0             2           0             2          "Attchd"        4        2010     2.135e+05
    "0527145080"      "120"            43          5005      "StoneBr"      "TwnhsE"         5           1992           1992          "PConc"      "GasA"        "Y"          1280            0            0            1280            0               0             2           0             2          "Attchd"        1        2010     1.915e+05
    "0527146030"      "120"            39          5389      "StoneBr"      "TwnhsE"         5           1995           1996          "PConc"      "GasA"        "Y"          1616            0            0            1616            1               0             2           0             2          "Attchd"        3        2010     2.365e+05
    "0527162130"      "060"            60          7500      "Gilbert"      "1Fam"           5           1999           1999          "PConc"      "GasA"        "Y"          1028          776            0            1804            0               0             2           1             3          "Attchd"        6        2010      1.89e+05
    "0527163010"      "060"            75         10000      "Gilbert"      "1Fam"           5           1993           1994          "PConc"      "GasA"        "Y"           763          892            0            1655            0               0             2           1             3          "Attchd"        4        2010     1.759e+05
    "0527165230"      "020"           NaN          7980      "Gilbert"      "1Fam"           7           1992           2007          "PConc"      "GasA"        "Y"          1187            0            0            1187            1               0             2           0             3          "Attchd"        3        2010      1.85e+05
    "0527166040"      "060"            63          8402      "Gilbert"      "1Fam"           5           1998           1998          "PConc"      "GasA"        "Y"           789          676            0            1465            0               0             2           1             3          "Attchd"        5        2010     1.804e+05
    "0527180040"      "020"            85         10176      "Gilbert"      "1Fam"           5           1990           1990          "PConc"      "GasA"        "Y"          1341            0            0            1341            1               0             1           1             2          "Attchd"        2        2010     1.715e+05
    "0527182190"      "120"           NaN          6820      "StoneBr"      "TwnhsE"         5           1985           1985          "PConc"      "GasA"        "Y"          1502            0            0            1502            1               0             1           1             1          "Attchd"        6        2010      2.12e+05
    "0527216070"      "060"            47         53504      "StoneBr"      "1Fam"           5           2003           2003          "PConc"      "GasA"        "Y"          1690         1589            0            3279            1               0             3           1             4          "BuiltIn"       6        2010      5.38e+05
      ⋮

Два из имен переменных не очень ясны. Переименуйте те переменные с лучшими именами при помощи VariableNames свойство.

housing.Properties.VariableNames(["GrLivArea" "LowQualFinSF"]) = ["TotalAboveGroundLivingArea" "LowQualFinishedArea"];

Существует два других имен переменных, начиная с 'x', тот нечетный взгляд. Другой способ переименовать их состоит в том, чтобы использовать renamevars функция. Если вы используете renamevars, присвойте выход исходной таблице. В противном случае обновление потеряно.

housing = renamevars(housing,["x1stFlrSF" "x2ndFlrSF"],["FirstFlrArea" "SecondFlrArea"]);

Преобразуйте и очистите типы данных

Шесть из переменных являются строковыми массивами. Концептуально они все содержат категориальные данные: дискретные, нечисловые значения, чертившие от маленького фиксированного набора возможных значений или категорий. Это - почти всегда хорошая идея преобразовать такие данные в categorical массивы. Можно использовать detectImportOptions функционируйте, чтобы управлять типами данных данных, которые вы считываете с readtable. Но вместо того, чтобы запуститься, можно преобразовать эти табличные переменные, чтобы иметь categorical тип данных. Например, преобразуйте Neighborhood переменная к categorical массив.

housing.Neighborhood = categorical(housing.Neighborhood);

Это присвоение перезаписи, или замены, переменная Neighborhood существующего текста в таблице с новым categorical переменная. Замена - то, что позволяет присвоению изменить тип данных. В отличие от этого это присвоение, используя индексацию:

housing.Neighborhood(:) = categorical(housing.Neighborhood)

значения присвоений в переменную существующего текста, поэлементно, вместо замены переменной. В этом случае housing.Neighborhood остается массив строк. Это поведение сопоставимо с поведением обычных переменных рабочей области. Присвоение путем индексации в массив не изменяет тип массива. Например, если вы индексируете в массив целых чисел и присваиваете значение с плавающей точкой элементу, значение является усеченным и сохранено как целое число.

x = uint32([1 2 3]);
x(2) = 2.2 % converted to 2, as a uint32
x = 1×3 uint32 row vector

   1   2   3

Присвоение с записью через точку является одним способом преобразовать тип переменной в таблице. convertvars функция иначе и обладает двумя преимуществами. Во-первых, это избегает любого беспорядка о перезаписи в противоположность присвоению в переменную. convertvars функционируйте всегда перезаписывает существующие переменные и преобразует их тип. Во-вторых, convertvars может работать больше чем с одной переменной за один раз. В housing существует еще несколько текстовых переменных быть преобразованным в categorical тип данных. Изменение их по одному стало бы утомительным, но convertvars может преобразовать больше чем одну переменную в одной команде.

housing = convertvars(housing,["BldgType" "Foundation"],"categorical");

Не необходимо явным образом перечислить переменные по наименованию или положение в таблице. Можно найти все табличные переменные, которые являются строковыми массивами и преобразуют их в categorical переменные. Чтобы задать табличные переменные, которые являются строковыми массивами, используйте указатель на функцию @isstring при вызове convertvars.

housing = convertvars(housing,@isstring,"categorical");

В обоих случаях присвойте выход convertvars назад к исходной таблице. В противном случае обновление потеряно.

Иногда, преобразовывая все текстовые переменные в categorical слишком много. Например, если бы имена текущих домовладельцев присутствовали в данных, то они не были бы целесообразны хранить их в categorical переменная. Имена домовладельцев не задают категории корпуса. Вы можете сохранить их имена в массиве строк вместо этого.

Как другой пример, CentralAir переменная является одной из переменных, которая была преобразована в categorical. Но потому что его категориями является только Y и N, может иметь больше смысла считать его logical переменная.

summary(housing.CentralAir)
     N       196 
     Y      2734 

logical тип данных (как все целочисленные типы) не позволяет отсутствующие значения (аналогичный NaN), в то время как categorical делает. CentralAir переменная, оказывается, не имеет никаких недостающих значений данных. Можно использовать любой logical или categorical как тип данных для CentralAir.

any(ismissing(housing.CentralAir))
ans = logical
   0

Преобразуйте тип данных в logical, с true соответствие Y, использование записи через точку, чтобы перезаписать существующий categorical переменная с новым logical один.

housing.CentralAir = (housing.CentralAir == "Y");

Отобразите конвертированные данные в housing.

housing
housing=2930×25 table
       PID        MSSubClass    LotFrontage    LotArea    Neighborhood    BldgType    OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    MoSold    YrSold    SalePrice
    __________    __________    ___________    _______    ____________    ________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    ______    ______    _________

    0526301100       020            141         31770       NAmes          1Fam            5           1960           1960           CBlock       GasA        true            1656               0                  0                        1656                    1               0             1           0             3           Attchd         5        2010      2.15e+05
    0526350040       020             80         11622       NAmes          1Fam            6           1961           1961           CBlock       GasA        true             896               0                  0                         896                    0               0             1           0             2           Attchd         6        2010      1.05e+05
    0526351010       020             81         14267       NAmes          1Fam            6           1958           1958           CBlock       GasA        true            1329               0                  0                        1329                    0               0             1           1             3           Attchd         6        2010      1.72e+05
    0526353030       020             93         11160       NAmes          1Fam            5           1968           1968           CBlock       GasA        true            2110               0                  0                        2110                    1               0             2           1             3           Attchd         4        2010      2.44e+05
    0527105010       060             74         13830       Gilbert        1Fam            5           1997           1998           PConc        GasA        true             928             701                  0                        1629                    0               0             2           1             3           Attchd         3        2010     1.899e+05
    0527105030       060             78          9978       Gilbert        1Fam            6           1998           1998           PConc        GasA        true             926             678                  0                        1604                    0               0             2           1             3           Attchd         6        2010     1.955e+05
    0527127150       120             41          4920       StoneBr        TwnhsE          5           2001           2001           PConc        GasA        true            1338               0                  0                        1338                    1               0             2           0             2           Attchd         4        2010     2.135e+05
    0527145080       120             43          5005       StoneBr        TwnhsE          5           1992           1992           PConc        GasA        true            1280               0                  0                        1280                    0               0             2           0             2           Attchd         1        2010     1.915e+05
    0527146030       120             39          5389       StoneBr        TwnhsE          5           1995           1996           PConc        GasA        true            1616               0                  0                        1616                    1               0             2           0             2           Attchd         3        2010     2.365e+05
    0527162130       060             60          7500       Gilbert        1Fam            5           1999           1999           PConc        GasA        true            1028             776                  0                        1804                    0               0             2           1             3           Attchd         6        2010      1.89e+05
    0527163010       060             75         10000       Gilbert        1Fam            5           1993           1994           PConc        GasA        true             763             892                  0                        1655                    0               0             2           1             3           Attchd         4        2010     1.759e+05
    0527165230       020            NaN          7980       Gilbert        1Fam            7           1992           2007           PConc        GasA        true            1187               0                  0                        1187                    1               0             2           0             3           Attchd         3        2010      1.85e+05
    0527166040       060             63          8402       Gilbert        1Fam            5           1998           1998           PConc        GasA        true             789             676                  0                        1465                    0               0             2           1             3           Attchd         5        2010     1.804e+05
    0527180040       020             85         10176       Gilbert        1Fam            5           1990           1990           PConc        GasA        true            1341               0                  0                        1341                    1               0             1           1             2           Attchd         2        2010     1.715e+05
    0527182190       120            NaN          6820       StoneBr        TwnhsE          5           1985           1985           PConc        GasA        true            1502               0                  0                        1502                    1               0             1           1             1           Attchd         6        2010      2.12e+05
    0527216070       060             47         53504       StoneBr        1Fam            5           2003           2003           PConc        GasA        true            1690            1589                  0                        3279                    1               0             3           1             4           BuiltIn        6        2010      5.38e+05
      ⋮

Все текстовые данные были преобразованы в categorical переменные. Но существует все еще несколько вещей вымыться.

OverallCond переменная была считана в как числовой массив, но его значения все чертятся от целых чисел 1-10. Можно оставить эти значения как числовые данные, но можно думать о них как о порядковом categorical данные. Когда categorical массив является порядковым, его категории имеют заданный порядок. Например, категории 10 и 5 может быть сравнен (10 > 5, потому что дом, условие которого оценивается как 10 теоретически более хорошо, чем один расчетный 5), но для этих сравнений, нет никакого числового значения к 10 - 5. Постараться не непреднамеренно обрабатывать OverallCond как числовые данные, преобразуйте его в порядковый categorical массив, который все еще включает реляционные сравнения, но предотвращает арифметические операции. Названия категории 1, 2, и так далее легки интерпретировать и приемлемы.

housing.OverallCond = categorical(housing.OverallCond,1:10,"Ordinal",true);

Точно так же MSSubClass переменная состояла из цифровых кодов в исходной электронной таблице. Можно думать о тех значениях, как являющихся categorical данные. Поскольку нет никакого математического порядка к этим конкретным кодам, категории являются непорядковыми (или номинал). В этом случае, readtable считайте те значения в том, когда текст, чтобы сохранить продвижение обнуляет в кодах. MSSubClass был затем преобразован в categorical данные.

В то время как MSSubClass имеет тип данных, который вы хотите, вы можете найти трудным интерпретировать коды как категории зданий. Файл, который описывает Данные о Корпусе Эймса, содержит определения цифровых кодов. При давании этим категориям читаемые имена могут помочь вам изучить данные. Чтобы прояснить, какие имена идут с который числа, задайте обоих категории (code) и их имена (subclass) в другом вызове categorical функция.

code = ["020" "030" "040" "045" "050" "060" "070" "075" "080" "085" "090" "120" "150" "160" "180" "190"];
subclass = ["1-STORY 1946 & NEWER ALL STYLES" ...
            "1-STORY 1945 & OLDER" ...
            "1-STORY W/FINISHED ATTIC ALL AGES" ...
            "1-1/2 STORY - UNFINISHED ALL AGES" ...
            "1-1/2 STORY FINISHED ALL AGES" ...
            "2-STORY 1946 & NEWER" ...
            "2-STORY 1945 & OLDER" ...
            "2-1/2 STORY ALL AGES" ...
            "SPLIT OR MULTI-LEVEL" ...
            "SPLIT FOYER" ...
            "DUPLEX - ALL STYLES AND AGES" ...
            "1-STORY PUD (Planned Unit Development) - 1946 & NEWER" ...
            "1-1/2 STORY PUD - ALL AGES" ...
            "2-STORY PUD - 1946 & NEWER" ...
            "PUD - MULTILEVEL - INCL SPLIT LEV/FOYER" ...
            "2 FAMILY CONVERSION - ALL STYLES AND AGES"];
housing.MSSubClass = categorical(housing.MSSubClass,code,subclass);

Названия категории для BldgType переменная не очевидна. Как с MSSubClass, более описательные имена могут помочь вам изучить категории создания. Чтобы отобразить число домов в каждой категории создания, используйте summary функция.

summary(housing.BldgType)
     1Fam        2425 
     2fmCon        62 
     Duplex       109 
     Twnhs        101 
     TwnhsE       233 

Только с пятью категориями можно безопасно перечислить новые названия категории в правильном порядке, не задавая старые названия. Чтобы переименовать категории, используйте renamecats функция.

types = ["Single-family Detached" "Two-family Conversion" "Duplex" "Townhouse End Unit" "Townhouse Inside Unit"];
housing.BldgType = renamecats(housing.BldgType,types);

GarageType переменная включает категорию NA, положение за Не Применимый. В GarageTypeN/A средние значения, что дом не имеет гаража. Но слишком легко перепутать NA с отсутствующим значением. Истинное отсутствующее значение означает, что нельзя определить, имеет ли дом гараж. Но в этих данных о корпусе, всегда известно, имеет ли дом гараж. Измените то одно название категории, чтобы сделать его значение более ясным.

housing.GarageType = renamecats(housing.GarageType,"NA","None");

Наконец, PID переменная была считана в как массив строк. В то время как его значения были числовыми, у некоторых из них было продвижение, обнуляет. readtable функция сохранила эту информацию путем хранения значений как строк. Затем вызов convertvars преобразованный PID переменная к categorical массив. PID идентификационные номера хранилищ, которые уникальны. Идентификационные номера присвоены по мере необходимости и не прибывают из фиксированного множества значений. Нет никакого конкретного преимущества в хранении их в categorical переменная. Если каждый идентификационный номер является категорией, то добавление нового идентификационного номера означает добавлять новую категорию в PID. Может быть более удобно преобразовать PID назад к массиву строк. Чтобы преобразовать значения в строки, используйте string функция.

housing.PID = string(housing.PID);

Отобразите результаты очистки предварительных данных.

housing
housing=2930×25 table
        PID                              MSSubClass                          LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    MoSold    YrSold    SalePrice
    ____________    _____________________________________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    ______    ______    _________

    "0526301100"    1-STORY 1946 & NEWER ALL STYLES                              141         31770       NAmes         Single-family Detached         5           1960           1960           CBlock       GasA        true            1656               0                  0                        1656                    1               0             1           0             3           Attchd         5        2010      2.15e+05
    "0526350040"    1-STORY 1946 & NEWER ALL STYLES                               80         11622       NAmes         Single-family Detached         6           1961           1961           CBlock       GasA        true             896               0                  0                         896                    0               0             1           0             2           Attchd         6        2010      1.05e+05
    "0526351010"    1-STORY 1946 & NEWER ALL STYLES                               81         14267       NAmes         Single-family Detached         6           1958           1958           CBlock       GasA        true            1329               0                  0                        1329                    0               0             1           1             3           Attchd         6        2010      1.72e+05
    "0526353030"    1-STORY 1946 & NEWER ALL STYLES                               93         11160       NAmes         Single-family Detached         5           1968           1968           CBlock       GasA        true            2110               0                  0                        2110                    1               0             2           1             3           Attchd         4        2010      2.44e+05
    "0527105010"    2-STORY 1946 & NEWER                                          74         13830       Gilbert       Single-family Detached         5           1997           1998           PConc        GasA        true             928             701                  0                        1629                    0               0             2           1             3           Attchd         3        2010     1.899e+05
    "0527105030"    2-STORY 1946 & NEWER                                          78          9978       Gilbert       Single-family Detached         6           1998           1998           PConc        GasA        true             926             678                  0                        1604                    0               0             2           1             3           Attchd         6        2010     1.955e+05
    "0527127150"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         41          4920       StoneBr       Townhouse Inside Unit          5           2001           2001           PConc        GasA        true            1338               0                  0                        1338                    1               0             2           0             2           Attchd         4        2010     2.135e+05
    "0527145080"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         43          5005       StoneBr       Townhouse Inside Unit          5           1992           1992           PConc        GasA        true            1280               0                  0                        1280                    0               0             2           0             2           Attchd         1        2010     1.915e+05
    "0527146030"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         39          5389       StoneBr       Townhouse Inside Unit          5           1995           1996           PConc        GasA        true            1616               0                  0                        1616                    1               0             2           0             2           Attchd         3        2010     2.365e+05
    "0527162130"    2-STORY 1946 & NEWER                                          60          7500       Gilbert       Single-family Detached         5           1999           1999           PConc        GasA        true            1028             776                  0                        1804                    0               0             2           1             3           Attchd         6        2010      1.89e+05
    "0527163010"    2-STORY 1946 & NEWER                                          75         10000       Gilbert       Single-family Detached         5           1993           1994           PConc        GasA        true             763             892                  0                        1655                    0               0             2           1             3           Attchd         4        2010     1.759e+05
    "0527165230"    1-STORY 1946 & NEWER ALL STYLES                              NaN          7980       Gilbert       Single-family Detached         7           1992           2007           PConc        GasA        true            1187               0                  0                        1187                    1               0             2           0             3           Attchd         3        2010      1.85e+05
    "0527166040"    2-STORY 1946 & NEWER                                          63          8402       Gilbert       Single-family Detached         5           1998           1998           PConc        GasA        true             789             676                  0                        1465                    0               0             2           1             3           Attchd         5        2010     1.804e+05
    "0527180040"    1-STORY 1946 & NEWER ALL STYLES                               85         10176       Gilbert       Single-family Detached         5           1990           1990           PConc        GasA        true            1341               0                  0                        1341                    1               0             1           1             2           Attchd         2        2010     1.715e+05
    "0527182190"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER        NaN          6820       StoneBr       Townhouse Inside Unit          5           1985           1985           PConc        GasA        true            1502               0                  0                        1502                    1               0             1           1             1           Attchd         6        2010      2.12e+05
    "0527216070"    2-STORY 1946 & NEWER                                          47         53504       StoneBr       Single-family Detached         5           2003           2003           PConc        GasA        true            1690            1589                  0                        3279                    1               0             3           1             4           BuiltIn        6        2010      5.38e+05
      ⋮

Создайте переменную для даты продажи

Таблица имеет отдельные переменные в течение месяца и года продажи. Более удобно, если те переменные объединены в одном datetime переменная. Присвоение при помощи записи через точку является хорошим способом добавить новую переменную на правом краю таблицы. Добавьте дату продажи как новая переменная.

housing.LastSoldDate = datetime(housing.YrSold,housing.MoSold,0,"Format","MMM yyyy");

Теперь удалите две исходных переменные. Легче перечислить переменные по наименованию и использовать removevars.

housing = removevars(housing,["YrSold" "MoSold"])
housing=2930×24 table
        PID                              MSSubClass                          LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _____________________________________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    _________    ____________

    "0526301100"    1-STORY 1946 & NEWER ALL STYLES                              141         31770       NAmes         Single-family Detached         5           1960           1960           CBlock       GasA        true            1656               0                  0                        1656                    1               0             1           0             3           Attchd        2.15e+05      Apr 2010  
    "0526350040"    1-STORY 1946 & NEWER ALL STYLES                               80         11622       NAmes         Single-family Detached         6           1961           1961           CBlock       GasA        true             896               0                  0                         896                    0               0             1           0             2           Attchd        1.05e+05      May 2010  
    "0526351010"    1-STORY 1946 & NEWER ALL STYLES                               81         14267       NAmes         Single-family Detached         6           1958           1958           CBlock       GasA        true            1329               0                  0                        1329                    0               0             1           1             3           Attchd        1.72e+05      May 2010  
    "0526353030"    1-STORY 1946 & NEWER ALL STYLES                               93         11160       NAmes         Single-family Detached         5           1968           1968           CBlock       GasA        true            2110               0                  0                        2110                    1               0             2           1             3           Attchd        2.44e+05      Mar 2010  
    "0527105010"    2-STORY 1946 & NEWER                                          74         13830       Gilbert       Single-family Detached         5           1997           1998           PConc        GasA        true             928             701                  0                        1629                    0               0             2           1             3           Attchd       1.899e+05      Feb 2010  
    "0527105030"    2-STORY 1946 & NEWER                                          78          9978       Gilbert       Single-family Detached         6           1998           1998           PConc        GasA        true             926             678                  0                        1604                    0               0             2           1             3           Attchd       1.955e+05      May 2010  
    "0527127150"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         41          4920       StoneBr       Townhouse Inside Unit          5           2001           2001           PConc        GasA        true            1338               0                  0                        1338                    1               0             2           0             2           Attchd       2.135e+05      Mar 2010  
    "0527145080"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         43          5005       StoneBr       Townhouse Inside Unit          5           1992           1992           PConc        GasA        true            1280               0                  0                        1280                    0               0             2           0             2           Attchd       1.915e+05      Dec 2009  
    "0527146030"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER         39          5389       StoneBr       Townhouse Inside Unit          5           1995           1996           PConc        GasA        true            1616               0                  0                        1616                    1               0             2           0             2           Attchd       2.365e+05      Feb 2010  
    "0527162130"    2-STORY 1946 & NEWER                                          60          7500       Gilbert       Single-family Detached         5           1999           1999           PConc        GasA        true            1028             776                  0                        1804                    0               0             2           1             3           Attchd        1.89e+05      May 2010  
    "0527163010"    2-STORY 1946 & NEWER                                          75         10000       Gilbert       Single-family Detached         5           1993           1994           PConc        GasA        true             763             892                  0                        1655                    0               0             2           1             3           Attchd       1.759e+05      Mar 2010  
    "0527165230"    1-STORY 1946 & NEWER ALL STYLES                              NaN          7980       Gilbert       Single-family Detached         7           1992           2007           PConc        GasA        true            1187               0                  0                        1187                    1               0             2           0             3           Attchd        1.85e+05      Feb 2010  
    "0527166040"    2-STORY 1946 & NEWER                                          63          8402       Gilbert       Single-family Detached         5           1998           1998           PConc        GasA        true             789             676                  0                        1465                    0               0             2           1             3           Attchd       1.804e+05      Apr 2010  
    "0527180040"    1-STORY 1946 & NEWER ALL STYLES                               85         10176       Gilbert       Single-family Detached         5           1990           1990           PConc        GasA        true            1341               0                  0                        1341                    1               0             1           1             2           Attchd       1.715e+05      Jan 2010  
    "0527182190"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER        NaN          6820       StoneBr       Townhouse Inside Unit          5           1985           1985           PConc        GasA        true            1502               0                  0                        1502                    1               0             1           1             1           Attchd        2.12e+05      May 2010  
    "0527216070"    2-STORY 1946 & NEWER                                          47         53504       StoneBr       Single-family Detached         5           2003           2003           PConc        GasA        true            1690            1589                  0                        3279                    1               0             3           1             4           BuiltIn       5.38e+05      May 2010  
      ⋮

Исследуйте данные с графиками

Исследуйте данные путем создания некоторых простых графиков. Много основных команд графического вывода не принимают таблицы как входные параметры. Но можно использовать запись через точку, чтобы передать одну или несколько табличных переменных в функцию построения графика. Вы вынимаете массивы из таблицы и передаете их как входные параметры к функции построения графика.

Например, сделайте график рассеивания отпускных цен зданий в таблице в зависимости от лет, в которых они были созданы.

scatter(housing.YearBuilt,housing.SalePrice,20,"filled");

Логарифмическое преобразование цен может показать более простое отношение между годом и ценой. Кроме того, можно показать больше информации в графике рассеивания при помощи жилой зоны зданий, чтобы окрасить маркеры. Жилые зоны имеют длинный правый хвост, таким образом, также полезно показать логарифмическое преобразование областей. Чтобы преобразовать эти две табличных переменные, перенесите их в вызовы log функция. Затем сделайте другой график рассеивания.

logSalePrice = log(housing.SalePrice);
logLivingArea = log(housing.TotalAboveGroundLivingArea);
scatter(housing.YearBuilt,logSalePrice,20,logLivingArea,"filled");

Чистые ошибки в данных

Любой большой набор комплексных данных, собранный за длительный период времени, может содержать некоторые ошибки. Проверьте ошибки в данных о корпусе. Даты в данных являются хорошим местом, чтобы запуститься. Сначала сравните YearBuilt к YearRemod_Add.

checkRows = housing.YearBuilt > housing.YearRemod_Add;
housing(checkRows,:)
ans=1×24 table
        PID                   MSSubClass               LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _______________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    _________    ____________

    "0907194160"    1-STORY 1946 & NEWER ALL STYLES        65          10739       CollgCr       Single-family Detached         5           2002           2001           PConc        GasA        true            1444              0                   0                        1444                    1               0             2           0             3            Attchd      2.03e+05       Mar 2009  

Для модернизации не возможно быть сделанным в 2 001, если сам дом был создан в 2 002. Если вы принимаете что YearBuilt значение, как известно, является ошибкой (предположение, которое должно быть подтверждено), можно использовать запись через точку, чтобы присвоить 2001 как год, в котором был создан этот дом.

housing.YearBuilt(checkRows) = 2001;

Как другая проверка, сравните новый LastSoldDate переменная к YearBuilt.

checkRows = housing.YearBuilt > year(housing.LastSoldDate);
housing(checkRows,:)
ans=2×24 table
        PID                   MSSubClass               LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    SalePrice     LastSoldDate
    ____________    _______________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    __________    ____________

    "0908154235"    2-STORY 1946 & NEWER                   313         63887       Edwards       Single-family Detached         5           2008           2008           PConc        GasA        true            4692             950                  0                        5642                    2               0             2           1             3            Attchd         1.6e+05      Dec 2007  
    "0908154195"    1-STORY 1946 & NEWER ALL STYLES        128         39290       Edwards       Single-family Detached         5           2008           2009           PConc        GasA        true            5095               0                  0                        5095                    1               1             2           1             2            Attchd      1.8385e+05      Sep 2007  

Существует другая проблема. Эти два здания были проданы в последних 2007, как показано в LastSoldDate переменная. Но соответствующее значение в YearBuilt 2008. Может случиться так что для этих зданий, годы в YearBuilt были зарегистрированы в ранних 2008 (другое подтверждение необходимости предположения). Обновите YearBuilt переменная, на этот раз при помощи записи через точку, чтобы присвоить двум строкам.

housing.YearBuilt(checkRows) = 2007;

Очистите Недостающие данные

Следующий шаг в очистке данных должен проверять на недостающие данные в числовом и categorical переменные. Тот logical переменная в housing не поддерживает отсутствующие значения. ismissing функция указывает, какие элементы таблицы имеют отсутствующие значения.

missingElements = ismissing(housing)
missingElements = 2930×24 logical array

   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
      ⋮

ismissing функция возвращает logical матрица, которая одного размера с таблицей. Подведение итогов столбцов той матрицы дает количество отсутствующих значений в каждой из переменных таблицы.

numMissing = sum(missingElements,1)
numMissing = 1×24

     0     0   490     0     0     0     0     0     0     0     0     0     0     0     0     0     2     2     0     0     0     0     0     0

Только три из переменных имеют недостающие данные, но без имен переменных не легко сказать, какие переменные они. Один способ сказать состоит в том, чтобы индексировать в VariableNames свойство таблицы найти имена, которые соответствуют переменным с отсутствующими значениями.

housing.Properties.VariableNames(numMissing > 0)
ans = 1×3 cell
    {'LotFrontage'}    {'BsmtFullBath'}    {'BsmtHalfBath'}

Решение, что сделать о недостающих данных, является проблемой. Если данные отсутствуют наугад, и существует только несколько отсутствующих значений, одна стратегия состоит в том, чтобы удалить те строки из таблицы. Четыре недостающих подвальных значения ванны (NaNs, в этом случае), происходят только в двух строках. Можно удалить те две строки при помощи rmmissing функция.

missingBsmtBath = ismissing(housing.BsmtFullBath) | ismissing(housing.BsmtHalfBath);
housing(missingBsmtBath,:)
ans=2×24 table
        PID                   MSSubClass               LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _______________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    _________    ____________

    "0903230120"    1-STORY 1946 & NEWER ALL STYLES         99          5940       BrkSide       Single-family Detached         7           1946           1950           PConc        GasA        true             896              0                   0                         896                   NaN             NaN            1           0             2            Detchd          79000      Mar 2008  
    "0908154080"    1-STORY 1946 & NEWER ALL STYLES        123         47007       Edwards       Single-family Detached         7           1959           1996           Slab         GasA        true            3820              0                   0                        3820                   NaN             NaN            3           1             5            Attchd      2.847e+05      Jun 2008  

housing = rmmissing(housing,"DataVariables",["BsmtFullBath" "BsmtHalfBath"]);
whos housing
  Name            Size             Bytes  Class    Attributes

  housing      2928x24            595935  table              

Этот вызов rmmissing удаляет только строки, которые имеют отсутствующие значения в BsmtFullBath и BsmtHalfBath. Эти 490 строк с пропавшими без вести LotFrontage значения находятся все еще в таблице. Можно удалить эти 490 строк, но выполнение так удаляет больше чем 16% данных. Также можно заполнить эти отсутствующие значения средним значением фасада при помощи fillmissing функция, но это не практично для этих данных. Для переменных, которые формируют временные ряды, fillmissing также переменные заполнения поддержек с интерполированными значениями или движущимся окном сглаживали значения. LotFrontage не временные ряды. Данные в этой переменной являются перекрестным частным набором данных.

Одна обычно используемая стратегия того, чтобы заполнить отсутствующие значения в перекрестных частных данных состоит в том, чтобы создать модель регрессии, чтобы предсказать отсутствующие значения подряд из ненедостающих данных в той строке. Простой график рассеивания указывает, что существует отношение логарифмического журнала между областью много и ее фасадом. То отношение предлагает модель.

loglog(housing.LotArea,housing.LotFrontage,'o')

Можно использовать то отношение логарифмического журнала, чтобы заполнить недостающий LotFrontage значения путем регрессирования значений на LotArea.

missingValues = ismissing(housing.LotFrontage);
beta = polyfit(log(housing.LotArea(~missingValues)),log(housing.LotFrontage(~missingValues)),1);
housing.LotFrontage(missingValues) = exp(polyval(beta,log(housing.LotArea(missingValues))));

Можно использовать запись через точку, чтобы работать над данными в таблице, когда вы используете функции, такие как polyfit и polyval это принимает числовые векторы, но не таблицы. Можно думать о таблице как о контейнере, который спроектирован, чтобы содержать данные, имеющие различные типы. Функционирует, такие как polyfit это специально для числовых входных параметров, не работают над таблицей, потому что таблица часто содержит нечисловые данные. Даже когда таблица содержит только числовые данные, это - все еще контейнер. Функции должны быть применены к содержимому таблицы. Используйте запись через точку, чтобы получить доступ к табличным переменным.

Добавьте оценочные отсутствующие значения, которые вы вычислили с polyfit и polyval к графику рассеивания. Простая схема обвинения не может быть достаточной в действительном анализе этих данных, но это иллюстрирует, как визуализировать и сделать расчеты на числовых данных в таблице.

hold on
loglog(housing.LotArea(missingValues),housing.LotFrontage(missingValues),'rx')
hold off

Арифметика на табличных переменных

Запись через точку была удобна для операций, таких как преобразование существующей табличной переменной, добавление новой переменной, присвоение значений, графический вывод и применение функций как polyval к табличной переменной. Запись через точку также удобна для арифметических операций на табличных переменных. Например, преобразуйте LotFrontage переменная от ног до метров.

housing.LotFrontage = 0.3048 * housing.LotFrontage;
housing.Properties.VariableUnits("LotFrontage") = "m"
housing=2928×24 table
        PID                              MSSubClass                          LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _____________________________________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    ____________    __________    _________    ____________

    "0526301100"    1-STORY 1946 & NEWER ALL STYLES                            42.977        31770       NAmes         Single-family Detached         5           1960           1960           CBlock       GasA        true            1656               0                  0                        1656                    1               0             1           0             3           Attchd        2.15e+05      Apr 2010  
    "0526350040"    1-STORY 1946 & NEWER ALL STYLES                            24.384        11622       NAmes         Single-family Detached         6           1961           1961           CBlock       GasA        true             896               0                  0                         896                    0               0             1           0             2           Attchd        1.05e+05      May 2010  
    "0526351010"    1-STORY 1946 & NEWER ALL STYLES                            24.689        14267       NAmes         Single-family Detached         6           1958           1958           CBlock       GasA        true            1329               0                  0                        1329                    0               0             1           1             3           Attchd        1.72e+05      May 2010  
    "0526353030"    1-STORY 1946 & NEWER ALL STYLES                            28.346        11160       NAmes         Single-family Detached         5           1968           1968           CBlock       GasA        true            2110               0                  0                        2110                    1               0             2           1             3           Attchd        2.44e+05      Mar 2010  
    "0527105010"    2-STORY 1946 & NEWER                                       22.555        13830       Gilbert       Single-family Detached         5           1997           1998           PConc        GasA        true             928             701                  0                        1629                    0               0             2           1             3           Attchd       1.899e+05      Feb 2010  
    "0527105030"    2-STORY 1946 & NEWER                                       23.774         9978       Gilbert       Single-family Detached         6           1998           1998           PConc        GasA        true             926             678                  0                        1604                    0               0             2           1             3           Attchd       1.955e+05      May 2010  
    "0527127150"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER      12.497         4920       StoneBr       Townhouse Inside Unit          5           2001           2001           PConc        GasA        true            1338               0                  0                        1338                    1               0             2           0             2           Attchd       2.135e+05      Mar 2010  
    "0527145080"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER      13.106         5005       StoneBr       Townhouse Inside Unit          5           1992           1992           PConc        GasA        true            1280               0                  0                        1280                    0               0             2           0             2           Attchd       1.915e+05      Dec 2009  
    "0527146030"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER      11.887         5389       StoneBr       Townhouse Inside Unit          5           1995           1996           PConc        GasA        true            1616               0                  0                        1616                    1               0             2           0             2           Attchd       2.365e+05      Feb 2010  
    "0527162130"    2-STORY 1946 & NEWER                                       18.288         7500       Gilbert       Single-family Detached         5           1999           1999           PConc        GasA        true            1028             776                  0                        1804                    0               0             2           1             3           Attchd        1.89e+05      May 2010  
    "0527163010"    2-STORY 1946 & NEWER                                        22.86        10000       Gilbert       Single-family Detached         5           1993           1994           PConc        GasA        true             763             892                  0                        1655                    0               0             2           1             3           Attchd       1.759e+05      Mar 2010  
    "0527165230"    1-STORY 1946 & NEWER ALL STYLES                            19.049         7980       Gilbert       Single-family Detached         7           1992           2007           PConc        GasA        true            1187               0                  0                        1187                    1               0             2           0             3           Attchd        1.85e+05      Feb 2010  
    "0527166040"    2-STORY 1946 & NEWER                                       19.202         8402       Gilbert       Single-family Detached         5           1998           1998           PConc        GasA        true             789             676                  0                        1465                    0               0             2           1             3           Attchd       1.804e+05      Apr 2010  
    "0527180040"    1-STORY 1946 & NEWER ALL STYLES                            25.908        10176       Gilbert       Single-family Detached         5           1990           1990           PConc        GasA        true            1341               0                  0                        1341                    1               0             1           1             2           Attchd       1.715e+05      Jan 2010  
    "0527182190"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER      17.465         6820       StoneBr       Townhouse Inside Unit          5           1985           1985           PConc        GasA        true            1502               0                  0                        1502                    1               0             1           1             1           Attchd        2.12e+05      May 2010  
    "0527216070"    2-STORY 1946 & NEWER                                       14.326        53504       StoneBr       Single-family Detached         5           2003           2003           PConc        GasA        true            1690            1589                  0                        3279                    1               0             3           1             4           BuiltIn       5.38e+05      May 2010  
      ⋮

Используя средние значения записи через точку, что умножение применяется не к housing таблица, которая не может быть сделана, потому что таблицы являются контейнерами, а скорее к ее LotFrontage переменная, которая является числовым вектором. С записью через точку вы извлекли LotFrontage из таблицы и отложенный модифицированная версия в.

Другой способ получить доступ к содержимому таблицы к индексу в него при помощи фигурных скобок, так же, как вы используете фигурные скобки, чтобы извлечь содержимое массива ячеек. Можно использовать изогнутое индексирование фигурной скобки, чтобы относиться к и работать с данными в таблице путем извлечения и перевставки содержимого. Например, преобразуйте LotFrontage назад к ногам при помощи изогнутого индексирования фигурной скобки.

housing{:,"LotFrontage"} = housing{:,"LotFrontage"} / 0.3048;
housing.Properties.VariableUnits("LotFrontage") = "ft";

Запись через точку и индексирование фигурной скобки являются различными синтаксисами для тех же видов операций. Они оба работают над содержимым таблицы. Кроме того, они оба позволяют вам задать табличную переменную и подмножество ее строк.

housing.LotArea(1:2)
ans = 2×1

       31770
       11622

housing{1:2,"LotArea"}
ans = 2×1

       31770
       11622

В то время как оба синтаксиса работают над содержимым таблицы, существует два тонких различия, чтобы рассмотреть.

Во-первых, ограничение изогнутого индексирования фигурной скобки - то, что оно присваивает в содержимое таблицы вместо замены переменной. Например, это присвоение не изменяет тип данных LotFrontage переменная в способе, которым делает присвоение с помощью записи через точку. Вызов single функция на правой стороне присвоения создает массив, имеющий single тип данных. Но путем индексирования в housing с фигурными скобками вы присваиваете значения от того массива в существующую табличную переменную. И тип данных LotFrontage double. Значения с правой стороны преобразованы назад в double этим присвоением.

housing{:,"LotFrontage"} = single(housing{:,"LotFrontage"});

Во-вторых, преимущество изогнутого индексирования фигурной скобки - то, что, в отличие от записи через точку, оно использует знакомый двумерный синтаксис индексирования. Этот синтаксис позволяет вам обратиться больше чем к одной переменной за один раз и также к подмножеству строк. Например, существует пять переменных, модули которых являются квадратными футами. Преобразование этих переменных к квадратным метрам по одному утомительно. Чтобы применить умножение ко всем пяти переменным целиком, используйте изогнутое индексирование фигурной скобки.

areaVars = ["LotArea" "FirstFlrArea" "SecondFlrArea" "LowQualFinishedArea" "TotalAboveGroundLivingArea"];
housing{:,areaVars} = 0.3048^2 * housing{:,areaVars};
housing.Properties.VariableUnits(areaVars) = "m^2";

Частая ошибка состоит в том, чтобы использовать индексирование круглой скобки вместо фигурных скобок, чтобы работать с содержимым таблицы. В то время как некоторые функции, такие как ismissing или varfun, действительно примите таблицу как их вход, много числовых операций, включая арифметику, сделайте нет. Например, это присвоение с помощью круглых скобок приводит к ошибке. try-catch блок фиксирует ошибку и отображает ее.

try
    housing(:,areaVars) = 0.3048^2 * housing(:,areaVars);
catch ME
    disp(ME.message)
end
Undefined function 'mtimes' for input arguments of type 'table'.

Это присвоение приводит к ошибке потому что housing(:,areaVars) 2928 5 таблица, не числовая матрица. Если вы использовали изогнутое индексирование фигурной скобки, такое как housing{:,areaVars}, затем результатом была бы 2928 5 числовая матрица. Поскольку таблицы спроектированы, чтобы содержать данные различных типов, включая нечисловые данные много функций, которые целесообразны только для числовых данных, не работают над таблицей. Запись через точку и изогнутое индексирование фигурной скобки существуют, чтобы дать, вы получаете доступ к данным в таблице.

Третий способ сделать вычисления на числовых переменных в таблице состоит в том, чтобы использовать varfun функция. Как изогнутое индексирование фигурной скобки, varfun может работать со всеми или только некоторыми переменными в таблице. В отличие от фигурных скобок, varfun работает с каждой табличной переменной отдельно. По умолчанию, varfun возвращает другую таблицу, содержащую переменную для каждого отдельного результата.

Иногда операция, которую вы хотите применить, является существующей функцией. Передать функцию в качестве аргумента к varfun, используйте указатель на функцию. Например, используйте round функционируйте к круглым данным в переменных, заданных areaVars.

roundedAreaTable = varfun(@round,housing,"InputVariables",areaVars)
roundedAreaTable=2928×5 table
    round_LotArea    round_FirstFlrArea    round_SecondFlrArea    round_LowQualFinishedArea    round_TotalAboveGroundLivingArea
    _____________    __________________    ___________________    _________________________    ________________________________

        2952                154                      0                        0                              154               
        1080                 83                      0                        0                               83               
        1325                123                      0                        0                              123               
        1037                196                      0                        0                              196               
        1285                 86                     65                        0                              151               
         927                 86                     63                        0                              149               
         457                124                      0                        0                              124               
         465                119                      0                        0                              119               
         501                150                      0                        0                              150               
         697                 96                     72                        0                              168               
         929                 71                     83                        0                              154               
         741                110                      0                        0                              110               
         781                 73                     63                        0                              136               
         945                125                      0                        0                              125               
         634                140                      0                        0                              140               
        4971                157                    148                        0                              305               
      ⋮

Если нет никакой функции, которая делает точно, что вы хотите, можно также записать анонимную функцию, чтобы сделать это.

sqMeters2sqFeet = @(x) x / 0.3048^2;
areaTable = varfun(sqMeters2sqFeet,housing,"InputVariables",areaVars)
areaTable=2928×5 table
    Fun_LotArea    Fun_FirstFlrArea    Fun_SecondFlrArea    Fun_LowQualFinishedArea    Fun_TotalAboveGroundLivingArea
    ___________    ________________    _________________    _______________________    ______________________________

       31770             1656                   0                      0                            1656             
       11622              896                   0                      0                             896             
       14267             1329                   0                      0                            1329             
       11160             2110                   0                      0                            2110             
       13830              928                 701                      0                            1629             
        9978              926                 678                      0                            1604             
        4920             1338                   0                      0                            1338             
        5005             1280                   0                      0                            1280             
        5389             1616                   0                      0                            1616             
        7500             1028                 776                      0                            1804             
       10000              763                 892                      0                            1655             
        7980             1187                   0                      0                            1187             
        8402              789                 676                      0                            1465             
       10176             1341                   0                      0                            1341             
        6820             1502                   0                      0                            1502             
       53504             1690                1589                      0                            3279             
      ⋮

Поскольку тем результатом является таблица, он может быть присвоен назад в исходную таблицу с индексированием круглой скобки.

housing(:,areaVars) = areaTable;
housing.Properties.VariableUnits(areaVars) = "ft^2";

Важно изучить различие между круглыми скобками в

housing(:,areaVars) = areaTable;

и фигурные скобки в

housing{:,areaVars} = 0.3048^2 * housing{:,areaVars};

Эти два присвоения оказывают то же влияние. Присвоение с круглыми скобками присваивает одну таблицу другому. Присвоение с фигурными скобками явным образом присваивает значения содержимому таблицы. Левые и правые стороны того присвоения являются числовыми матрицами. Поскольку изогнутое индексирование фигурной скобки извлекает и повторно вставляет данные, это - удобный способ изменить данные на месте. Присвоение от содержимого к содержимому может работать только с одним типом данных за один раз, в то время как присвоение от таблицы к таблице может переместить данные различных типов. Например, это присвоение приводит к ошибке, потому что оно включает смешанный числовой и categorical данные в индексировании фигурной скобки.

try
    housing{:,["LotFrontage" "OverallCond"]} = normalize(housing{:,["LotFrontage" "OverallCond"]});
catch ME
    disp(ME.message)
end
Unable to concatenate the specified table variables.

Поскольку varfun возвращает таблицу, присвоение с помощью индексирования круглой скобки не может изменить тип никаких табличных переменных. Например, это присвоение не преобразует переменных из double к single тип данных.

housing(:,areaVars) = varfun(@single,housing,"InputVariables",areaVars);

Чтобы преобразовать типы данных табличных переменных, используйте convertvars, как ранее показано.

Операции строки на данных в таблице

Поскольку изогнутое индексирование фигурной скобки извлекает переменные из таблицы как одна матрица, имеющая один тип данных, можно использовать его, чтобы выполнить операции строки через числовые переменные в таблице. Например, проверка на данных должна сравнить отдельные переменные площади в квадратных футах с TotalAboveGroundLivingArea. Извлеките первого при помощи фигурных скобок. Затем сравните их суммы строки с TotalAboveGroundLivingArea, извлеченный при помощи записи через точку.

area = housing{:,["FirstFlrArea" "SecondFlrArea" "LowQualFinishedArea"]}
area = 2928×3

        1656           0           0
         896           0           0
        1329           0           0
        2110           0           0
         928         701           0
         926         678           0
        1338           0           0
        1280           0           0
        1616           0           0
        1028         776           0
      ⋮

isequal(sum(area,2), housing.TotalAboveGroundLivingArea)
ans = logical
   1

Данные о площади в квадратных футах сопоставимы. Другой пример должен вычислить общее количество ванных в каждом доме путем извлечения четырех различных количеств ванной и складывания их через каждую строку.

bathCountVars = ["BsmtHalfBath" "HalfBath" "BsmtFullBath" "FullBath"];
bathCounts = housing{:,bathCountVars}
bathCounts = 2928×4

     0     0     1     1
     0     0     0     1
     0     1     0     1
     0     1     1     2
     0     1     0     2
     0     1     0     2
     0     0     1     2
     0     0     0     2
     0     0     1     2
     0     1     0     2
      ⋮

Вы можете думать, чтобы суммировать строки той матрицы как:

sum(housing{:,bathCountVars},2);

но та сумма не правильна. Полуванны считают только вдвое меньше, чем все ванные. Тренд в списках недвижимости с учетом нескольких полуванн путем подсчета их после десятичной точки. Умножение матриц делает ту операцию одной линией.

TotalBaths = housing{:,bathCountVars} * [.1; .1; 1; 1];

Замените те четыре переменные на TotalBaths, вместо того, чтобы добавлять новую переменную в конце таблицы. Начните эту замену при помощи addvars добавить TotalBaths рядом с существующими переменными.

housing = addvars(housing,TotalBaths, 'After',"HalfBath");

Существует ошибка в одной строке данных. Особняк, созданный в 2 007, вероятно, не имеет четырех половин ванн и никаких полных ванн.

groupcounts(housing,"TotalBaths")
ans=17×3 table
    TotalBaths    GroupCount    Percent 
    __________    __________    ________

       0.4             1        0.034153
         1           442          15.096
       1.1           293          10.007
       1.2            20         0.68306
       1.3             2        0.068306
         2           890          30.396
       2.1           558          19.057
       2.2            29         0.99044
         3           349          11.919
       3.1           288          9.8361
       3.2             6         0.20492
       3.3             1        0.034153
         4            25         0.85383
       4.1            16         0.54645
       4.2             3         0.10246
         6             2        0.068306
      ⋮

housing(housing.TotalBaths < 1,:)
ans=1×25 table
        PID                              MSSubClass                          LotFrontage    LotArea    Neighborhood          BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    BsmtFullBath    BsmtHalfBath    FullBath    HalfBath    TotalBaths    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _____________________________________________________    ___________    _______    ____________    _____________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    ____________    ____________    ________    ________    __________    ____________    __________    _________    ____________

    "0528228275"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER        53          3922        Blmngtn       Townhouse Inside Unit         5           2006           2007           PConc        GasA        true            1402              0                   0                        1402                    0               2             0           2           0.4             2            Attchd      1.942e+05      Jan 2007  

BsmtHalfBath количество должно быть двумя всеми ванными. Количества ванной являются все числовыми. Присвоение с фигурными скобками обновляет все три значения через ту строку.

housing{housing.TotalBaths < 1,["BsmtHalfBath" "FullBath" "TotalBaths"]} = [0 2 2.2];

Затем используйте removevars удалить избыточные исходные переменные.

housing = removevars(housing,bathCountVars)
housing=2928×21 table
        PID                              MSSubClass                          LotFrontage    LotArea    Neighborhood           BldgType           OverallCond    YearBuilt    YearRemod_Add    Foundation    Heating    CentralAir    FirstFlrArea    SecondFlrArea    LowQualFinishedArea    TotalAboveGroundLivingArea    TotalBaths    BedroomAbvGr    GarageType    SalePrice    LastSoldDate
    ____________    _____________________________________________________    ___________    _______    ____________    ______________________    ___________    _________    _____________    __________    _______    __________    ____________    _____________    ___________________    __________________________    __________    ____________    __________    _________    ____________

    "0526301100"    1-STORY 1946 & NEWER ALL STYLES                               141        31770       NAmes         Single-family Detached         5           1960           1960           CBlock       GasA        true            1656               0                  0                        1656                    2             3           Attchd        2.15e+05      Apr 2010  
    "0526350040"    1-STORY 1946 & NEWER ALL STYLES                                80        11622       NAmes         Single-family Detached         6           1961           1961           CBlock       GasA        true             896               0                  0                         896                    1             2           Attchd        1.05e+05      May 2010  
    "0526351010"    1-STORY 1946 & NEWER ALL STYLES                                81        14267       NAmes         Single-family Detached         6           1958           1958           CBlock       GasA        true            1329               0                  0                        1329                  1.1             3           Attchd        1.72e+05      May 2010  
    "0526353030"    1-STORY 1946 & NEWER ALL STYLES                                93        11160       NAmes         Single-family Detached         5           1968           1968           CBlock       GasA        true            2110               0                  0                        2110                  3.1             3           Attchd        2.44e+05      Mar 2010  
    "0527105010"    2-STORY 1946 & NEWER                                           74        13830       Gilbert       Single-family Detached         5           1997           1998           PConc        GasA        true             928             701                  0                        1629                  2.1             3           Attchd       1.899e+05      Feb 2010  
    "0527105030"    2-STORY 1946 & NEWER                                           78         9978       Gilbert       Single-family Detached         6           1998           1998           PConc        GasA        true             926             678                  0                        1604                  2.1             3           Attchd       1.955e+05      May 2010  
    "0527127150"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER          41         4920       StoneBr       Townhouse Inside Unit          5           2001           2001           PConc        GasA        true            1338               0                  0                        1338                    3             2           Attchd       2.135e+05      Mar 2010  
    "0527145080"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER          43         5005       StoneBr       Townhouse Inside Unit          5           1992           1992           PConc        GasA        true            1280               0                  0                        1280                    2             2           Attchd       1.915e+05      Dec 2009  
    "0527146030"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER          39         5389       StoneBr       Townhouse Inside Unit          5           1995           1996           PConc        GasA        true            1616               0                  0                        1616                    3             2           Attchd       2.365e+05      Feb 2010  
    "0527162130"    2-STORY 1946 & NEWER                                           60         7500       Gilbert       Single-family Detached         5           1999           1999           PConc        GasA        true            1028             776                  0                        1804                  2.1             3           Attchd        1.89e+05      May 2010  
    "0527163010"    2-STORY 1946 & NEWER                                           75        10000       Gilbert       Single-family Detached         5           1993           1994           PConc        GasA        true             763             892                  0                        1655                  2.1             3           Attchd       1.759e+05      Mar 2010  
    "0527165230"    1-STORY 1946 & NEWER ALL STYLES                            62.496         7980       Gilbert       Single-family Detached         7           1992           2007           PConc        GasA        true            1187               0                  0                        1187                    3             3           Attchd        1.85e+05      Feb 2010  
    "0527166040"    2-STORY 1946 & NEWER                                           63         8402       Gilbert       Single-family Detached         5           1998           1998           PConc        GasA        true             789             676                  0                        1465                  2.1             3           Attchd       1.804e+05      Apr 2010  
    "0527180040"    1-STORY 1946 & NEWER ALL STYLES                                85        10176       Gilbert       Single-family Detached         5           1990           1990           PConc        GasA        true            1341               0                  0                        1341                  2.1             2           Attchd       1.715e+05      Jan 2010  
    "0527182190"    1-STORY PUD (Planned Unit Development) - 1946 & NEWER      57.299         6820       StoneBr       Townhouse Inside Unit          5           1985           1985           PConc        GasA        true            1502               0                  0                        1502                  2.1             1           Attchd        2.12e+05      May 2010  
    "0527216070"    2-STORY 1946 & NEWER                                           47        53504       StoneBr       Single-family Detached         5           2003           2003           PConc        GasA        true            1690            1589                  0                        3279                  4.1             4           BuiltIn       5.38e+05      May 2010  
      ⋮

В отличие от фигурных скобок, varfun работает с каждой переменной в таблице отдельно. По этой причине, varfun не может сделать операций строки. Связанный функциональный rowfun может сделать операции строки. Это часто более просто и быстрее, чтобы использовать изогнутое индексирование фигурной скобки для операций строки.

Сокращения данных в таблице

В предыдущих разделах операции на числовых данных в таблице были преобразованиями, которые заменяют исходные значения. Много других важных операций являются сокращениями, результатами которых являются скаляры. Например, вычислите среднюю цену значений в SalePrice.

median(housing.SalePrice)
ans = 160000

median функция работает по столбцам над матрицами. Можно использовать изогнутое индексирование фигурной скобки, чтобы извлечь те четыре переменные как числовую матрицу. Затем можно вычислить медианы столбцов матрицы.

median(housing{:,["LotFrontage", "LotArea" "TotalAboveGroundLivingArea" "SalePrice"]})
ans = 1×4
105 ×

    0.0007    0.0944    0.0144    1.6000

Эта операция не присоединяет имена переменных или любые другие табличные метаданные к результату. Как альтернатива, можно использовать varfun применять median к каждой переменной в таблице. С varfun, результатом является другая таблица, которая содержит отдельные числовые результаты и сохраняет имена.

varfun(@median,housing,"InputVariables",["LotFrontage", "LotArea" "TotalAboveGroundLivingArea" "SalePrice"])
ans=1×4 table
    median_LotFrontage    median_LotArea    median_TotalAboveGroundLivingArea    median_SalePrice
    __________________    ______________    _________________________________    ________________

          69.183              9436.5                      1442                       1.6e+05     

Эти два способа получить медианы эквивалентны. Существует компромисс между сохранением имен переменных в другой таблице и наличием результатов в одном числовом векторе-строке. Путем вы выбираете, зависит от того, что вы планируете сделать результатом.

Операции на смешанных типах данных

Используя фигурные скобки, когда вычисление медиан имеет другой недостаток. Фигурные скобки требуют совместимого типа данных для всех переменных. Таким образом, данные, которые вы извлекаете из переменных, должны иметь типы данных, которые позволяют им быть конкатенированными в одну матрицу. Порядковый categorical данные могут также иметь средние значения. Поскольку categorical и числовые массивы не могут объединяться, эта операция результаты по ошибке.

median(housing{:,["LotFrontage", "LotArea" "OverallCond" "TotalAboveGroundLivingArea" "SalePrice"]})

Но потому что varfun работает с каждой переменной в таблице отдельно, нет никакого требования, чтобы переменные имели совпадающий тип данных или совместимые типы, позволяющие конкатенацию. Единственное требование - то, что все переменные должны поддерживать функцию, которая применяется. Вычислить медианы порядкового categorical переменные и числовые переменные в одном вызове функции используют varfun.

varfun(@median,housing,"InputVariables",["LotFrontage", "LotArea" "OverallCond" "TotalAboveGroundLivingArea" "SalePrice"])
ans=1×5 table
    median_LotFrontage    median_LotArea    median_OverallCond    median_TotalAboveGroundLivingArea    median_SalePrice
    __________________    ______________    __________________    _________________________________    ________________

          69.183              9436.5                5                           1442                       1.6e+05     

Смотрите также

| | | | | | | | | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте