PHPMem v2.0.1
Version
1.6.45
Uptime
15 days 15 hours 2 minutes 7 seconds
Memory
Total
512MB
Used
9,38MB (1.83%)
Free
502,62MB
Keys
Current
11 436
Total (since start)
35 066
Evictions
0
Reclaimed
738
Expired Unfetched
0
Evicted Unfetched
0
Connections
Current
13 / 1 024 max
Total
175 543
Rejected
0
llm:97d198085fc47ede2387c435f9488258f2ccf47dec1e7b5255bd7fc7f22699ee
Edit
# Data-quality issues in the semiconductor stocks table
The data is structurally clean. The real problems are mixed currencies, zero-volume rows, and a few price-range violations.
## What is clean
- **No nulls.** Every column is populated in all 422,729 rows (step 0).
- **No duplicate keys.** There are 0 repeated (stock, date) rows (step 1).
- **No impossible prices or volumes.** There are 0 rows with high < low, 0 with non-positive prices, and 0 with negative volume (step 0).
- **Dates are well-typed**, running from 2012-01-02 to 2025-08-04.
## Issues found
**1. Mixed currencies and units (the biggest issue).** Prices are in each exchange's local currency and nothing in the table flags this. Grouping tickers by exchange suffix shows the scale differences (step 2):
- Korean (`.KS`) tickers have a median close of about 33,788 and a maximum of 300,000. The top five closes in the whole table are all `000660.KS`, in July 2025, so these are not errors.
- Japanese (`.T`) tickers have a median of about 1,756 and a maximum of about 67,734.
- Taiwanese (`.TW`, `.TWO`) tickers have a median of about 98–106.
- US/no-suffix tickers have a median of about 22. They are 83 of the 152 tickers and 233,621 rows.
Pooled means, rankings by "highest price", and cross-company volatility comparisons in absolute price terms will be dominated by the Korean and Japanese listings. Use returns or percentage ranges, or convert currencies, before comparing companies.
**2. Zero-volume rows.** There are 4,888 rows with zero volume, which is not plausible for active trading days and looks like missing or non-trading data filled in as zero. They cluster by exchange (step 2):
- Frankfurt (`.F`): 1,279 of 9,468 rows.
- Australia (`.AX`): 1,288 of 6,878 rows.
- Shanghai (`.SS`): 365 rows.
- Smaller counts appear on `.T` (300), `.TW` (280) and others.
- The US/no-suffix group has 949 of its 233,621 rows.
Volume-based "unusual interest" signals will be distorted on these exchanges.
**3. OHLC consistency violations.** Although high ≥ low everywhere, 461 rows have a close outside the day's low–high range and 10 rows have an open outside it (step 0). These are internally inconsistent and could come from adjusted versus unadjusted fields, or from the source data.
**4. Extreme values and outliers.**
- Volume has a median of about 898,500 but a maximum of about 3.69 billion, a very heavy right tail.
- The lowest close is about 0.0093, on an Australian (`.AX`) ticker. The `.AX` group's median is about 0.45, so these are very low-priced stocks where tick-size rounding matters.
- A check for day-over-day moves of more than 3× or less than ⅓ flagged only two rows: `GCTS` on 2024-03-27 (close 6.687) and `CTNK.F` on 2012-07-11 (close 0.265). They could be splits, corporate actions, or bad ticks, but I did not verify which.
**5. Identifier inconsistency.** The card suggests about 149 company names, but there are 152 distinct `company_name` values and 152 distinct `stock_name` values (step 0). Tickers mix suffix conventions (`.KS`, `.T`, `.TW`, `.TWO`, `.SS`, `.SZ`, and so on). The same company may be listed on several exchanges, such as Frankfurt (`.F`) alongside its home listing. I did not check for double-counted companies.
## Recommendations
- Add a currency or exchange column and normalize prices to one currency, or work in returns.
- Exclude or flag zero-volume rows.
- Review the 461 + 10 rows with open or close outside the day's range.
- Check `GCTS` and `CTNK.F` for splits or bad ticks before using them in trend analysis.