[データ解析]7.Pandas
1.データフレーム
import pandas as pd
index = pd.date_range('1/1/2000', periods=8)
print(index)
#DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06', '2000-01-07', '2000-01-08'], dtype='datetime64[ns]', freq='D')
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df
print(df['B'])
print(df['B'] > 0.4)
import pandas as pd
import numpy as np
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df2 = df[df['B']>0.4]
df2
df2.T #데이터 프레임 뒤집기
-2 D配列複写
🌼 行優先計算vs列優先計算
1)行方向軸の計算
import pandas as pd
import numpy as np
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df['D'] = df['A'] / df['B']
df
2)列方向軸の計算
import pandas as pd
import numpy as np
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df['D'] = df['A'] / df['B']
df['E'] = np.sum(df, axis=1)
df.head()
df['E'] = np.sum(df, axis=1)
:行為基準を合計してEという列を生成df.head()
:上位5行のみ出力2-1)すべてのデータを優先的に計算する列
import pandas as pd
import numpy as np
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df['D'] = df['A'] / df['B']
df['E'] = np.sum(df, axis=1)
df = df.sub(df['A'], axis=0)
df.head()
df = df.sub(df['A'], axis=0)
:A列ごとに全体データを減算import pandas as pd
import numpy as np
index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.rand(8,3), index=index, columns=list('ABC'))
df['D'] = df['A'] / df['B']
df['E'] = np.sum(df, axis=1)
df = df.sub(df['A'], axis=0)
df = df.div(df['C'], axis=0)
df.to_csv('test.csv')
df.head()
df = df.div(df['C'], axis=0)
:すべてのデータをC列で区切る.df.to_csv('test.csv')
:データフレームを格納するcsvファイル2.Pandasで人口構造を分析する
🌼アルゴリズム#アルゴリズム#
1.データの読み出し
1.1)すべてのデータを総人口の割合で割る
1.2)総人口数と年齢層人口数の削除
2.知りたい地域入力を取得する
3.当該地区の人口構造を保存する
4.この地域と人口構造が最も似ている地域を探す
4.1)全国の全ての地域の一つを選択する
4.2)入力地域の0歳人口比率-選定地域の0歳人口比率
4.3)100歳以上の人口比率を計算した後、計算した値を二乗加算する
4.4)全国の全ての地域で重複した差異が最も少ない地域を選択する
5.両地の可視化
1)データの読み出し
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df
1.1)人口総数による列の区分と削除
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0) #전체 데이터를 총인구수로 나누어 비율을 구함
del df['총인구수'], df['연령구간인구수'] # 필요 없는 두 열 삭제
df
2.必要な地域の入力を受け取り、その地域の人口構造を保存する
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0)
del df['총인구수'], df['연령구간인구수']
name = input('원하는 지역?')
a = df.index.str.contains(name) #해당 문자가 있는 행 찾음
df2 = df[a]
df2
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0) #전체 데이터를 총인구수로 나누어 비율을 구함
del df['총인구수'], df['연령구간인구수'] # 필요 없는 두 열 삭제
df
import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0)
del df['총인구수'], df['연령구간인구수']
name = input('원하는 지역?')
a = df.index.str.contains(name) #해당 문자가 있는 행 찾음
df2 = df[a]
df2
df.index.str.contains(name)
:データフレームのインデックス文字列に必要な文字を含む行を検索import pandas as pd
import numpy as np
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0)
del df['총인구수'], df['연령구간인구수']
name = input('원하는 지역?')
a = df.index.str.contains(name)
df2 = df[a]
df2
import matplotlib.pyplot as plt
plt.rc('font', family='AppleGothic')
df2.T.plot()
plt.show()
3.入力地域と人口構造が似ている地域の検索と可視化
x = df.sub(df2.iloc[0], axis=1) # 전체지역에서 해당지역의 열과 뺄셈
y = np.power(x, 2) # 해당값 제곱
z = y.sum(axis=1) #제곱한 값들을 합산
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('people.csv', index_col=0)
df = df.div(df['총인구수'], axis=0)
del df['총인구수'], df['연령구간인구수']
plt.rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
name = input('원하는 지역?')
a = df.index.str.contains(name)
df2 = df[a]
x = df.sub(df2.iloc[0], axis=1) # 전체지역에서 해당지역의 열과 뺄셈
y = np.power(x, 2) # 해당값 제곱
z = y.sum(axis=1) #제곱한 값들을 합산
i = z.sort_values().index[:4] # 값들의 차이가 가장 적은 지역 5개만 추출
df.loc[i].T.plot()
# df.loc[np.power(df.sub(df2.iloc[0], axis=1), 2).sum(axis=1).sort_values().index[:5]].T.plot()
plt.show()
Reference
この問題について([データ解析]7.Pandas), 我々は、より多くの情報をここで見つけました https://velog.io/@jjaa9292/데이터분석7.Pandasテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol