0

研究のためにクリーンアップする一連のタブ タイプのデータがあります。各データセットは、典型的なきちんとした列ごとの形式ではなく、個々の郡ごとにタブ形式になっています (以下に示すように)。

1CURRENT DATE: XXX               AGE,SEX, RACE AND ETHNICITY OF PERSONS  PAGE    1
 BEGINNING DATE FOR DATA TOTALS: 01/83                    COUNTY    001
 ENDING DATE FOR DATA TOTALS: 12/83                                                                       RECORD COUNT    36
              Gender     Age_20    Age_21     Age_22   Age_23    Asian    Hispanic    White
Robbery       F           1          2          2        2         3         3          3
              M           3          3          2        2         4         3          3
Fraud         F           1          2          2        2         3         3          2
              M           2          3          2        2         4         3          3  
Arson         F           1          2          2        2         3         3          3
              M           4          3          2        2         4         3          4

1CURRENT DATE: XXX               AGE,SEX, RACE AND ETHNICITY OF PERSONS  PAGE    4
 BEGINNING DATE FOR DATA TOTALS: 01/83                    COUNTY    002
 ENDING DATE FOR DATA TOTALS: 12/83                                                                       RECORD COUNT    36
              Gender     Age_20    Age_21     Age_22   Age_23    Asian    Hispanic    White
Robbery       F           1          2          2        2         3         3          3
              M           2          3          2        2         4         4          3
Fraud         F           1          2          2        2         3         3          2
              M           2          3          2        2         4         6          3  
Arson         F           1          2          2        2         3         3          3
              M           4          3          2        2         4         3          4

1CURRENT DATE: XXX               AGE,SEX, RACE AND ETHNICITY OF PERSONS  PAGE    7
 BEGINNING DATE FOR DATA TOTALS: 01/83                    COUNTY    003
 ENDING DATE FOR DATA TOTALS: 12/83                                                                       RECORD COUNT    36
              Gender     Age_20    Age_21     Age_22   Age_23    Asian    Hispanic    White
Robbery       F           1          2          2        2         3         3          3
              M           3          3          2        2         4         3          3
Fraud         F           1          2          1        4         3         3          2
              M           2          3          2        2         4         3          3  
Arson         F           1          2          4        2         3         3          3
              M           4          3          2        2         4         3          4

タブタイプの性質のため、これらのデータセットをさらに分析するために Excel または stata に直接インポートすることはできません。私が計画しているのは、各郡の ID (つまり、郡 003、郡 002 など) と特定の種類の犯罪をコピーして貼り付け、次のような新しい列のようなデータセットを作成することです。

              Gender     Age_20    Age_21     Age_22   Age_23    Asian    Hispanic    White    County
Robbery       F           1          2          2        2         3         2          3        001
Robbery       F           1          2          2        2         2         3          3        002
Robbery       F           1          2          2        2         3         3          3        003

この新しいデータセットからデータをさらにクリーンアップします。

オンラインで検索したところ、Python は実際にこの種のファイルの特定の部分の新しいドキュメントへのコピー アンド ペーストを実行できることがわかりました。しかし、私は Python を初めて使用します。私の経験は主に Stata と SPSS です。どのコードがこのタイプのコピー アンド ペースト ジョブを実行するのか正確にはわかりません。

4

1 に答える 1

0

おそらく pandas を見たいと思うでしょ。詳細は形式によって異なりますが、データをよりクリーンなものに変換するのにそれほど時間はかかりません。次のことを行うには、よりきれいでハードコーディングされていない方法がありますが、ほとんど意識の流れの例を次に示します。

import pandas as pd

# read in a fixed-width file
df = pd.read_fwf("crime.tsv", widths=[14] + [10]*8, header=None)
# clean up the strings
df = df.applymap(lambda x: x.strip() if isinstance(x, basestring) else x)

# make a new column
df["County"] = None
# move over the county information
df["County"][df[5] == "COUNTY"] = df[6]
# fill the county info forwards into the empty places
df["County"].fillna(method='ffill', inplace=True)

# fill the crime information forwards
df[0].fillna(method='ffill', inplace=True)

# reset the columns from one of the examples
df.columns = ["Crime"] + list(df.ix[3,1:-1]) + ["County"]
# get rid of any of the headings left in the table
df = df[~(df["Gender"] == "Gender")]

# toss anything which still has empty cells
df = df.dropna()

# reset the index, and fix the types
df = df.set_index(["Crime", "Gender", "County"]).astype(int)
df = df.reset_index()

生産する

>>> df
      Crime Gender County  Age_20  Age_21  Age_22  Age_23  Asian  Hispanic  White
0   Robbery      F    001       1       2       2       2      3         3      3
1   Robbery      M    001       3       3       2       2      4         3      3
2     Fraud      F    001       1       2       2       2      3         3      2
3     Fraud      M    001       2       3       2       2      4         3      3
4     Arson      F    001       1       2       2       2      3         3      3
5     Arson      M    001       4       3       2       2      4         3      4
6   Robbery      F    002       1       2       2       2      3         3      3
7   Robbery      M    002       2       3       2       2      4         4      3
8     Fraud      F    002       1       2       2       2      3         3      2
9     Fraud      M    002       2       3       2       2      4         6      3
10    Arson      F    002       1       2       2       2      3         3      3
11    Arson      M    002       4       3       2       2      4         3      4
12  Robbery      F    003       1       2       2       2      3         3      3
13  Robbery      M    003       3       3       2       2      4         3      3
14    Fraud      F    003       1       2       1       4      3         3      2
15    Fraud      M    003       2       3       2       2      4         3      3
16    Arson      F    003       1       2       4       2      3         3      3
17    Arson      M    003       4       3       2       2      4         3      4

その後、あらゆる種類のきちんとしたことができます。

于 2013-03-01T04:34:04.907 に答える