投稿

このブログが書籍になりました!

データサイエンスに興味を持ってはいるが、データサイエンスに本気でダイブしようかどうか迷っている方々、そのような方々に分析を体験してみる機会を提供するために、この ブログ「データサイエンス チュートリアル」、およびYoutube「 DataScience_for_everyone 」を始めました。 知識がまったくなくても、見よう見まねで、基本的なプログラムを書いてみて、その楽しさがわかったら、本格的な学習に進むきっかけになればと思ったのが始めた動機です。 うれしいことに、読者や視聴者の中には、初めから、基本的なプログラムをしっかり身に付けたいという要望を持つ方も現れました。 そこで、ブログと動画をまとめたテキストを出版することにしました。 第1弾は、『1st Step ビッグデータの読み込みとデータの確認』です。  引用URLやページ内のリンクを活かすためにPDFで作成しました。 → 購入はこちら ブログや動画を、スキマ時間や通勤時間にスマホで見聞きし、週末など1時間程度時間が取れる時に、このテキストを参考にして、実際にコラボを起動してプログラムを書いてみる。そんな使い方を想定しています。 慣れてきたら、このテキストにある参考資料を読んで、このテキストのプログラムをちょっと変えてみて、コラボで動くかどうか確認してみる事も、スキルを身に付けるためにとても有効です。自分なりのコラボ・ノートブックを作りましょう。 もちろん、初めからこのテキストに取り組んでも構いません。 どのような使い方であれ、このテキストが最初の一歩になり、あなたがデータサイエンスを身に付け、それがリスキリングにつながり、より充実した人生を送れるようになることを願ってやみません。

#37 Interactive Table

イメージ
まずは、前回、縦型(long型)に変換したデータをよく見てみましょう。列名「個数」末尾の方に、「-」(ハイフン)が存在します。 これは、データが存在しないことを表しますが、Pythonはその意味を理解しません。欠損値「NaN」と変換しておきましょう。#30「Section 28 ピボットテーブル(2)」に出てきた77を思い出してください。 ● データを縦型に変換する    77  データ名.replace(“元の要素”, “新しい要素”) また、「“新しい要素”」を 欠損値 に置換する場合は、「 np.nan 」と記載します。この場合、「” ”」は、要りません。 さて、コラボには、pandasデータフレームをインタラクティブなディスプレイに変換する拡張機能「 Interactive Table 」があります。このディスプレイは、フィルタリング、並べ替え、探索などを行うことができます。 データを保存する前に、「Interactive Table」を体験していきましょう。 最後はデータを保存します。 ● データを保存する    ㉘ データ名.to_csv(‘保存するフォルダーのパス/新データ名.csv’) ************ ■ まずは、下記の 動画 (5分5秒)をご覧ください。 ■ 次にプログラムの 解説 を自分のペースで読み、コラボでプログラムを書いてみましょう。 下記のスライドを参照してください。 #37 Interactive Table by @Cat_Taro ************ ■ このセクションのプログラムは下記のようになります。    実際に、コピペして コラボ で試してみましょう! df_all4.replace("-", np.nan, inplace=True) df_all4 df_all4.query('医薬品名 == ["タケキャブ錠20mg"]') df_all4.to_csv('/content/drive/MyDrive/Colab Notebooks/医療/naihuku.csv')

#36 縦型(long型)に変換

イメージ
前回結合したデータを「 melt 」使って、データを変数が一列にまとめられている縦型にしていきます。これにより、集計がしやすくなります。 Excelデータは人間が見やすいように横型(wide型)になっていることが多いのですが、 集計する際は、縦型(long型)にすることが必要 です。これは、変数が一列にまとめられているからです。 この縦変換には、「melt」を用います。 ● データを縦型に変換する     89 pandas.melt( データ名                                 , id_vars=固定される列名                                 , value_vars=meltする識別変数                                 , var_name=meltする識別変数の名前                                 , value_name=meltする識別変数の値の名前 ) ● 不要な列を削除する     90 データ名.drop(“列名”, axis=1) ************ ■ まずは、下記の 動画 (4分52秒)をご覧ください。 ■ 次にプログラムの 解説 を自分のペースで読み、コラボでプログラムを書いてみましょう。 下記のスライドを参照してください。 #36 縦型(long型)に変換 by @Cat_Taro ************ ★参考資料 ■ 【pandas】melt, pivot:縦横変換【データフレーム処理】 by shunさんの「データサイエンスの道標」 https://datasciencemore.com/python-pandas-melt-pivot/ ************ ■ このセクションのプログラムは下記のようになります。    実際に、コピペして コラボ で試してみましょう! df_all3 = df_all.drop(["Unnamed: 0", "単位"], axis=1) df_all3 df_all4 = pd.melt(df_all , id_vars=['薬効分類', 

#35 データの結合

イメージ
前回取り込んだ24個のExcelファイルを、年度ごとの推移を分析するために「 concat 」を使って、結合していきます。 その過程で、 ワイルドカード 、 forループ 、 リスト内包表記 という便利な機能も使っていきますので、しっかりと身に付けていきましょう。 ● 特定のファイルのパス名とファイル名を取得する     85. glob.glob(‘ファイルのパス/ファイル名.ファイル形式’) ● データを単純に結合する     86. pd.concat([データ名1, データ名2, …],  ignore_index=True) ● 繰返し処理する      87. for イテレーター in イテラブルオブジェクト:                   処理1                   処理2                   ・・・ ● 末尾(最後)に要素を追加する      88. リスト名.append(引数)  ● リスト内包表記     pd.concat((pd.read_csv(i) for i in all_files), ignore_index=True) ************ ■ まずは、下記の 動画 (8分24秒)をご覧ください。 ■ 次にプログラムの 解説 を自分のペースで読みましょう。 下記のスライドを参照してください。 #35 データの結合 by @Cat_Taro ************ ★参考資料 ■ concatのイメージ by shunさんの「データサイエンスの道標」 https://datasciencemore.com/python-pandas-concat/ ■ [解決!Python]内包表記でリストを作成するには https://atmarkit.itmedia.co.jp/ait/articles/2106/29/news021.html ************ ■ このセクションのプログラムは下記のようになります。    実際に、コピペして コラボ で試してみましょう! import glob all_files = glob.glob('/content/drive/MyDrive/Colab Notebooks/医療/データ/*.csv') all_

データホライゾンとDeSCヘルスケア 医療データ目的外利用の疑い

DIAMOND online が、DeNAの医療データへの疑惑に関して、特集を組んでいます。 対象となった企業DeNAの連結子会社には、データホライゾンとDeSCヘルスケア(ディーエスシーヘルスケア)があり、 医療データの流れをまとめると、下記のようになっています。 自治体 → データホライゾン → DeSC → 保険会社、 製薬企業 DIAMOND onlineの特集記事を時系列で並べると、2023年12月に疑惑が浮上して、自治体の調査結果が明らかになった2月下旬にその結果と弁護士の意見を掲載しています。ちなみに、DeNAは 2023年12月の疑惑の記事を即座に否定しています。 ●2023年 12月18日 【スクープ】DeNAが医療データ「目的外利用」の疑惑浮上!提供自治体が調査へ ● 2024年2⽉28⽇ 【スクープ】DeNAが医療データの「第三者への有償提供」を提供⾃治体に認める︕⽬的外利⽤で個⼈情報保護法違反か ● 2024年2⽉29⽇ 【内部資料⼊⼿】DeNAが「⾃治体の医療データ」を⽣保にモーレツ営業︕営業資料に透ける不正の動機とは︖ ● 2024年3⽉1⽇ DeNAの医療データ有償提供は「個⼈情報保護法違反」か︖専⾨家が指摘する違法性とは 2024年 2⽉28⽇ の記事では、 DIAMOND onlineが自治体に取材し、自治体とデータホライゾンの委受託契約を入手したとのこと。 それによると、自治体とDeNAグループの最大の祖語、争点は、 自治体が データホライゾンに委託している業務は、「 住民の医療費負担の適正化等広く住民の福祉の向上に資する業務 」となっており、その 解釈の違い です。 ★ 自治体 →保険会社や製薬企業への有償提供について事前の説明が無かった。これらの有償提供は 契約範囲を逸脱 している。 ★ DeNAグループ → 「 住民の医療費負担の適正化等広く住民の福祉の向上に資する業務 」は、 保険会社や製薬企業への有償提供を含んでいる 。 自治体が保有している医療データは、 医療機関が 国民健康保険 の 保険者に提出する月ごとの診療報酬明細書( レセプト )のことで、 保険者は市町村と都道府県になっています ( 平成30年4月以降 )。この 国民健康保険 は、 職場の健康保険(健康保険組合や共済組合など)に加入している人や生活保護を受けて

#34 データの修正・保存

イメージ
今回は、NDBオープンデータのホームページにあるデータを一気に保存します。その前にデータ型の変更や、結合した時にどのファイルだったかをわかるように、フラグを立てておきます。 そのために、下記のようなプログラムを解説していきます。 ● 要素がすべて同じ文字からなる列を追加する    84 データ名[[“列名1”, “列名2”, …]] = [“文字1”, “文字2”, …] ● データ型を変更する(復習)    ⑱ データ名.astype({“列名1”:データ型, “列名2”:データ型,…}) ************ ■ まずは、下記の 動画 (4分29秒)をご覧ください。 ■ 次にプログラムの 解説 を自分のペースで読みましょう。 下記のスライドを参照してください。 #34 データの修正・保存 by @Cat_Taro ************ ■ このセクションのプログラムは下記のようになります。    実際に、コピペして コラボ で試してみましょう! df1_1.dtypes df1_2 = df1_1.astype({"薬効分類":"str","医薬品コード":"str", "後発品区分":"str"}) df1_2.head() df1_3 = df1_2.copy() df1_3[["年度", "剤型_場所"]] = ["H26", "内服外来院内"] df1_3 df1_3.to_csv('/content/drive/MyDrive/Colab Notebooks/医療/データ/H26_内服外来院内.csv') # H26 url2 = "https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139844.xlsx" df2 = pd.read_excel(url2, skiprows=[0, 1, 3], dtype = {"薬効\n分類":"object&quo

#33 URLからデータを読み込む

イメージ
今回は、NDBオープンデータのホームページにあるデータを読込み、見やすい形に整形していきます。 そのために、下記のようなプログラムを解説します。 ● ホームページからダウンロードできるExcelファイルを読み込む   80   url = “Excelファイルのありか"     データ名 = pd.read_excel(url) ● Excelの最初の何行かを読み飛ばす「skiprows」、「skipfooter」   81  skiprows=[数字1, 数字2, 数字3, …] ● データの列名を変更する「rename」   82  データ名.rename(index={古い行名1:新しい行名1,…},         columns={古い列名2:新しい列名2,…}) ● 文字列を上下と同じように埋める「fillna」   83  データ名 ["薬効分類"].fillna(method='ffill') ************ ■ まずは、下記の 動画 (8分42秒)をご覧ください。 ■ 次にプログラムの 解説 を自分のペースで読みましょう。 下記のスライドを参照してください。 #33 データの読み込み by @Cat_Taro ************ ■ このセクションのプログラムは下記のようになります。    実際に、コピペして コラボ で試してみましょう! import pandas as pd import numpy as np url1 = "https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139842.xlsx" df = pd.read_excel(url1) df.head() url1 = "https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139842.xlsx" df1 = pd.read_excel(url1, skiprows=[0, 1, 3]) df1.head() df1_1 = df1.rename(columns={"薬効