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

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

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

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

pandas

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

Q&A

解決済

3回答

1306閲覧

pythonコードのレビューをお願いします。

pikaso

総合スコア20

Python

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

pandas

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

0グッド

0クリップ

投稿2018/01/12 04:39

編集2018/01/12 05:22

以下のコードは年月によって訪問数に違いが出るか確かめたいので、リスト(visitor)に格納するための処理コードになります。最終的に時系列データで図出力したいです。
もっと効率の良い(コードを短縮する等)やり方を教えてください。

追記:なぜか図が出力されません。エラーは出てないです。

補足:
air_visit_dfのデータの中身は以下の通りです。
visit_date:年月日データ 例:2016-01-13 2016年1月から2017年4月まであります。
visitors:自然数データ 例:2,4,5・・・

python

1 2visitor=list(0 for i in range(16))  3 4for ix,i in enumerate(air_visit_df['visit_date']): 5 i=list(i.split("-")) 6 if i[0]=='2016' and i[1]=='01': 7 visitor[0]+= air_visit_df.ix[0]['visitors'] 8 if i[0]=='2016' and i[1]=='02': 9 visitor[1]+= air_visit_df.ix[0]['visitors'] 10 if i[0]=='2016' and i[1]=='03': 11 visitor[2]+= air_visit_df.ix[0]['visitors'] 12 if i[0]=='2016' and i[1]=='04': 13 visitor[3]+= air_visit_df.ix[0]['visitors'] 14 if i[0]=='2016' and i[1]=='05': 15 visitor[4]+= air_visit_df.ix[0]['visitors'] 16 if i[0]=='2016' and i[1]=='06': 17 visitor[5]+= air_visit_df.ix[0]['visitors'] 18 if i[0]=='2016' and i[1]=='07': 19 visitor[6]+= air_visit_df.ix[0]['visitors'] 20 if i[0]=='2016' and i[1]=='08': 21 visitor[7]+= air_visit_df.ix[0]['visitors'] 22 if i[0]=='2016' and i[1]=='09': 23 visitor[8]+= air_visit_df.ix[0]['visitors'] 24 if i[0]=='2016' and i[1]=='10': 25 visitor[9]+= air_visit_df.ix[0]['visitors'] 26 if i[0]=='2016' and i[1]=='11': 27 visitor[10]+= air_visit_df.ix[0]['visitors'] 28 if i[0]=='2016' and i[1]=='12': 29 visitor[11]+= air_visit_df.ix[0]['visitors'] 30 if i[0]=='2017' and i[1]=='01': 31 visitor[12]+= air_visit_df.ix[0]['visitors'] 32 if i[0]=='2017' and i[1]=='02': 33 visitor[13]+=air_visit_df.ix[0]['visitors'] 34 if i[0]=='2017' and i[1]=='03': 35 visitor[14]+=air_visit_df.ix[0]['visitors'] 36 if i[0]=='2017' and i[1]=='04': 37 visitor[15]+=air_visit_df.ix[0]['visitors'] 38VisitorData=pd.DataFrame({'Month':month_list,'visitors':visitor}) 39VisitorData.plot()

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

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

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

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

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

fuzzball

2018/01/12 05:03

質問のコードで正しく集計できてますか?(というかエラー出てないですか?)
pikaso

2018/01/12 05:22

なぜか図が出力されません。
fuzzball

2018/01/12 05:36

グラフに関しては from matplotlib import pyplot as plt して 最後に plt.show() して下さい。
pikaso

2018/01/12 08:07 編集

すみません、予定が差し迫っていたので返信と質問内容が雑になりました。無事出力できました。ありがとうございました。
guest

回答3

0

ベストアンサー

年月によって訪問数に違いが出るか確かめたい

という目的であればvisitorリストを使わずにpandasの集計のみでも可能かと思います。
参考:Python pandas アクセサ / Grouperで少し高度なグルーピング/集計

Python

1import pandas as pd 2 3# 元データ 4air_visit_df = pd.DataFrame( {'visit_date': ['2016-01-13','2016-01-14','2016-04-01', '2016-05-02'], 'visitors':[1,2,3,4]}) 5air_visit_df['visit_date'] = pd.to_datetime(air_visit_df['visit_date']) 6print(air_visit_df) 7 8# 月毎に集計 9df2 = air_visit_df.groupby(pd.Grouper(key='visit_date', freq='1M'))['visitors'].sum() 10df2 = df2.fillna(0) # とりあえず未訪問月は0に 11print(df2) 12""" 13visit_date # =その月の末尾の日付になる 142016-01-31 3.0 152016-02-29 0.0 162016-03-31 0.0 172016-04-30 3.0 182016-05-31 4.0 19"""

投稿2018/01/12 05:30

can110

総合スコア38266

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

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

pikaso

2018/01/12 08:06

ありがとうございました、無事に出力できました。
guest

0

データがないのでバグがあるかもしれませんが。

python

1air_visit_df['g'] = air_visit_df['visit_date'].apply(lambda x: ''.join(x.split('-')[:2])) 2 3ans = air_visit_df[['visit_date' ,'g']].groupby('g').sum()

投稿2018/01/12 05:28

編集2018/01/12 05:30
mkgrei

総合スコア8560

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

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

0

python

1visitor[(int(i[0]) - 2016) * 12 + (int(i[1]) - 1)] += air_visit_df.ix[0]['visitors']

投稿2018/01/12 04:47

編集2018/01/12 04:49
fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問