2016-04-19 2 views
2

スタータの.doファイルとRのMCMC以外は、VBのAOL warezグループアプリケーション以降にコーディングしていません。だから私はここから始めることを謝る。Pysal(センサスブロックグループ)のCSVに完全なQUEEN隣接アレイを保存する

私は、国勢調査ブロックグループレベルで人口統計データと曝露データを扱う環境裁判用紙を作成しています。ブロックグループのサイズは比較的小さいので、汚染源および1つのブロックグループに住む人々は、一番近い第一次隣接物に容易に影響を与えることができる。私はダラダラになり、FIPSコードを集めて戻ってきましたが、それはちょうど悪い数学です。

ACS年のシェイプファイルを取得しました。最初にarcGISを試しましたが、どこにも行きませんでした。私はその後、

インポートした形状ファイル は、すべての216,000ブロックグループに(12時間)クイーンネイバー分析を実行したことをPysalについて読み、インストール[52]で

:w.histogram アウト[52]:

[(0、87)、 (1、709)、 (2、3634)、 (3、16627)、 (4、48736)、 (5、56952)、 (6、42848) (8,12646)、 (9,6244)、 (10、3040)、 (11、1515)、 (12、759)、 (13、432)、 (14、233)、 (15、128)、 (16、85)、 (17、44)、 (18、34)、 (19、20)、 (20、21)、 (21、13)、 (22、8)、 (23、7)、 ( 24、6)、 (25、1)、 (26、3)、 (27、1)、 (28、2)、 (29、1)、 (30、2)、 (31 (32,2)、 (33,2)、 (34、0)、 (35、1)、 (36、1)、 (37、1)、 (38、0)、 (39、0)、 (40、0)、 (41、0)、 (42、0)、 (43、0)、 (44、0)、 (45、0)、 (46、1)、 (47、0)、 ( 48、0)、 (49、0)、 (50、0)、 (51、0)、 (52、0)、 (53、0)、 (54、0)、 (55 、0)、 (56,0)、 (57,0)、私は必要なもの(58、0)、 (59、0)、 (60、0)、 (61、1)]

は.CSVです(または、正直私は/ペーストをコピーする場合は何も行いますそれはFIPS(ACSシェイプファイルがIDのために使用するものであるはずである)によって各ブロックグループを列挙し、それは近隣のリストです。

私がリストを手に入れることができるなら、私はそれを私がより快適な環境に移動することができます。私はそこに座って昨夜何時間も演奏し、numpy.savetextにいくつかの亀裂が入るかもしれませんが、FIPSコードは12桁であるため、数字は1つの列であり、数字は科学記法で保存されていました。一度タプルが範囲外だったと私は言った。それは私が得た最も近いものだと私は思う。

私は、

はあなたがpysalとtxtファイルにWを書き込むことができ、 デイブ

答えて

1

、ありがとうございました。 さまざまな形式がありますが、「GAL」ファイルが最も簡単です。

これはtxtファイルです。最初の行は図形の数です。 各レコードは、次に2行、例えば

id n 
id0, id1, ... 

where: 
    id is the id of the polygon, 
    n is the number of neighbors 
    id0 is the id of the first neighbor 
    ... and so on 

ある:...

3 
0 1 
1 
1 2 
0 2 
2 1 
1 

グラフ0-1-2を説明し、0は1人の隣人(1)、1 2つのネイバーを有する(を有しています0,2)などがあります。

>>> W = pysal.queen_from_shapefile("/path/to/shapefile.shp") 
>>> out = pysal.open("output.gal", 'w') 
>>> out.write(W) 
>>> out.close() 

注...ギャルファイルにあなたのWを書き込むには:IDSはオフセットがあります。 0は最初のポリゴン、1は2番目のポリゴンなどです。

オフセットをFIPSコードにリンクする場合は、これを自分で行う必要があります。しかし、正しい順序でFIPSコードを抽出するには、pysalを使用することができます。

>>> dbf = pysal.open("/path/to/shapefile.dbf", "r") 
>>> print dbf.header 
[column names, ... ] 
>>> FIPS = dbf.by_col("name_of_fips_code_column") 
>>> FIPS = map(str, FIPS) #make sure we're writing strings 
>>> out = open('fips.txt','w') 
>>> out.write('\n'.join(FIPS)) 
>>> out.close() 
+0

ああ、あなたは私のフリーキンのヒーローです。 Wを.galにして、Excelに貼り付けて、今度は同じ順序でFIPSコードを貼り付けるだけで、すべての行を並べることができます。本当にありがとうございます。 –

+0

私はちょうどコードの例を修正しました... fips.txtファイルのout.close()を呼び出すことを忘れないでください。または、切り詰められている可能性があります。 – Charles

+0

私はそれがまるで同じように働くようになった。私はちょうど.galを取ってExcelに入れ、次に1行おきにして、新しいシートに貼り付け、もう1行と同じようにしてから、両方の列をfips列に貼り付けました(12桁の数字は実際の "GEOID" .dbfの中に)。彼らは両方とも同じnRowだったので、私はそれが正しいと思う。 エクセルで= INDEXコマンドを使用しているだけで、隣接列挙をfips列に戻して一致させることができます。私が終わったら、いくつかサンプルを取って無作為にマップし、すべてが正しく整列していることを確認します。 –

関連する問題