• 締切済み

テキストデータを複数の変換条件に従って高速処理

CSVファイルがあり、そこにはクレジットカード利用データが記録されています。 日付、店名、金額、処理番号とでもさせてください。 店名に従って、カテゴリを書き込んでいきます。マクドナルドなら食事とかヒルトンなら宿泊費などです。マクドナルドだけでも店場所がちがうとそれらもまとめなければなりません。このあたりは正規表現で置換させます。 どこから店名のリストと対応するカテゴリのリストを用意して条件を作成するのか、という問題がありますが(最初は手打ち)とりあえずどうやってスクリプトを書いていけばよいのか指針を教えてください。何百という対応リストに何十というデータ行があります。一行づつ読んでいき、店名リストに一つずつ照らし合わせていくのではかなり遅くなるのではないでしょうか。 こういったときにはどういうロジックを使用するのでしょう?2次元配列とか聞いたことがあります。カード利用回数だけループさせて何百という条件処理を一度にくぐらせる、もしくは履歴データを丸ごと条件処理数だけくぐらせれば時間短縮になりますよね。うまく伝わってくれればよいのですが。 エクセルマクロにするのかパイソンで書くのかも考えなければなりません。(他は経験まったく無し) どうぞよろしくお願いいたします。

みんなの回答

  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.2

マクロが解らないなら、関数でやることをお勧めします。 ①Sheet1にCSV を読み込む。 データ、テストファイル。で行います。 ②「カテゴリ」シートを作り、Sheet1!B列☞カテゴリ!A列へコピペ。 ③A列を選択、重複の削除 ④B列にカテゴリを入力 ⑤Sheet1に関数を入力。 E2: =IFERROR(VLOOKUP(B2,カテゴリ!A:B,2,0),"") 下へオートフィル。(フィルハンドル:右下の緑■をダブルクリック)

piyo-maru7
質問者

お礼

ありがとうございます。 ボタンポチで変換させたいのでマクロやVBAで、関数は直接使いませんが参考になりました。

Powered by GRATICA
  • retorofan
  • ベストアンサー率33% (328/974)
回答No.1

店名によってカテゴリを付ける場合、 正規表現で置換させるよりも、 辞書型を用いたほうが簡便でしょう。 CSVデータの読み込み方は、 1行ずつ読み込んでいくなんて悠長すぎます。 そういう時は、データ分析用の pandasライブラリのDataFrame 機能を使うとよいです。 Pythonに通じておられるようですので、 それで組んだらいかがでしょうか。 辞書型のカテゴリを用意しておけば、 Pythonなら数行のコーディングできる筈です。

piyo-maru7
質問者

お礼

ありがとうございます。Pythonは精通しているわけではありませんが、必要に応じて引っ張り出してきます。

Powered by GRATICA

関連するQ&A

  • 条件に合うデータ検索用のCGIはありませんか?

    無料で使えるデータベース検索用のCGIを探しています。 求めている条件は以下になります。 (1)項目の編集が可能 (2)規模はそこまで多くないので、MySQLサーバ不要のもの (3)データの登録はExcel(csv)によるデータの一括登録・ダウンロード式 (4)フォームによる検索(プルダウンによるカテゴリ検索、全表示) (5)テンプレート式によるデザインの変更 (6)フォームの動的(静的ファイル出力)対応 (5)までの条件を満たすものは結構あるのですが、(6)を満たすものを探すことが出来ませんでした。 検索フォームのカテゴリ検索用のブルタウンリストへ値を反映させたいのですが、 設定ファイルへのリスト登録や、管理画面から手動での選択肢登録などではなく、 登録されているデータから値を取得、リスト化したものをフォームのプルタウンリストとして 吐き出す(支援する機能でも可)ようなものはないでしょうか? 例えば、 A、B、C項目のデータにおいて、項目Aの値が「1」「2」「3」と登録されていた場合 検索フォームのA項目検索用プルタウンのリスト選択で「1」「2」「3」を選び検索したいが、 A項目に「4」「5」「6」のデータが追加された場合に検索フォームのプルタウンのリストとして「4」「5」「6」を追加する作業を省略(簡略)化したい。

    • 締切済み
    • CGI
  • python 外部ファイルのテキスト処理について

    お世話になります。 python を使用して、あるディレクトリ中にあるテキストファイル(ひな形ファイル、複数行)を読み込んで、 これに対してリストやタプル、ディクショナリなどに入った値を連続的に変化させた複数のアウトプットファイルを同一ディレクトリに生成する、という作業を考えています。 たとえばですが、外部のひな形ファイルに ${list1}番のファイル ${list2}のデータ データコード、データ名一覧 -------------+---------- ${list3} -------------+---------- などと作っておきます。{}内はプレースホルダのようなものですがこの形式でなくてもかまいません。 ここに、別途処理して${list2}、${list2}、${list3}を置き換えたファイルを、ファイル番号毎に生成する、というような作業です。 ここで、テキストの単純な置換ならば、stringモジュールのTemplateクラスなどの利用があるようですが、このような複雑な置換にはどう対応していいか分かりません。 上の例で言うと、たとえばlist3には、別の外部ファイルにあるデータ番号、データ名をタプルなどに読み込んで、それを1行ずつ流し込むことをやりたいので、このモジュールの使用は難しそうです。 他に自分で考えた方法としては、ひな形ファイルをファイルオブジェクトとして読み込んで、forを使って順番に処理していく方法ですが、これだとファイルのシーク位置がおかしくなったり、何度も同じような処理が連続してしまってうまくコードに出来ませんでした。 まだプログラミング自体に慣れていませんが、コーディング自体は自分でがんばりますので、方針を教えていただけますとうれしいです。 もし分かりづらかったら補足要求お願いします。

  • 複数のデータを選択し結果をcsvに保存し処理

    現在複数のデータを選び、その結果をcsvで保存することを考えています。 例えば 好きな国を選んで、コメントを書いてください。 アメリカ イギリス フランス スペイン ポルトガル ブルガリア ・ ・ ・ と100ヶ国表示します。チェックボックスで好きな国を任意の数だけ選びそれをcsvに保存したと仮定します。 data.csv ============= ユーザー名,好きな国,コメント ユーザA,アメリカ,イギリス,スペイン,行きました。 ユーザB,アメリカ,ブルガリア,イギリス,ポルトガル,好きです。 ユーザC,イギリス,コメントです。 ========================= これを読み出す場合、列が沢山あるため $Data = file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line = explode(",",$Data[$i]); =====ここの処理がわかりません。=== list($u_name, $kuni, $kuni, $kuni, $kuni, $kuni, $kuni, ・・・・・・・$com = $line; if($u_name = $_GET['u_name']) echo "$u_nameの好きな国リスト<P>"; echo " $kuni<BR>"; } } とlistで変数に配分することができません。 このようなユーザーが何件登録するかわからない場合のCSVの処理はどのようにすればよろしいのでしょうか? ユーザーの名前を利用してu_name.txtを作成し中にデータを書き込んだほうが良いのでしょうか? このような複数選択されて何件登録されるかわからない(フィールドが何列になるかわからない)データの保存、処理はどのように行うのが定石なのでしょうか? 恐縮ですがお力をお貸し頂ければ幸いです。

    • ベストアンサー
    • PHP
  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • データシート(サブフォーム)の複数条件抽出について。

    データシート(サブフォーム)の複数条件抽出について。 データシート(サブフォーム)の複数条件抽出について。 環境:ACCESS2000 DAO利用  現在メインフォーム上に、オートフォーム:データシート(基となるテーブル(マスターA)選択) をサブフォームとして置き、メインフォーム上にコンボボックス2個(コンボ1、コンボ2)&コマンドボタン1個設置してあります。 基テーブル(マスターA)には 種類    サイズ    商品名 の3フィールドがあります。 やりたい事は、コンボ1(対応フィールド:種類)及びコンボ2(対応フィールド:サイズ)で選択し コマンドボタンを押下で、サブフォーム内データの抽出です。 上記をクエリ使用でも、vba利用でもどちらでも大丈夫です。 先日この質問板で丁寧に教えて頂いたのですが、 回答して下さった方もおっしゃってたのですが、 動的に動かないとの事で、やっているうちにやはり 動的でないと難があるようなので 再度ご質問させて頂きました。 何卒ご教授の程宜しくお願い致します。 先日の質問板は下記です。 http://okwave.jp/qa/q5845718.html また、質問させて頂いている間も引き続き自分で調べながら やっていこうと思います。

  • EXCEL 条件入力で複数リスト表示、早急に教えて下さい。

    EXCEL 条件入力で複数リスト表示、早急に教えて下さい。下図の様なデータがシート1にあります、構成は同一親品番が20行程あります、別のシート2で抽出したい親品番を入力すると、それに対応した全てのリストのみを表示したいです、 例  親品番   子品番  名前・・・・・・・・・・ 48260500 40021234・・・・・・・・・・・・・・ 48260500   40022345・・・・・・・・・・・ 48260500 40023456・・・・・・・・・・・  

  • Excel 複数条件からのデータ抽出

    Excel 複数条件からのデータ抽出 Excelの関数について質問です。 色々と調べたのですが、近いようで遠いものしか見つけることができませんでしたので、 我慢できず質問させていただきます。 下記のようなデータがあったとします。 ----------------------------- ホテル ホテル1 プラン1 部屋1 価格 ホテル1 プラン2 部屋2 価格 ホテル1 プラン3 部屋3 価格 ホテル1 プラン3 部屋4 価格 ホテル2 プラン1 部屋5 価格 ホテル2 プラン2 部屋6 価格 ホテル2 プラン2 部屋7 価格 ホテル2 プラン2 部屋8 価格 ・ ・ ・ ----------------------------- このデータから、下記の処理がしたいです。 ・オートフィルタでソートして絞るのではなく、  別セルに入力規制などで、プルダウンから選ぶ方式で、  各プランの比較を行いたい。 (1)まずは、別シートのA1セルに、 入力規制を設け、ホテルを選択できるようにします。 (2)次に、A2セルでプランを同じ方法で選択するようにしたいのですが、 上記のデータでホテル1にはプラン1~3が該当しますが、 ホテル2はプラン1と2のみになってます。 このとき、(1)でホテルを選択した時点で、 自動でプラン選択リストをそのホテルに合わせたものにしたいです。 (3)次に、A3セルで同じように部屋を選択するのですが、(2)と同じように、 (1)と(2)で選んだホテル・プラン向けのリストに自動的になるようにしたいです。 (4)最後に、A4セルに該当の価格を自動で表示させたいです。 可能でしょうか。 実際はホテルの数が全部で5つ、 プランの数が5つ、 部屋のタイプは26種類、 価格はすべて異なります。 よろしくお願いいたします。

  • テキストファイルからデータ読み込みに関して。

    皆さん、始めまして。 テキストファイルのデータからエクセルへ読み込むエクセルマクロを構築したく質問させて頂きました。 テキストデータでリストの一覧をExportできるのですが、その整理が非常に手間なので自動化したく マクロを作成する事を検討しております。 環境はデータ内容を下記に記載させて頂きます。 [環境] Windows7 / Excel2007 [テキストデータサンプル] 下記に貼り付けたように条件によって出力方法が違うデータがあります。 ・レコードが1つのものは項目がたてに並んでいる。 ・レコードが2つ以上になると項目が横にならぶ。 処理番号 : 001-H20120910001 処理記録 ---------------------- 記録 日時    年齢   地域 0 20120712 63 東京 1 20120912 63 東京 (結果数 = 2) --- END 処理番号 : 001-H20120919999 処理記録 ---------------------- 記録 = 0 日時 = 20120909 年齢 = 19 地域 = 神奈川 (結果数 = 1) --- END [実行後に得たい情報] 処理番号で検索し、その中のデータを下記ならびでエクセルデータに変換したいと考えています。 001-H20120910001 0 20120712 63 東京 001-H20120910001 1 20120912 63 東京 001-H20120919999 1 20120909 19 神奈川 エクセルのマクロは勉強をし始めたばかりで初心者程度の知識ですが、 もしよろしければご回答、ご助言いただければと存じます。 よろしくお願いいたします。

  • アクセス リストボックスから選択したデータを抽出条件にするには…

    アクセス超初心者です。 フォーム上のリストボックスで選択した項目を条件にデータ抽出しています。 そこで、その抽出されたデータの中に商品コードがあるのですが、 その商品コードを条件にして他のデータを抽出したいと思っています。 (↓説明が長いですが、お願いします↓) 出来ていること フォームでコードを入力すると、商品名が表示されます。 同じくコードを条件にリストボックスにカテゴリ1表示され、 そのリストのいずれかをクリックすると、別のリストボックスにカテゴリ2が表示され、 そのいずれかをクリックすると詳細に必要情報が表示される。 http://accessclub.info/beginer/cd/part_07.htm ここを参考に作成しました。 したいこと ランキング作成。 今回新たにテーブルを追加しました。 リストボックス_カテゴリ2を条件に抽出されたデータにある商品コードを、 条件として、新たに追加したテーブル_ランキングからデータを抽出したい。 また、ランキングの上位順に並び替えした状態で抽出したい。 ------------------- 抽出結果はこのようにしたいです。 ランキング順位/商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 ------------------- T_商品名 ID(主キー) 商品コード 商品名 生産工場 カテゴリID※T_カテゴリ_IDとリレーション ------------------- T_カテゴリ カテゴリ1 ・・・(大分類カテゴリ) カテゴリ2 ・・・(大分類の中の詳細分類) ID(主キー)※T_商品名_カテゴリIDとリレーション ------------------- (今回は新たに追加したテーブル) T_ランキング ランキング順位 商品コード 商品名 ポイント ID(主キー)(リレーション無し) ------------------- F_総合検索  ヘッダー部分   (1)コード入力欄(テキストボックス非連結)   (2)商品名(テキストボックス非連結)   (3)カテゴリ1(リストボックス)   (4)カテゴリ2(リストボックス)   (5)ボタン ------  詳細部分    商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 ------------------- しくみ  I (1)にコードを入力する   →II (2)に商品名が表示/(同時に)(3)カテゴリ1が表示(そのいずれかをクリック)   →III その商品が属しているかつ、選択されたカテゴリ1に属す、カテゴリ2が(4)に表示   →IV(4)のクリックされたカテゴリを条件に、そのカテゴリに属すレコードが詳細に表示    ※(5)ボタンは詳細の表示と同じものを別途クエリを作成し、開くようにしています。     (今はまだランキングが出来ていないので、クエリをコピーしエクセルでランキングを作っています。) ---補足-------------------- もともとエクセルで管理していたデータをインポートしてテーブルを作成しています。 ------------------------------------------------------------ 【カテゴリシート】商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 というシート(4500件くらい) ※商品コード重複あり 例: 商品コード 商品名 生産工場 カテゴリ1 カテゴリ2 0003 キャラクターペン 東京 玩具 対象小学生以上 0003 キャラクターペン 東京 文具 筆記用具 0003 キャラクターペン 東京 文具 消耗品 ※カテゴリ1 ・・・(大分類カテゴリ)/カテゴリ2 ・・・(大分類の中の詳細分類) ------------------------------------------------------------ 【ランキング2007シート】ランキング順位/商品コード/商品名/ポイント/調査日 というシート(4000件くらい) ※商品コード重複なし ※ランキングは廃盤の商品コード(100件くらい)もあり、その商品に関しては順位とポイントが空欄です。   (空欄セルがあるとエラーの原因になるかと思い、念のため補足。) ------------------------------------------------------------ ここから、ある商品はどのカテゴリに属しているか、また同カテゴリに含まれる商品はランキング内で何位にいるのか。 という情報を出すように、と仕事で依頼されます。(同類商品の中でどう評価されているのかを比較するため) いつもは、エクセルで作業シートを作っており、関数で呼び出しているのですが、 関数が複雑かつ多いせいか、計算時間が長く、効率が悪くなっています。 VBA、マクロ、SQLはわかりません。 そんな私でも学習していきたいと思っています。 よろしくお願いします。

  • FXのサーバーでは,どのように取引データを処理する

    FXのサーバーでは,どのように取引データを処理しているのでしょうか。 私は,FXのシステム売買について,過去のデータを利用して,どのようなシステムが効果的であるかを検討しています。そこで,エクセルとVBAを利用しているのですが,複雑な取引を行った場合には,データの処理が困難になってしまいます。すなわち,エントリーとクローズが終了してから,再度,エントリーとクローズを行うといった場合には,単純なのですが,複数の取引を並行して行う場合には,エクセルでは,処理できないのです。オープンポジションが複数ある場合には,それぞれのポジションごとに価格変動に応じて,クローズの条件を判断していかなければならないのです。オープンポジションの数が有限であれば,それぞれに別のシートを利用すればいいのですが,オープンポジションの数が100を超えるような場合には,とてもそれぞれシートを別にして処理することはできません。 そこで,FXのサーバーはどのようにして,顧客の売買データを処理しているのでしょうか。もし,それが分かれば,エクセルとVBAを利用して,システムトレードのシュミレーションをすることが可能になるのです。 例えば,顧客の1取引ごとに1レコードを作成し,このレコードを配列として処理しているのでしょうか。 もし,配列として処理しているとした場合には,その取引が100を超えるような数になった場合,それぞれの処理結果をどのように記録しているのでしょうか。 以上,よろしくお願いします。

専門家に質問してみよう