一般に、XMLファイルを処理するための特定のRパッケージやスニペットよりも、XMLの概念についてより多くの支援が必要なようです(ただし、これは後で来る可能性があります;-))。また、 R、Stata、またはその他の統計ツールで使用する前に、入力ファイルをより適切な形式に変換することをお勧めします。
<incident>
説明のために、質問で言及されたソースからの最初のレコードを以下に複製しています。他のインシデントも同様の構造になると想定できます。DTDファイルを調べることで、ルートに他のノード(「レコード」)が含まれているかどうか、<incidents>
およびこれらのインシデントがまったく同じ構造を持っているかどうか(または、たとえば、一部のインシデントタイプに余分な<LocalWeatherConditions>
ノードなどがある場合)をアサートできます。たとえば、<facilityList>
ノードがオプションの場合)。この議論の目的のために、すべてのインシデントレコードが同じ一般的な構造を持っていると仮定することはOKです。
「 1つの行が単一のテロ事件を表し、xmlからの情報が欠落していないはずのスプレッドシート」という要求は、カーディナリティの問題のために達成するのが難しい場合があります。これは、インシデントレコードの一部のサブ要素が繰り返される可能性があることを示すための空想的な方法です。たとえば、名前が「リスト」で終わるノードのほとんどには、通常、複数のサブレコードを含めることができます(ところで、この「名前のリスト」はXMLルールではなく、この特定のデータベースの管理者が使用している規則にすぎません)。 。たとえば、<CityStateProvince>
CityとStateProvinceの値がそれぞれ独自の値を持つ複数のレコードが存在する場合や、値の長いリストを持つ複数の`レコードが存在する可能性があります。
データを1行に「フラット化」することができます。一般的なプロセスは「非正規化」の1つであり、単一の行に番号付きのラベルが付いた列が含まれます。
..., City1, StateProv1, City2, StateProv2, City3, StateProv3 ... (btw where do we stop?)
さらに、基礎となる言語の(絶対的または実用的な)制限を超える可能性のある幅広いレコードにつながることを除けば、この形式は、統計全体の集約と実行に関して非常に厄介です:StateProvでカウントを取得したい場合:今必要ですこの情報が見つかる可能性のあるすべての場所を「調べる」ようにプログラムに指示します: "StateProv1"、 "StateProv2" .. ..
統計処理により適した代替形式は、複数の「スプレッドシート」にエクスポートすることです。これにより、メインスプレッドシートには、インシデントレコードのすべての再現不可能なプロパティについて、インシデントごとに1行が含まれ、追加のスプレッドシートには、繰り返される可能性のある「サブレコード」が含まれます。これらのサブレコードには、メインスプレッドシート(ここではおそらくICN)の基になるレコードに関連付けるために使用できる「キー」が含まれている必要があります。また、たとえばIncidateDateを取り込むなど、メインスプレッドシートから重複した情報が含まれる場合もあります。 、暗殺フラグなど。[別の種類の]この非正規化の目的は、これらの追加のスプレッドシートを、対象となる分析の一部に対して自給自足にすることです。
そこからどこへ行くの?
- XML入力から生成されるspeadsheetの正確な形式を定義する必要があります。
番号付きラベルのアプローチは実用的ではないという事実に同意する可能性が高いため、入力データを確認し、それをどのように分割するかを確認する必要があります(ここでもデータを複製する機能があります)。
- たとえば、このXMLパッケージのRを使用して、入力をR変数(テーブル、リスト、ベクトルなど)に解析できます。
- または、外部プログラムを使用して、XML入力を表形式(CSV形式など)にエクスポートすることもできます。これは、Rによってより簡単に取り込まれます。
前述のXMLパッケージを使用していますが、小さなファイル(および主に出力目的)の場合、非効率的でバグが発生しやすく(テキストファイルで実行できるように、効果的な入力を簡単に検査する機能がない)、一般的に不器用である可能性があります。
幸いなことに、この変換/インポートジョブをすぐに乗り越えて、手元の統計に集中することができます!
いくつかの最後の指針:
DTD言語を簡単に理解できない場合でも、XTDファイル、特にファイル<xs:enumeration ...>
の大部分を構成する多くのリストを確認してください。これらは係数(R用語)の値を提供します。もちろん、Rはデータからこれらも推測できますが、相互参照の目的で列挙からの情報を使用できます(データが事前に適切にロードされたことを確認するためなど)。
おそらく、いくつかのレコードサンプルからスキーマを推測することは問題ありません(XMLに慣れていない人は、XSDファイルよりもXMLデータを簡単に理解できます)。ただし、確実にXSDファイルを読み取る必要があります。
<IncidentList xmlns="http://wits.nctc.gov" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wits.nctc.gov WITS.XSD">
<Incident>
<ICN>200458431</ICN>
<Subject>10 civilians killed, at least 45 wounded by suspected GAM in Peureulak, Indonesia</Subject>
<Summary>On 1 January 2004, in Peureulak, Aceh Province, Indonesia, a bomb exploded at a concert, killing ten civilians, wounding 45 others, and causing major damage to the stage area. Many of the victims were Indonesian teenagers. Police blamed the Free Aceh Movement (GAM), although the GAM denied responsibility. No other group claimed responsibility.</Summary>
<IncidentDate>01/01/2004</IncidentDate>
<ApproximateDate>No</ApproximateDate>
<MultipleDays>No</MultipleDays>
<EventTypeList>
<EventType>Bombing</EventType>
</EventTypeList>
<Assassination>No</Assassination>
<Suicide>No</Suicide>
<WeaponTypeList>
<WeaponType>Explosive</WeaponType>
</WeaponTypeList>
<IED>No</IED>
<Location>
<Region>East Asia-Pacific</Region>
<Country>Indonesia</Country>
<CityStateProvinceList>
<CityStateProvince>
<City>Peureulak</City>
<StateProvince>Aceh</StateProvince>
</CityStateProvince>
</CityStateProvinceList>
</Location>
<VictimList>
<Victim>
<VictimType>Civilian</VictimType>
<Combatant>No</Combatant>
<Nationality>Indonesia</Nationality>
<DefiningCharacteristicList>
<DefiningCharacteristic>None</DefiningCharacteristic>
</DefiningCharacteristicList>
<TargetedCharacteristicList>
<TargetedCharacteristic>Unknown</TargetedCharacteristic>
</TargetedCharacteristicList>
<Indicator>Targeted</Indicator>
<Child>No</Child>
<DeadCount>10</DeadCount>
<WoundedCount>45</WoundedCount>
<HostageCount>0</HostageCount>
</Victim>
</VictimList>
<FacilityList>
<Facility>
<FacilityType>Public Place/Retail</FacilityType>
<Combatant>No</Combatant>
<Nationality>Indonesia</Nationality>
<DefiningCharacteristicList>
<DefiningCharacteristic>None</DefiningCharacteristic>
</DefiningCharacteristicList>
<TargetedCharacteristicList>
<TargetedCharacteristic>Unknown</TargetedCharacteristic>
</TargetedCharacteristicList>
<Indicator>Targeted</Indicator>
<Damage>Light</Damage>
<Quantity>1</Quantity>
</Facility>
</FacilityList>
<PerpetratorList>
<Perpetrator>
<Nationality>Indonesia</Nationality>
<Characteristic>Secular/Political/Anarchist</Characteristic>
</Perpetrator>
</PerpetratorList>
</Incident>
[...]
</IncidentList>