質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

0回答

334閲覧

RのテーブルデータをPythonのpandasに書き換えたい

ogatti0917

総合スコア4

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1グッド

1クリップ

投稿2020/01/22 06:59

実現したいこと

  • 下記に示すRのコードのコメントの行(addtionaltable)をPythonに書き換えたい

前提

  • Python3を用いています。
  • Rと変数の置き方が同じです。
  • コードはレコメンドエンジンのコードです。
  • for文を回すことだけはしたくないです。

書き換えたいRのコード

library(data.table) submission = fread("data/sample_submission.csv", col.names=c("KaiinID", "AuctionID")) submission = unique(submission[, .(KaiinID)], by = NULL) auction = fread("data/auction.csv", col.names=c('AuctionID','ShouhinShubetsuID','ShouhinID', 'SaishuppinKaisuu','ConditionID', 'BrandID', 'GenreID','GenreGroupID', 'LineID','ColorID', 'DanjobetsuID', 'SankouKakaku', 'CreateDate')) auction$'CreateDateOrder' = as.double(as.Date(substring(auction$CreateDate, 1, 10))-as.Date("2019-10-01")) watchlist = fread("data/watchlist.csv", col.names=c('KaiinID', 'AuctionID','TourokuDate','SakujoFlag', )) watchlist$TourokuDate = as.double(as.Date(substring(watchlist$TourokuDateOrder, 1, 10))-as.Date("2019-10-01")) watchlist = merge(watchlist, auction, by = "AuctionID") shudounyuusatsu = fread("data/shudounyuusatsu.csv", col.names=c('AuctionID','KaiinID','ShudouNyuusatsuDate', 'Kingaku', 'Suuryou','SokketsuFlag', 'SakujoFlag')) shudounyuusatsu$ShudouNyuusatsuDateOrder = as.double(as.Date(substring(shudounyuusatsu$ShudouNyuusatsuDate, 1, 10))-as.Date("2019-10-01")) shudounyuusatsu = merge(shudounyuusatsu, auction, by = 'AuctionID') dateorder = -7 predict = rbind( auction[, .(KaiinID, AuctionID, Point = 1 / (dateorder - CreateDateOrder) ** 0.5 / (dateorder - ShudouNyuusatsuDateOrder))] , watchlist[SakujoFlag == 1, .(KaiinID, AuctionID, Point = 4 / (dateorder - CreateDateOrder) ** 0.5 / (dateorder - TourokuDateOrder))] ) predict = merge(predict, submission, by = "KaiinID", all.y = T) predict = predivt[, .(Point = max(Point)), .(KaiinID, AuctionID)] predict = predict[order(-Point)] addtionaltable = auction[CreateDateOrder == dateorder - 5, .(AuctionID = sample(AuctionID, 20))] predict = predict[, .(Ranking = 1:20, AuctionID = c(AuctionID[!is.na(AuctionID)], addtionaltable$AuctionID)[1:20]), .(KaiinID)] #additionaltableの箇所をpythonのpandasを用いて書き換えたい

書き換え後のPythonのコード例

import pandas as pd from datetime import datetime auction = pd.read_csv("data/auction.csv") shudounyuusatsu = pd.read_csv("data/shudounyuusatsu.csv") watchlist = pd.read_csv("data/watchlist.csv") submission = pd.read_csv("data/sample_submission.csv") submission = submission.KaiinID.unique() submission = pd.DataFrame([list(submission)],index=["KaiinID"]).T auction["CreateDateOrder"] = auction.CreateDate.map(lambda x: x[0:10]).map( lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d') watchlist["TourokuDateOrder"] = watchlist.TourokuDate.map(lambda x: x[0:10]).map( lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d') watchlist = pd.merge(watchlist, auction, on="AuctionID") shudounyuusatsu["ShudouNyuusatsuDateOrder"] = shudounyuusatsu.ShudouNyuusatsuDate.map(lambda x: x[0:10]).map( lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d') shudounyuusatsu = pd.merge(shudounyuusatsu, auction, on='AuctionID') order = -7 shudounyuusatsu["Point"] = 1/(order-shudounyuusatsu.CreateDateOrder.map(lambda x: x.days))**0.5/( order-shudounyuusatsu.ShudouNyuusatsuDateOrder.map(lambda x: x.days)) watchlist["Point"] = 4/(order-watchlist.CreateDateOrder.map(lambda x: x.days) )**0.5/(order-watchlist.TourokuDateOrder.map(lambda x: x.days)) predict = pd.concat([shudounyuusatsu[["KaiinID", "AuctionID", "Point"]], watchlist[watchlist.SakujoFlag == 1][["KaiinID", "AuctionID", "Point"]]]) predict = predict.groupby(["KaiinID", "AuctionID"]).max() predict = predict.reset_index() predict = pd.merge(submission, predict, how="left") predict = predict.sort_values( ["Point", "KaiinID", "AuctionID"], ascending=[False, True, True]) addtionaltable = auction[auction.CreateDateOrder.map( lambda x:x.days) == order-5].sample(n=20, random_state=0) addtionaltable = kari["AuctionID"] #ここからの記述方法がわからない
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aokikenichi

2020/07/02 09:14

データも提示し、加工したい内容を端的に書いた方が回答確率が高まるかと思います。 途中経過を読み解くのが困難なため回答しにくいのかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問