#目次
#作成した理由
知人に頼まれたのと、面白そうだったから。
#本記事の内容
データ分析を行なっている方!分析をするとなると、まず最初にデータ俯瞰しません?どんな列があって、どんな直が格納されているか確認しますよね?するよね????
pythonには大変便利で超絶有能なライブラリpandasってのがあります。これを利用すると
・__列名や行名の取得__が可能です。(参考)
・任意の列に対して、__格納されているデータのユニーク値の確認__ができます。
(これはPandasのほんの一機能にすぎません)
ただし、全ての列に対して格納されているユニークな値を取り出すには一手間加える必要があります。また、分析を行う上で、__列名(要素名)に加え、格納されている__データ数、データ型、__欠損数(欠損率も)__知れるといいですよね?なので__ユニーク値__に加え上記の太字の奴らを表形式で出すやつ作りました!!長ったらしく書きましたが、、、、
結論:作ったpythonプログラム?モジュール?の使い方とプログラムの解説やります。
#使い方
1. 機能説明
2. コード直書き(コピペ)して使用
3. モジュールとして使用
🍎りんごの環境は以下の通り
JupyterLab: 3.0.7
Python: 3.8.6
Pandas: 1.2.2
ディレクトリ構成
2. コード直書き(コピペ)して使用する場合
├ test.csv #機能説明をみてね
└ Tutorial.ipynb #実行するnotebookです!皆さんは新規で作成してね
3. モジュールとして使用する場合
├ test.csv #機能説明をみてね
├ Tutorial.ipynb #実行するnotebookです!皆さんは新規で作成してね
└ ringo_python_module #りんごが書いたプログラムを格納したファイルだよGitlabからクローンしてね🙃
機能説明
下記の表1に示すのは、Kaggle(データ分析のコンペサイト)に掲載されているタイタニックチュートリアルのテストデータになります。今回の機能説明はこちらのデータを利用します。(ダウンロードはこちら)ご賞味あれ。
|| Logical name | Number of data | DataTypes | Missing values | Missing values(%) | Unique value |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| 表示内容 | 要素名 | データ数 | データ型 | 欠損数 | 欠損率| ユニーク値|
コード直書き(コピペして使用)
プログラムの解説からコードをコピーしてnotebook(Tutorial.ipynb)にペーストしてください。
コードを実行したら、次は下記のコードを実行していきます。(❁´ω`❁)
## 利用するライブラリー
import pandas as pd
import warnings #FutureWarningが表示されるので記述してます。みたい人はこれをコメントアウトして実行してね
warnings.filterwarnings('ignore')
## データの読み込み
df = pd.read_csv("test.csv")
できましたか?もしここまででつまづいたら気軽に質問してください(^^;
(エラーによっては答えられないかも、、だけど)
いよいよ表示します!!!下記コードを実行してみてください!!
unique_list(df,0)
どうですか?無事に表2と同じ結果が得られたと思いますΣ(゚Д゚)スゲェ!!
モジュールとして使用
こちらからからコードを対象のディレクトリにクローンしてください。
クローンできたら下記を実行してください(/ω\)
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
## クローンしたソースコードを読み込んで実行できるようにします!
from ringo_python_module import count as uq
## データの読み込み
df = pd.read_csv("test.csv")
それでは、いよいよ表示します!!!下記コードを実行してみてください!!
uq.unique_list(df,0)
どうですか?無事に表2と同じ結果が得られたと思いますΣ(゚Д゚)スゲェ!!
補足
unique_list(X,Y)
変数 | 入る値 |
---|---|
X | 読み込んだデータ |
Y | 表示形式:0~3まであるよ |
#プログラムの解説
def unique_list(x, y):
colum_dict = {} #空の辞書作成
a=list(x.columns) #カラムリスト作成
b=len(x) #ループ回数
listData=[]
col=pd.DataFrame(x.columns).T
T=[y]
for k in range(len(a)):
for i, j in enumerate(x):
colum_dict[i] = j
dz= x[(f"{colum_dict[k]}")].unique()
listData.append([dz])
list_df = pd.DataFrame(listData).T
unique_list = col.append(list_df)
unique_list = unique_list.T
unique_list.columns = ('index','Unique value')
unique_list_Valu=unique_list['Unique value'].astype(str).str.replace('[', '').str.replace(']', '')
unique_list_Index=unique_list['index']
unique_list = pd.concat([unique_list_Index,unique_list_Valu], axis=1)
df = pd.concat([
x.count().rename('Number of data'),
x.dtypes.rename("DataTypes"),
x.isnull().sum().rename("Missing values"),
(x.isnull().sum() * 100 / x.shape[0]).rename("Missing values (%)").round(2),
], axis=1)
df_a = df.reset_index()
info = pd.merge(df_a, unique_list).rename(columns={'index': 'Index'})
if y==0 :
info = info.rename(columns={'Index': 'Logical name'})
return info
elif y==1:
info2=info.rename(columns={'Index':''}).set_index('')
return info2
elif y==2:
info2=info.rename(columns={'Index':''}).set_index('')
return df
elif y==3:
list_df = unique_list_Valu.T.reset_index()
list_da1 = list_df['Unique value'].\
str.replace('^\x20+', '').\
str.replace(" {2,}", " ").\
sort_values().\
str.split(' ', expand=True)
list_da2 = list_df['Unique value']
list_da1=pd.concat([unique_list_Index,list_da1], axis=1)
return list_da1
else :
return df_a