Очистка данных опроса в python - как найти и очистить общие строки в двух файлах? - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю над проектом анализа данных опроса, который состоит из 2 файлов Excel - в файле предварительный опрос , он содержит более 800 записей ответов;в то время как в файле post-survey он содержит 500 ответов.Оба они имеют (как минимум) один общий столбец SID (идентификатор студента).Что-то Y произошло между ними, и мне интересно проанализировать эффективность Y и то, что ухудшает Y, влияет на разные категории людей.

Что добавляет больше сложности, так это то, что в каждом файле Excel, он содержит несколько вкладок.Различные интервьюеры брали интервью у нескольких интервьюируемых и документировали в каждой вкладке для разных разделов опроса.Столбцы могут или не могут быть одинаковыми для разных вкладок, поэтому было бы трудно соответствовать в одном файле.(Или имеет смысл объединять их в одно с большим количеством нулевых значений?)

Я пытаюсь найти студентов, которые проводили предварительные и последующие опросы.Как я могу сделать это на листах и ​​в файлах, используя пакеты python / pandas / other?

Бонус, если вы также можете предложить подход к решению проблемы.

1 Ответ

3 голосов
/ 01 апреля 2019

Если я правильно понимаю, ваши данные в настоящее время отформатированы следующим образом

survey1.xlsx Лист 1 (интервьюер а)

STU-ID QUESTION 1 RESPONSE 1 QUESTION 2 RESPONSE 2
00001  tutoring?  True       lunch a?   False

survey1.xlsx Лист 2 (интервьюер б)

STU-ID QUESTION 1 RESPONSE 1 QUESTION 2 RESPONSE 2
00004  tutoring?  True        lunch a?  TRUE

survey2.xlsx Лист 1

STU-ID QUESTION 1    RESPONSE 1 Tutorer GPA
00001  improvement?  True       Jim     3.5

survey2.xlsx Лист 2 (интервьюер б)

STU-ID QUESTION 1    RESPONSE 1 Tutorer  GPA
00004  improvement?  yes        Sally    2.8

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

Тогда я бы сделал то же самое для ответа после опроса. Затем объедините их в один фрейм данных. Из df создайте новый DF только с теми ответами, которые вам нужны (это может избавить вас от некоторых ответов).

сделать df.describe и df.dtypes

преобразовать данные так, чтобы ответы, такие как «да / нет», стали булевыми или, по крайней мере, чтобы они все имели одинаковый формат и одинаковые для числовых ответов (int64 или float64)

Наконец, я бы отказался, чтобы df следовал вашим рекомендациям по содержанию ответов из первого и второго опросов.

примечание: при наличии только 800 ответов это может быть проще сделать в Excel, если вы не знакомы с Python, вам потребуется несколько часов, чтобы достичь этого, тогда как в Excel это может занять у вас 20 минут.

Если ваша цель - выучить питона, тогда добейтесь этого

Python

import pandas as pd

df_s1s1 = pd.read_excel('survey1.xlsx', na_values="Missing", sheet_names='sheet 1', usecols=cols)
df.head()
df_s1s2 = pd.read_excel('survey1.xlsx', na_values="Missing", sheet_names='sheet 2', usecols=cols)
df_s1s2.head()

и то же самое для второго файла опроса

df_s2s1 = pd.read_excel('survey2.xlsx', na_values="Missing", sheet_names='sheet 1', usecols=cols)
df.head()
df_s2s2 = pd.read_excel('survey2.xlsx', na_values="Missing", sheet_names='sheet 2', usecols=cols)
df_s1s2.head()

чтобы добавить разные листы к одному и тому же кадру данных в виде строк, вы бы использовали что-то вроде этого

df_survey_1 = pd.concat([df_s1s1, df_s1s2])
df_survey_1.head()

то же самое для второго опроса

df_survey_2 = pd.concat([df_s2s1, df_s2s2])
df_survey_2.head()

, а затем для создания большего информационного кадра со всеми столбцами вы должны использовать что-то вроде этого

master_df = pd.merge(df_survey_1, df_survey2, left_on='STU_ID', right_on='STU_ID')

Drop NA

master_df = master_df.dropna(axis = 0, how ='any')

надеюсь, это поможет

...