PHPMem v2.0.1

Version
1.6.45
Uptime
18 days 8 hours 55 seconds

Memory

Total
512MB
Used
12,33MB (2.41%)
Free
499,67MB

Keys

Current
13 424
Total (since start)
40 994
Evictions
0
Reclaimed
762
Expired Unfetched
0
Evicted Unfetched
0

Connections

Current
3 / 1 024 max
Total
245 320
Rejected
0
llm:d6d86b6217c5bf9c492decab2c82c534b9e32821f79ae4b0c7115c2a2d423002
TTL 5 days 10 hours 39 minutes 43 seconds Size 3,69KB Export
Edit
# Data-quality issues in the AI usage survey The table has 300 rows but only 288 distinct `User_ID`s, and most numeric measures are stored as text. The queries behind this are the profiling queries I ran across steps 1–7. ## 1. Mixed units and formats (numbers stored as text) - **Age** (VARCHAR) mixes `"28 yrs"` style values with bare numbers like `"97"` (2 rows). 23 rows are blank. - **Monthly_Income** mixes plain `0` with formatted values such as `$1,884`. 10 rows are blank. - **Monthly_AI_Cost** carries a `$` sign and trailing whitespace (`"$25 "`). 12 rows are blank. - **AI_Usage_Hours_Per_Day** has an `hrs` suffix (`"1.7 hrs"`). 7 rows are blank. - **Time_Saved_Hours_Per_Week** has the same `hrs` suffix (`"4.1 hrs"`). 10 rows are blank. - **Work_or_Study_Hours_Per_Day** is also VARCHAR. 9 rows are blank. - All of these need stripping and casting before analysis. Blanks are empty strings, not true NULLs. ## 2. Inconsistent category labels - **Education_Level** has about 17 spellings for roughly 6 real levels. For example, bachelor's appears as `Bachelor's`, `Bachelors`, `BA/BSc` and `bachelor's degree`. Master's appears as `Master's`, `Masters`, `MA/MSc` and `master's degree`. High school appears as `High School`, `high school` and `HS`. Undergraduate appears as `Undergraduate` and `undergrad`. PhD appears as `PhD` and `Ph.D.`. 13 rows are blank. - **Gender** has 12 variants: `Male`, `male`, `MALE`, `M`, `Female`, `female`, `FEMALE`, `F`, `Other`, `other`, `Non-binary`, and blank (10 rows). Case and abbreviation differences would split any group-by. - Other blanks: **AI_Purpose** 13, **AI_Tool** 11, **Would_Recommend** 5. ## 3. Impossible or suspicious values - **Age** ranges from 16 to 97. The 97 values are bare numbers (2 rows) and look like likely entry errors. - **Monthly_Income** has a maximum of 250,000 against a median of about 521.5, so it is heavily skewed with extreme outliers. It also has 34 zeros (33 plain `0` plus `$0`), which may be students with no income or may be missing data coded as zero. - **Monthly_AI_Cost** has a maximum of 100, while the other values I saw were $0–$50. - **AI_Usage_Hours_Per_Day** reaches 23. In 24 rows, daily AI usage exceeds daily work or study hours, which is not plausible. - **Work_or_Study_Hours_Per_Day** reaches 20, and 2 rows exceed 16 hours. - **Time_Saved_Hours_Per_Week** reaches 19.4. In 1 row the time saved exceeds weekly AI usage (daily usage × 7). ## 4. Missing values in typed scores - **Productivity_Score** has 16 NULLs, **Accuracy_Rating** 15 and **Satisfaction_Score** 7. - The ranges themselves are valid: productivity 1.6–10, accuracy 2–5, satisfaction 3–10. - Accuracy takes only about 4 distinct values, so it is a coarse scale. ## 5. Duplicate identifiers - 300 rows against 288 distinct `User_ID`s means 12 rows share an ID with another row. I did not check whether they are exact copies or conflicting records, so they should be deduplicated or reviewed before counting respondents. ## 6. Lineage columns carry no information - `_ingestion_timestamp`, `_batch_id`, `_source_file` and `_source_system` each hold a single value across all rows. They give no per-record provenance. ## Suggested cleanup 1. Normalise the text numerics: strip `$`, `,`, `yrs` and `hrs`, trim whitespace, and treat empty strings as NULL. 2. Map education and gender variants to canonical labels. 3. Dedupe on `User_ID`. 4. Flag or cap implausible rows: age above about 90, daily usage above work hours, work hours above 16, and income or cost outliers. 5. Decide whether a zero income means "no income" or "missing" before computing income averages.