この実験の目的は、pandas ライブラリを使用することであり、pandas のファイルの読み書き、カスケード、null 値処理、クエリ文、データ処理などの機能を利用します。
1.パンダモジュールをインポートする
Pandas ライブラリは、無料のオープン ソースのサードパーティ Python ライブラリです。Python データ分析に不可欠なツールの 1 つです。Python データ分析用の高性能で使いやすいデータ構造、つまり Series と DataFrame を提供します。
pip install pandas を使用してインストールし、pandas を pd ステートメントとしてインポートしてモジュールをインポートします。
2. 人口データのダウンロード
米国の人口データは、GitHub - jakevdp/data-USstates: Collection of CSV data on US states for Pandas merge Demonsからダウンロードできます。必要なファイルは次のとおりです。
3. 人口データの処理
1. カスケードとカスケード後のデータ処理
read_csvでファイルを読み込みます。
area = pd.read_csv( 'state-areas.csv' )
abbr = pd.read_csv( 'state-abbrevs.csv' )
Pop = pd.read_csv( 'state-population.csv' )
人口ファイルと州略称ファイルを連結します。州略語列に従って、pop と abbr がマージされ、それぞれ州/地域列および略語列に従って 1 対多のマージが実行されます。すべての情報を保持するには、外部マージを使用し、left_on および right_on でマージ列を指定します。ただし、外部マージを使用すると、データは失われませんが、NULL 値が残ります。
Pop2 = pd.merge(pop , abbr , how = 'outer' , left_on = 'state/region' , right_on = 'abbreviation' )
NULL 値を表示するには info を使用します。
印刷(pop2.info())
出力は次のとおりです。
州・地域列と略称列が重複しているため、1列削除できますが、略称列はnull値となっていることが分かりますので、略称列を削除します。インプレースとは、新しいデータを作成せずに、pop2 上でデータ変更が直接行われることを意味します。
Pop2.drop(ラベル= '略語' 、軸= 1 、インプレース= True )
Pop2.to_excel( 'pop2.xlsx' )
isnull().any() を使用します。特定の列にデータが欠落している場合にのみ、TRUE が表示されます。
print (pop2.isnull().any())
出力は次のとおりです。
人口列と州列の両方に NULL 値があることがわかります。人口列は入力できませんが、州名は入力できます。次に、州名を入力しましょう。
まず、state 列のどの行が null であるかを確認します。
cond = Pop2[ 'state' ].isnull()
print (cond)
出力は次のとおりです。
「USA」と「PA」の 2 つの州のみが null 値を持つことがわかります。
表に書き込んだ結果は以下の通りです。
2. NULL値処理
次に、データを入力し、データが欠落しているかどうかに応じてデータを表示し、欠落が True の場合は表示します。「州/地域」列で PR に等しいデータを探します。
cond1 = Pop2[ '州/地域' ] == 'PR'
課題を作成します。
Pop2[ '州' ][cond1] = 'プエルトリコ'
同様に、USA 列のデータを入力します。
記入後に表に書き込まれた結果は以下の通りです。
母集団の値が空であることを確認し、母集団が空の行を削除します。
cond = Pop2[ '人口' ].isnull()
Pop2.dropna( inplace = True )
ファイルに書き込む
Pop2.to_excel( 'pop3.xlsx' )
出力は次のとおりです。
空の人口データ行が削除されていることがわかります。
3. 3 つのファイルが連結され、空の値が埋め込まれます。
エリア ファイルをマージするには、左マージを使用します。
Pop4 = pd.merge(pop2 , area , how = 'outer' )
空のデータを探し続けます。
print (pop4.isnull().any())
出力は次のとおりです。
列領域(平方 mi) にデータが欠落していることがわかりました。どの行であるかを調べるには、どの状態にデータがないのかを調べる必要があります。
cond = Pop4[ '面積 (平方マイル)' ].isnull()
Pop4[cond] は、cond が true で、usa にデータがないことが判明した場合に行を出力することを意味します。
印刷(pop4[cond])
出力は次のとおりです。
アメリカの面積は各州の面積の合計なので、各州の面積の合計を計算できます。
sum_area = area[ '面積 (平方マイル)' ].sum()
空のデータを埋めます。空のデータは米国からのものであるため、fillna 関数を使用します。そしてファイルに書き込みます。
Pop4.fillna(sum_area , inplace = True )
Pop4.to_excel( 'pop4.xlsx' )
Pop4.xlsx ファイルは次のとおりです。
4. 人口データの処理
2010 年の全国人口データを処理することを選択します。まず、クエリ ステートメントを使用して、各州の 2010 年の人口データを検索します。
Pop_2010 = Pop4.query( "年 == 2010 および年齢 == '合計'" )
クエリ結果を処理し、州/地域列を新しい行インデックスとして使用し、ここで set_index 関数を使用します。
Pop_2010.set_index( '州/地域' , inplace = True )
「pop2010.xlsx」ファイルに書き込みます。
Pop_2010.to_excel( 'pop2010.xlsx' )
出力は次のとおりです。
人口密度を計算します。この時点で受け取ったpop_densityのタイプがSeriesであることに注意してください。
Pop_density = Pop_2010[ '人口' ]/pop_2010[ '面積 (平方マイル)' ]
このとき、pop_density はシリーズなので、結合するには DateFrame に変換する必要があります。
Pop_density = DataFrame(pop_density , columns =[ 'pop_density' ])
result = pd.merge(pop_2010 , Pop_density , left_index = True, right_index = True )
ファイルに書き込みます。
result.to_excel( 'result.xlsx' )
出力は次のとおりです。
最後に、人口密度で並べ替えます。
result.sort_values( by = 'pop_density' , inplace = True )
result.to_excel( 'result.xlsx'