общее количество evetns на пользователей, использующих панд - PullRequest
0 голосов
/ 05 декабря 2018

Имея два временных ряда: a.csv и b.csv , мне трудно интерпретировать и генерировать: "Гистограмма общего количества событий на пользователя для всех для всех30+ лет пользователей мужского пола "(в Python с использованием Pandas, matplotlib)

Пока это моя работа:

df = pd.read_csv("a.csv") ## 
df1 = pd.read_csv("b.csv") ##
event_date = df['event_date'].astype('datetime64[ns]')
s1 = pd.merge(df, df1, how ='left', on=['user_id'])  ## merge casedf and demodf 
s2 = s1[['user_id', 'event_date', 'age', 'gender']].groupby(['user_id', 'event_date']).agg(['mean', 'count'])
counts = s1.groupby('user_id').size()
counts
d1f = counts.to_frame().reset_index()
d1f.head()
d1f = d1f.rename(columns={'user_id': 'USER-ID', 0: 'TOTAL-EVENTS'})
d1f.head() 
d2f = pd.read_csv("users.csv") 
# df2.head()
d2f = d2f.rename(columns={'age': 'AGE', 'gender': 'GENDER', 'user_id': 'USER-ID'})
d2f.head()
d1 = pd.merge(d1f, d2f, how ='left', on=['USER-ID'])  
d1.head()
d2m = d1[(d1["AGE"] > 30) & (d1["GENDER"] == 'm')]
d2m
x = d2m['TOTAL-EVENTS']
num_bins = 30
n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5)
plt.show()

Я думаю, что не только неправильно интерпретирую требуемую гистограмму, нотакже из-за того, что убил себя за то, что производил / готовил сюжет.

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

В вашем коде слишком много строк ненужных команд.

Ниже код выполняет то, что вам нужно.

(Возможно, вы захотите проверить параметры форматирования длясюжет.)

events = pd.read_csv("C:/Test/timeseries_events.csv")
users = pd.read_csv("C:/Test/timeseries_users.csv")
# Merge both
s1 = pd.merge(events, users, how ='left', on=['user_id']) # merge events and users df
s2 = s1[(s1["age"] > 30) & (s1["gender"] == 'm')].reset_index() # filter required data based on your conditions
s2['event_count'] = s2.groupby('user_id')['event_date'].transform('count') # Adds new column for count of events
s2 = s2[['user_id','age','event_count']] # Keep only required columns so that unique rows can be selected in the next step.
s3 = s2.drop_duplicates()

# Plot histogram using pd.plot()
s3.hist(column=['age'], bins=8, align= 'mid', rwidth=0.8, range = (30,70))

[Out]: array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000FD037F0>]],
      dtype=object)

enter image description here

Мне удалось добраться до этого участка (размер ячейки = 5, поэтому 7 корзин от 30 до 70), ноЯ чувствую, что количество неверно для каждого бина.

0 голосов
/ 05 декабря 2018

Все выглядит хорошо, кроме этого.для получения количества событий на пользователя необходимо сгруппировать значения.

С

x = d2m['TOTAL-EVENTS']

К

x = d2m['TOTAL-EVENTS'].groupby(['USER-ID'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...