2017-06-30 1 views
2

plotdaily follower counttwitter handlesについては、私はしようとしています。その結果、あなたは以下を参照してくださいどのようなものが、1つの以上のTwitterのハンドルで絞いる:Start_DateとEnd_Dateを含むPandas Dataframeのプロット数

Follower Count

通常、私は、単に元のテーブルにツイッターから引き出された新しいデータセットを追加することによってこれを行うだろうログが取り出される日付。しかし、これでほんの数日で数百万行になるだろう。そして、それは私がユーザーが落ちたときをはっきりと見ることを許さないでしょう。

  • Handles:は私が
  • のためのフォロワーを引っ張っていたアカウントです:

    Follower_ID   Handles Start_Date End_Date 
    100     x   30/05/2017 NaN 
    101     x   21/04/2017 29/05/2017 
    201     y   14/06/2017 NaN 
    100     y   16/06/2017 28/06/2017 
    

    alternativeとして、ツイッターからの私のデータを引っ張った後、私はこのように私のpandas dataframeを構造化Follower_ID:は、ハンドルに続くユーザーです。

0123私は Follower_ID 100た場合

ので、例えば、私は両方handle xhandle y

をたどる可能性があり、私はそれをプロットすることができるようにデータ(pivotclean through a functiongroupby)を調製するための最良の方法だろうかと思っていますそれに応じて。何か案は?

+2

私は何か不足しているかもしれませんが、あなたの例のDataFrameで 'Follower_ID'と' Handles'の意味について詳しく説明できますか?各ハンドルには2つの異なるフォロワーIDがあり、フォロワーID 100には2つの異なるハンドルがあります。 –

+2

@PeterLeimbiglerはい、私は質問を更新してください、申し訳ありませんが、私はこれがどのように混乱するかを見ることができます! –

答えて

1

ナイーブなアプローチで私はiterrowsを使い終わったので、パンダの再形成などを利用するより効率的な方法があるかもしれません。しかし私の考えは、あなたのデータフレームとあなたが望むハンドルを取り入れる関数を作ることでした。プロットし、そのハンドルの毎日のフォロワー数で別のデータフレームを返します。これを行うために、機能

  • は、所望のハンドルにDFをフィルタリングのみ、
  • はそれをオン
  • 、(29/05/2017に例えば、21/04/2017)各日付範囲を取りパンダにdate_range
  • は、すべての日付を1つのリストに入れます。

この時点で、単一リストのcollections.Counterは、結果を1日ごとに集計する簡単な方法です。

1つの注意点は、ヌルEnd_Dateは、グラフ上の任意の終了日に合体する必要があります。私はmax_dateと呼んでいます。だから全部:

from io import StringIO 
from collections import Counter 
import pandas as pd 

def get_counts(df, handle): 
    """Inputs: your dataframe and the handle 
    you want to plot. 

    Returns a dataframe of daily follower counts. 
    """ 

    # filters the df to the desired handle only 
    df_handle = df[df['Handles'] == handle] 

    all_dates = [] 

    for _, row in df_handle.iterrows(): 
     # Take each date range (for example, 21/04/2017 to 29/05/2017), 
     # turn that into a pandas `date_range`, and 
     # put all the dates in a single list 
     all_dates.extend(pd.date_range(row['Start_Date'], 
             row['End_Date']) \ 
          .tolist()) 

    counts = pd.DataFrame.from_dict(Counter(all_dates), orient='index') \ 
         .rename(columns={0: handle}) \ 
         .sort_index() 

    return counts 

これは機能です。今すぐあなたのデータを読み取り、論争...

​​

最後の行は、ハンドルyのためにこれを出力します。

  y 
2017-06-14 1 
2017-06-15 1 
2017-06-16 2 
2017-06-17 2 
2017-06-18 2 
2017-06-19 2 
2017-06-20 2 
2017-06-21 2 
2017-06-22 2 
2017-06-23 2 
2017-06-24 2 
2017-06-25 2 
2017-06-26 2 
2017-06-27 2 
2017-06-28 2 
2017-06-29 1 
2017-06-30 1 

あなたがお好みのパッケージを使用して、このデータフレームをプロットすることができます。

+0

こんにちはNiels、素晴らしい。助けてくれてありがとう、私は本当にそれの周りに私の頭を包むことができませんでした。それぞれがそれ自身の列を処理する方法はありますか? –

+1

@MattM私はそれを始めることができます。私はちょうど列名がハンドルであるように編集しました。 '' x''と '' y''を同じデータフレーム内で一緒にマージします。 '' get_counts(df、 'x')、get_counts(df、 'y')]、axis = 1) 'シンプルな2つのハンドルケース。私は_n_ケースのハンドルをループするためにあなたに任せます! –

関連する問題