Ditempat saya bekerja, sudah biasa melakukan preparasi pengolahan data dengan cara mengambil data survey dalam format csv, melalui LimeSurvey API dengan menggunakan bahasa R. Data dalam format csv itu kemudian di padukan dengan struktur kuesioner dan diolah.
Memang di Lime Survey penggunaan API menjadi penting karena kalau kita langsung mengakses database, kita akan mendapati sebuah pertanyaan text dengan kode A12 bisa menjadi 452848X96X2183. Nah kalau kita menggunakan API, maka kita bisa mendapatkan data dengan kolom kode pertanyaan.
Ok, saya akan menirukan cara diatas menggunakan Python dengan library limepy. beberapa prosedur yang akan saya lakukan adalah.
- Mendownload data menggunakan limepy ke dalam bentuk csv dengan nama respons.csv
- Mendwnload struktur pertanyaan dengan nama structure.lss melalui halaman belakang limesurvey.
- Menggabungkan keduanya menjadi sebuah file sqlite dengan tabel structure dan respons
Install limepy
Cara install limepy dengan cara pip install limepy
Download response menggunakan limepy
from pathlib import Path
from limepy import download
base_url = 'https://yourlimesurveypath.com/index.php/admin/remotecontrol'
user_name = 'admin'
password = 'yourpassword'
user_id = 1 # nggak tahu mengapa harus ada ini
sid = 868964
csv = download.get_responses(base_url, user_name, password, user_id, sid, lang=None,
document_type='csv', completion_status='all',
heading_type='short', response_type='long',
from_response_id=None, to_response_id=None, fields=None)
path = Path('responses.csv')
path.write_text(csv)
'''
Rerensi:
def get_responses(base_url, user_name, password, user_id, sid, lang=None,
document_type='csv', completion_status='all',
heading_type='code', response_type='short',
from_response_id=None, to_response_id=None, fields=None):
"""Get session key, download and store responses and close session.
:param base_url: e.g. https://mywebsite.nl/survey.
:param user_name: LimeSurvey user name
:param password: LimeSurvey user password
:param user_id: LimeSurvey user id
:param sid: LimeSurvey survey id
:param lang: language. (Default value = None)
:param document_type: format for results (Default value = 'csv')
:param completion_status: which responses to export, 'complete',
'incomplete' or 'all' (Default value = 'all')
:param heading_type: 'code', 'full' or 'abbreviated'
(Default value = 'code')
:param response_type: 'short' or 'long' (Default value = 'short')
:param from_response_id: for partial export (Default value = None)
:param to_response_id: for partial export (Default value = None)
:param fields: for partial export (Default value = None)
'''
Download structure.lss melalui halaman login
Cari di menu Export pada survey yang diinginkan.
Buat data menjadi file SQLite
Mengapa harus dijadikan SQLite, nggak diolah menggunakan dataframe saja. Alasannya memang cukup memalukan yaitu karena saya lupa sintak pandas karena lama tidak saya gunakan, Sedangkan SQL tidak lupa karena sering saya gunakan.
from limepy.wrangle import Survey, Question
import pandas as pd
import sqlite3
import datetime
df = pd.read_csv('responses.csv', sep=';', encoding='ISO-8859-1')
with open('structure.lss', encoding="ISO-8859-1") as f:
my_structure = f.read()
my_survey = Survey(df, my_structure,language=None, strip_tags=True)
responses_df = my_survey.dataframe
question_df = my_survey.question_list
current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
db_file = 'survey.sqlite3'
db_file = f"{current_time}_{db_file}"
conn = sqlite3.connect(db_file)
# Masukkan data dari DataFrame ke dalam tabel SQLite
table_name = 'responses'
responses_df.to_sql(table_name, conn, if_exists='replace', index=False)
table_name = 'questions'
question_df.to_sql(table_name, conn, if_exists='replace', index=False)
# Tutup koneksi ke database
conn.close()
print(f"Data has been inserted into table in {db_file} database.")
Nah. hasilnya akan didapatkan file SQLite yang siap diQuery
Ok, segitu dulu, selamat mencoba ….